@byok-sdk/cloud-do 0.30.1 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/platform-credentials.ts","../src/admission.ts","../src/leak-guard.ts","../src/input-guard.ts","../src/inbox-admission.ts","../src/tools.ts","../src/cloud-state.ts","../src/provider-fetch.ts","../src/platform-provider.ts","../src/invocation-ledger.ts","../src/session-config.ts","../src/storage.ts","../src/session-runtime.ts","../src/event-stream.ts","../src/wake-runner.ts","../src/agent-do.ts","../src/identity.ts","../src/index.ts"],"names":["profile","text","credentials","names","row","a","b","encoder","terminal","model","claimed","tool","message","record","BACKGROUND_CONTEXT","entry","status","fields","digest"],"mappings":"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","file":"index.js","sourcesContent":["const status = {\n CLOUD_REQUEST_INVALID: 400,\n CLOUD_INBOX_FULL: 429,\n CLOUD_INBOX_CONFLICT: 409,\n CLOUD_INBOX_EXPIRED: 409,\n CLOUD_INBOX_TOO_LARGE: 400,\n CLOUD_WAKE_EXHAUSTED: 409,\n CLOUD_WAKE_EMPTY: 409,\n CLOUD_EVENT_CURSOR_EXPIRED: 410,\n CLOUD_EVENTS_BUSY: 429,\n CLOUD_USER_CREDENTIAL_REJECTED: 400,\n CLOUD_MODEL_CREDENTIAL_UNAVAILABLE: 503,\n CLOUD_MODEL_RESPONSE_REJECTED: 502,\n CLOUD_MODEL_REQUEST_FAILED: 502,\n CLOUD_SESSION_CONFLICT: 409,\n CLOUD_TOOL_NOT_AVAILABLE: 400,\n CLOUD_TOOL_INVOCATION_CONFLICT: 409,\n CLOUD_TOOL_ARGUMENT_INVALID: 400,\n CLOUD_TOOL_LIMIT: 400,\n CLOUD_STEP_LIMIT: 400,\n CLOUD_BUDGET_EXCEEDED: 400,\n CLOUD_TOOL_RESULT_LIMIT: 502,\n CLOUD_TOOL_USAGE_INVALID: 502,\n CLOUD_TOOL_BUSY: 409,\n CLOUD_TOOL_TIMEOUT: 504,\n CLOUD_EXECUTION_TIMEOUT: 504,\n CLOUD_EXECUTION_INTERRUPTED: 409,\n CLOUD_EXECUTION_ABORTED: 409,\n CLOUD_TOOL_FAILED: 502,\n} as const;\n\nexport type CloudDoErrorCode = keyof typeof status;\n\n/** Never attach an upstream exception, request, response, env, or credential. */\nexport class CloudDoError extends Error {\n readonly status: number;\n readonly retryable = false;\n constructor(readonly code: CloudDoErrorCode) {\n super(code);\n this.name = 'CloudDoError';\n this.status = status[code];\n }\n}\n\nexport function safeCloudError(error: unknown): CloudDoError {\n try {\n if (error instanceof CloudDoError) {\n const code = Object.getOwnPropertyDescriptor(error, 'code')?.value;\n if (typeof code === 'string' && Object.hasOwn(status, code)) return new CloudDoError(code as CloudDoErrorCode);\n }\n // RPC erases the subclass. Read data properties only; do not invoke upstream getters.\n if (error instanceof Error) {\n const message = Object.getOwnPropertyDescriptor(error, 'message')?.value;\n if (typeof message === 'string' && Object.hasOwn(status, message)) return new CloudDoError(message as CloudDoErrorCode);\n }\n } catch { /* An upstream Proxy or accessor cannot escape the fixed error boundary. */ }\n return new CloudDoError('CLOUD_MODEL_REQUEST_FAILED');\n}\n\nexport function cloudErrorResponse(error: unknown): Response {\n const safe = safeCloudError(error);\n return Response.json({ error: { code: safe.code, retryable: false } }, { status: safe.status });\n}\n","import { CloudDoError } from './errors';\n\n/** The platform reads one key. It does not own a local credential store. */\nexport type ModelProviderSecretName = `model-${string}-api-key`;\nexport interface PlatformCredentialReader {\n get(name: ModelProviderSecretName): Promise<string | undefined>;\n}\ntype PlatformVendorId = 'zai' | 'deepseek';\n\n// Aiphabee 3defa6e1; vendor ids/base URLs agree with keys' catalog. No runtime keys import.\nexport const PLATFORM_PROFILES = Object.freeze({\n zai_openai: Object.freeze({ vendor: 'zai' satisfies PlatformVendorId, baseUrl: 'https://api.z.ai/api/coding/paas/v4', model: 'glm-5.3-flash', binding: 'AIPHABEE_ZAI_API_KEY', secretName: 'model-zai_openai-api-key' satisfies ModelProviderSecretName }),\n deepseek_direct: Object.freeze({ vendor: 'deepseek' satisfies PlatformVendorId, baseUrl: 'https://api.deepseek.com', model: 'deepseek-v4-flash', binding: 'AIPHABEE_DEEPSEEK_API_KEY', secretName: 'model-deepseek_direct-api-key' satisfies ModelProviderSecretName }),\n});\nexport type PlatformProfileId = keyof typeof PLATFORM_PROFILES;\nexport type PlatformProfile = (typeof PLATFORM_PROFILES)[PlatformProfileId];\n\nexport function platformProfile(id: unknown): PlatformProfileId {\n if (typeof id !== 'string' || !Object.hasOwn(PLATFORM_PROFILES, id)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return id as PlatformProfileId;\n}\n\n/** A small bounded ASCII token, never whitespace/control characters or a header fragment. */\nexport function requirePlatformKey(value: unknown): string {\n if (typeof value !== 'string' || !/^[A-Za-z0-9._~+/-]{16,512}$/u.test(value)) throw new CloudDoError('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE');\n return value;\n}\n\n/** The concrete reader returns a valid key or rejects with a fixed error. */\nexport function platformCredentialReader(env: Readonly<Record<string, unknown>>): {\n get(name: ModelProviderSecretName): Promise<string>;\n} {\n return {\n async get(name) {\n const profile = Object.values(PLATFORM_PROFILES).find(profile => profile.secretName === name);\n if (!profile) throw new CloudDoError('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE');\n try { return requirePlatformKey(env[profile.binding]); }\n catch { throw new CloudDoError('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE'); }\n },\n } satisfies PlatformCredentialReader;\n}\n","import { CloudDoError } from './errors';\nimport { platformProfile, type PlatformProfileId } from './platform-credentials';\n\nexport interface CloudSubmission { readonly instruction: string; readonly profile: PlatformProfileId }\nconst credentialFields = new Set(['credential', 'credentials', 'apikey', 'api_key', 'secret', 'authorization', 'x-api-key', 'api-key', 'x-goog-api-key', 'proxy-authorization', 'cf-aig-authorization', 'headers']);\n\nfunction rejectCredentialFields(value: unknown, depth = 0, seen = new Set<object>()): void {\n if (value === null || typeof value !== 'object') return;\n if (depth > 8 || seen.has(value)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n seen.add(value);\n for (const [name, child] of Object.entries(value)) {\n if (credentialFields.has(name.toLowerCase())) throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED');\n rejectCredentialFields(child, depth + 1, seen);\n }\n}\n\n/** Best effort, not a claim that arbitrary or obfuscated keys can be recognized. */\nexport function hasUserKeyShape(text: string): boolean {\n return /\\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{16,}\\b|\\b[a-f\\d]{32}\\.[A-Za-z0-9_-]{16,}\\b/u.test(text);\n}\n\n/** Frozen schema for the only 4b operation. No open metadata/config bags, no stripping. */\nexport function admitCloudSubmission(input: unknown): CloudSubmission {\n rejectCredentialFields(input);\n if (!input || typeof input !== 'object' || Array.isArray(input)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const body = input as Record<string, unknown>;\n if (Object.keys(body).some(name => name !== 'instruction' && name !== 'profile') || typeof body.instruction !== 'string'\n || !body.instruction.trim() || body.instruction.length > 16_000) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (hasUserKeyShape(body.instruction)) throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED');\n return { instruction: body.instruction, profile: platformProfile(body.profile === undefined ? 'zai_openai' : body.profile) };\n}\n","import { CloudDoError } from './errors';\n\nconst FRAGMENT_LENGTH = 16;\n\nfunction percentPattern(secret: string): RegExp {\n return new RegExp(Array.from(secret, character => {\n const literal = character.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const hex = character.charCodeAt(0).toString(16).padStart(2, '0')\n .replace(/[a-f]/g, digit => `[${digit}${digit.toUpperCase()}]`);\n return `(?:${literal}|%${hex})`;\n }).join(''));\n}\n\nfunction addEncodedForms(forms: Set<string>, secret: string): void {\n forms.add(secret);\n const encoded = btoa(secret);\n forms.add(encoded);\n forms.add(encoded.replace(/=+$/, ''));\n forms.add(encoded.replace(/\\+/g, '-').replace(/\\//g, '_'));\n forms.add(encoded.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, ''));\n for (let offset = 0; offset < 3; offset++) {\n // Only six-bit characters wholly inside the secret are independent of the\n // unknown surrounding bytes. Drop both boundary characters if necessary.\n const interior = btoa('\\0'.repeat(offset) + secret).slice(\n Math.ceil(8 * offset / 6), Math.floor(8 * (offset + secret.length) / 6),\n );\n forms.add(interior);\n forms.add(interior.replace(/\\+/g, '-').replace(/\\//g, '_'));\n }\n}\n\n/** Scans decoded model text, before any of it reaches pi or persistence. */\nexport class RollingLeakGuard {\n readonly tailLength: number;\n private readonly forms: readonly string[];\n private readonly percentForms: readonly RegExp[];\n private pending = '';\n private closed = false;\n\n constructor(key: string) {\n // The credential boundary validates visible ASCII token characters and\n // 16 <= K <= 512 before constructing a guard. The largest matching form is\n // the all-percent-encoded full key (3K). Base64, including alignment, is at\n // most 4*ceil((K+2)/3), which is <= 3K for K >= 16. Fragments are shorter.\n // Thus L=3K and tail=L-1 <= 1535 characters, with O(K) candidates.\n this.tailLength = 3 * key.length - 1;\n const secrets = new Set([key]);\n const sensitive = key.replace(/^(?:sk-(?:ant-|proj-)?|zai[-_])/, '');\n for (let start = 0; start <= sensitive.length - FRAGMENT_LENGTH; start++) {\n // Every longer sensitive fragment contains one of these exact windows.\n secrets.add(sensitive.slice(start, start + FRAGMENT_LENGTH));\n }\n const forms = new Set<string>();\n const percentForms: RegExp[] = [];\n for (const secret of secrets) {\n addEncodedForms(forms, secret);\n percentForms.push(percentPattern(secret));\n }\n this.forms = [...forms];\n this.percentForms = percentForms;\n }\n\n push(text: string): string {\n if (this.closed) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n const combined = this.pending + text;\n this.scan(combined);\n // Any future-completed form has length <= L. Its unfinished prefix has\n // length <= L-1 and must remain here, never inside the released prefix.\n const releaseLength = Math.max(0, combined.length - this.tailLength);\n this.pending = combined.slice(releaseLength);\n return combined.slice(0, releaseLength);\n }\n\n finish(): string {\n if (this.closed) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n this.scan(this.pending);\n const safe = this.pending;\n this.discard();\n return safe;\n }\n\n discard(): void {\n this.pending = '';\n this.closed = true;\n }\n\n private scan(text: string): void {\n if (this.forms.some(form => text.includes(form))\n || this.percentForms.some(pattern => pattern.test(text))) {\n this.discard();\n throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n }\n }\n}\n","import { hasUserKeyShape } from './admission';\nimport { CloudDoError } from './errors';\nimport { RollingLeakGuard } from './leak-guard';\nimport { PLATFORM_PROFILES, platformCredentialReader, type PlatformProfileId } from './platform-credentials';\n\n/** Keep the existing pre-storage text guard shared by submission and tool data. */\nexport async function admitCloudText(env: Readonly<Record<string, unknown>>, text: string, selected?: PlatformProfileId): Promise<void> {\n if (typeof text !== 'string') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (hasUserKeyShape(text)) throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED');\n const credentials = platformCredentialReader(env);\n for (const [id, profile] of Object.entries(PLATFORM_PROFILES)) {\n let key: string | undefined;\n try {\n if (env[profile.binding] === undefined) continue;\n key = await credentials.get(profile.secretName);\n } catch {\n // A broken unused profile does not disable a valid selected provider.\n // Every valid configured key still gets the pre-storage text check.\n if (selected && id !== selected) continue;\n throw new CloudDoError('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE');\n }\n const guard = new RollingLeakGuard(key!);\n try { guard.push(text); guard.finish(); }\n catch { throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED'); }\n }\n}\n\n/** Check decoded JSON values before any part enters pi or the invocation ledger. */\nexport async function admitCloudPayload(env: Readonly<Record<string, unknown>>, value: unknown, selected?: PlatformProfileId): Promise<void> {\n const ancestors = new Set<object>();\n let nodes = 0;\n const visit = async (item: unknown, depth: number): Promise<void> => {\n if (++nodes > 10_000 || depth > 32) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (typeof item === 'string') { await admitCloudText(env, item, selected); return; }\n if (item === null || typeof item === 'boolean' || (typeof item === 'number' && Number.isFinite(item))) return;\n if (!item || typeof item !== 'object' || ancestors.has(item)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (!Array.isArray(item) && Object.getPrototypeOf(item) !== Object.prototype && Object.getPrototypeOf(item) !== null) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n ancestors.add(item);\n try {\n if (Array.isArray(item)) {\n if (Reflect.ownKeys(item).length !== item.length + 1) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n for (let i = 0; i < item.length; i++) {\n const field = Object.getOwnPropertyDescriptor(item, String(i));\n if (!field || !('value' in field) || !field.enumerable) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n await visit(field.value, depth + 1);\n }\n } else {\n for (const key of Reflect.ownKeys(item)) {\n const field = Object.getOwnPropertyDescriptor(item, key);\n // Accessors, symbols and hidden fields are not persisted JSON data.\n if (typeof key !== 'string' || !field || !('value' in field) || !field.enumerable) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n await visit(key, depth + 1);\n await visit(field.value, depth + 1);\n }\n }\n } finally { ancestors.delete(item); }\n };\n await visit(value, 0);\n}\n\n/** Keys belong to one operation. Dispose the guard when that operation ends. */\nexport interface CloudOperationGuard {\n guardText(text: string): void;\n /** Decode first. Check every key and value before admitted re-serialization. */\n guardPayload(dataJson: string): string;\n dispose(): void;\n}\nexport async function prepareCloudGuard(env: Readonly<Record<string, unknown>>, selected?: PlatformProfileId): Promise<CloudOperationGuard> {\n if (selected !== undefined && (typeof selected !== 'string' || !Object.hasOwn(PLATFORM_PROFILES, selected))) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const credentials = platformCredentialReader(env);\n const keys: string[] = [];\n for (const [id, profile] of Object.entries(PLATFORM_PROFILES)) {\n try {\n if (env[profile.binding] === undefined && id !== selected) continue;\n keys.push(await credentials.get(profile.secretName));\n }\n catch {\n // Preserve 4b isolation. Only an explicit selected profile permits this exception.\n if (selected && id !== selected) continue;\n keys.length = 0;\n throw new CloudDoError('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE');\n }\n }\n let disposed = false;\n const guardText = (text: string): void => {\n if (disposed || typeof text !== 'string') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (hasUserKeyShape(text)) throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED');\n for (const key of keys) {\n const guard = new RollingLeakGuard(key);\n try { guard.push(text); guard.finish(); }\n catch { throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED'); }\n }\n };\n return {\n guardText,\n guardPayload(dataJson) {\n if (disposed || typeof dataJson !== 'string') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n let value: unknown;\n try { value = JSON.parse(dataJson); }\n catch { throw new CloudDoError('CLOUD_REQUEST_INVALID'); }\n let nodes = 0;\n const visit = (item: unknown, depth: number): void => {\n if (++nodes > 10_000 || depth > 32) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (typeof item === 'string') { guardText(item); return; }\n if (item === null || typeof item === 'boolean' || (typeof item === 'number' && Number.isFinite(item))) return;\n if (!item || typeof item !== 'object') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (Array.isArray(item)) { for (const field of item) visit(field, depth + 1); }\n else {\n if (Object.getPrototypeOf(item) !== Object.prototype && Object.getPrototypeOf(item) !== null) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n for (const [key, field] of Object.entries(item)) { visit(key, depth + 1); visit(field, depth + 1); }\n }\n };\n visit(value, 0);\n return JSON.stringify(value);\n },\n dispose() { keys.length = 0; disposed = true; },\n };\n}\n","import { hasUserKeyShape } from './admission';\nimport { CloudDoError } from './errors';\nimport { platformProfile, type PlatformProfileId } from './platform-credentials';\n\nexport type InboxSource = 'message' | 'schedule' | 'invocation';\nexport interface CloudInboxAdmission {\n readonly dedupKey: string;\n readonly source: InboxSource;\n readonly text: string;\n readonly profile: PlatformProfileId;\n readonly availableAt?: number;\n readonly expiresAt?: number;\n}\nconst fields = new Set(['dedupKey', 'source', 'text', 'profile', 'availableAt', 'expiresAt']);\nconst credentials = new Set(['credential', 'credentials', 'apikey', 'api_key', 'secret', 'authorization', 'x-api-key', 'api-key', 'x-goog-api-key', 'proxy-authorization', 'cf-aig-authorization', 'headers']);\nexport const INBOX_DAY = 86_400_000;\n\n/** Freeze the wire schema before credential reads or storage writes. */\nexport function admitCloudInbox(input: unknown, now = Date.now()): CloudInboxAdmission {\n if (!input || typeof input !== 'object' || Array.isArray(input)\n || (Object.getPrototypeOf(input) !== Object.prototype && Object.getPrototypeOf(input) !== null)) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n for (const key of Reflect.ownKeys(input)) {\n if (typeof key === 'string' && credentials.has(key.toLowerCase())) throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED');\n const descriptor = Object.getOwnPropertyDescriptor(input, key);\n if (typeof key !== 'string' || !fields.has(key) || !descriptor?.enumerable || !('value' in descriptor)) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n }\n const body = input as Record<string, unknown>;\n if (typeof body.dedupKey !== 'string' || !body.dedupKey.length || body.dedupKey.length > 128\n || /[\\u0000-\\u001f\\u007f-\\u009f]/u.test(body.dedupKey)\n || typeof body.text !== 'string' || !body.text.trim() || body.text.length > 16_000\n || !['message', 'schedule', 'invocation'].includes(body.source as string)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (hasUserKeyShape(body.text) || hasUserKeyShape(body.dedupKey)) throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED');\n for (const key of ['availableAt', 'expiresAt']) {\n if (body[key] !== undefined && !Number.isSafeInteger(body[key])) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n const availableAt = body.availableAt as number | undefined;\n const expiresAt = body.expiresAt as number | undefined;\n if ((availableAt !== undefined && availableAt > now + 30 * INBOX_DAY)\n || (expiresAt !== undefined && availableAt !== undefined && expiresAt <= availableAt)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n // An omitted availability on retry resolves from the retained row, not this admission clock.\n // CloudState validates the complete pair before any item/event/alarm write.\n return Object.freeze({ dedupKey: body.dedupKey, source: body.source as InboxSource, text: body.text,\n profile: platformProfile(body.profile === undefined ? 'zai_openai' : body.profile),\n ...(availableAt === undefined ? {} : { availableAt }), ...(expiresAt === undefined ? {} : { expiresAt }) });\n}\n","import type { JsonValue } from '@earendil-works/pi-ai';\nimport type { ToolRegistration } from '@earendil-works/pi-durable';\nimport { CloudDoError, type CloudDoErrorCode } from './errors';\nimport type { SessionIdentity } from './identity';\n\nexport const CLOUD_SAFE_REPLAY_TOOLS = Object.freeze([\n 'load_financial_analysis_skill', 'resolve_security', 'guarded_screen', 'search_f10_datasets',\n 'query_f10_dataset', 'get_security_profile', 'get_quote_snapshot', 'get_corporate_actions',\n 'get_financial_statements', 'get_financial_facts', 'get_financial_ratios', 'get_sdi_disclosures',\n 'get_directorate', 'get_ownership', 'get_related_warrants',\n] as const);\n\nexport const CLOUD_LIVE_IPO_TOOLS = Object.freeze([\n 'get_ipo_profile', 'search_ipo_calendar', 'get_ipo_timetable', 'get_ipo_offering',\n 'get_ipo_allotment', 'screen_ipos', 'compare_ipos',\n] as const);\n\nconst safeTools: ReadonlySet<string> = new Set(CLOUD_SAFE_REPLAY_TOOLS);\nconst admittedNames: ReadonlySet<string> = new Set([...CLOUD_SAFE_REPLAY_TOOLS, ...CLOUD_LIVE_IPO_TOOLS]);\n\nexport interface CloudToolDefinition {\n readonly name: string;\n readonly description: string;\n readonly parameters: ToolRegistration['parameters'];\n readonly execution: 'read_only_live' | 'skill' | 'scaffold' | 'pure';\n readonly resolverRpc?: string;\n readonly mode?: 'inline' | 'job';\n readonly requiredCapabilities?: readonly string[];\n}\n\nexport interface CloudDispatchContext {\n readonly identity: SessionIdentity;\n readonly principal: { readonly accountId: string; readonly workspaceId: string; readonly channel: string };\n readonly scopes: readonly string[];\n readonly dispatcherId: string;\n readonly call?: { readonly invocationId: string; readonly conversationId: number; readonly toolCallId: string; readonly attempt: number };\n /** Session-local lookup can return a non-terminal invocation. */\n readonly lookup?: (invocationId: string) => {\n toolName: string; state: string; errorCode: string | null; resultJson: string | null;\n conversationId: number; toolCallId: string; settledAt: number | null; settledEventSeq: number | null;\n } | undefined;\n}\n\n/** Runtime calls supply these fields. Configuration remains source compatible. */\nexport interface CloudToolCallContext extends CloudDispatchContext {\n readonly call: NonNullable<CloudDispatchContext['call']>;\n readonly lookup: NonNullable<CloudDispatchContext['lookup']>;\n}\n\nexport type CloudToolResult = Record<string, unknown> & { modelView?: JsonValue };\n\nexport interface CloudToolDispatcher {\n readonly pureTools?: readonly string[];\n readonly domainErrors?: readonly string[];\n readonly modelViews?: boolean;\n readonly tools: readonly CloudToolDefinition[];\n execute(context: CloudDispatchContext, name: string, args: Record<string, unknown>, signal: AbortSignal): Promise<CloudToolResult>;\n}\n\n// Keep the fixed serving-domain vocabulary. Declared codes cannot use these names.\nexport const CLOUD_DOMAIN_ERROR_CODES: Readonly<Record<string, CloudDoErrorCode>> = Object.freeze({\n NOT_FOUND: 'CLOUD_TOOL_NOT_AVAILABLE', DATA_NOT_LICENSED: 'CLOUD_TOOL_NOT_AVAILABLE',\n DATA_QUALITY_HOLD: 'CLOUD_TOOL_NOT_AVAILABLE', SCOPE_DENIED: 'CLOUD_TOOL_NOT_AVAILABLE',\n TOOL_UNAVAILABLE: 'CLOUD_TOOL_NOT_AVAILABLE', TOOL_ARGUMENT_INVALID: 'CLOUD_TOOL_ARGUMENT_INVALID',\n OUT_OF_RANGE: 'CLOUD_TOOL_ARGUMENT_INVALID', TOO_MANY_ROWS: 'CLOUD_TOOL_ARGUMENT_INVALID',\n AMBIGUOUS_SECURITY: 'CLOUD_TOOL_ARGUMENT_INVALID', SYMBOL_AMBIGUOUS: 'CLOUD_TOOL_ARGUMENT_INVALID',\n});\n\nfunction policyNames(names: readonly string[] | undefined, max: number, pattern: RegExp,\n forbidden: (name: string) => boolean): readonly string[] {\n if (names === undefined) return Object.freeze([]);\n if (!Array.isArray(names) || names.length > max || new Set(names).size !== names.length\n || Array.from(names).some(name => typeof name !== 'string' || !pattern.test(name) || forbidden(name))) {\n throw new CloudDoError('CLOUD_TOOL_NOT_AVAILABLE');\n }\n return Object.freeze([...names].sort());\n}\n\n/** Admission does not grant resolver access. The trusted dispatcher checks access at execution. */\nexport function admitCloudTools(tools: readonly CloudToolDefinition[], pureTools: readonly string[] = []): readonly CloudToolDefinition[] {\n const pure = new Set(policyNames(pureTools, 8, /^[a-z][a-z0-9_]{2,63}$/, name => admittedNames.has(name)));\n const seen = new Set<string>();\n for (const tool of tools) {\n // Native TSchema is opaque. Inspect its JSON Schema fields at admission.\n const schema = tool.parameters as unknown as Record<string, unknown>;\n if (!(tool.execution === 'pure' ? pure.has(tool.name) : admittedNames.has(tool.name)) || seen.has(tool.name) || typeof tool.description !== 'string'\n || (tool.mode !== undefined && tool.mode !== 'inline') || (tool.requiredCapabilities?.length ?? 0) > 0\n || !schema || schema.type !== 'object' || schema.additionalProperties !== false\n || !schema.properties || typeof schema.properties !== 'object' || Array.isArray(schema.properties)\n || (tool.execution === 'pure' ? tool.resolverRpc !== undefined : tool.name === 'load_financial_analysis_skill'\n ? tool.execution !== 'skill' || Object.keys(schema.properties).length !== 0\n : tool.execution !== 'read_only_live' || typeof tool.resolverRpc !== 'string' || !tool.resolverRpc.trim())) {\n throw new CloudDoError('CLOUD_TOOL_NOT_AVAILABLE');\n }\n seen.add(tool.name);\n }\n return Object.freeze([...tools]);\n}\n\n/** Copy policy values so consumer mutation cannot change an installed policy. */\nexport function admitCloudDispatcher(dispatcher: CloudToolDispatcher): CloudToolDispatcher {\n const pureTools = policyNames(dispatcher.pureTools, 8, /^[a-z][a-z0-9_]{2,63}$/, name => admittedNames.has(name));\n const domainErrors = policyNames(dispatcher.domainErrors, 64, /^[A-Z][A-Z0-9_]{2,63}$/, name => name.startsWith('CLOUD_') || Object.hasOwn(CLOUD_DOMAIN_ERROR_CODES, name));\n if (dispatcher.modelViews !== undefined && typeof dispatcher.modelViews !== 'boolean') throw new CloudDoError('CLOUD_TOOL_NOT_AVAILABLE');\n const tools = admitCloudTools(dispatcher.tools, pureTools);\n const snapshot = JSON.parse(JSON.stringify({ tools })) as { tools: CloudToolDefinition[] };\n const freeze = (value: unknown): void => {\n if (value && typeof value === 'object') { Object.values(value).forEach(freeze); Object.freeze(value); }\n };\n freeze(snapshot);\n return Object.freeze({ tools: snapshot.tools, pureTools, domainErrors, modelViews: dispatcher.modelViews ?? false,\n execute: dispatcher.execute.bind(dispatcher) });\n}\n\nexport function dispatcherDigest(dispatcher: CloudToolDispatcher): Promise<string> {\n return digest(canonicalArgs({\n tools: dispatcher.tools.map(({ name, execution, parameters }) => ({ name, execution, parameters })).sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0),\n pureTools: [...(dispatcher.pureTools ?? [])].sort(), domainErrors: [...(dispatcher.domainErrors ?? [])].sort(),\n modelViews: dispatcher.modelViews ?? false,\n }));\n}\n\n/** This policy is stored in the ledger only. Native pi registrations always use unsafe. */\nexport function replayForTool(name: string): 'safe' | 'unsafe' {\n return safeTools.has(name) ? 'safe' : 'unsafe';\n}\n\nfunction canonical(value: unknown, ancestors: Set<object>): string {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return JSON.stringify(value);\n if (typeof value === 'number' && Number.isFinite(value)) return JSON.stringify(value);\n if (typeof value !== 'object' || ancestors.has(value)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (!Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n // Sparse arrays are not parsed JSON and must not collide with valid arrays.\n if (Object.keys(value).length !== value.length) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return `[${value.map(item => canonical(item, ancestors)).join(',')}]`;\n }\n return `{${Object.keys(value).sort().map(key => `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key], ancestors)}`).join(',')}}`;\n } finally { ancestors.delete(value); }\n}\n\nexport function canonicalArgs(args: Record<string, unknown>): string {\n if (!args || typeof args !== 'object' || Array.isArray(args)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return canonical(args, new Set());\n}\n\nasync function digest(value: string): Promise<string> {\n const bytes = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value));\n return Array.from(new Uint8Array(bytes), byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\nexport function invocationId(conversationId: number, assistantEntryId: number, toolCallId: string): Promise<string> {\n return digest(JSON.stringify([conversationId, assistantEntryId, toolCallId]));\n}\n\nexport function argsDigest(toolName: string, args: Record<string, unknown>): Promise<string> {\n return digest(`[${JSON.stringify(toolName)},${canonicalArgs(args)}]`);\n}\n","import { CloudDoError, type CloudDoErrorCode } from './errors';\nimport { INBOX_DAY, type CloudInboxAdmission, type InboxSource } from './inbox-admission';\nimport type { CloudOperationGuard } from './input-guard';\nimport type { ExecutionRow, InvocationRow } from './invocation-ledger';\nimport type { PlatformProfileId } from './platform-credentials';\nimport { canonicalArgs } from './tools';\n\nexport type InboxState = 'queued' | 'running' | 'done' | 'failed' | 'interrupted' | 'cancelled' | 'expired';\nexport interface InboxRow {\n seq: number; dedupKey: string; payloadDigest: string; source: InboxSource; profile: PlatformProfileId;\n payloadJson: string | null; availableAt: number; expiresAt: number; state: InboxState;\n runId: number | null; attempts: number; errorCode: CloudDoErrorCode | null; createdAt: number; settledAt: number | null; inputDurable: number; revision: number | null;\n}\nexport interface RunRow extends ExecutionRow {\n trigger: 'submit' | 'wake'; requestId: string | null; submissionId: number | null;\n state: 'starting' | 'running' | 'completed' | 'failed' | 'interrupted';\n errorCode: CloudDoErrorCode | null; startedAt: number | null; settledAt: number | null;\n reservation: 'none' | 'pending' | 'held' | 'released'; eligibilityJson: string | null;\n admissionDigest: string | null; admittedSeqs: string | null; settlementAck: number | null; revision: number | null; membershipPending: number | null;\n}\nexport interface TranscriptCursor { horizon: number; run: number | null; item: number | null }\nexport interface TranscriptTurn {\n seq: number; runId: number | null; state: InboxState | null; errorCode: CloudDoErrorCode | null;\n revision: number | null; text: string | null;\n}\nexport interface TranscriptItem {\n seq: number; dedupKey: string; state: InboxState; errorCode: CloudDoErrorCode | null;\n runId: number | null; attempts: number; revision: number | null; text: string | null;\n}\nexport interface TranscriptInvocation {\n invocationId: string; toolName: string; state: InvocationRow['state']; errorCode: CloudDoErrorCode | null; revision: number | null;\n}\nexport interface TranscriptRun {\n nativeRunId: number; revision: number | null; state: RunRow['state']; errorCode: CloudDoErrorCode | null;\n trigger: RunRow['trigger']; settlementAck: boolean; claimedSeqs: number[]; turns: TranscriptTurn[];\n text?: string; truncated?: boolean; invocations: TranscriptInvocation[];\n}\nexport interface TranscriptPlan {\n runs: Array<{ run: RunRow; turns: TranscriptTurn[]; invocations: TranscriptInvocation[] }>;\n items: TranscriptItem[]; next: TranscriptCursor;\n}\nexport interface AdmissionIdentity { digest: string; seqs: number[] }\nexport interface CloudEventRow {\n seq: number; eventKey: string; type: string; conversationId: number | null; ref: string | null; dataJson: string; createdAt: number;\n}\nexport interface CloudEventInput {\n eventKey: string; type: string; conversationId?: number; ref?: string; data: Record<string, unknown>; createdAt?: number;\n}\nexport interface CloudEventMeta { trimmedThrough: number; highWater: number }\nexport interface SchedulingState { busy?: boolean; repairRetrying?: boolean }\nexport interface RunSettlement {\n state: 'completed' | 'failed' | 'interrupted'; errorCode?: CloudDoErrorCode; text?: string; entryId?: number;\n /** The caller derives this only from the durable pre-recovery eligibility snapshot. */\n requeue?: boolean;\n}\nexport interface RunHistory { input: unknown; reply: string }\nexport interface InboxInput { seq: number; source: InboxSource; text: string }\nexport type InvocationProjection = (row: InvocationRow) => { key: string; dataJson: string } | undefined;\ntype SqlRow<T> = T & Record<string, SqlStorageValue>;\nconst encoder = new TextEncoder();\nexport const CLOUD_CONTEXT_BYTES = 48_000;\nconst RETENTION = 7 * INBOX_DAY;\nconst terminalInbox = \"state NOT IN ('queued','running')\";\nconst terminalRun = \"state NOT IN ('starting','running')\";\nconst terminalInvocation = \"state NOT IN ('accepted','running')\";\n\nexport function inboxInput(rows: readonly InboxRow[]): InboxInput[] {\n return rows.map(row => ({ seq: row.seq, source: row.source, text: (JSON.parse(row.payloadJson!) as { text: string }).text }));\n}\nexport function admissionIdentity(rows: readonly InboxRow[]): AdmissionIdentity {\n return { digest: sha256(JSON.stringify(rows.map(row => [row.seq, row.dedupKey,\n sha256((JSON.parse(row.payloadJson!) as { text: string }).text), row.profile]))), seqs: rows.map(row => row.seq) };\n}\n/** Accept only the committed native wake input shape. */\nexport function runInputSeqs(entries: readonly unknown[]): number[] {\n if (!Array.isArray(entries)) return [];\n const entry = entries.find(value => value !== null && typeof value === 'object' && (value as {kind?:unknown}).kind === 'byok.run-input');\n if (!entry || typeof entry !== 'object') return [];\n const data = (entry as {data?:unknown}).data;\n if (!data || typeof data !== 'object' || Array.isArray(data)) return [];\n const items = (data as {items?:unknown}).items;\n if (!Array.isArray(items) || items.length > 16) return [];\n const seqs: number[] = [];\n for (const item of items) {\n if (!item || typeof item !== 'object' || Array.isArray(item)) return [];\n const {seq, source, text} = item as {seq?:unknown;source?:unknown;text?:unknown};\n if (typeof seq !== 'number' || !Number.isSafeInteger(seq) || seq <= 0 || seqs.includes(seq)\n || (typeof source !== 'string' || !['message','schedule','invocation'].includes(source)) || typeof text !== 'string') return [];\n seqs.push(seq);\n }\n return seqs;\n}\nfunction payloadText(row: InboxRow | undefined): string | null {\n if (row?.payloadJson === null || row?.payloadJson === undefined) return null;\n const value = JSON.parse(row.payloadJson) as {text?:unknown};\n return typeof value.text === 'string' ? value.text : null;\n}\n/** Fit inbox first. Add the newest history prefix, then emit it in chronological order. */\nexport function composeCloudInput(rows: readonly InboxRow[], historyNewestFirst: readonly RunHistory[] = []): string {\n const inbox = inboxInput(rows);\n const history: RunHistory[] = [];\n for (const item of historyNewestFirst.slice(0, 20)) {\n const candidate = [item, ...history];\n if (encoder.encode(canonicalArgs({ history: candidate, inbox })).byteLength > CLOUD_CONTEXT_BYTES) break;\n history.unshift(item);\n }\n return canonicalArgs({ history, inbox });\n}\nexport function utf8Prefix(text: string, maxBytes: number): string {\n let bytes = 0; let end = 0;\n for (const point of text) {\n const size = encoder.encode(point).length;\n if (bytes + size > maxBytes) break;\n bytes += size; end += point.length;\n }\n return text.slice(0, end);\n}\n\n/** Synchronous SHA-256 keeps projection digests inside the existing SQLite transaction. */\nfunction sha256(text: string): string {\n const constants = [0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,\n 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,\n 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,\n 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,\n 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,\n 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,\n 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,\n 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2];\n const source = encoder.encode(text); const data = new Uint8Array(Math.ceil((source.length + 9) / 64) * 64);\n data.set(source); data[source.length] = 0x80;\n const view = new DataView(data.buffer);\n view.setUint32(data.length - 8, Math.floor(source.length / 0x20000000));\n view.setUint32(data.length - 4, source.length * 8);\n const hash = [0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19];\n const rotate = (value: number, count: number) => (value >>> count) | (value << (32 - count));\n const words = new Uint32Array(64);\n for (let offset = 0; offset < data.length; offset += 64) {\n for (let i = 0; i < 16; i++) words[i] = view.getUint32(offset + i * 4);\n for (let i = 16; i < 64; i++) {\n const a = words[i - 15]!; const b = words[i - 2]!;\n words[i] = words[i - 16]! + (rotate(a,7) ^ rotate(a,18) ^ (a >>> 3)) + words[i - 7]!\n + (rotate(b,17) ^ rotate(b,19) ^ (b >>> 10));\n }\n let [a,b,c,d,e,f,g,h] = hash as [number,number,number,number,number,number,number,number];\n for (let i = 0; i < 64; i++) {\n const first = (h + (rotate(e,6) ^ rotate(e,11) ^ rotate(e,25)) + ((e & f) ^ (~e & g)) + constants[i]! + words[i]!) | 0;\n const second = ((rotate(a,2) ^ rotate(a,13) ^ rotate(a,22)) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h=g; g=f; f=e; e=(d+first)|0; d=c; c=b; b=a; a=(first+second)|0;\n }\n for (const [index,value] of [a,b,c,d,e,f,g,h].entries()) hash[index] = (hash[index]! + value) >>> 0;\n }\n return hash.map(value => value.toString(16).padStart(8,'0')).join('');\n}\n\n/** Visible SQL state. Sync helpers can participate in the caller's transaction. */\nexport class CloudState {\n private scheduling: SchedulingState = {};\n constructor(private readonly storage: DurableObjectStorage) {}\n private rows<T>(query: string, ...values: SqlStorageValue[]): T[] {\n return this.storage.sql.exec<SqlRow<T>>(query, ...values).toArray();\n }\n ensureSchema(): void {\n this.storage.transactionSync(() => {\n this.storage.sql.exec(`CREATE TABLE IF NOT EXISTS cloud_inbox (\n seq INTEGER PRIMARY KEY AUTOINCREMENT, dedupKey TEXT NOT NULL UNIQUE, payloadDigest TEXT NOT NULL,\n source TEXT NOT NULL CHECK(source IN ('message','schedule','invocation')), profile TEXT NOT NULL, payloadJson TEXT,\n availableAt INTEGER NOT NULL, expiresAt INTEGER NOT NULL,\n state TEXT NOT NULL CHECK(state IN ('queued','running','done','failed','interrupted','cancelled','expired')),\n runId INTEGER, attempts INTEGER NOT NULL DEFAULT 0, errorCode TEXT, createdAt INTEGER NOT NULL, settledAt INTEGER);\n CREATE INDEX IF NOT EXISTS cloud_inbox_runnable ON cloud_inbox(state,availableAt,seq);\n CREATE TABLE IF NOT EXISTS cloud_events (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,eventKey TEXT NOT NULL UNIQUE,type TEXT NOT NULL,\n conversationId INTEGER,ref TEXT,dataJson TEXT NOT NULL,createdAt INTEGER NOT NULL);\n CREATE TABLE IF NOT EXISTS cloud_event_meta (\n singleton INTEGER PRIMARY KEY CHECK(singleton=1),trimmedThrough INTEGER NOT NULL DEFAULT 0,\n highWater INTEGER NOT NULL DEFAULT 0,pendingMaintenanceAt INTEGER);\n INSERT INTO cloud_event_meta(singleton) VALUES(1) ON CONFLICT DO NOTHING;\n CREATE TABLE IF NOT EXISTS cloud_projections (\n key TEXT PRIMARY KEY,invocationId TEXT NOT NULL,state TEXT NOT NULL,payloadDigest TEXT NOT NULL,\n dataJson TEXT NOT NULL,errorCode TEXT,createdAt INTEGER NOT NULL)`);\n const legacyMembership = !this.rows<{name:string}>('PRAGMA table_info(cloud_executions)').some(row => row.name === 'membershipPending');\n this.migrate('cloud_inbox', { inputDurable: 'INTEGER NOT NULL DEFAULT 0', revision: 'INTEGER' });\n this.storage.sql.exec(`CREATE TABLE IF NOT EXISTS cloud_run_turns (\n runId INTEGER NOT NULL, seq INTEGER NOT NULL, claimEvent INTEGER, releaseEvent INTEGER,\n PRIMARY KEY (runId,seq));\n CREATE INDEX IF NOT EXISTS cloud_run_turns_by_seq ON cloud_run_turns(seq,runId)`);\n this.migrate('cloud_executions', {\n trigger: \"TEXT NOT NULL DEFAULT 'submit'\", requestId: 'TEXT', submissionId: 'INTEGER',\n state: \"TEXT NOT NULL DEFAULT 'interrupted'\", errorCode: 'TEXT', startedAt: 'INTEGER', settledAt: 'INTEGER',\n reservation: \"TEXT NOT NULL DEFAULT 'none'\", eligibilityJson: 'TEXT',\n admissionDigest: 'TEXT', admittedSeqs: 'TEXT', settlementAck: 'INTEGER', revision: 'INTEGER', membershipPending: 'INTEGER',\n });\n if (legacyMembership) {\n this.storage.sql.exec('INSERT OR IGNORE INTO cloud_run_turns(runId,seq) SELECT runId,seq FROM cloud_inbox WHERE runId IS NOT NULL');\n this.storage.sql.exec(\"UPDATE cloud_executions SET membershipPending=1 WHERE trigger='wake'\");\n }\n this.migrate('cloud_invocations', { deliveredState: \"TEXT NOT NULL DEFAULT 'undelivered'\", taskId: 'INTEGER', resultEntryId: 'INTEGER' });\n });\n }\n private migrate(table: string, columns: Record<string, string>): void {\n const existing = new Set(this.rows<{ name: string }>(`PRAGMA table_info(${table})`).map(row => row.name));\n for (const [name, type] of Object.entries(columns)) if (!existing.has(name)) this.storage.sql.exec(`ALTER TABLE ${table} ADD COLUMN ${name} ${type}`);\n }\n readInboxItem(seq: number): InboxRow | undefined { return this.rows<InboxRow>('SELECT * FROM cloud_inbox WHERE seq=?', seq)[0]; }\n run(conversationId: number): RunRow | undefined { return this.rows<RunRow>('SELECT * FROM cloud_executions WHERE conversationId=?', conversationId)[0]; }\n unsettledRuns(): RunRow[] { return this.rows<RunRow>(`SELECT * FROM cloud_executions WHERE ${terminalRun.replace('NOT IN', 'IN')} ORDER BY conversationId`); }\n completedRuns(): RunRow[] { return this.rows<RunRow>(\"SELECT * FROM cloud_executions WHERE state='completed' ORDER BY conversationId DESC LIMIT 20\"); }\n invocationRowsForRun(id: number): InvocationRow[] { return this.rows<InvocationRow>('SELECT * FROM cloud_invocations WHERE conversationId=? ORDER BY seq', id); }\n\n private stamp(table: 'cloud_inbox' | 'cloud_executions', key: number, revision: number): void {\n this.storage.sql.exec(`UPDATE ${table} SET revision=? WHERE ${table === 'cloud_inbox' ? 'seq' : 'conversationId'}=? AND (revision IS NULL OR revision<?)`, revision, key, revision);\n }\n claimedSeqs(id: number): number[] {\n return this.rows<{seq:number}>('SELECT seq FROM cloud_run_turns WHERE runId=? ORDER BY seq',id).map(row => row.seq);\n }\n markInputDurable(id: number, seqs: readonly number[]): void {\n this.storage.transactionSync(() => {\n for (const seq of seqs) this.storage.sql.exec(\"UPDATE cloud_inbox SET inputDurable=1 WHERE seq=? AND runId=? AND state='running'\",seq,id);\n });\n }\n pendingBackfills(before = Number.MAX_SAFE_INTEGER): RunRow[] {\n return this.rows<RunRow>('SELECT * FROM cloud_executions WHERE membershipPending=1 AND conversationId<? ORDER BY conversationId DESC LIMIT 25',before);\n }\n applyBackfill(id: number, seqs: readonly number[]): void {\n this.storage.transactionSync(() => {\n if (this.run(id)?.membershipPending !== 1) return;\n for (const seq of seqs) this.storage.sql.exec(`INSERT INTO cloud_run_turns(runId,seq)\n SELECT ?,? WHERE NOT EXISTS(SELECT 1 FROM cloud_run_turns WHERE seq=?)\n AND NOT EXISTS(SELECT 1 FROM cloud_inbox WHERE seq=?)`,id,seq,seq,seq);\n this.storage.sql.exec('UPDATE cloud_executions SET membershipPending=0 WHERE conversationId=?',id);\n });\n }\n unackedRuns(): RunRow[] {\n return this.rows<RunRow>(`SELECT * FROM cloud_executions WHERE ${terminalRun} AND settlementAck=0 ORDER BY conversationId`);\n }\n ackSettlement(id: number, guard: CloudOperationGuard, now=Date.now()): boolean {\n return this.storage.transactionSync(() => {\n if (this.run(id)?.settlementAck !== 0) return false;\n this.storage.sql.exec('UPDATE cloud_executions SET settlementAck=1 WHERE conversationId=?',id);\n const event = this.appendEvent({eventKey:`run:${id}:settlement`,type:'run.settlement',conversationId:id,\n data:{nativeRunId:id,ack:true},createdAt:now},guard);\n this.stamp('cloud_executions',id,event.seq);\n return true;\n });\n }\n\n /** Read-only preflight also works before this DO has initialized its schema. */\n validateEnqueue(input: CloudInboxAdmission, guard: CloudOperationGuard, now = Date.now()): void {\n guard.guardText(input.text); guard.guardText(input.dedupKey);\n const exists = this.rows<{name:string}>(\"SELECT name FROM sqlite_master WHERE type='table' AND name='cloud_inbox'\").length > 0;\n const previous = exists ? this.rows<InboxRow>('SELECT * FROM cloud_inbox WHERE dedupKey=?', input.dedupKey)[0] : undefined;\n this.enqueueIdentity(input, previous, now);\n }\n private enqueueIdentity(input: CloudInboxAdmission, previous: InboxRow | undefined, now: number) {\n const retained = previous && (previous.settledAt === null || previous.settledAt + RETENTION > now) ? previous : undefined;\n const availableAt = input.availableAt ?? retained?.availableAt ?? now;\n const expiresAt = input.expiresAt ?? retained?.expiresAt ?? availableAt + INBOX_DAY;\n if (!Number.isSafeInteger(availableAt) || !Number.isSafeInteger(expiresAt)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const payloadDigest = sha256(canonicalArgs({ source: input.source, text: input.text, profile: input.profile, availableAt, expiresAt }));\n if (retained && retained.payloadDigest !== payloadDigest) throw new CloudDoError('CLOUD_INBOX_CONFLICT');\n if (expiresAt <= availableAt || (!retained && availableAt > now + 30 * INBOX_DAY)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return { retained, availableAt, expiresAt, payloadDigest };\n }\n\n async enqueue(input: CloudInboxAdmission, guard: CloudOperationGuard, now = Date.now(), options?: SchedulingState): Promise<{ accepted: boolean; row: InboxRow }> {\n guard.guardText(input.text); guard.guardText(input.dedupKey);\n if (options) this.setSchedulingState(options);\n return this.storage.transaction(async () => {\n const previous = this.rows<InboxRow>('SELECT * FROM cloud_inbox WHERE dedupKey=?', input.dedupKey)[0];\n const {retained,availableAt,expiresAt,payloadDigest} = this.enqueueIdentity(input, previous, now);\n if (retained) return { accepted: false, row: retained };\n if (this.rows<{ count: number }>(\"SELECT COUNT(*) AS count FROM cloud_inbox WHERE state='queued'\")[0]!.count >= 100) throw new CloudDoError('CLOUD_INBOX_FULL');\n if (previous) this.storage.sql.exec('DELETE FROM cloud_inbox WHERE seq=?', previous.seq);\n const row = this.rows<InboxRow>(`INSERT INTO cloud_inbox(dedupKey,payloadDigest,source,profile,payloadJson,availableAt,expiresAt,state,createdAt)\n VALUES(?,?,?,?,?,?,?,'queued',?) RETURNING *`, input.dedupKey,payloadDigest,input.source,input.profile,\n guard.guardPayload(JSON.stringify({ text: input.text })),availableAt,expiresAt,now)[0]!;\n const event = this.appendEvent({ eventKey: `inbox:${row.seq}:accepted`,type:'inbox.accepted',ref:String(row.seq),data:{ seq:row.seq,source:row.source,profile:row.profile,availableAt,expiresAt },createdAt:now },guard);\n this.stamp('cloud_inbox',row.seq,event.seq);\n await this.rearmAlarm(undefined, now);\n return { accepted: true, row: this.readInboxItem(row.seq)! };\n });\n }\n\n /** Selection never skips another profile or a prefix item that exceeds the budget. */\n selectBatch(now = Date.now(), guard?: CloudOperationGuard): InboxRow[] {\n return this.storage.transactionSync(() => {\n const candidates = this.rows<InboxRow>(\"SELECT * FROM cloud_inbox WHERE state='queued' AND availableAt<=? AND expiresAt>? ORDER BY availableAt,seq LIMIT 17\",now,now);\n const selected: InboxRow[] = [];\n for (const row of candidates) {\n if (selected.length >= 16 || (selected.length && row.profile !== selected[0]!.profile)) break;\n if (encoder.encode(composeCloudInput([...selected,row])).length > CLOUD_CONTEXT_BYTES) {\n if (!selected.length && guard) this.settleItem(row,'failed','CLOUD_INBOX_TOO_LARGE',guard,now);\n break;\n }\n selected.push(row);\n }\n return selected;\n });\n }\n startRun(id: number, trigger: 'submit' | 'wake', deadlineAt: number, guard: CloudOperationGuard, now = Date.now()): RunRow {\n return this.storage.transactionSync(() => {\n this.storage.sql.exec(`INSERT INTO cloud_executions(conversationId,deadlineAt,trigger,requestId,state,startedAt,settlementAck)\n VALUES(?,?,?,?,?,?,0) ON CONFLICT(conversationId) DO UPDATE SET trigger=excluded.trigger,\n requestId=excluded.requestId,state=excluded.state,startedAt=excluded.startedAt,settlementAck=0 WHERE cloud_executions.startedAt IS NULL`,id,deadlineAt,trigger,`${trigger}:${id}`,trigger==='wake'?'starting':'running',now);\n if (trigger==='submit') {\n const event = this.appendEvent({eventKey:`run:${id}:started`,type:'run.started',conversationId:id,data:{trigger},createdAt:now},guard);\n this.stamp('cloud_executions',id,event.seq);\n }\n return this.run(id)!;\n });\n }\n markRunning(id: number, guard: CloudOperationGuard, now = Date.now()): void {\n this.storage.transactionSync(() => {\n const row = this.run(id);\n if (!row || row.state !== 'starting') return;\n this.storage.sql.exec(\"UPDATE cloud_executions SET state='running' WHERE conversationId=?\",id);\n const event = this.appendEvent({eventKey:`run:${id}:started`,type:'run.started',conversationId:id,data:{trigger:row.trigger},createdAt:now},guard);\n this.stamp('cloud_executions',id,event.seq);\n });\n }\n recordSubmission(id: number, submissionId: number): void { this.storage.sql.exec('UPDATE cloud_executions SET submissionId=? WHERE conversationId=?',submissionId,id); }\n markReservation(id: number, reservation: RunRow['reservation'], guard: CloudOperationGuard, now = Date.now(), admission?: AdmissionIdentity): void {\n this.storage.transactionSync(() => {\n const row = this.run(id);\n if (!row || (row.state !== 'starting' && row.state !== 'running')) return;\n if (reservation === 'pending' && admission && row.admissionDigest === null) this.storage.sql.exec(\n 'UPDATE cloud_executions SET admissionDigest=?,admittedSeqs=? WHERE conversationId=? AND admissionDigest IS NULL',admission.digest,JSON.stringify(admission.seqs),id);\n if (row.reservation === reservation) return;\n this.storage.sql.exec('UPDATE cloud_executions SET reservation=? WHERE conversationId=?',reservation,id);\n if (reservation !== 'pending') this.appendEvent({eventKey:`run:${id}:reservation:${reservation}`,type:'run.reservation',conversationId:id,\n data:{key:row.requestId,reservation,action:reservation==='released'?'release':'reserve'},createdAt:now},guard);\n });\n }\n captureEligibility(originalStale?: ReadonlySet<number>): RunRow[] {\n return this.storage.transactionSync(() => {\n for (const row of this.unsettledRuns()) if (row.eligibilityJson === null) this.storage.sql.exec(\n 'UPDATE cloud_executions SET eligibilityJson=? WHERE conversationId=? AND eligibilityJson IS NULL',\n JSON.stringify({steps:row.steps,aborted:row.aborted,fatalCode:row.fatalCode,wasStale:originalStale?.has(row.conversationId)??false}),row.conversationId);\n return this.unsettledRuns();\n });\n }\n claim(id: number, seqs: readonly number[], profile: PlatformProfileId, guard: CloudOperationGuard, now = Date.now()): InboxRow[] {\n return this.storage.transactionSync(() => {\n const run = this.run(id);\n if (!run || run.state !== 'starting') return [];\n const stopped = run.fatalCode ?? (run.aborted ? 'CLOUD_EXECUTION_ABORTED' : now >= run.deadlineAt ? 'CLOUD_EXECUTION_TIMEOUT' : undefined);\n if (stopped) { this.settleRun(id,{state:'interrupted',errorCode:stopped},guard,now); return []; }\n const allowed = new Set(seqs);\n const selected: InboxRow[] = [];\n for (const row of this.selectBatch(now,guard)) {\n if (!allowed.has(row.seq) || row.profile !== profile) break;\n selected.push(row);\n }\n const claimed: InboxRow[] = [];\n for (const row of selected) {\n if (row.attempts >= 3) { this.storage.sql.exec('UPDATE cloud_inbox SET attempts=attempts+1 WHERE seq=?',row.seq); this.settleItem(row,'failed','CLOUD_WAKE_EXHAUSTED',guard,now); continue; }\n this.storage.sql.exec(\"UPDATE cloud_inbox SET state='running',runId=?,attempts=attempts+1 WHERE seq=? AND state='queued'\",id,row.seq);\n claimed.push(this.readInboxItem(row.seq)!);\n }\n if (!claimed.length) { this.settleRun(id,{state:'interrupted',errorCode:'CLOUD_WAKE_EMPTY'},guard,now); return []; }\n this.storage.sql.exec(\"UPDATE cloud_executions SET state='running' WHERE conversationId=?\",id);\n const event = this.appendEvent({eventKey:`run:${id}:started`,type:'run.started',conversationId:id,data:{trigger:'wake',seqs:claimed.map(row=>row.seq)},createdAt:now},guard);\n for (const item of claimed) {\n this.storage.sql.exec('INSERT INTO cloud_run_turns(runId,seq,claimEvent) VALUES(?,?,?)',id,item.seq,event.seq);\n this.stamp('cloud_inbox',item.seq,event.seq);\n }\n this.stamp('cloud_executions',id,event.seq);\n return claimed.map(item => this.readInboxItem(item.seq)!);\n });\n }\n private settleItem(row: InboxRow, state: Exclude<InboxState,'queued'|'running'>, code: CloudDoErrorCode | undefined, guard: CloudOperationGuard, now: number): void {\n this.storage.sql.exec('UPDATE cloud_inbox SET state=?,errorCode=?,payloadJson=CASE WHEN inputDurable=1 THEN NULL ELSE payloadJson END,settledAt=? WHERE seq=? AND state IN (\\'queued\\',\\'running\\')',state,code??null,now,row.seq);\n const event = this.appendEvent({eventKey:`inbox:${row.seq}:settled`,type:'inbox.settled',conversationId:row.runId??undefined,ref:String(row.seq),data:{seq:row.seq,state,errorCode:code??null},createdAt:now},guard);\n this.stamp('cloud_inbox',row.seq,event.seq);\n }\n failQueued(seqs: readonly number[], code: CloudDoErrorCode, guard: CloudOperationGuard, now = Date.now()): void {\n this.storage.transactionSync(() => { for (const seq of seqs) { const row=this.readInboxItem(seq); if(row?.state==='queued') this.settleItem(row,'failed',code,guard,now); } });\n }\n cancelQueued(seq: number, guard: CloudOperationGuard, now = Date.now()): InboxRow | undefined {\n return this.storage.transactionSync(() => { const row=this.readInboxItem(seq); if(row?.state==='queued') this.settleItem(row,'cancelled','CLOUD_EXECUTION_ABORTED',guard,now); return this.readInboxItem(seq); });\n }\n expireQueued(guard: CloudOperationGuard, now = Date.now()): number {\n return this.storage.transactionSync(() => {\n const rows=this.rows<InboxRow>(\"SELECT * FROM cloud_inbox WHERE state='queued' AND expiresAt<=? ORDER BY expiresAt,seq LIMIT 100\",now);\n for(const row of rows) this.settleItem(row,'expired','CLOUD_INBOX_EXPIRED',guard,now);\n return rows.length;\n });\n }\n settleRun(id: number, outcome: RunSettlement, guard: CloudOperationGuard, now = Date.now()): RunRow | undefined {\n return this.storage.transactionSync(() => {\n const row=this.run(id);\n if(!row || (row.state!=='starting' && row.state!=='running')) return row;\n const items=this.rows<InboxRow>(\"SELECT * FROM cloud_inbox WHERE runId=? AND state='running' ORDER BY seq\",id);\n for(const item of items) {\n if(outcome.requeue && item.expiresAt>now) this.storage.sql.exec(\"UPDATE cloud_inbox SET state='queued',runId=NULL,inputDurable=0 WHERE seq=? AND state='running'\",item.seq);\n else {\n const expiredRequeue = outcome.requeue && item.expiresAt <= now;\n this.settleItem(item,expiredRequeue?'expired':outcome.state==='completed'?'done':outcome.state==='failed'?'failed':'interrupted',\n expiredRequeue?'CLOUD_INBOX_EXPIRED':outcome.errorCode,guard,now);\n }\n }\n if(row.reservation==='pending'||row.reservation==='held') {\n this.storage.sql.exec(\"UPDATE cloud_executions SET reservation='released' WHERE conversationId=?\",id);\n this.appendEvent({eventKey:`run:${id}:reservation:released`,type:'run.reservation',conversationId:id,data:{key:row.requestId,reservation:'released',action:'release'},createdAt:now},guard);\n }\n this.storage.sql.exec('UPDATE cloud_executions SET state=?,errorCode=?,settledAt=?,settlementAck=0 WHERE conversationId=?',outcome.state,outcome.errorCode??null,now,id);\n const data:Record<string,unknown>={state:outcome.state,errorCode:outcome.errorCode??null,seqs:items.map(item=>item.seq)};\n if(outcome.requeue) data.requeued=items.filter(item=>item.expiresAt>now).map(item=>item.seq);\n if(outcome.entryId!==undefined) data.entryId=outcome.entryId;\n if(outcome.state==='completed'&&outcome.text!==undefined) {\n try { guard.guardText(outcome.text); data.text=outcome.text; }\n catch { data.errorCode='CLOUD_MODEL_RESPONSE_REJECTED'; }\n if(encoder.encode(JSON.stringify(data)).length>65_536) { data.text=utf8Prefix(outcome.text,1024); data.truncated=true; }\n }\n const event = this.appendEvent({eventKey:`run:${id}:settled`,type:`run.${outcome.state}`,conversationId:id,data,createdAt:now},guard);\n for (const item of items) if (outcome.requeue && item.expiresAt > now) {\n this.storage.sql.exec('UPDATE cloud_run_turns SET releaseEvent=? WHERE runId=? AND seq=? AND releaseEvent IS NULL',event.seq,id,item.seq);\n this.stamp('cloud_inbox',item.seq,event.seq);\n }\n this.stamp('cloud_executions',id,event.seq);\n return this.run(id);\n });\n }\n\n /** The caller must wrap this and its state write in one transaction. */\n appendEvent(event: CloudEventInput, guard: CloudOperationGuard): CloudEventRow {\n guard.guardText(event.eventKey); guard.guardText(event.type);\n if(event.ref!==undefined) guard.guardText(event.ref);\n const dataJson=guard.guardPayload(JSON.stringify(event.data));\n if(encoder.encode(dataJson).length>65_536) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const previous=this.rows<CloudEventRow>('SELECT * FROM cloud_events WHERE eventKey=?',event.eventKey)[0];\n if(previous) {\n if(previous.type!==event.type||previous.conversationId!==(event.conversationId??null)||previous.ref!==(event.ref??null)||previous.dataJson!==dataJson) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return previous;\n }\n const count=this.rows<{count:number}>('SELECT COUNT(*) AS count FROM cloud_events')[0]!.count;\n if(count>=10_000) this.trimPrefix(count-9500);\n const row=this.rows<CloudEventRow>(`INSERT INTO cloud_events(eventKey,type,conversationId,ref,dataJson,createdAt)\n VALUES(?,?,?,?,?,?) RETURNING *`,event.eventKey,event.type,event.conversationId??null,event.ref??null,dataJson,event.createdAt??Date.now())[0]!;\n this.storage.sql.exec('UPDATE cloud_event_meta SET highWater=? WHERE singleton=1',row.seq);\n return row;\n }\n eventMeta(): CloudEventMeta { return this.rows<CloudEventMeta>('SELECT trimmedThrough,highWater FROM cloud_event_meta WHERE singleton=1')[0]!; }\n eventPage(after: number, limit = 100): CloudEventRow[] {\n return this.storage.transactionSync(() => {\n const meta=this.eventMeta();\n if(!Number.isSafeInteger(after)||after<0||(after!==0&&after<meta.trimmedThrough)||after>meta.highWater) throw new CloudDoError('CLOUD_EVENT_CURSOR_EXPIRED');\n return this.rows<CloudEventRow>('SELECT * FROM cloud_events WHERE seq>? ORDER BY seq LIMIT ?',after===0?meta.trimmedThrough:after,this.pageLimit(limit));\n });\n }\n private pageLimit(value=100): number {\n if(!Number.isSafeInteger(value)||value<1||value>100) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return value;\n }\n /** Capture ownership and payloads before any asynchronous pi context read. */\n planTranscript(after: TranscriptCursor | undefined, limit: number): TranscriptPlan {\n return this.storage.transactionSync(() => {\n const highWater = this.eventMeta().highWater;\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 50) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (after !== undefined) {\n if (!after || typeof after !== 'object' || Array.isArray(after)\n || Object.keys(after).length !== 3 || !['horizon','run','item'].every(key => Object.hasOwn(after,key))\n || !Number.isSafeInteger(after.horizon) || after.horizon < 0 || after.horizon > highWater\n || [after.run,after.item].some(value => value !== null && (!Number.isSafeInteger(value) || value <= 0))) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n }\n const horizon = after?.horizon ?? highWater;\n const runRows = after?.run === null ? [] : this.rows<RunRow>(\n 'SELECT * FROM cloud_executions WHERE conversationId<? ORDER BY conversationId DESC LIMIT ?',after?.run ?? Number.MAX_SAFE_INTEGER,limit);\n const runs = runRows.map(run => {\n const memberships = this.rows<{seq:number}>(`SELECT seq FROM cloud_run_turns WHERE runId=?\n AND (claimEvent IS NULL OR claimEvent<=?) AND (releaseEvent IS NULL OR releaseEvent>?) ORDER BY seq`,run.conversationId,horizon,horizon);\n const turns = memberships.map(({seq}): TranscriptTurn => {\n const inbox = this.readInboxItem(seq);\n // A NULL legacy clock proves historical input only. Live membership proves the current link.\n const current = inbox ? inbox.runId : this.rows<{runId:number}>(`SELECT runId FROM cloud_run_turns\n WHERE seq=? AND claimEvent IS NOT NULL AND releaseEvent IS NULL ORDER BY runId DESC LIMIT 1`,seq)[0]?.runId ?? null;\n return {seq,runId:current,state:inbox?.state ?? null,errorCode:inbox?.errorCode ?? null,\n revision:inbox?.revision ?? null,text:payloadText(inbox)};\n });\n const invocations = this.invocationRowsForRun(run.conversationId).map(row => ({\n invocationId:row.invocationId,toolName:row.toolName,state:row.state,errorCode:row.errorCode,\n revision:row.state === 'accepted' || row.state === 'running' ? null : row.settledEventSeq,\n }));\n return {run,turns,invocations};\n });\n const itemRows = after?.item === null ? [] : this.rows<InboxRow>(`SELECT i.* FROM cloud_inbox i WHERE i.seq<?\n AND NOT EXISTS(SELECT 1 FROM cloud_run_turns t WHERE t.seq=i.seq\n AND (t.claimEvent IS NULL OR t.claimEvent<=?) AND (t.releaseEvent IS NULL OR t.releaseEvent>?))\n ORDER BY i.seq DESC LIMIT ?`,after?.item ?? Number.MAX_SAFE_INTEGER,horizon,horizon,limit);\n const items = itemRows.map(row => ({seq:row.seq,dedupKey:row.dedupKey,state:row.state,errorCode:row.errorCode,\n runId:row.runId,attempts:row.attempts,revision:row.revision,text:payloadText(row)}));\n return {runs,items,next:{horizon,run:runRows.length < limit ? null : runRows.at(-1)!.conversationId,\n item:itemRows.length < limit ? null : itemRows.at(-1)!.seq}};\n });\n }\n readRun(id: number): RunRow | undefined { return this.run(id); }\n readRuns(options: {after?:number;limit?:number} = {}): RunRow[] {\n return this.rows<RunRow>(`SELECT * FROM cloud_executions WHERE ${terminalRun} AND conversationId<? ORDER BY conversationId DESC LIMIT ?`,this.pageAfter(options.after),this.pageLimit(options.limit));\n }\n readInbox(options: {after?:number;limit?:number} = {}): InboxRow[] {\n return this.rows<InboxRow>(`SELECT * FROM cloud_inbox WHERE ${terminalInbox} AND seq<? ORDER BY seq DESC LIMIT ?`,this.pageAfter(options.after),this.pageLimit(options.limit)).map(row=>({...row,payloadJson:null}));\n }\n readInvocations(options: {after?:number;limit?:number} = {}): Array<Pick<InvocationRow,'seq'|'invocationId'|'toolName'|'state'|'errorCode'>> {\n return this.rows(`SELECT seq,invocationId,toolName,state,errorCode FROM cloud_invocations WHERE ${terminalInvocation} AND seq<? ORDER BY seq DESC LIMIT ?`,this.pageAfter(options.after),this.pageLimit(options.limit));\n }\n private pageAfter(after: number | undefined): number {\n if(after!==undefined&&(!Number.isSafeInteger(after)||after<0)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return after??Number.MAX_SAFE_INTEGER;\n }\n snapshot(): {highWater:number;trimmedThrough:number;inbox:InboxRow[];runs:RunRow[];invocations:Array<Pick<InvocationRow,'seq'|'invocationId'|'toolName'|'state'|'errorCode'>>} {\n return this.storage.transactionSync(() => {\n const inbox=[...this.rows<InboxRow>(\"SELECT * FROM cloud_inbox WHERE state IN ('queued','running') ORDER BY seq\"),...this.readInbox()].map(row=>({...row,payloadJson:null}));\n const runs=[...this.unsettledRuns(),...this.readRuns()];\n const invocations=[...this.rows<Pick<InvocationRow,'seq'|'invocationId'|'toolName'|'state'|'errorCode'>>(\"SELECT seq,invocationId,toolName,state,errorCode FROM cloud_invocations WHERE state IN ('accepted','running') ORDER BY seq\"),...this.readInvocations()];\n return {...this.eventMeta(),inbox,runs,invocations};\n });\n }\n setDelivery(id: string, state: 'delivered'|'undelivered', taskId: number|null, entryId: number|null, guard: CloudOperationGuard, now=Date.now()): void {\n const row=this.rows<InvocationRow&{deliveredState:string;taskId:number|null;resultEntryId:number|null}>('SELECT * FROM cloud_invocations WHERE invocationId=?',id)[0];\n if(!row||row.deliveredState===state&&row.taskId===taskId&&row.resultEntryId===entryId) return;\n this.storage.sql.exec('UPDATE cloud_invocations SET deliveredState=?,taskId=?,resultEntryId=? WHERE invocationId=?',state,taskId,entryId,id);\n this.appendEvent({eventKey:`tool:${id}:delivered:${state}:${taskId??''}:${entryId??''}`,type:'tool.delivered',conversationId:row.conversationId,ref:id,\n data:{invocationId:id,deliveredState:state,taskId,resultEntryId:entryId},createdAt:now},guard);\n }\n projectInvocation(row: InvocationRow, project: InvocationProjection | undefined, guard: CloudOperationGuard, now=Date.now()): void {\n if(!project) return;\n let admitted:{key:string;dataJson:string;digest:string}|undefined;\n try {\n const value=project(Object.freeze({...row}));\n if(value===undefined) return;\n const key = value.key;\n const rawDataJson = value.dataJson;\n if(typeof key!=='string'||!key.length||key.length>128||/[\\u0000-\\u001f\\u007f-\\u009f]/u.test(key)||typeof rawDataJson!=='string') throw new Error();\n // Bound raw hook input before JSON parsing and decoded-value traversal.\n if (rawDataJson.length > 16_384 || encoder.encode(rawDataJson).byteLength > 16_384) throw new Error();\n guard.guardText(key);\n const dataJson=guard.guardPayload(rawDataJson);\n if(encoder.encode(dataJson).length>16_384) throw new Error();\n admitted={key:`projection:${row.invocationId}:${key}`,dataJson,digest:sha256(dataJson)};\n } catch { this.projectionFailed(row,guard,now); return; }\n const previous=this.rows<{invocationId:string;state:string;payloadDigest:string}>('SELECT invocationId,state,payloadDigest FROM cloud_projections WHERE key=?',admitted.key)[0];\n if(previous) {\n if(previous.invocationId!==row.invocationId||previous.state!==row.state||previous.payloadDigest!==admitted.digest) this.projectionFailed(row,guard,now);\n return;\n }\n this.storage.sql.exec('INSERT INTO cloud_projections(key,invocationId,state,payloadDigest,dataJson,createdAt) VALUES(?,?,?,?,?,?)',admitted.key,row.invocationId,row.state,admitted.digest,admitted.dataJson,now);\n this.appendEvent({eventKey:admitted.key,type:'projection',conversationId:row.conversationId,ref:row.invocationId,\n data:{key:admitted.key,invocationId:row.invocationId,data:JSON.parse(admitted.dataJson)},createdAt:now},guard);\n }\n private projectionFailed(row: InvocationRow, guard: CloudOperationGuard, now: number): void {\n const key=`sdk:${row.invocationId}:projection-failed`;\n const existing=this.rows<{key:string}>('SELECT key FROM cloud_projections WHERE key=?',key)[0];\n if(existing) return;\n const dataJson='{\"code\":\"CLOUD_PROJECTION_FAILED\"}';\n this.storage.sql.exec('INSERT INTO cloud_projections(key,invocationId,state,payloadDigest,dataJson,errorCode,createdAt) VALUES(?,?,?,?,?,?,?)',key,row.invocationId,row.state,sha256(dataJson),dataJson,'CLOUD_PROJECTION_FAILED',now);\n this.appendEvent({eventKey:key,type:'projection.failed',conversationId:row.conversationId,ref:row.invocationId,data:{invocationId:row.invocationId,code:'CLOUD_PROJECTION_FAILED'},createdAt:now},guard);\n }\n private trimPrefix(count: number): number {\n const rows=this.rows<{seq:number}>('SELECT seq FROM cloud_events ORDER BY seq LIMIT ?',count);\n if(!rows.length) return 0;\n const through=rows.at(-1)!.seq;\n this.storage.sql.exec('DELETE FROM cloud_events WHERE seq<=?',through);\n this.storage.sql.exec('UPDATE cloud_event_meta SET trimmedThrough=MAX(trimmedThrough,?) WHERE singleton=1',through);\n return rows.length;\n }\n retention(now=Date.now()): {events:number;inbox:number} {\n return this.storage.transactionSync(() => {\n // Scan only the retained head. Even backdated rows never remove a middle segment.\n const head=this.rows<{seq:number;createdAt:number}>('SELECT seq,createdAt FROM cloud_events ORDER BY seq LIMIT 500');\n let count=0; for(const row of head) { if(row.createdAt+RETENTION>now) break; count++; }\n const events=this.trimPrefix(count);\n const expired=this.rows<{seq:number}>(`SELECT seq FROM cloud_inbox WHERE ${terminalInbox} AND settledAt<=? ORDER BY seq LIMIT 500`,now-RETENTION);\n for(const row of expired) this.storage.sql.exec('DELETE FROM cloud_inbox WHERE seq=?',row.seq);\n return {events,inbox:expired.length};\n });\n }\n setSchedulingState(options: SchedulingState): void {\n if (options.busy !== undefined) this.scheduling.busy = options.busy;\n if (options.repairRetrying !== undefined) this.scheduling.repairRetrying = options.repairRetrying;\n }\n nextAlarm(now=Date.now(), busy=this.scheduling.busy??false): number|null {\n const targets:number[]=[];\n const queued=this.rows<{availableAt:number;expiresAt:number}>(\"SELECT availableAt,expiresAt FROM cloud_inbox WHERE state='queued'\");\n for(const row of queued) {\n if(!busy||row.availableAt>now) targets.push(Math.max(now,row.availableAt));\n targets.push(Math.max(now,row.expiresAt));\n }\n if(!busy&&(this.unsettledRuns().length||this.unackedRuns().length)) targets.push(now);\n const head=this.rows<{createdAt:number}>('SELECT createdAt FROM cloud_events ORDER BY seq LIMIT 1')[0];\n if(head) targets.push(Math.max(now,head.createdAt+RETENTION));\n const settled=this.rows<{settledAt:number}>(`SELECT settledAt FROM cloud_inbox WHERE ${terminalInbox} AND settledAt IS NOT NULL ORDER BY settledAt LIMIT 1`)[0];\n if(settled) targets.push(Math.max(now,settled.settledAt+RETENTION));\n return targets.length?Math.min(...targets):null;\n }\n /** This is the only alarm mutation path. Async enqueue calls it inside its storage transaction. */\n async rearmAlarm(options?: SchedulingState, now=Date.now()): Promise<void> {\n if(options) this.setSchedulingState(options);\n const target=this.nextAlarm(now);\n if(this.scheduling.repairRetrying) {\n this.storage.sql.exec('UPDATE cloud_event_meta SET pendingMaintenanceAt=? WHERE singleton=1',target);\n return;\n }\n this.storage.sql.exec('UPDATE cloud_event_meta SET pendingMaintenanceAt=NULL WHERE singleton=1');\n if(target===null) await this.storage.deleteAlarm(); else await this.storage.setAlarm(target);\n }\n}\n","import type { FetchFunction } from '@earendil-works/pi-ai';\nimport { CloudDoError, safeCloudError } from './errors';\nimport { RollingLeakGuard } from './leak-guard';\nimport { hasUserKeyShape } from './admission';\nimport { requirePlatformKey, type PlatformProfile } from './platform-credentials';\n\nconst FRAME_LIMIT = 65_536;\nconst TOOL_ARGUMENT_LIMIT = 65_536;\nconst TOOL_CALL_LIMIT = 12;\n\nexport interface CloudToolTransport {\n readonly offeredToolNames: readonly string[];\n admitToolCall(name: string, rawId: string, args: Record<string, unknown>): void | Promise<void>;\n onSend?(): void;\n onUsage?(usage: Record<string, number>): void;\n}\n\ntype ToolAssembly = { id?: string; name?: string; type?: 'function'; arguments: string };\ntype CheckedToolCall = { index: number; id: string; type: 'function'; function: { name: string; arguments: string } };\n\n/** Tool fields stay private until the whole response is complete and admitted. */\nclass ToolCallAssembly {\n private readonly calls = new Map<number, ToolAssembly>();\n private argumentBytes = 0;\n private readonly encoder = new TextEncoder();\n constructor(private readonly key: string, private readonly config?: CloudToolTransport) {}\n\n private reject(): never { throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED'); }\n\n private checkString(value: string): void {\n if (hasUserKeyShape(value)) this.reject();\n const guard = new RollingLeakGuard(this.key);\n guard.push(value); guard.finish();\n }\n\n private checkValues(value: unknown): void {\n const pending = [value];\n while (pending.length) {\n const next = pending.pop();\n if (typeof next === 'string') this.checkString(next);\n else if (Array.isArray(next)) pending.push(...next);\n else if (object(next)) {\n for (const [name, child] of Object.entries(next as Record<string, unknown>)) {\n this.checkString(name); pending.push(child);\n }\n }\n }\n }\n\n add(value: unknown): void {\n if (!this.config || !Array.isArray(value) || value.length > TOOL_CALL_LIMIT) this.reject();\n const indices = new Set<number>();\n for (const item of value) {\n const row = object(item);\n if (!row || !Number.isSafeInteger(row.index) || (row.index as number) < 0 || (row.index as number) >= TOOL_CALL_LIMIT) this.reject();\n const index = row.index as number;\n if (indices.has(index)) this.reject();\n indices.add(index);\n const call = this.calls.get(index) ?? { arguments: '' };\n if (!this.calls.has(index)) this.calls.set(index, call);\n if (row.id != null) {\n if (call.id !== undefined || typeof row.id !== 'string' || !row.id || row.id.length > 512) this.reject();\n this.checkString(row.id); call.id = row.id;\n }\n if (row.type != null) {\n if (call.type !== undefined || row.type !== 'function') this.reject();\n call.type = 'function';\n }\n if (row.function != null) {\n const fn = object(row.function);\n if (!fn) this.reject();\n if (fn.name != null) {\n if (call.name !== undefined || typeof fn.name !== 'string' || !this.config!.offeredToolNames.includes(fn.name)) this.reject();\n this.checkString(fn.name); call.name = fn.name;\n }\n if (fn.arguments != null) {\n if (typeof fn.arguments !== 'string') this.reject();\n this.argumentBytes += this.encoder.encode(fn.arguments).byteLength;\n if (this.argumentBytes > TOOL_ARGUMENT_LIMIT) this.reject();\n call.arguments += fn.arguments;\n }\n }\n }\n }\n\n get size(): number { return this.calls.size; }\n\n async finish(): Promise<CheckedToolCall[]> {\n const checked: { index: number; call: ToolAssembly; args: Record<string, unknown> }[] = [];\n const ids = new Set<string>();\n const ordered = [...this.calls].sort(([left], [right]) => left - right);\n for (const [index, call] of ordered) {\n if (index !== checked.length || !call.id || !call.name || call.type !== 'function' || ids.has(call.id)) this.reject();\n ids.add(call.id);\n let parsed: unknown;\n try { parsed = JSON.parse(call.arguments); } catch { this.reject(); }\n const args = object(parsed);\n if (!args) this.reject();\n this.checkValues(args);\n checked.push({ index, call, args });\n }\n // Admit every call before returning any native event or retained tool field.\n for (const { call, args } of checked) await this.config!.admitToolCall(call.name!, call.id!, args);\n return checked.map(({ index, call, args }) => ({ index, id: `call_${index + 1}`, type: 'function',\n function: { name: call.name!, arguments: JSON.stringify(args) } }));\n }\n}\ntype Lane = 'content' | 'reasoning_content';\ntype Segment = { lane: Lane; text: string };\nconst object = (value: unknown): Record<string, unknown> | undefined =>\n value !== null && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n\n/** Read bounded complete SSE frames, not an entire provider response. JSON escaping\n * is decoded by the caller before text enters the rolling guard. */\nasync function* frames(reader: ReadableStreamDefaultReader<Uint8Array>): AsyncGenerator<string> {\n const decoder = new TextDecoder('utf-8', { fatal: true, ignoreBOM: false });\n let frame = '';\n let line = '';\n let lastWasCR = false;\n while (true) {\n const next = await reader.read();\n const text = next.done ? decoder.decode() : decoder.decode(next.value, { stream: true });\n for (const character of text) {\n if (character === '\\n' && lastWasCR) { lastWasCR = false; continue; }\n lastWasCR = character === '\\r';\n if (character === '\\n' || character === '\\r') {\n if (!line) { if (frame) yield frame; frame = ''; }\n else { frame += `${line}\\n`; line = ''; }\n } else line += character;\n if (frame.length + line.length > FRAME_LIMIT) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n }\n if (next.done) {\n if (line || frame) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n return;\n }\n }\n}\n\nfunction eventData(frame: string): string {\n return frame.split('\\n').filter(line => line.startsWith('data:')).map(line => line.slice(5).replace(/^ /, '')).join('\\n');\n}\n\nexport async function* readSseData(body: ReadableStream<Uint8Array>): AsyncGenerator<string> {\n const reader = body.getReader();\n try {\n for await (const frame of frames(reader)) {\n const data = eventData(frame);\n if (data) yield data;\n }\n } finally { try { await reader.cancel(); } catch { /* Never retain an upstream error. */ } }\n}\n\nfunction numericUsage(value: unknown): Record<string, number> | undefined {\n const usage = object(value);\n if (!usage) return undefined;\n const result: Record<string, number> = {};\n for (const field of ['prompt_tokens', 'completion_tokens', 'total_tokens']) {\n const n = usage[field];\n if (typeof n === 'number' && Number.isSafeInteger(n) && n >= 0) result[field] = n;\n }\n return Object.keys(result).length ? result : undefined;\n}\n\n/** The SDK receives only re-encoded, checked text and bounded numeric usage. IDs,\n * headers and arbitrary vendor fields never cross this boundary. Tool calls cross\n * only after terminal assembly, decoded-value checks and admission. */\nfunction guardedBody(body: ReadableStream<Uint8Array>, key: string, profile: PlatformProfile, abort: AbortController, cleanup: () => void, transport?: CloudToolTransport): ReadableStream<Uint8Array> {\n const reader = body.getReader();\n const guard = new RollingLeakGuard(key);\n // pi reconstructs each lane separately. Checking only wire order lets benign\n // thinking deltas hide a key that is reassembled inside the content lane.\n const laneGuards = { content: new RollingLeakGuard(key), reasoning_content: new RollingLeakGuard(key) };\n const segments: Segment[] = [];\n const encoder = new TextEncoder();\n let finishReason: 'stop' | 'length' | 'content_filter' | 'tool_calls' | undefined;\n const tools = new ToolCallAssembly(key, transport);\n let usage: Record<string, number> | undefined;\n const encode = (delta: Record<string, unknown>, finish: string | null = null) =>\n `data: ${JSON.stringify({ id: 'cloud', object: 'chat.completion.chunk', created: 0, model: profile.model,\n choices: [{ index: 0, delta, finish_reason: finish }] })}\\n\\n`;\n const release = (text: string): string => {\n let remaining = text.length;\n let result = '';\n while (remaining > 0) {\n const first = segments[0]!;\n const size = Math.min(first.text.length, remaining);\n result += encode({ [first.lane]: first.text.slice(0, size) });\n first.text = first.text.slice(size);\n remaining -= size;\n if (!first.text) segments.shift();\n }\n return result;\n };\n const stop = async () => {\n guard.discard(); laneGuards.content.discard(); laneGuards.reasoning_content.discard(); segments.length = 0;\n try { await reader.cancel(); } catch { /* No upstream exceptions escape. */ }\n finally { abort.abort(); cleanup(); }\n };\n const checkedLane = (lane: Lane, text: string): string => {\n if (!text) return '';\n const previous = segments.at(-1);\n if (previous?.lane === lane) previous.text += text;\n else segments.push({ lane, text });\n return release(guard.push(text));\n };\n async function* output(): AsyncGenerator<string> {\n let done = false;\n try {\n for await (const frame of frames(reader)) {\n const data = eventData(frame);\n if (!data) continue;\n if (data === '[DONE]') { done = true; break; }\n const payload = object(JSON.parse(data));\n if (!payload || payload.error) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n const currentUsage = numericUsage(payload.usage);\n if (currentUsage) {\n for (const [field, value] of Object.entries(currentUsage)) {\n if (usage?.[field] !== undefined && value < usage[field]!) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n }\n usage = { ...usage, ...currentUsage };\n transport?.onUsage?.(usage);\n }\n if (!Array.isArray(payload.choices)) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n const choice = payload.choices.find(item => object(item)?.index === 0);\n if (!choice) continue; // e.g. the terminal numeric-usage frame\n const row = object(choice)!;\n const delta = object(row.delta);\n if (!delta || delta.function_call || delta.refusal) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n if (finishReason && (delta.tool_calls != null || delta.content || delta.reasoning_content)) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n if (delta.tool_calls != null) tools.add(delta.tool_calls);\n for (const lane of ['content', 'reasoning_content'] as const) {\n const text = delta[lane];\n if (text === undefined || text === null) continue;\n if (typeof text !== 'string') throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n if (!text) continue;\n const safe = checkedLane(lane, laneGuards[lane].push(text));\n if (safe) yield safe;\n }\n if (row.finish_reason != null) {\n if (finishReason || !['stop', 'length', 'content_filter', 'tool_calls'].includes(String(row.finish_reason))) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n finishReason = row.finish_reason as 'stop' | 'length' | 'content_filter' | 'tool_calls';\n }\n }\n if (!done && !finishReason) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n if ((tools.size > 0) !== (finishReason === 'tool_calls')) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n const checkedTools = tools.size ? await tools.finish() : [];\n const terminal = encode(checkedTools.length ? { tool_calls: checkedTools } : {}, finishReason ?? 'stop');\n if (terminal.length > FRAME_LIMIT) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n for (const lane of ['content', 'reasoning_content'] as const) {\n const safe = checkedLane(lane, laneGuards[lane].finish());\n if (safe) yield safe;\n }\n const final = release(guard.finish());\n if (final) yield final;\n yield terminal;\n if (usage) yield `data: ${JSON.stringify({ choices: [], usage })}\\n\\n`;\n yield 'data: [DONE]\\n\\n';\n } catch (error) { throw safeCloudError(error); }\n finally { await stop(); }\n }\n const iterator = output();\n return new ReadableStream({\n async pull(controller) {\n try {\n const next = await iterator.next();\n if (next.done) controller.close();\n else controller.enqueue(encoder.encode(next.value));\n } catch (error) { controller.error(safeCloudError(error)); }\n },\n async cancel() { await stop(); await iterator.return(undefined); },\n });\n}\n\n/** Credential only in auth headers; never follow any redirect, even same origin. */\nexport function createProviderFetch(profile: PlatformProfile, secret: string, fetchImpl: FetchFunction = globalThis.fetch, transport?: CloudToolTransport): FetchFunction {\n const key = requirePlatformKey(secret);\n const endpoint = `${profile.baseUrl.replace(/\\/$/, '')}/chat/completions`;\n return async (input, init) => {\n let request: Request;\n try { request = new Request(input, init); }\n catch { throw new CloudDoError('CLOUD_REQUEST_INVALID'); }\n if (request.url !== endpoint || request.method !== 'POST') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const abort = new AbortController();\n const onAbort = () => abort.abort();\n request.signal.addEventListener('abort', onAbort, { once: true });\n if (request.signal.aborted) abort.abort();\n const cleanup = () => request.signal.removeEventListener('abort', onAbort);\n try {\n const dispatch = new Request(request, { signal: abort.signal,\n redirect: 'manual', headers: { authorization: `Bearer ${key}`, 'content-type': 'application/json', accept: 'text/event-stream' } });\n if (abort.signal.aborted) throw new CloudDoError('CLOUD_MODEL_REQUEST_FAILED');\n transport?.onSend?.();\n const response = await fetchImpl(dispatch);\n if (!response.ok || (response.status >= 300 && response.status < 400) || !response.body\n || !response.headers.get('content-type')?.toLowerCase().startsWith('text/event-stream')) {\n abort.abort(); cleanup();\n try { await response.body?.cancel(); } catch { /* Drop raw error bodies. */ }\n throw new CloudDoError('CLOUD_MODEL_REQUEST_FAILED');\n }\n return new Response(guardedBody(response.body, key, profile, abort, cleanup, transport), { headers: { 'content-type': 'text/event-stream' } });\n } catch (error) { abort.abort(); cleanup(); throw safeCloudError(error); }\n };\n}\n","import { createModels, createProvider } from '@earendil-works/pi-ai/models';\nimport { AssistantMessageEventStream } from '@earendil-works/pi-ai/utils/event-stream';\nimport type { Api, AssistantMessage, JsonObject, Model, ProviderStreams, StreamOptions, ToolCall } from '@earendil-works/pi-ai';\nimport { getCurrentTools, type TranscriptContext } from '@earendil-works/pi-ai/utils/transcript';\nimport { getSystemMessageText } from '@earendil-works/pi-ai/utils/text';\nimport { CloudDoError, safeCloudError } from './errors';\nimport { createProviderFetch, readSseData } from './provider-fetch';\nimport { PLATFORM_PROFILES, platformCredentialReader, requirePlatformKey, type PlatformProfile, type PlatformCredentialReader } from './platform-credentials';\n\nexport const PLATFORM_MAX_OUTPUT_TOKENS = 4096;\nexport const REQUEST_FRAMING_BYTES = 4096;\n\nfunction emptyAssistant(model: Model<Api>): AssistantMessage {\n return { role: 'assistant', content: [], api: model.api, provider: model.provider, model: model.id,\n usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } },\n stopReason: 'stop', timestamp: Date.now() };\n}\n\n/** pi resolves auth before calling ProviderStreams. Strip its auth error wrapper\n * before any error event or result reaches durable persistence. */\nfunction fixedModelErrors(source: AssistantMessageEventStream, model: Model<Api>): AssistantMessageEventStream {\n const events = new AssistantMessageEventStream();\n const run = async () => {\n let terminal: AssistantMessage | undefined;\n try {\n for await (const event of source) {\n if (event.type === 'error') {\n const message = event.error.errorMessage;\n const code = message?.includes('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE')\n ? 'CLOUD_MODEL_CREDENTIAL_UNAVAILABLE' : safeCloudError(new Error(message)).code;\n terminal = { ...emptyAssistant(model), content: event.error.content, usage: event.error.usage,\n stopReason: event.reason, errorMessage: code };\n events.push({ type: 'error', reason: event.reason, error: terminal });\n } else {\n if (event.type === 'done') terminal = event.message;\n events.push(event);\n }\n }\n if (!terminal) throw new CloudDoError('CLOUD_MODEL_REQUEST_FAILED');\n } catch {\n terminal = { ...emptyAssistant(model), stopReason: 'error', errorMessage: 'CLOUD_MODEL_REQUEST_FAILED' };\n events.push({ type: 'error', reason: 'error', error: terminal });\n } finally { events.end(terminal); }\n };\n void run();\n return events;\n}\n\nexport interface CloudModelAccount {\n sent(): void;\n usage(usage: { input?: number; output?: number }): void;\n}\n\nexport interface CloudModelRuntime {\n beforeRequest(info: { inputBytes: number }): void | CloudModelAccount | Promise<void | CloudModelAccount>;\n admitToolCall(name: string, id: string, args: Record<string, unknown>): void | Promise<void>;\n requestSignal?(signal?: AbortSignal): AbortSignal;\n}\n\ntype ProviderMessage = { role: string; content: string; tool_call_id?: string;\n tool_calls?: { id: string; type: 'function'; function: { name: string; arguments: string } }[] };\n\nfunction messages(context: TranscriptContext): ProviderMessage[] {\n return context.messages.map(message => {\n if (message.role === 'system') return { role: 'system', content: getSystemMessageText(message) };\n if (message.role === 'toolResult') return { role: 'tool', tool_call_id: message.toolCallId,\n content: message.content.map(block => {\n if (block.type !== 'text') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return block.text;\n }).join('') };\n if (message.role !== 'user' && message.role !== 'assistant') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const calls: NonNullable<ProviderMessage['tool_calls']> = [];\n const content = typeof message.content === 'string' ? message.content : message.content.map(block => {\n if (block.type === 'toolCall' && message.role === 'assistant') {\n calls.push({ id: block.id, type: 'function', function: { name: block.name, arguments: JSON.stringify(block.arguments) } });\n return '';\n }\n if (block.type !== 'text' && block.type !== 'thinking') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return block.type === 'text' ? block.text : '';\n }).join('');\n return { role: message.role, content, ...(calls.length ? { tool_calls: calls } : {}) };\n });\n}\n\n/** Web OpenAI-compatible transport. Native pi generation owns tool rounds. */\nfunction stream(profile: PlatformProfile, model: Model<Api>, context: TranscriptContext, options?: StreamOptions, runtime?: CloudModelRuntime): AssistantMessageEventStream {\n const events = new AssistantMessageEventStream();\n const output = emptyAssistant(model);\n const blocks = new Map<'content' | 'reasoning_content', number>();\n const run = async () => {\n try {\n const currentTools = getCurrentTools(context.messages);\n const body = JSON.stringify({ model: profile.model, messages: messages(context), stream: true,\n stream_options: { include_usage: true }, max_tokens: PLATFORM_MAX_OUTPUT_TOKENS,\n ...(currentTools.length ? { tools: currentTools.map(tool => ({ type: 'function',\n function: { name: tool.name, description: tool.description, parameters: tool.parameters } })) } : {}) });\n const account = await runtime?.beforeRequest({ inputBytes: new TextEncoder().encode(body).byteLength });\n const key = requirePlatformKey(options?.apiKey);\n const request = createProviderFetch(profile, key, globalThis.fetch, { offeredToolNames: currentTools.map(tool => tool.name),\n admitToolCall: (name, id, args) => runtime?.admitToolCall(name, id, args),\n onSend: () => account?.sent(),\n onUsage: usage => account?.usage({ input: usage.prompt_tokens, output: usage.completion_tokens }) });\n const response = await request(`${profile.baseUrl}/chat/completions`, { method: 'POST', signal: runtime?.requestSignal?.(options?.signal) ?? options?.signal,\n body });\n events.push({ type: 'start', partial: output });\n for await (const data of readSseData(response.body!)) {\n if (data === '[DONE]') break;\n // Only provider-fetch's re-encoded whitelist reaches here, never raw frames.\n const frame = JSON.parse(data) as { choices: { delta: { content?: string; reasoning_content?: string; tool_calls?: { id: string; function: { name: string; arguments: string } }[] }; finish_reason: string | null }[]; usage?: { prompt_tokens?: number; completion_tokens?: number; total_tokens?: number } };\n if (frame.usage) {\n output.usage.input = frame.usage.prompt_tokens ?? 0;\n output.usage.output = frame.usage.completion_tokens ?? 0;\n output.usage.totalTokens = frame.usage.total_tokens ?? output.usage.input + output.usage.output;\n }\n for (const choice of frame.choices) {\n if (choice.finish_reason === 'length') output.stopReason = 'length';\n if (choice.finish_reason === 'tool_calls') output.stopReason = 'toolUse';\n for (const call of choice.delta.tool_calls ?? []) {\n const index = output.content.length;\n const toolCall: ToolCall = { type: 'toolCall', id: call.id, name: call.function.name,\n arguments: JSON.parse(call.function.arguments) as JsonObject };\n output.content.push(toolCall);\n events.push({ type: 'toolcall_start', contentIndex: index, partial: output });\n events.push({ type: 'toolcall_delta', contentIndex: index, delta: call.function.arguments, partial: output });\n events.push({ type: 'toolcall_end', contentIndex: index, toolCall, partial: output });\n }\n for (const lane of ['content', 'reasoning_content'] as const) {\n const delta = choice.delta[lane];\n if (!delta) continue;\n let index = blocks.get(lane);\n if (index === undefined) {\n index = output.content.length; blocks.set(lane, index);\n output.content.push(lane === 'content' ? { type: 'text', text: '' } : { type: 'thinking', thinking: '' });\n events.push({ type: lane === 'content' ? 'text_start' : 'thinking_start', contentIndex: index, partial: output });\n }\n const block = output.content[index]!;\n if (block.type === 'text') block.text += delta;\n else if (block.type === 'thinking') block.thinking += delta;\n events.push({ type: lane === 'content' ? 'text_delta' : 'thinking_delta', contentIndex: index, delta, partial: output });\n }\n }\n }\n for (const [lane, index] of blocks) {\n const block = output.content[index]!;\n events.push({ type: lane === 'content' ? 'text_end' : 'thinking_end', contentIndex: index,\n content: block.type === 'text' ? block.text : block.type === 'thinking' ? block.thinking : '', partial: output });\n }\n events.push({ type: 'done', reason: output.stopReason as 'stop' | 'length' | 'toolUse', message: output });\n } catch (error) {\n output.stopReason = options?.signal?.aborted ? 'aborted' : 'error';\n output.errorMessage = safeCloudError(error).code;\n events.push({ type: 'error', reason: output.stopReason, error: output });\n } finally { events.end(output); }\n };\n void run();\n return events;\n}\n\nexport function createPlatformModels(env: Readonly<Record<string, unknown>>,\n credentials: PlatformCredentialReader = platformCredentialReader(env), runtime?: CloudModelRuntime) {\n const models = createModels({ authContext: { env: async () => undefined, fileExists: async () => false } });\n for (const [id, profile] of Object.entries(PLATFORM_PROFILES)) {\n const implementation: ProviderStreams = { stream: (model, context, options) => stream(profile, model, context, options, runtime),\n streamSimple: (model, context, options) => stream(profile, model, context, options, runtime) };\n const model: Model<'openai-completions'> = { id: profile.model, name: profile.model, provider: id, api: 'openai-completions', baseUrl: profile.baseUrl,\n reasoning: false, input: ['text'], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65_536, maxTokens: PLATFORM_MAX_OUTPUT_TOKENS };\n models.setProvider(createProvider({ id, models: [model], api: implementation,\n auth: { apiKey: { name: 'Platform model key', resolve: async () => {\n try {\n const key = requirePlatformKey(await credentials.get(profile.secretName));\n return { auth: { apiKey: key }, source: 'platform' };\n } catch { throw new CloudDoError('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE'); }\n } } } }));\n }\n const rawStream = models.stream.bind(models);\n const rawSimple = models.streamSimple.bind(models);\n models.stream = (model, context, options) => fixedModelErrors(rawStream(model, context, options), model);\n models.streamSimple = (model, context, options) => fixedModelErrors(rawSimple(model, context, options), model);\n return models;\n}\n","import { CloudDoError, type CloudDoErrorCode } from './errors';\nimport type { CloudOperationGuard } from './input-guard';\nimport { PLATFORM_MAX_OUTPUT_TOKENS, REQUEST_FRAMING_BYTES } from './platform-provider';\n\nexport type InvocationState = 'accepted' | 'running' | 'succeeded' | 'failed' | 'aborted' | 'interrupted' | 'timed_out';\nexport type InvocationTerminalState = Exclude<InvocationState, 'accepted' | 'running'>;\nexport interface InvocationInput {\n invocationId: string;\n sessionId: string;\n conversationId: number;\n assistantEntryId: number;\n toolCallId: string;\n toolName: string;\n argsDigest: string;\n argsJson: string;\n replay: 'safe' | 'unsafe';\n deadlineAt: number;\n}\nexport interface InvocationRow extends InvocationInput {\n seq: number;\n state: InvocationState;\n attempt: number;\n replayCount: number;\n abortRequested: number;\n resultJson: string | null;\n settledAt: number | null;\n settledEventSeq: number | null;\n errorCode: CloudDoErrorCode | null;\n mode: 'inline' | 'job';\n segmentStartedAt: number | null;\n nextSegmentAt: number | null;\n jobStateJson: string | null;\n progressJson: string | null;\n deliveredState?: 'delivered' | 'undelivered';\n taskId?: number | null;\n resultEntryId?: number | null;\n}\nexport interface ExecutionRow {\n conversationId: number;\n deadlineAt: number;\n steps: number;\n tools: number;\n inputTokens: number;\n outputTokens: number;\n credits: number;\n sentRequests: number;\n fatalCode: CloudDoErrorCode | null;\n aborted: number;\n}\nexport interface InvocationFinishOptions {\n /** An old attempt cannot settle an invocation claimed by recovery. */\n attempt?: number;\n clientConnected?: boolean;\n /** Ledger recovery may settle after the old native conversation was aborted. */\n recovery?: boolean;\n creditCap?: number;\n}\n\nexport interface InvocationLedgerOptions {\n started?(row: InvocationRow, guard?: CloudOperationGuard): void;\n startedCommitted?(row: InvocationRow): void;\n /** Runs inside the state transaction. Errors roll back state and events together. */\n terminal?(row: InvocationRow, recovery: boolean): { seq: number; createdAt: number } | void;\n /** Post-commit notification cannot affect the invocation outcome. */\n committed?(row: InvocationRow): void;\n}\n\nconst terminal = (state: InvocationState) => state !== 'accepted' && state !== 'running';\nconst fatalCodes = new Set<CloudDoErrorCode>([\n 'CLOUD_TOOL_RESULT_LIMIT', 'CLOUD_TOOL_LIMIT', 'CLOUD_STEP_LIMIT',\n 'CLOUD_TOOL_TIMEOUT', 'CLOUD_EXECUTION_TIMEOUT',\n]);\n\n/** Host tables share the DO database with the pi_ tables. No function enters storage. */\nexport class InvocationLedger {\n constructor(private readonly storage: DurableObjectStorage, private readonly options: InvocationLedgerOptions = {}) {}\n\n /** The host calls this only after credential and identity preflight. */\n ensureSchema(): void {\n this.storage.transactionSync(() => {\n this.storage.sql.exec(`CREATE TABLE IF NOT EXISTS cloud_invocations (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n invocationId TEXT NOT NULL UNIQUE, sessionId TEXT NOT NULL,\n conversationId INTEGER NOT NULL, assistantEntryId INTEGER NOT NULL,\n toolCallId TEXT NOT NULL, toolName TEXT NOT NULL,\n argsDigest TEXT NOT NULL, argsJson TEXT NOT NULL,\n replay TEXT NOT NULL CHECK (replay IN ('safe','unsafe')),\n state TEXT NOT NULL CHECK (state IN ('accepted','running','succeeded','failed','aborted','interrupted','timed_out')),\n attempt INTEGER NOT NULL, replayCount INTEGER NOT NULL DEFAULT 0,\n deadlineAt INTEGER NOT NULL, abortRequested INTEGER NOT NULL DEFAULT 0,\n resultJson TEXT, errorCode TEXT,\n mode TEXT NOT NULL DEFAULT 'inline' CHECK (mode IN ('inline','job')),\n segmentStartedAt INTEGER, nextSegmentAt INTEGER, jobStateJson TEXT, progressJson TEXT\n );\n CREATE INDEX IF NOT EXISTS cloud_invocations_pending ON cloud_invocations(state,seq);\n CREATE TABLE IF NOT EXISTS cloud_executions (\n conversationId INTEGER PRIMARY KEY, deadlineAt INTEGER NOT NULL,\n steps INTEGER NOT NULL DEFAULT 0, tools INTEGER NOT NULL DEFAULT 0,\n fatalCode TEXT, aborted INTEGER NOT NULL DEFAULT 0\n );\n CREATE TABLE IF NOT EXISTS cloud_counted_tools (\n conversationId INTEGER NOT NULL, taskId TEXT NOT NULL,\n PRIMARY KEY(conversationId,taskId)\n )`);\n const columns = new Set(this.storage.sql.exec<{ name: string }>('PRAGMA table_info(cloud_invocations)').toArray().map(row => row.name));\n for (const name of ['settledAt', 'settledEventSeq']) {\n if (!columns.has(name)) this.storage.sql.exec(`ALTER TABLE cloud_invocations ADD COLUMN ${name} INTEGER`);\n }\n const executionColumns = new Set(this.storage.sql.exec<{ name: string }>('PRAGMA table_info(cloud_executions)').toArray().map(row => row.name));\n for (const name of ['inputTokens', 'outputTokens', 'credits', 'sentRequests']) {\n if (!executionColumns.has(name)) this.storage.sql.exec(`ALTER TABLE cloud_executions ADD COLUMN ${name} INTEGER NOT NULL DEFAULT 0`);\n }\n });\n }\n\n read(id: string): InvocationRow | undefined {\n return this.storage.sql.exec<InvocationRow & Record<string, SqlStorageValue>>('SELECT * FROM cloud_invocations WHERE invocationId = ?', id).toArray()[0];\n }\n\n pending(): InvocationRow[] {\n return this.storage.sql.exec<InvocationRow & Record<string, SqlStorageValue>>(\"SELECT * FROM cloud_invocations WHERE state IN ('accepted','running') ORDER BY seq\").toArray();\n }\n\n begin(input: InvocationInput, guard?: CloudOperationGuard): { kind: 'started' | 'pending' | 'settled'; row: InvocationRow } {\n const begun = this.storage.transactionSync<{ kind: 'started' | 'pending' | 'settled'; row: InvocationRow }>(() => {\n const previous = this.read(input.invocationId);\n if (previous) {\n if (previous.argsDigest !== input.argsDigest || previous.toolName !== input.toolName) {\n throw new CloudDoError('CLOUD_TOOL_INVOCATION_CONFLICT');\n }\n return { kind: terminal(previous.state) ? 'settled' : 'pending', row: previous };\n }\n this.storage.sql.exec(`INSERT INTO cloud_invocations\n (invocationId,sessionId,conversationId,assistantEntryId,toolCallId,toolName,argsDigest,argsJson,replay,state,attempt,deadlineAt)\n VALUES (?,?,?,?,?,?,?,?,?,'running',1,?)`, input.invocationId, input.sessionId,\n input.conversationId, input.assistantEntryId, input.toolCallId, input.toolName,\n input.argsDigest, input.argsJson, input.replay, input.deadlineAt);\n const row = this.read(input.invocationId)!;\n this.options.started?.(row, guard);\n return { kind: 'started', row };\n });\n if (begun.kind === 'started') {\n try { this.options.startedCommitted?.(begun.row); }\n catch { /* A doorbell cannot change a committed invocation. */ }\n }\n return begun;\n }\n\n finish(id: string, state: InvocationTerminalState, result?: Record<string, unknown>, errorCode?: CloudDoErrorCode,\n now = Date.now(), options: InvocationFinishOptions = {}): InvocationRow | undefined {\n let changed: InvocationRow | undefined;\n const resultRow = this.storage.transactionSync(() => {\n const row = this.read(id);\n if (!row || terminal(row.state) || (options.attempt !== undefined && options.attempt !== row.attempt)) return row;\n const execution = this.execution(row.conversationId);\n let settledState = state;\n let settledError = errorCode ?? null;\n if (state === 'succeeded') {\n if (row.abortRequested || options.clientConnected === false || (!options.recovery && execution?.aborted)) {\n settledState = 'aborted'; settledError = 'CLOUD_EXECUTION_ABORTED';\n } else if (now >= row.deadlineAt || (execution && now >= execution.deadlineAt)) {\n settledState = 'timed_out';\n settledError = execution && now >= execution.deadlineAt ? 'CLOUD_EXECUTION_TIMEOUT' : 'CLOUD_TOOL_TIMEOUT';\n } else if (!options.recovery && execution?.fatalCode) {\n settledState = 'failed'; settledError = execution.fatalCode;\n }\n }\n this.storage.sql.exec(`UPDATE cloud_invocations SET state=?,resultJson=?,errorCode=?\n WHERE invocationId=? AND attempt=? AND state IN ('accepted','running')`,\n settledState, settledState === 'succeeded' && result !== undefined ? JSON.stringify(result) : null, settledError, id, row.attempt);\n const credits = (result?.usage as { credits?: unknown } | undefined)?.credits;\n if (typeof credits === 'number' && Number.isSafeInteger(credits) && credits >= 0) {\n this.storage.sql.exec('UPDATE cloud_executions SET credits=MIN(credits+?,9007199254740991) WHERE conversationId=?', credits, row.conversationId);\n if (options.creditCap !== undefined && (this.execution(row.conversationId)?.credits ?? 0) > options.creditCap) {\n this.failExecution(row.conversationId, 'CLOUD_BUDGET_EXCEEDED');\n }\n }\n if (settledError && fatalCodes.has(settledError)) this.failExecution(row.conversationId, settledError);\n changed = this.read(id)!;\n changed = this.#terminal(changed, options.recovery === true);\n return changed;\n });\n if (changed) this.#notify(changed);\n return resultRow;\n }\n\n #terminal(row: InvocationRow, recovery: boolean): InvocationRow {\n const event = this.options.terminal?.(row, recovery);\n if (event) {\n this.storage.sql.exec('UPDATE cloud_invocations SET settledAt=?,settledEventSeq=? WHERE invocationId=?', event.createdAt, event.seq, row.invocationId);\n }\n return this.read(row.invocationId)!;\n }\n\n #notify(row: InvocationRow): void {\n try { this.options.committed?.(row); }\n catch { /* The state and event are already committed. */ }\n }\n\n /** Claim before network replay. A second restart never dispatches a claimed row again. */\n claimRecovery(now = Date.now()): InvocationRow[] {\n const settled: InvocationRow[] = [];\n const claimed = this.storage.transactionSync(() => {\n const claimed: InvocationRow[] = [];\n for (const row of this.pending()) {\n const execution = this.execution(row.conversationId);\n if (row.abortRequested || execution?.aborted) {\n this.storage.sql.exec(`UPDATE cloud_invocations SET state='aborted',resultJson=NULL,errorCode='CLOUD_EXECUTION_ABORTED'\n WHERE invocationId=? AND state IN ('accepted','running')`, row.invocationId);\n } else if (now >= row.deadlineAt || (execution && now >= execution.deadlineAt)) {\n const code = execution && now >= execution.deadlineAt ? 'CLOUD_EXECUTION_TIMEOUT' : 'CLOUD_TOOL_TIMEOUT';\n this.storage.sql.exec(`UPDATE cloud_invocations SET state='timed_out',resultJson=NULL,errorCode=?\n WHERE invocationId=? AND state IN ('accepted','running')`, code, row.invocationId);\n this.failExecution(row.conversationId, code);\n } else if (row.replay === 'safe' && row.mode === 'inline' && row.replayCount === 0) {\n this.storage.sql.exec(`UPDATE cloud_invocations SET replayCount=1,attempt=attempt+1,state='running'\n WHERE invocationId=? AND replayCount=0 AND state IN ('accepted','running')`, row.invocationId);\n claimed.push(this.read(row.invocationId)!);\n } else {\n this.storage.sql.exec(`UPDATE cloud_invocations SET state=?,resultJson=NULL,errorCode='CLOUD_EXECUTION_INTERRUPTED'\n WHERE invocationId=? AND state IN ('accepted','running')`,\n row.replayCount >= 1 ? 'failed' : 'interrupted', row.invocationId);\n }\n const updated = this.read(row.invocationId)!;\n if (terminal(updated.state)) {\n settled.push(this.#terminal(updated, true));\n }\n }\n return claimed;\n });\n for (const row of settled) this.#notify(row);\n return claimed;\n }\n\n forConversation(conversationId: number): InvocationRow[] {\n return this.storage.sql.exec<InvocationRow & Record<string, SqlStorageValue>>('SELECT * FROM cloud_invocations WHERE conversationId=? ORDER BY seq', conversationId).toArray();\n }\n\n startExecution(conversationId: number, deadlineAt: number): ExecutionRow {\n this.storage.sql.exec('INSERT INTO cloud_executions(conversationId,deadlineAt) VALUES (?,?) ON CONFLICT(conversationId) DO NOTHING', conversationId, deadlineAt);\n return this.execution(conversationId)!;\n }\n\n execution(conversationId: number): ExecutionRow | undefined {\n return this.storage.sql.exec<ExecutionRow & Record<string, SqlStorageValue>>('SELECT * FROM cloud_executions WHERE conversationId=?', conversationId).toArray()[0];\n }\n\n failExecution(conversationId: number, code: CloudDoErrorCode): ExecutionRow | undefined {\n this.storage.sql.exec('UPDATE cloud_executions SET fatalCode=COALESCE(fatalCode,?) WHERE conversationId=?', code, conversationId);\n return this.execution(conversationId);\n }\n\n abortExecution(conversationId: number, code: CloudDoErrorCode): ExecutionRow | undefined {\n return this.storage.transactionSync(() => {\n this.storage.sql.exec('UPDATE cloud_executions SET aborted=1,fatalCode=COALESCE(fatalCode,?) WHERE conversationId=?', code, conversationId);\n this.storage.sql.exec(`UPDATE cloud_invocations SET abortRequested=1\n WHERE conversationId=? AND state IN ('accepted','running')`, conversationId);\n return this.execution(conversationId);\n });\n }\n\n private executionRejection(row: ExecutionRow, now: number): CloudDoErrorCode | undefined {\n if (row.fatalCode) return row.fatalCode;\n if (row.aborted) return 'CLOUD_EXECUTION_ABORTED';\n if (now >= row.deadlineAt) return 'CLOUD_EXECUTION_TIMEOUT';\n return undefined;\n }\n\n countModel(conversationId: number, maxSteps = 8, now = Date.now(),\n budget?: { inputBytes: number; inputTokens: number; outputTokens: number }): ExecutionRow {\n const outcome = this.storage.transactionSync(() => {\n const row = this.execution(conversationId);\n if (!row) return { code: 'CLOUD_EXECUTION_INTERRUPTED' as const };\n const code = this.executionRejection(row, now) ?? (row.steps >= maxSteps ? 'CLOUD_STEP_LIMIT' : undefined);\n if (code) { this.failExecution(conversationId, code); return { code }; }\n if (budget && (row.inputTokens + budget.inputBytes + REQUEST_FRAMING_BYTES > budget.inputTokens\n || row.outputTokens + PLATFORM_MAX_OUTPUT_TOKENS > budget.outputTokens)) {\n this.failExecution(conversationId, 'CLOUD_BUDGET_EXCEEDED');\n return { code: 'CLOUD_BUDGET_EXCEEDED' as const };\n }\n this.storage.sql.exec('UPDATE cloud_executions SET steps=steps+1 WHERE conversationId=?', conversationId);\n return { row: this.execution(conversationId)! };\n });\n // Throw outside the transaction so the fatal disposition remains durable.\n if (outcome.code) throw new CloudDoError(outcome.code);\n return outcome.row!;\n }\n\n addModelUsage(conversationId: number, input: number, output: number): void {\n this.storage.sql.exec(`UPDATE cloud_executions SET inputTokens=MIN(inputTokens+?,9007199254740991),\n outputTokens=MIN(outputTokens+?,9007199254740991) WHERE conversationId=?`, input, output, conversationId);\n }\n\n /** This mark records durable dispatch intent. It does not prove network receipt. */\n markModelSent(conversationId: number): void {\n const update = this.storage.sql.exec(`UPDATE cloud_executions SET sentRequests=sentRequests+1\n WHERE conversationId=? AND sentRequests < steps`, conversationId);\n if (update.rowsWritten === 0) throw new CloudDoError('CLOUD_MODEL_REQUEST_FAILED');\n }\n\n countTool(conversationId: number, taskId: string, maxTools = 12, now = Date.now()): ExecutionRow {\n const outcome = this.storage.transactionSync(() => {\n const row = this.execution(conversationId);\n if (!row) return { code: 'CLOUD_EXECUTION_INTERRUPTED' as const };\n const stopped = this.executionRejection(row, now);\n if (stopped) { this.failExecution(conversationId, stopped); return { code: stopped }; }\n const counted = this.storage.sql.exec('SELECT taskId FROM cloud_counted_tools WHERE conversationId=? AND taskId=?', conversationId, taskId).toArray()[0];\n if (counted) return { row };\n if (row.tools >= maxTools) {\n this.failExecution(conversationId, 'CLOUD_TOOL_LIMIT');\n return { code: 'CLOUD_TOOL_LIMIT' as const };\n }\n this.storage.sql.exec('INSERT INTO cloud_counted_tools(conversationId,taskId) VALUES (?,?)', conversationId, taskId);\n this.storage.sql.exec('UPDATE cloud_executions SET tools=tools+1 WHERE conversationId=?', conversationId);\n return { row: this.execution(conversationId)! };\n });\n if (outcome.code) throw new CloudDoError(outcome.code);\n return outcome.row!;\n }\n}\n","import { CloudDoError } from './errors';\nimport type { SessionIdentity } from './identity';\nimport type { CloudDispatchContext } from './tools';\n\nexport interface CloudLimits {\n readonly modelSteps: number;\n readonly toolCalls: number;\n readonly inlineFetches: number;\n readonly callTimeoutMs: number;\n readonly turnTimeoutMs: number;\n readonly resultBytes: number;\n}\n\nexport const CLOUD_LIMITS: Readonly<CloudLimits> = Object.freeze({\n modelSteps: 8, toolCalls: 12, inlineFetches: 4,\n callTimeoutMs: 60_000, turnTimeoutMs: 240_000, resultBytes: 48_000,\n});\n\nexport const CLOUD_BUDGET = Object.freeze({ credits: 100, inputTokens: 128_000, outputTokens: 32_768 });\n\nexport interface CloudSessionConfig extends Omit<CloudDispatchContext, 'call' | 'lookup'> {\n readonly limits: CloudLimits;\n}\n\nfunction record(value: unknown, keys: readonly string[]): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)\n || (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n const result: Record<string, unknown> = {};\n for (const key of Reflect.ownKeys(value)) {\n const field = Object.getOwnPropertyDescriptor(value, key);\n if (typeof key !== 'string' || !keys.includes(key) || !field || !('value' in field) || !field.enumerable) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n result[key] = field.value;\n }\n return result;\n}\n\nfunction text(value: unknown, max = 256): string {\n if (typeof value !== 'string' || !value.trim() || value.length > max || /\\p{Cc}/u.test(value)) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n return value;\n}\n\n/** The consuming platform authorizes this data. It supplies the dispatcher in code. */\nexport function admitSessionConfig(input: unknown): CloudSessionConfig {\n const body = record(input, ['identity', 'principal', 'scopes', 'dispatcherId', 'limits']);\n const ids = record(body.identity, ['tenantId', 'workspaceId', 'agentId', 'sessionId']);\n const identity: SessionIdentity = {\n tenantId: text(ids.tenantId), workspaceId: text(ids.workspaceId),\n agentId: text(ids.agentId), sessionId: text(ids.sessionId),\n };\n const rawPrincipal = record(body.principal, ['accountId', 'workspaceId', 'channel']);\n const principal = { accountId: text(rawPrincipal.accountId), workspaceId: text(rawPrincipal.workspaceId), channel: text(rawPrincipal.channel) };\n if (principal.workspaceId !== identity.workspaceId || !['web', 'api', 'mcp'].includes(principal.channel)) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n if (!Array.isArray(body.scopes) || body.scopes.length > 64 || Reflect.ownKeys(body.scopes).length !== body.scopes.length + 1) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n const scopes: string[] = [];\n for (let i = 0; i < body.scopes.length; i++) {\n const field = Object.getOwnPropertyDescriptor(body.scopes, String(i));\n if (!field || !('value' in field) || !field.enumerable) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n scopes.push(text(field.value, 128));\n }\n if (new Set(scopes).size !== scopes.length) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const limits = { ...CLOUD_LIMITS };\n if (Object.hasOwn(body, 'limits')) {\n const overrides = record(body.limits, Object.keys(CLOUD_LIMITS));\n for (const key of Object.keys(overrides) as (keyof CloudLimits)[]) {\n const value = overrides[key];\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value <= 0 || value > CLOUD_LIMITS[key]) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n limits[key] = value;\n }\n }\n return { identity, principal, scopes, dispatcherId: text(body.dispatcherId), limits };\n}\n","import { SQLITE_MIGRATIONS, SqliteStorage, type SqliteDatabase, type SqliteExecutor, type SqliteValue } from '@earendil-works/pi-durable/storage/sqlite';\nimport type { Storage } from '@earendil-works/pi-durable';\n\n/** Construction returns pi's native Storage interface. */\ntype DurableStorageFactory<Location> = (location: Location) => Promise<Storage>;\n\n// pi owns schema/migrations. Discover its identifiers rather than maintaining a second schema.\nconst names = new Set(['durable_schema']);\nfor (const migration of SQLITE_MIGRATIONS) for (const sql of migration.statements) {\n for (const match of sql.matchAll(/\\bCREATE\\s+(?:UNIQUE\\s+)?(?:TABLE|INDEX)\\s+(?:IF\\s+NOT\\s+EXISTS\\s+)?([A-Za-z_][A-Za-z0-9_]*)/gi)) names.add(match[1]!);\n}\nconst identifiers = new RegExp(`\\\\b(${[...names].join('|')})\\\\b`, 'g');\nfunction prefixed(sql: string): string {\n return sql.split(/('(?:[^']|'')*')/).map((part, i) => i % 2 ? part : part.replace(identifiers, name => `pi_${name}`)).join('');\n}\nfunction binding(value: SqliteValue): SqlStorageValue {\n if (typeof value === 'bigint') {\n if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) throw new RangeError('SQLite integer outside safe range');\n return Number(value);\n }\n if (value instanceof Uint8Array) return new Uint8Array(value).buffer;\n return value;\n}\nfunction row<T extends object>(raw: Record<string, SqlStorageValue>): T {\n const result: Record<string, unknown> = { ...raw };\n for (const [key, value] of Object.entries(result)) if (value instanceof ArrayBuffer) result[key] = new Uint8Array(value);\n return result as T;\n}\n\n/** One adapter per DO database: unrelated reads, writes, transactions and close share this queue. */\nexport class DurableObjectSqliteDatabase implements SqliteDatabase {\n private tail: Promise<unknown> = Promise.resolve();\n private closed = false;\n constructor(private readonly storage: DurableObjectStorage) {}\n\n private queued<T>(operation: () => T | Promise<T>, allowClosed = false): Promise<T> {\n const result = this.tail.then(() => {\n if (this.closed && !allowClosed) throw new Error('SQLite database is closed');\n return operation();\n });\n this.tail = result.then(() => {}, () => {});\n return result;\n }\n\n private executor(active: () => boolean): SqliteExecutor {\n const query = (sql: string, params: SqliteValue[]) => {\n if (!active()) throw new Error('SQLite transaction handle is no longer active');\n return this.storage.sql.exec(prefixed(sql), ...params.map(binding));\n };\n return {\n exec: async sql => { query(sql, []).toArray(); },\n run: async (sql, ...params) => { query(sql, params).toArray(); },\n get: async <T extends object>(sql: string, ...params: SqliteValue[]) => {\n const rows = query(sql, params).toArray();\n return rows[0] === undefined ? undefined : row<T>(rows[0]);\n },\n all: async <T extends object>(sql: string, ...params: SqliteValue[]) => query(sql, params).toArray().map(raw => row<T>(raw)),\n };\n }\n\n exec(sql: string): Promise<void> { return this.queued(() => this.executor(() => true).exec(sql)); }\n run(sql: string, ...params: SqliteValue[]): Promise<void> { return this.queued(() => this.executor(() => true).run(sql, ...params)); }\n get<T extends object>(sql: string, ...params: SqliteValue[]): Promise<T | undefined> { return this.queued(() => this.executor(() => true).get<T>(sql, ...params)); }\n all<T extends object>(sql: string, ...params: SqliteValue[]): Promise<T[]> { return this.queued(() => this.executor(() => true).all<T>(sql, ...params)); }\n\n transaction<T>(callback: (transaction: SqliteExecutor) => Promise<T>): Promise<T> {\n return this.queued(() => this.storage.transaction(async () => {\n let active = true;\n try { return await callback(this.executor(() => active)); }\n finally { active = false; }\n }));\n }\n\n close(): Promise<void> {\n // The DO owns the physical connection; closing only invalidates this adapter.\n return this.queued(() => {\n if (this.closed) return;\n this.closed = true;\n }, true); // Only idempotent close may pass the closed-operation gate.\n }\n}\n\nexport const openDurableObjectStorage: DurableStorageFactory<DurableObjectStorage> = storage =>\n SqliteStorage.open(new DurableObjectSqliteDatabase(storage));\n","import { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\nimport type { Context } from '@earendil-works/chord';\nimport type { JsonObject } from '@earendil-works/pi-ai';\nimport { Harness, ToolTask, createRegistry, defineExtension, hook, type AgentChange, type ConversationId, type ToolExecutionApi, type ToolExecutionResult, type Storage, type Cursor } from '@earendil-works/pi-durable';\nimport { validateToolArguments } from '@earendil-works/pi-ai/utils/validation';\nimport { CloudDoError, safeCloudError, type CloudDoErrorCode } from './errors';\nimport { admitCloudPayload, prepareCloudGuard, type CloudOperationGuard } from './input-guard';\nimport { CloudState, CLOUD_CONTEXT_BYTES, runInputSeqs, type RunRow } from './cloud-state';\nimport { InvocationLedger, type ExecutionRow, type InvocationRow, type InvocationTerminalState } from './invocation-ledger';\nimport { createPlatformModels, type CloudModelAccount } from './platform-provider';\nimport { PLATFORM_PROFILES, platformCredentialReader, type PlatformProfileId } from './platform-credentials';\nimport { CLOUD_BUDGET, CLOUD_LIMITS, admitSessionConfig, type CloudSessionConfig } from './session-config';\nimport { openDurableObjectStorage } from './storage';\nimport { admitCloudDispatcher, dispatcherDigest, CLOUD_DOMAIN_ERROR_CODES, argsDigest, canonicalArgs, invocationId, replayForTool, type CloudToolDispatcher } from './tools';\n\n/**\n * `restartLimit: Infinity` keeps the Pi 1.3 behavior: a task that an eviction,\n * crash or reset cut off is run again on the next open, never parked.\n */\nexport const CLOUD_HARNESS_SETTINGS = {\n compaction: { enabled: false }, retry: { enabled: false, maxRetries: 0 }, stream: { maxRetries: 0 }, restartLimit: Infinity,\n} as const;\n\nclass StaleInvocationAttempt extends CloudDoError {\n constructor() { super('CLOUD_EXECUTION_INTERRUPTED'); }\n}\n\nexport interface ExecutionLease {\n conversationId?: number;\n trigger?: 'submit' | 'wake';\n readonly profile: PlatformProfileId;\n readonly deadlineAt: number;\n readonly controller: AbortController;\n connected: boolean;\n timer?: ReturnType<typeof setTimeout>;\n guard?: CloudOperationGuard;\n liveOwner: boolean;\n settled: boolean;\n}\n\nexport interface CloudRenewRequest {\n nativeRunId: number;\n requestId: string | null;\n kind: 'model' | 'tool';\n toolName?: string;\n recovery: boolean;\n}\nexport type CloudRenewResult = { ok: true } | { ok: false; code: CloudDoErrorCode };\nexport interface CloudRunSettlement {\n nativeRunId: number;\n requestId: string | null;\n trigger: RunRow['trigger'];\n state: 'completed' | 'failed' | 'interrupted';\n errorCode: CloudDoErrorCode | null;\n reservation: RunRow['reservation'];\n admissionDigest: string | null;\n admittedSeqs: readonly number[];\n claimedSeqs: readonly number[];\n usage: Readonly<{ steps: number; sentRequests: number; inputTokens: number; outputTokens: number; credits: number }>;\n}\n\nasync function raceSignal<T>(work: Promise<T>, signal: AbortSignal, code: () => CloudDoErrorCode): Promise<T> {\n let remove = () => {};\n const cancelled = new Promise<never>((_resolve, reject) => {\n const abort = () => reject(new CloudDoError(code()));\n signal.addEventListener('abort', abort, { once: true });\n remove = () => signal.removeEventListener('abort', abort);\n if (signal.aborted) abort();\n });\n try { return await Promise.race([work, cancelled]); }\n finally { remove(); }\n}\n\n/** Bound consumer work even when it ignores the supplied signal. */\nexport function raceLease<T>(work: Promise<T>, lease: ExecutionLease): Promise<T> {\n return raceSignal(work, lease.controller.signal,\n () => Date.now() >= lease.deadlineAt ? 'CLOUD_EXECUTION_TIMEOUT' : 'CLOUD_EXECUTION_ABORTED');\n}\n\nexport interface RuntimeOptions {\n createDispatcher(id: string): CloudToolDispatcher | undefined;\n projectInvocation?(row: InvocationRow): { key: string; dataJson: string } | undefined;\n onCommit?(): void;\n onInvocationSettled?(id: string, state: InvocationTerminalState): void | Promise<void>;\n instructions?(profile: PlatformProfileId): string | undefined;\n renew?(request: CloudRenewRequest, signal: AbortSignal): CloudRenewResult | Promise<CloudRenewResult>;\n settleRun?(run: CloudRunSettlement, signal: AbortSignal): void | Promise<void>;\n}\n\nexport interface RunOutcome {\n state: 'completed' | 'failed' | 'interrupted';\n errorCode?: CloudDoErrorCode;\n text?: string;\n entryId?: number;\n requeue?: boolean;\n}\n\n/** One physical DO owns this runtime. Native pi owns all model and task scheduling. */\nexport class SessionRuntime {\n readonly ledger: InvocationLedger;\n readonly cloud: CloudState;\n #piStorage?: Storage;\n #recoveryGuard?: CloudOperationGuard;\n #repairRetrying = false;\n #repairing = false;\n #settlementFlights = new Map<number, Promise<void>>();\n #initializing = false;\n #deferredSettlements: InvocationRow[] = [];\n #opened?: Promise<Harness>;\n /** Pi 1.2: the cached Harness's Session failed and closed. The next open() replaces it from Storage. */\n #sessionFailed = false;\n #recovery?: Promise<void>;\n #recovered = false;\n #config?: CloudSessionConfig;\n #dispatcher?: CloudToolDispatcher;\n #bootstrapFailure?: CloudDoErrorCode;\n #stale = new Set<number>();\n #active?: ExecutionLease;\n #inline = 0;\n #invocations = new Map<string, Promise<Record<string, unknown>>>();\n #fatalDispositions = new Map<number, CloudDoErrorCode>();\n\n constructor(private readonly state: DurableObjectState, private readonly env: Readonly<Record<string, unknown>>,\n private readonly options: RuntimeOptions) {\n this.cloud = new CloudState(state.storage);\n this.ledger = new InvocationLedger(state.storage, {\n started: (row, guard) => {\n this.cloud.appendEvent({ eventKey: `tool:${row.invocationId}:started`, type: 'tool.started', conversationId: row.conversationId,\n ref: row.invocationId, data: { invocationId: row.invocationId, toolName: row.toolName, state: row.state } }, guard ?? this.#guard());\n },\n startedCommitted: () => this.#doorbell(),\n terminal: (row, recovery) => {\n const guard = this.#guard();\n const event = this.cloud.appendEvent({ eventKey: `tool:${row.invocationId}:settled`, type: 'tool.settled', conversationId: row.conversationId,\n ref: row.invocationId, data: { invocationId: row.invocationId, state: row.state, errorCode: row.errorCode, late: recovery } }, guard);\n row.settledAt = event.createdAt;\n row.settledEventSeq = event.seq;\n this.cloud.projectInvocation(row, this.options.projectInvocation, guard);\n return event;\n },\n committed: row => {\n if (this.#initializing) this.#deferredSettlements.push(row);\n else this.#notifyCommitted(row);\n },\n });\n }\n\n get recovering(): boolean { return !this.#recovered; }\n get activeLease(): ExecutionLease | undefined { return this.#active; }\n get hasLiveOwner(): boolean { return this.#active?.liveOwner === true; }\n get busy(): boolean { return this.#active !== undefined || this.#repairing; }\n get repairRetrying(): boolean { return this.#repairRetrying; }\n #schedulingBusy(): boolean { return this.hasLiveOwner || this.#repairing; }\n #clearSettlementRetry(): void {\n if (!this.#repairing && (!this.#active || this.hasLiveOwner)) this.#repairRetrying = false;\n }\n prepareGuard(profile?: PlatformProfileId): Promise<CloudOperationGuard> { return prepareCloudGuard(this.env, profile); }\n #guard(): CloudOperationGuard {\n const guard = this.#active?.guard ?? this.#recoveryGuard;\n if (!guard) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n return guard;\n }\n #doorbell(): void { try { this.options.onCommit?.(); } catch { /* Doorbells are advisory. */ } }\n #notifyCommitted(row: InvocationRow): void {\n this.#doorbell();\n // A post-commit hook never enters an execution's catch path.\n void Promise.resolve().then(() => this.options.onInvocationSettled?.(row.invocationId, row.state as InvocationTerminalState)).catch(() => undefined);\n }\n #flushSettlements(): void {\n this.#initializing = false;\n for (const row of this.#deferredSettlements.splice(0)) this.#notifyCommitted(row);\n }\n\n /** Binding/RPC callers authorize the session before calling this immutable configuration operation. */\n async configure(input: unknown): Promise<void> {\n const config = admitSessionConfig(input);\n await admitCloudPayload(this.env, config);\n const candidate = this.options.createDispatcher(config.dispatcherId);\n if (!candidate) throw new CloudDoError('CLOUD_TOOL_NOT_AVAILABLE');\n const dispatcher = admitCloudDispatcher(candidate);\n await this.#guardToolMetadata(dispatcher);\n const policyDigest = await dispatcherDigest(dispatcher);\n this.#sessionSchema();\n this.state.storage.transactionSync(() => {\n const existing = this.#storedConfig();\n if (existing) {\n if (JSON.stringify(existing) !== JSON.stringify(config) || this.#storedDispatcherDigest() !== policyDigest) throw new CloudDoError('CLOUD_SESSION_CONFLICT');\n return;\n }\n if (this.#opened) throw new CloudDoError('CLOUD_SESSION_CONFLICT');\n this.state.storage.sql.exec('UPDATE cloud_session SET configJson=?,dispatcherDigest=? WHERE id=1', JSON.stringify(config), policyDigest);\n });\n }\n\n open(selected?: PlatformProfileId): Promise<Harness> {\n if (!this.#opened || this.#sessionFailed) {\n // Replace a failed Session in this synchronous step: no caller sees a half-reset runtime.\n this.#sessionFailed = false;\n let openGuard: CloudOperationGuard | undefined;\n const disposeOpenGuard = () => {\n openGuard?.dispose();\n if (this.#recoveryGuard === openGuard) this.#recoveryGuard = undefined;\n };\n // Credential reads must finish before entering the bounded initialization gate.\n const initialized = prepareCloudGuard(this.env, selected).then(guard => {\n openGuard = guard;\n this.#recoveryGuard = guard;\n this.#initializing = true;\n return this.state.blockConcurrencyWhile(async () => {\n this.ledger.ensureSchema();\n this.cloud.ensureSchema();\n this.#sessionSchema();\n this.#dispatcher = undefined;\n this.#bootstrapFailure = undefined;\n this.#config = this.#storedConfig();\n if (!this.#config && this.ledger.pending().length) this.#bootstrapFailure = 'CLOUD_TOOL_NOT_AVAILABLE';\n if (this.#config) {\n this.#config = admitSessionConfig(this.#config);\n const candidate = this.options.createDispatcher(this.#config.dispatcherId);\n if (!candidate) this.#bootstrapFailure = 'CLOUD_TOOL_NOT_AVAILABLE';\n else {\n const dispatcher = admitCloudDispatcher(candidate);\n const metadata = dispatcher.tools.map(({ name, description, parameters }) => ({ name, description, parameters }));\n guard.guardPayload(JSON.stringify(metadata));\n if (await dispatcherDigest(dispatcher) !== this.#storedDispatcherDigest()) this.#bootstrapFailure = 'CLOUD_SESSION_CONFLICT';\n else this.#dispatcher = dispatcher;\n }\n }\n const registry = createRegistry();\n const tools = this.#dispatcher?.tools.map(tool => ({ name: tool.name, description: tool.description,\n parameters: tool.parameters, replay: 'unsafe' as const,\n outputLimits: { maxBytes: CLOUD_LIMITS.resultBytes, maxLines: CLOUD_LIMITS.resultBytes },\n execute: (args: Record<string, unknown>, api: ToolExecutionApi, context: Context) => this.#execute(tool.name, args, api, context),\n })) ?? [];\n registry.install(defineExtension({ name: 'cloud-session-tools', tools,\n hooks: [hook(ToolTask, { beforeTool: async (_call, api) => {\n if (this.#stale.has(api.conversationId)) return { block: 'CLOUD_EXECUTION_INTERRUPTED' };\n try { this.ledger.countTool(api.conversationId, String(api.taskId), this.#limits().toolCalls); }\n catch (error) {\n const code = safeCloudError(error).code;\n this.#recordFatal(api.conversationId, code);\n return { block: code };\n }\n } })],\n }));\n this.#piStorage = await openDurableObjectStorage(this.state.storage);\n const harness = await Harness.open(this.#piStorage, {\n models: createPlatformModels(this.env, platformCredentialReader(this.env), {\n beforeRequest: info => this.#beforeRequest(info),\n admitToolCall: async (name, id, args) => {\n try { await admitCloudPayload(this.env, { name, id, args }, this.#active?.profile); }\n catch (error) {\n if (error instanceof CloudDoError && error.code === 'CLOUD_USER_CREDENTIAL_REJECTED') {\n throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n }\n throw error;\n }\n const tool = this.#dispatcher?.tools.find(tool => tool.name === name);\n if (!tool) throw new CloudDoError('CLOUD_TOOL_NOT_AVAILABLE');\n try { validateToolArguments(tool, { type: 'toolCall', id, name, arguments: args as JsonObject }); }\n catch { throw new CloudDoError('CLOUD_TOOL_ARGUMENT_INVALID'); }\n },\n requestSignal: signal => this.#requestSignal(signal),\n }), registry, settings: CLOUD_HARNESS_SETTINGS,\n }, BACKGROUND_CONTEXT);\n const inspection = await harness.inspect(BACKGROUND_CONTEXT);\n this.#stale = new Set([...inspection.tasks.map(task => task.record.conversationId),\n ...inspection.submissions.map(submission => submission.conversationId)]);\n this.state.storage.sql.exec('UPDATE cloud_session SET staleJson=? WHERE id=1', JSON.stringify([...this.#stale]));\n this.cloud.captureEligibility(this.#stale);\n const replay = this.ledger.claimRecovery();\n await this.cloud.rearmAlarm({ busy: false, repairRetrying: false });\n return { harness, replay };\n\n });\n });\n // This continuation runs after the initialization input gate was released.\n const opened: Promise<Harness> = initialized.then(({ harness, replay }) => {\n this.#flushSettlements();\n // A failed Session closes itself, Storage included, before `closed` settles. Until a caller reopens,\n // every call on it rejects with SessionFailed and no model request is admitted.\n void harness.closed.then(end => {\n if (end.reason !== 'failed' || this.#opened !== opened) return;\n this.#recovered = false;\n this.#sessionFailed = true;\n });\n this.#recovery = this.#recover(harness, replay).finally(disposeOpenGuard);\n void this.#recovery.catch(() => undefined);\n return harness;\n }, error => {\n this.#flushSettlements();\n disposeOpenGuard();\n throw error;\n });\n this.#opened = opened;\n }\n return this.#opened;\n }\n\n async ready(selected?: PlatformProfileId): Promise<Harness> {\n const harness = await this.open(selected);\n await this.#recovery;\n return harness;\n }\n\n agentChange(profile: PlatformProfileId, guard: CloudOperationGuard): AgentChange {\n const model = { provider: profile, modelId: PLATFORM_PROFILES[profile].model };\n try {\n const text = this.options.instructions?.(profile);\n if (text === undefined) return { model };\n if (typeof text !== 'string' || !text.trim() || new TextEncoder().encode(text).length > CLOUD_CONTEXT_BYTES) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n guard.guardText(text);\n return { model, instructions: text };\n } catch { throw new CloudDoError('CLOUD_REQUEST_INVALID'); }\n }\n\n reserve(profile: PlatformProfileId, guard?: CloudOperationGuard): ExecutionLease {\n if (!this.#recovered) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n if (this.#bootstrapFailure) throw new CloudDoError(this.#bootstrapFailure);\n if (this.#active) throw new CloudDoError('CLOUD_TOOL_BUSY');\n if (this.#repairing) throw new CloudDoError('CLOUD_TOOL_BUSY');\n const lease: ExecutionLease = { profile, deadlineAt: Date.now() + this.#limits().turnTimeoutMs,\n controller: new AbortController(), connected: true, liveOwner: true, settled: false, guard };\n this.#active = lease;\n this.cloud.setSchedulingState({ busy: true, repairRetrying: this.#repairRetrying });\n return lease;\n }\n\n attach(lease: ExecutionLease, conversationId: number, trigger: 'submit' | 'wake' = 'submit', guard = lease.guard): void {\n if (this.#active !== lease || lease.conversationId !== undefined) throw new CloudDoError('CLOUD_TOOL_BUSY');\n lease.conversationId = conversationId;\n lease.trigger = trigger;\n lease.guard = guard;\n if (!lease.guard) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n this.cloud.startRun(conversationId, trigger, lease.deadlineAt, lease.guard);\n if (trigger === 'submit') this.cloud.markRunning(conversationId, lease.guard);\n lease.timer = setTimeout(() => {\n if (this.#active !== lease || lease.settled) return;\n this.#recordFatal(conversationId, 'CLOUD_EXECUTION_TIMEOUT');\n lease.controller.abort();\n }, Math.max(0, lease.deadlineAt - Date.now()));\n this.#doorbell();\n }\n\n cancel(lease: ExecutionLease, code: CloudDoErrorCode = 'CLOUD_EXECUTION_ABORTED'): void {\n if (this.#active !== lease || lease.settled) return;\n if (lease.conversationId !== undefined) {\n const row = this.cloud.run(lease.conversationId);\n if (row && row.state !== 'starting' && row.state !== 'running') return;\n }\n lease.connected = false;\n if (lease.conversationId !== undefined) {\n this.#recordFatal(lease.conversationId, code);\n try { this.ledger.abortExecution(lease.conversationId, code); }\n catch { /* The in-memory disposition still closes the transport if storage fails. */ }\n }\n lease.controller.abort();\n }\n\n async release(lease: ExecutionLease, retryCount = 0): Promise<void> {\n clearTimeout(lease.timer);\n lease.liveOwner = false;\n if (this.#active !== lease) return;\n try {\n const run = lease.conversationId === undefined ? undefined : this.cloud.run(lease.conversationId);\n if (run?.state === 'running') {\n // A wake already owns an alarm generation. A submit needs its first repair alarm.\n this.#repairRetrying = lease.trigger === 'wake';\n await this.cloud.rearmAlarm({ busy: false, repairRetrying: this.#repairRetrying });\n return;\n }\n if (run?.state === 'starting') {\n this.cloud.settleRun(run.conversationId, { state: 'interrupted', errorCode: this.fatal(run.conversationId) ?? 'CLOUD_WAKE_EMPTY' }, this.#guard());\n this.#doorbell();\n }\n // Consumer settlement owns no execution lease. A later run may start now.\n this.#active = undefined;\n try {\n await this.#deliverSettlements(lease.guard);\n this.#clearSettlementRetry();\n }\n catch (error) {\n if (lease.trigger === 'wake') {\n this.#repairRetrying = retryCount < 6;\n this.cloud.setSchedulingState({ busy: this.#schedulingBusy(), repairRetrying: this.#repairRetrying });\n throw error;\n }\n // Keep an existing retry generation. A submit without one creates its first alarm.\n }\n await this.cloud.rearmAlarm({ busy: this.#schedulingBusy(), repairRetrying: this.#repairRetrying });\n } catch (error) {\n if (this.#active === lease) {\n this.#repairRetrying = lease.trigger === 'wake';\n this.cloud.setSchedulingState({ busy: false, repairRetrying: this.#repairRetrying });\n // A failed submit has no platform retry generation to protect.\n if (!this.#repairRetrying) await this.cloud.rearmAlarm({ busy: false, repairRetrying: false });\n }\n throw error;\n } finally {\n lease.guard?.dispose();\n lease.guard = undefined;\n }\n }\n\n recordSubmission(conversationId: number, submissionId: number): void {\n this.cloud.recordSubmission(conversationId, submissionId);\n }\n markReservation(conversationId: number, reservation: 'pending' | 'held' | 'none', admission?: { digest: string; seqs: number[] }): void {\n this.cloud.markReservation(conversationId, reservation, this.#guard(), Date.now(), admission);\n this.#doorbell();\n }\n claimWake(lease: ExecutionLease, seqs: readonly number[], profile = lease.profile) {\n if (this.#active !== lease || lease.conversationId === undefined || !lease.liveOwner) throw new CloudDoError('CLOUD_TOOL_BUSY');\n const claimed = this.cloud.claim(lease.conversationId, [...seqs], profile, this.#guard());\n this.#doorbell();\n return claimed;\n }\n async settle(lease: ExecutionLease, outcome: RunOutcome): Promise<void> {\n if (this.#active !== lease || lease.conversationId === undefined) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n const delivery = await this.#deliveryEvidence(await this.#opened!, lease.conversationId, outcome.state === 'completed');\n this.state.storage.transactionSync(() => {\n const fatal = this.fatal(lease.conversationId!)\n ?? (lease.controller.signal.aborted ? 'CLOUD_EXECUTION_ABORTED' : Date.now() >= lease.deadlineAt ? 'CLOUD_EXECUTION_TIMEOUT' : undefined);\n const finalOutcome = outcome.state === 'completed' && fatal ? { state: 'failed' as const, errorCode: fatal } : outcome;\n const stored = this.cloud.settleRun(lease.conversationId!, finalOutcome, this.#guard());\n for (const link of delivery) this.cloud.setDelivery(link.invocationId,\n stored?.state === 'completed' ? link.state : 'undelivered',\n stored?.state === 'completed' ? link.taskId : null,\n stored?.state === 'completed' ? link.entryId : null, this.#guard());\n });\n lease.settled = true;\n clearTimeout(lease.timer);\n this.#doorbell();\n }\n cancelActive(code: CloudDoErrorCode = 'CLOUD_EXECUTION_ABORTED'): boolean {\n if (!this.#active || this.#active.settled) return false;\n this.cancel(this.#active, code);\n return true;\n }\n /** Only an owner that exited may be repaired. A live provider run is never adjudicated here. */\n async repairPendingRuns(retryCount = 0): Promise<boolean> {\n if (this.hasLiveOwner || this.#repairing) return false;\n const runs = this.cloud.unsettledRuns();\n if (!runs.length) {\n if (this.#repairRetrying && !this.cloud.unackedRuns().length) {\n this.#repairRetrying = false;\n await this.cloud.rearmAlarm({ busy: this.busy, repairRetrying: false });\n }\n return false;\n }\n this.#repairing = true;\n this.#repairRetrying = true;\n this.cloud.setSchedulingState({ busy: true, repairRetrying: true });\n let guard: CloudOperationGuard | undefined;\n const previousGuard = this.#active?.guard;\n try {\n guard = await this.prepareGuard();\n this.#recoveryGuard = guard;\n if (this.#active) this.#active.guard = guard;\n const harness = await this.#opened!;\n const inspection = await harness.inspect(BACKGROUND_CONTEXT);\n const live = new Set<number>([...inspection.tasks.map(task => task.record.conversationId), ...inspection.submissions.map(submission => submission.conversationId)]);\n this.cloud.captureEligibility(live);\n for (const run of runs) {\n const id = run.conversationId;\n if (!live.has(id as ConversationId)) continue;\n this.#stale.add(id);\n this.#recordFatal(id, 'CLOUD_EXECUTION_INTERRUPTED');\n const conversation = await harness.conversation(id as ConversationId, BACKGROUND_CONTEXT);\n if (conversation) { await conversation.abort(BACKGROUND_CONTEXT, { background: true }); await conversation.waitForIdle(BACKGROUND_CONTEXT); }\n }\n await this.#adjudicateRuns(harness);\n clearTimeout(this.#active?.timer);\n this.#active = undefined;\n this.#repairRetrying = this.cloud.unackedRuns().length > 0;\n await this.cloud.rearmAlarm({ busy: false, repairRetrying: this.#repairRetrying });\n return true;\n } catch (error) {\n // The platform's count belongs to this alarm generation. No SDK retry counter or timer.\n this.#repairRetrying = retryCount < 6;\n this.cloud.setSchedulingState({ busy: false, repairRetrying: this.#repairRetrying });\n throw error;\n } finally {\n this.#repairing = false;\n guard?.dispose();\n previousGuard?.dispose();\n if (this.#recoveryGuard === guard) this.#recoveryGuard = undefined;\n if (this.#active) this.#active.guard = undefined;\n }\n }\n\n async deliverSettlementsForAlarm(retryCount = 0, providedGuard?: CloudOperationGuard): Promise<void> {\n let ownGuard: CloudOperationGuard | undefined;\n try {\n if (this.cloud.unackedRuns().length) {\n const guard = providedGuard ?? (ownGuard = await this.prepareGuard());\n await this.#deliverSettlements(guard);\n }\n this.#clearSettlementRetry();\n await this.cloud.rearmAlarm({ busy: this.#schedulingBusy(), repairRetrying: this.#repairRetrying });\n } catch (error) {\n this.#repairRetrying = retryCount < 6;\n this.cloud.setSchedulingState({ busy: this.#schedulingBusy(), repairRetrying: this.#repairRetrying });\n throw safeCloudError(error);\n } finally { ownGuard?.dispose(); }\n }\n\n async #deliverSettlements(guard?: CloudOperationGuard): Promise<void> {\n const rows = this.cloud.unackedRuns();\n if (!rows.length) return;\n if (!guard) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n const jobs = rows.map(row => {\n const previous = this.#settlementFlights.get(row.conversationId);\n if (previous) return previous;\n const job = this.#deliverSettlement(row, guard).finally(() => this.#settlementFlights.delete(row.conversationId));\n this.#settlementFlights.set(row.conversationId, job);\n return job;\n });\n // Every run is tried. All hook deadlines run together, so a batch does not wait N times 60 s.\n const results = await Promise.allSettled(jobs);\n const failures = results.filter((result): result is PromiseRejectedResult => result.status === 'rejected');\n if (failures.length) throw safeCloudError(failures[0]!.reason);\n }\n\n async #deliverSettlement(row: RunRow, guard: CloudOperationGuard): Promise<void> {\n if (this.cloud.readRun(row.conversationId)?.settlementAck !== 0) return;\n const input: CloudRunSettlement = Object.freeze({\n nativeRunId: row.conversationId, requestId: row.requestId, trigger: row.trigger,\n state: row.state as CloudRunSettlement['state'], errorCode: row.errorCode,\n reservation: row.reservation, admissionDigest: row.admissionDigest,\n admittedSeqs: Object.freeze(JSON.parse(row.admittedSeqs ?? '[]') as number[]),\n claimedSeqs: Object.freeze(this.cloud.claimedSeqs(row.conversationId)),\n usage: Object.freeze({ steps: row.steps, sentRequests: row.sentRequests,\n inputTokens: row.inputTokens, outputTokens: row.outputTokens, credits: row.credits }),\n });\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), CLOUD_LIMITS.callTimeoutMs);\n try {\n await raceSignal(Promise.resolve().then(() => this.options.settleRun?.(input, controller.signal)),\n controller.signal, () => 'CLOUD_EXECUTION_TIMEOUT');\n if (this.cloud.ackSettlement(row.conversationId, guard)) this.#doorbell();\n } catch (error) { throw safeCloudError(error); }\n finally { clearTimeout(timer); controller.abort(); }\n }\n\n async #adjudicateRuns(harness: Harness): Promise<void> {\n for (const run of this.cloud.unsettledRuns()) {\n const eligibility = JSON.parse(run.eligibilityJson ?? JSON.stringify({ steps: run.steps, aborted: run.aborted, fatalCode: run.fatalCode })) as Pick<ExecutionRow, 'steps' | 'aborted' | 'fatalCode'> & { wasStale?: boolean };\n const aborted = eligibility.aborted || run.aborted;\n let outcome: RunOutcome;\n const submission = run.requestId ? await this.#piStorage!.submissionByRequest(run.conversationId as ConversationId, run.requestId, BACKGROUND_CONTEXT) : undefined;\n if (run.state === 'starting') outcome = { state: 'interrupted', errorCode: 'CLOUD_WAKE_EMPTY' };\n else if (!aborted && !eligibility.fatalCode && submission?.status === 'done') {\n const conversation = await harness.conversation(run.conversationId as ConversationId, BACKGROUND_CONTEXT);\n const context = conversation ? await conversation.context(BACKGROUND_CONTEXT) : undefined;\n const final = context ? [...context.entries].reverse().find(entry => entry.kind === 'pi.assistant' && entry.model?.some(message => message.role === 'assistant' && message.stopReason !== 'toolUse')) : undefined;\n const message = final?.model?.find(message => message.role === 'assistant' && message.stopReason !== 'toolUse');\n const text = message?.role === 'assistant' ? message.content.filter(part => part.type === 'text').map(part => part.text).join('') : '';\n outcome = { state: 'completed', text, entryId: final?.id };\n } else if (!aborted && !eligibility.fatalCode && submission?.status === 'unanswered' && submission.reason !== 'aborted') {\n outcome = { state: 'failed', errorCode: safeCloudError(new Error(typeof submission.detail === 'string' ? submission.detail : '')).code };\n } else {\n // Pi abort writes an unanswered/aborted receipt. It is interrupted work, not a model failure.\n // Eligibility alone decides whether that unpaid wake can return to the inbox.\n outcome = { state: 'interrupted', errorCode: eligibility.fatalCode ?? (aborted ? 'CLOUD_EXECUTION_ABORTED' : 'CLOUD_EXECUTION_INTERRUPTED'),\n requeue: run.trigger === 'wake' && eligibility.steps === 0 && !aborted && !eligibility.fatalCode };\n }\n const delivery = await this.#deliveryEvidence(harness, run.conversationId, outcome.state === 'completed');\n this.state.storage.transactionSync(() => {\n // A binding cancellation can arrive during the asynchronous pi evidence reads.\n const current = this.cloud.run(run.conversationId);\n const finalOutcome = current?.aborted && !eligibility.aborted\n ? { state: 'interrupted' as const, errorCode: 'CLOUD_EXECUTION_ABORTED' as const }\n : outcome;\n const stored = this.cloud.settleRun(run.conversationId, finalOutcome, this.#guard());\n for (const link of delivery) this.cloud.setDelivery(link.invocationId,\n stored?.state === 'completed' ? link.state : 'undelivered',\n stored?.state === 'completed' ? link.taskId : null,\n stored?.state === 'completed' ? link.entryId : null, this.#guard());\n });\n this.#doorbell();\n }\n }\n\n async #deliveryEvidence(harness: Harness, conversationId: number, completed: boolean) {\n const rows = this.ledger.forConversation(conversationId);\n const links = rows.map(row => ({ invocationId: row.invocationId, state: 'undelivered' as 'delivered' | 'undelivered', taskId: null as number | null, entryId: null as number | null }));\n if (!completed || !rows.length) return links;\n const conversation = await harness.conversation(conversationId as ConversationId, BACKGROUND_CONTEXT);\n if (!conversation) return links;\n const context = await conversation.context(BACKGROUND_CONTEXT);\n let cursor: Cursor | undefined;\n do {\n const page = await this.#piStorage!.scanTasks({ conversationId: conversationId as ConversationId, kind: ToolTask.definition.name }, 100, cursor, BACKGROUND_CONTEXT);\n for (const task of page.items) {\n if (task.state.status !== 'terminal' || task.state.outcome.status !== 'completed') continue;\n const input = task.input as unknown as { assistant?: number; callId?: string };\n const rowIndex = rows.findIndex(row => row.assistantEntryId === input.assistant && row.toolCallId === input.callId);\n if (rowIndex < 0) continue;\n const result = task.state.outcome.result as unknown as { entryId?: number };\n const entryIndex = context.entries.findIndex(entry => entry.id === result.entryId && entry.kind === 'pi.tool-result' && entry.byTaskId === task.id);\n if (entryIndex < 0 || !context.contributions[entryIndex]?.some(message => message.role === 'toolResult')) continue;\n links[rowIndex] = { invocationId: rows[rowIndex]!.invocationId, state: 'delivered', taskId: task.id, entryId: result.entryId! };\n }\n cursor = page.next;\n } while (cursor !== undefined);\n return links;\n }\n\n fatal(conversationId: number): CloudDoErrorCode | undefined {\n const remembered = this.#fatalDispositions.get(conversationId);\n if (remembered) return remembered;\n try {\n const code = this.ledger.execution(conversationId)?.fatalCode;\n return code ? this.#toolErrorCode(new Error(code)) : undefined;\n }\n catch { return this.#recordFatal(conversationId, 'CLOUD_TOOL_FAILED'); }\n }\n readInvocation(id: string): InvocationRow | undefined { return this.ledger.read(id); }\n #limits() { return this.#config?.limits ?? CLOUD_LIMITS; }\n\n async #guardToolMetadata(dispatcher: CloudToolDispatcher): Promise<void> {\n // Pi persists tool schemas and descriptions before the first model request.\n const metadata = dispatcher.tools.map(({ name, description, parameters }) => ({ name, description, parameters }));\n await admitCloudPayload(this.env, JSON.parse(JSON.stringify(metadata)));\n }\n\n #sessionSchema(): void {\n this.state.storage.sql.exec(`CREATE TABLE IF NOT EXISTS cloud_session (\n id INTEGER PRIMARY KEY CHECK(id=1), configJson TEXT, staleJson TEXT NOT NULL DEFAULT '[]'\n ); INSERT OR IGNORE INTO cloud_session(id) VALUES(1)`);\n const columns = this.state.storage.sql.exec<{ name: string }>('PRAGMA table_info(cloud_session)').toArray();\n if (!columns.some(row => row.name === 'dispatcherDigest')) this.state.storage.sql.exec('ALTER TABLE cloud_session ADD COLUMN dispatcherDigest TEXT');\n }\n\n #storedDispatcherDigest(): string | null {\n return this.state.storage.sql.exec<{ dispatcherDigest: string | null }>('SELECT dispatcherDigest FROM cloud_session WHERE id=1').one().dispatcherDigest;\n }\n\n #storedConfig(): CloudSessionConfig | undefined {\n const row = this.state.storage.sql.exec<{ configJson: string | null }>('SELECT configJson FROM cloud_session WHERE id=1').toArray()[0];\n return row?.configJson ? JSON.parse(row.configJson) as CloudSessionConfig : undefined;\n }\n\n async #renew(request: CloudRenewRequest, signal: AbortSignal): Promise<void> {\n const result = this.options.renew ? await this.options.renew(Object.freeze(request), signal) : { ok: true };\n if (!result || typeof result !== 'object' || typeof result.ok !== 'boolean') throw new CloudDoError('CLOUD_MODEL_REQUEST_FAILED');\n if (!result.ok) throw safeCloudError(new Error((result as {code: string}).code));\n }\n\n async #beforeRequest(info: { inputBytes: number }): Promise<CloudModelAccount> {\n if (!this.#recovered || !this.#active?.liveOwner || this.#active.conversationId === undefined) {\n throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n }\n const lease = this.#active;\n const id = lease.conversationId!;\n const fatal = this.fatal(id);\n if (fatal) throw new CloudDoError(fatal);\n try {\n await raceLease(Promise.resolve().then(() => this.#renew({ nativeRunId: id,\n requestId: this.cloud.readRun(id)?.requestId ?? null, kind: 'model', recovery: false }, lease.controller.signal)), lease);\n if (this.#active !== lease || !lease.liveOwner) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n const stopped = this.fatal(id);\n if (stopped) throw new CloudDoError(stopped);\n this.ledger.countModel(id, this.#limits().modelSteps, Date.now(), {\n inputBytes: info.inputBytes, inputTokens: CLOUD_BUDGET.inputTokens, outputTokens: CLOUD_BUDGET.outputTokens,\n });\n } catch (error) { throw new CloudDoError(this.#recordFatal(id, safeCloudError(error).code)); }\n const seen = { input: 0, output: 0 };\n const record = (work: () => void): void => {\n try { work(); }\n catch { throw new CloudDoError(this.#recordFatal(id, 'CLOUD_MODEL_REQUEST_FAILED')); }\n };\n return {\n sent: () => record(() => this.ledger.markModelSent(id)),\n usage: usage => record(() => {\n const input = usage.input ?? seen.input;\n const output = usage.output ?? seen.output;\n if (!Number.isSafeInteger(input) || !Number.isSafeInteger(output) || input < seen.input || output < seen.output) {\n throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n }\n if (input !== seen.input || output !== seen.output) this.ledger.addModelUsage(id, input - seen.input, output - seen.output);\n seen.input = input; seen.output = output;\n }),\n };\n }\n\n #requestSignal(native?: AbortSignal): AbortSignal {\n const signals = [...(native ? [native] : []), ...(this.#active ? [this.#active.controller.signal] : [])];\n return AbortSignal.any(signals);\n }\n\n async #recover(harness: Harness, replay: InvocationRow[]): Promise<void> {\n for (const id of this.#stale) {\n this.#recordFatal(id, 'CLOUD_EXECUTION_INTERRUPTED');\n const conversation = await harness.conversation(id as ConversationId, BACKGROUND_CONTEXT);\n if (conversation) {\n await conversation.abort(BACKGROUND_CONTEXT, { background: true });\n await conversation.waitForIdle(BACKGROUND_CONTEXT);\n }\n }\n for (const row of replay) {\n if (!this.#config || !this.#dispatcher) {\n this.ledger.finish(row.invocationId, 'failed', undefined, 'CLOUD_EXECUTION_INTERRUPTED');\n continue;\n }\n await this.#runInvocation(row, undefined, true).catch(() => undefined);\n }\n await this.#adjudicateRuns(harness);\n // After a Session failure, an owner that already exited left its lease for repair. Its run is settled now.\n if (this.#active && !this.#active.liveOwner) {\n clearTimeout(this.#active.timer);\n this.#active = undefined;\n }\n await this.#backfillTurns(harness);\n await this.cloud.rearmAlarm({ busy: false, repairRetrying: false });\n this.#recovered = true;\n }\n\n async #backfillTurns(harness: Harness): Promise<void> {\n let before = Number.MAX_SAFE_INTEGER;\n for (;;) {\n const runs = this.cloud.pendingBackfills(before);\n if (!runs.length) return;\n for (const run of runs) {\n let seqs: number[];\n try {\n const conversation = await harness.conversation(run.conversationId as ConversationId, BACKGROUND_CONTEXT);\n const view = conversation ? await conversation.context(BACKGROUND_CONTEXT) : undefined;\n seqs = view ? runInputSeqs(view.entries) : [];\n } catch { continue; } // Keep this run pending. A later boot retries its native read.\n this.cloud.applyBackfill(run.conversationId, seqs);\n }\n before = runs[runs.length - 1]!.conversationId;\n }\n }\n\n async #execute(name: string, args: Record<string, unknown>, api: ToolExecutionApi, context: Context): Promise<ToolExecutionResult> {\n try { return await this.#executeChecked(name, args, api, context); }\n catch (error) {\n const code = this.#toolErrorCode(error);\n this.#recordFatal(api.conversationId, code);\n try {\n if (error instanceof StaleInvocationAttempt) {\n const harness = await this.#opened!;\n // abortTask marks first, then joins this invocation. Never await the self-join here.\n void harness.abortTask(api.taskId, BACKGROUND_CONTEXT).catch(() => undefined);\n await harness.getTask(api.taskId, BACKGROUND_CONTEXT);\n }\n } catch { /* The fixed receipt remains the only SDK output if cancellation storage fails. */ }\n return this.#errorResult(code);\n }\n }\n\n async #executeChecked(name: string, args: Record<string, unknown>, api: ToolExecutionApi, context: Context): Promise<ToolExecutionResult> {\n if (this.#stale.has(api.conversationId) || !this.#config || !this.#dispatcher) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n const task = await api.getTask(api.taskId, context);\n const input = task?.input;\n if (!input || typeof input !== 'object' || Array.isArray(input) || typeof input.assistant !== 'number') {\n throw new CloudDoError('CLOUD_TOOL_FAILED');\n }\n this.#guard().guardPayload(canonicalArgs({ name, id: api.callId, args }));\n const id = await invocationId(api.conversationId, input.assistant, api.callId);\n const execution = this.ledger.execution(api.conversationId);\n if (!execution) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n const begun = this.ledger.begin({ invocationId: id, sessionId: this.#config.identity.sessionId,\n conversationId: api.conversationId, assistantEntryId: input.assistant, toolCallId: api.callId,\n toolName: name, argsDigest: await argsDigest(name, args), argsJson: canonicalArgs(args), replay: replayForTool(name),\n deadlineAt: Math.min(Date.now() + this.#limits().callTimeoutMs, execution.deadlineAt),\n });\n if (begun.kind === 'pending') {\n const pending = this.#invocations.get(id);\n if (!pending) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n await pending;\n } else if (begun.kind === 'started') {\n const running = this.#runInvocation(begun.row, context.abortSignal, false);\n this.#invocations.set(id, running);\n try { await running; }\n finally { this.#invocations.delete(id); }\n }\n return this.#modelResult(this.ledger.read(id)!);\n }\n\n #modelResult(row: InvocationRow): ToolExecutionResult {\n const result = this.#result(row);\n const error = result.error as { code: string; data?: unknown } | undefined;\n if (Object.hasOwn(result, 'modelView')) return { isError: result.ok === false,\n output: [{ type: 'text', text: JSON.stringify(result.modelView) }] };\n if (result.ok === false) {\n if (this.#dispatcher?.domainErrors?.includes(error!.code)) return { isError: true,\n output: [{ type: 'text', text: JSON.stringify({ ok: false, error }) }] };\n return this.#errorResult(error!.code as CloudDoErrorCode);\n }\n return { output: [{ type: 'text', text: JSON.stringify(result) }] };\n }\n\n #errorResult(code: CloudDoErrorCode): ToolExecutionResult {\n const fixed = safeCloudError(new Error(typeof code === 'string' ? code : 'CLOUD_TOOL_FAILED')).code;\n return { isError: true, output: [{ type: 'text', text: JSON.stringify({ ok: false, error: { code: fixed } }) }] };\n }\n\n #toolErrorCode(error: unknown): CloudDoErrorCode {\n const code = safeCloudError(error).code;\n return code === 'CLOUD_MODEL_REQUEST_FAILED' ? 'CLOUD_TOOL_FAILED' : code;\n }\n\n #recordFatal(conversationId: number, code: CloudDoErrorCode): CloudDoErrorCode {\n let first = this.#fatalDispositions.get(conversationId);\n if (!first) {\n try {\n const stored = this.ledger.execution(conversationId)?.fatalCode;\n first = stored ? this.#toolErrorCode(new Error(stored)) : code;\n }\n catch { first = code; }\n this.#fatalDispositions.set(conversationId, first);\n }\n try { this.ledger.failExecution(conversationId, first); }\n catch { /* Fail closed in memory. Do not expose an exception from failure persistence. */ }\n return first;\n }\n\n #result(row: InvocationRow): Record<string, unknown> {\n if (row.state !== 'succeeded' || row.resultJson === null) throw new CloudDoError(row.errorCode ?? 'CLOUD_TOOL_FAILED');\n return JSON.parse(row.resultJson) as Record<string, unknown>;\n }\n\n async #runInvocation(row: InvocationRow, native: AbortSignal | undefined, recovery: boolean): Promise<Record<string, unknown>> {\n const lease = recovery ? undefined : this.#active;\n const controller = new AbortController();\n let deadline = row.deadlineAt;\n const signals = [controller.signal, ...(native ? [native] : []), ...(lease ? [lease.controller.signal] : [])];\n const signal = AbortSignal.any(signals);\n let timer: ReturnType<typeof setTimeout> | undefined;\n let removeAbort: (() => void) | undefined;\n try {\n deadline = Math.min(row.deadlineAt, this.ledger.execution(row.conversationId)?.deadlineAt ?? row.deadlineAt);\n if (Date.now() >= deadline) throw new CloudDoError(this.#timeoutCode(row.conversationId));\n if (!this.#config || !this.#dispatcher) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n if (!recovery && this.fatal(row.conversationId)) throw new CloudDoError(this.fatal(row.conversationId)!);\n const args = JSON.parse(row.argsJson) as Record<string, unknown>;\n await admitCloudPayload(this.env, args, lease?.profile);\n if (Date.now() >= deadline) throw new CloudDoError(this.#timeoutCode(row.conversationId));\n signal.throwIfAborted();\n const cancelled = new Promise<never>((_resolve, reject) => {\n const abort = () => reject(new CloudDoError(Date.now() >= deadline\n ? Date.now() >= (this.ledger.execution(row.conversationId)?.deadlineAt ?? Infinity)\n ? 'CLOUD_EXECUTION_TIMEOUT' : 'CLOUD_TOOL_TIMEOUT'\n : 'CLOUD_EXECUTION_ABORTED'));\n signal.addEventListener('abort', abort, { once: true });\n removeAbort = () => signal.removeEventListener('abort', abort);\n if (signal.aborted) abort();\n });\n timer = setTimeout(() => controller.abort(), Math.max(0, deadline - Date.now()));\n await Promise.race([Promise.resolve().then(() => this.#renew({ nativeRunId: row.conversationId,\n requestId: this.cloud.readRun(row.conversationId)?.requestId ?? null, kind: 'tool',\n toolName: row.toolName, recovery }, signal)), cancelled]);\n if (Date.now() >= deadline) throw new CloudDoError(this.#timeoutCode(row.conversationId));\n signal.throwIfAborted();\n if (!recovery && this.fatal(row.conversationId)) throw new CloudDoError(this.fatal(row.conversationId)!);\n if ((this.ledger.execution(row.conversationId)?.credits ?? 0) > CLOUD_BUDGET.credits) throw new CloudDoError('CLOUD_BUDGET_EXCEEDED');\n const usesFetchSlot = this.#dispatcher.tools.find(tool => tool.name === row.toolName)?.execution !== 'pure';\n if (usesFetchSlot && this.#inline >= this.#limits().inlineFetches) throw new CloudDoError('CLOUD_TOOL_BUSY');\n if (usesFetchSlot) this.#inline++;\n const dispatchContext = Object.freeze({\n identity: Object.freeze({ ...this.#config.identity }),\n principal: Object.freeze({ ...this.#config.principal }),\n scopes: Object.freeze([...this.#config.scopes]), dispatcherId: this.#config.dispatcherId,\n call: Object.freeze({ invocationId: row.invocationId, conversationId: row.conversationId, toolCallId: row.toolCallId, attempt: row.attempt }),\n lookup: (id: string) => {\n const found = this.ledger.read(id);\n if (!found || found.sessionId !== this.#config?.identity.sessionId) return undefined;\n return Object.freeze({ toolName: found.toolName, state: found.state, errorCode: found.errorCode, resultJson: found.resultJson,\n conversationId: found.conversationId, toolCallId: found.toolCallId, settledAt: found.settledAt, settledEventSeq: found.settledEventSeq });\n },\n });\n const dispatcher = this.#dispatcher;\n const work = Promise.resolve().then(() => {\n if (Date.now() >= deadline) throw new CloudDoError(this.#timeoutCode(row.conversationId));\n signal.throwIfAborted();\n return dispatcher.execute(dispatchContext, row.toolName, args, signal);\n });\n // A dispatcher that ignores cancellation cannot release a still-running fetch slot early.\n void work.finally(() => { if (usesFetchSlot) this.#inline--; }).catch(() => undefined);\n let result = await Promise.race([work, cancelled]);\n try {\n await admitCloudPayload(this.env, result, lease?.profile);\n result = JSON.parse(this.#guard().guardPayload(JSON.stringify(result))) as Record<string, unknown>;\n }\n catch (error) {\n if (error instanceof CloudDoError && error.code === 'CLOUD_USER_CREDENTIAL_REJECTED') {\n throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n }\n throw error;\n }\n if (Object.hasOwn(result, 'modelView') && !this.#dispatcher.modelViews) throw new CloudDoError('CLOUD_TOOL_FAILED');\n const usage = result.usage;\n if (!usage || typeof usage !== 'object' || Array.isArray(usage)\n || !Number.isSafeInteger((usage as Record<string, unknown>).credits) || Number((usage as Record<string, unknown>).credits) < 0) {\n throw new CloudDoError('CLOUD_TOOL_USAGE_INVALID');\n }\n if (typeof result.ok !== 'boolean' || (result.ok && result.error != null)) throw new CloudDoError('CLOUD_TOOL_FAILED');\n let responseFailure: CloudDoErrorCode | undefined;\n if (result.ok === false) {\n const rawCode = result.error && typeof result.error === 'object' && !Array.isArray(result.error)\n ? (result.error as Record<string, unknown>).code : undefined;\n const domainCode = typeof rawCode === 'string' && Object.hasOwn(CLOUD_DOMAIN_ERROR_CODES, rawCode) ? CLOUD_DOMAIN_ERROR_CODES[rawCode] : undefined;\n if (typeof rawCode === 'string' && this.#dispatcher.domainErrors?.includes(rawCode)) {\n const rawError = result.error as Record<string, unknown>;\n const hasData = Object.hasOwn(rawError, 'data');\n // Measure the guard-parsed value with the same JSON serialization used by the ledger.\n if (hasData && new TextEncoder().encode(JSON.stringify(rawError.data)).length > 2_048) throw new CloudDoError('CLOUD_TOOL_RESULT_LIMIT');\n result = { ...result, error: { code: rawCode, ...(hasData ? { data: rawError.data } : {}) } };\n } else {\n const code = domainCode ?? 'CLOUD_TOOL_FAILED';\n const bill = usage as Record<string, unknown>;\n result = { ok: false, error: { code }, usage: { credits: bill.credits,\n ...(Number.isSafeInteger(bill.rows) && Number(bill.rows) >= 0 ? { rows: bill.rows } : {}),\n ...(typeof bill.cached === 'boolean' ? { cached: bill.cached } : {}),\n } };\n if (!domainCode) responseFailure = code;\n }\n }\n if (new TextEncoder().encode(JSON.stringify(result)).length > this.#limits().resultBytes) throw new CloudDoError('CLOUD_TOOL_RESULT_LIMIT');\n const settled = this.ledger.finish(row.invocationId, 'succeeded', result, undefined, Date.now(), {\n attempt: row.attempt, clientConnected: recovery || lease?.connected === true, recovery, creditCap: CLOUD_BUDGET.credits,\n });\n if (!settled) throw new CloudDoError('CLOUD_TOOL_FAILED');\n if (settled.attempt !== row.attempt) throw new StaleInvocationAttempt();\n if (responseFailure && !recovery) this.#recordFatal(row.conversationId, responseFailure);\n return this.#result(settled);\n } catch (error) {\n if (error instanceof StaleInvocationAttempt) throw error;\n const code = signal.aborted\n ? Date.now() >= deadline ? this.#timeoutCode(row.conversationId) : 'CLOUD_EXECUTION_ABORTED'\n : this.#toolErrorCode(error);\n const state: InvocationTerminalState = code === 'CLOUD_TOOL_TIMEOUT' || code === 'CLOUD_EXECUTION_TIMEOUT' ? 'timed_out'\n : code === 'CLOUD_EXECUTION_ABORTED' ? 'aborted' : 'failed';\n let settled: InvocationRow | undefined;\n try { settled = this.ledger.finish(row.invocationId, state, undefined, code, Date.now(), { attempt: row.attempt, recovery }); }\n catch { /* Do not replace a fixed code with raw storage error text. */ }\n if (settled && settled.attempt !== row.attempt) throw new StaleInvocationAttempt();\n if (!recovery) this.#recordFatal(row.conversationId, code);\n throw new CloudDoError(code);\n } finally {\n clearTimeout(timer);\n removeAbort?.();\n controller.abort();\n }\n }\n\n #timeoutCode(conversationId: number): CloudDoErrorCode {\n return Date.now() >= (this.ledger.execution(conversationId)?.deadlineAt ?? Infinity)\n ? 'CLOUD_EXECUTION_TIMEOUT' : 'CLOUD_TOOL_TIMEOUT';\n }\n}\n","import { CloudDoError, safeCloudError } from './errors';\nimport type { CloudState } from './cloud-state';\n\n/** A doorbell is advisory. Every delivery reads the durable SQL cursor again. */\nexport class CloudEventDoorbell {\n private generation = 0;\n private listeners = new Set<() => void>();\n ring(): void { this.generation++; for (const listener of [...this.listeners]) listener(); }\n get version(): number { return this.generation; }\n wait(version: number, signal: AbortSignal, duration = 15_000): Promise<void> {\n return new Promise(resolve => {\n let timer: ReturnType<typeof setTimeout>;\n const finish = () => { clearTimeout(timer); this.listeners.delete(finish); signal.removeEventListener('abort', finish); resolve(); };\n timer = setTimeout(finish, duration);\n this.listeners.add(finish); signal.addEventListener('abort', finish, { once: true });\n if (signal.aborted || version !== this.generation) finish();\n });\n }\n}\n\nexport class CloudEventStreams {\n private readers = 0;\n constructor(private readonly bell: CloudEventDoorbell) {}\n open(state: CloudState, after: number | undefined, waitUntil: (work: Promise<unknown>) => void): Response {\n if (this.readers >= 8) throw new CloudDoError('CLOUD_EVENTS_BUSY');\n const meta = state.eventMeta();\n const cursor = after === undefined ? meta.highWater : after === 0 ? meta.trimmedThrough : after;\n try { state.eventPage(cursor, 1); }\n catch (error) {\n if (safeCloudError(error).code === 'CLOUD_EVENT_CURSOR_EXPIRED') return Response.json({ error: { code: 'CLOUD_EVENT_CURSOR_EXPIRED', retryable: false }, ...meta }, { status: 410 });\n throw error;\n }\n this.readers++;\n const body = new IdentityTransformStream();\n const writer = body.writable.getWriter();\n const controller = new AbortController();\n const encoder = new TextEncoder();\n let cleaned = false;\n let last = cursor;\n const close = () => { if (!cleaned) { cleaned = true; this.readers--; controller.abort(); } };\n const limit = setTimeout(() => { close(); void writer.abort().catch(() => undefined); }, 110_000);\n void writer.closed.catch(close);\n let probing = false;\n const probe = setInterval(() => {\n if (controller.signal.aborted || probing) return;\n probing = true;\n void writer.write(encoder.encode(': keepalive\\n\\n')).catch(close).finally(() => { probing = false; });\n }, 250);\n const run = async () => {\n try {\n while (!controller.signal.aborted) {\n const version = this.bell.version;\n let rows;\n try { rows = state.eventPage(last); }\n catch (error) {\n if (safeCloudError(error).code !== 'CLOUD_EVENT_CURSOR_EXPIRED') throw error;\n await writer.write(encoder.encode('event: reset\\ndata: ' + JSON.stringify(state.eventMeta()) + '\\n\\n'));\n break;\n }\n for (const row of rows) {\n if (controller.signal.aborted) break;\n await writer.write(encoder.encode('id: ' + row.seq + '\\nevent: ' + row.type + '\\ndata: ' + row.dataJson + '\\n\\n'));\n last = row.seq;\n }\n if (!rows.length && !controller.signal.aborted) {\n await this.bell.wait(version, controller.signal);\n if (!controller.signal.aborted && version === this.bell.version) await writer.write(encoder.encode(': keepalive\\n\\n'));\n }\n }\n try { await writer.close(); } catch { /* A peer may already have closed the native stream. */ }\n } catch { try { await writer.abort(); } catch { /* No raw transport exception escapes. */ } }\n finally { clearTimeout(limit); clearInterval(probe); close(); }\n };\n waitUntil(run());\n return new Response(body.readable, { headers: { 'content-type': 'text/event-stream', 'cache-control': 'no-store' } });\n }\n}\n","import { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\nimport type { Conversation, Harness } from '@earendil-works/pi-durable';\nimport { admissionIdentity, composeCloudInput, inboxInput, type AdmissionIdentity, type InboxRow, type RunHistory } from './cloud-state';\nimport { CloudDoError, safeCloudError, type CloudDoErrorCode } from './errors';\nimport { PLATFORM_PROFILES, platformCredentialReader } from './platform-credentials';\nimport type { CloudOperationGuard } from './input-guard';\nimport { raceLease, type ExecutionLease, type RunOutcome, type SessionRuntime } from './session-runtime';\n\nexport type CloudWakeAdmission = { accepted: true; reservation: 'held' | 'none' }\n | { accepted: false; code: CloudDoErrorCode };\nexport type WakeAdmission = (items: readonly InboxRow[], signal: AbortSignal, key: string,\n admission: AdmissionIdentity) => CloudWakeAdmission | Promise<CloudWakeAdmission>;\n\nexport async function cloudRunHistory(runtime: SessionRuntime, harness: Harness): Promise<RunHistory[]> {\n const history: RunHistory[] = [];\n for (const run of runtime.cloud.completedRuns()) {\n const conversation = await harness.conversation(run.conversationId as Conversation['id'], BACKGROUND_CONTEXT);\n if (!conversation) continue;\n let view;\n try { view = await conversation.context(BACKGROUND_CONTEXT); }\n catch (error) { if (run.membershipPending === 1) continue; throw error; }\n const input = run.trigger === 'wake'\n ? view.entries.find(entry => entry.kind === 'byok.run-input')?.data\n : view.entries.find(entry => entry.kind === 'pi.user')?.model?.find(message => message.role === 'user')?.content;\n const entry = [...view.entries].reverse().find(entry => entry.kind === 'pi.assistant');\n const reply = entry?.model?.find(message => message.role === 'assistant');\n if (input === undefined || reply?.role !== 'assistant') continue;\n history.push({ input, reply: reply.content.flatMap(block => block.type === 'text' ? [block.text] : []).join('') });\n }\n return history;\n}\n\nexport async function committedRunOutcome(conversation: Conversation, runtime: SessionRuntime,\n status: string, detail?: unknown): Promise<RunOutcome> {\n const view = await conversation.context(BACKGROUND_CONTEXT);\n const entry = [...view.entries].reverse().find(entry => entry.kind === 'pi.assistant');\n const last = entry?.model?.find(message => message.role === 'assistant');\n const failure = runtime.fatal(conversation.id)\n ?? (last?.role === 'assistant' && (last.stopReason === 'error' || last.stopReason === 'aborted')\n ? safeCloudError(new Error(last.errorMessage)).code : undefined)\n ?? (status !== 'done' ? safeCloudError(new Error(typeof detail === 'string' ? detail : '')).code : undefined);\n if (failure) return { state: 'failed', errorCode: failure };\n return { state: 'completed', entryId: entry?.id,\n text: last?.role === 'assistant' ? last.content.flatMap(block => block.type === 'text' ? [block.text] : []).join('') : '' };\n}\n\n/** Each invocation of this function owns a fresh conversation and one shared runtime lease. */\nexport async function runCloudWake(runtime: SessionRuntime, harness: Harness,\n env: Readonly<Record<string, unknown>>, admit: WakeAdmission, notify: () => void, retryCount = 0): Promise<boolean> {\n const guard = await runtime.prepareGuard();\n let lease: ExecutionLease | undefined;\n let conversation: Conversation | undefined;\n let selected: InboxRow[] = [];\n let settling = false;\n try {\n runtime.cloud.expireQueued(guard);\n runtime.cloud.retention();\n selected = runtime.cloud.selectBatch(Date.now(), guard);\n notify();\n if (!selected.length) { await runtime.cloud.rearmAlarm({ busy: runtime.hasLiveOwner, repairRetrying: runtime.repairRetrying }); return false; }\n lease = runtime.reserve(selected[0]!.profile, guard);\n const profile = PLATFORM_PROFILES[lease.profile];\n conversation = await harness.createConversation({ ownership: { kind: 'ownerless' },\n agent: runtime.agentChange(lease.profile, guard) }, BACKGROUND_CONTEXT);\n runtime.attach(lease, conversation.id, 'wake', guard);\n const identity = admissionIdentity(selected);\n runtime.markReservation(conversation.id, 'pending', identity);\n const key = runtime.cloud.readRun(conversation.id)!.requestId!;\n const admission = await raceLease(Promise.resolve().then(() => admit(Object.freeze(selected.map(row => Object.freeze({ ...row }))),\n lease!.controller.signal, key, identity)), lease);\n if (!admission || typeof admission !== 'object' || typeof admission.accepted !== 'boolean') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (!admission.accepted) {\n runtime.markReservation(conversation.id, 'none');\n throw safeCloudError(new Error(admission.code));\n }\n if (admission.reservation !== 'held' && admission.reservation !== 'none') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n runtime.markReservation(conversation.id, admission.reservation);\n await platformCredentialReader(env).get(profile.secretName);\n const claimed = runtime.claimWake(lease, selected.map(row => row.seq));\n notify();\n if (!claimed.length) {\n const closed = runtime.cloud.readRun(conversation.id);\n if (closed?.errorCode && closed.errorCode !== 'CLOUD_WAKE_EMPTY') throw new CloudDoError(closed.errorCode);\n return true;\n }\n const inputs = { items: inboxInput(claimed) };\n const data = JSON.parse(guard.guardPayload(JSON.stringify(inputs)));\n await conversation.commit(tx => {\n if (lease!.controller.signal.aborted) throw new CloudDoError(runtime.fatal(conversation!.id) ?? 'CLOUD_EXECUTION_ABORTED');\n return tx.appendEntry(conversation!.id, { kind: 'byok.run-input', data });\n }, BACKGROUND_CONTEXT);\n const committed = (await conversation.context(BACKGROUND_CONTEXT)).entries.find(entry => entry.kind === 'byok.run-input')?.data as typeof inputs | undefined;\n const durable = claimed.filter(row => committed?.items.some(item => item.seq === row.seq\n && item.text === (JSON.parse(row.payloadJson!) as {text:string}).text)).map(row => row.seq);\n runtime.cloud.markInputDurable(conversation.id, durable);\n const content = composeCloudInput(claimed, await cloudRunHistory(runtime, harness));\n guard.guardText(content);\n const submission = await conversation.submit({ type: 'input', content, whenBusy: 'reject', requestId: key }, BACKGROUND_CONTEXT);\n runtime.recordSubmission(conversation.id, submission.id);\n const settled = await submission.wait(BACKGROUND_CONTEXT);\n await conversation.waitForIdle(BACKGROUND_CONTEXT);\n const outcome = await committedRunOutcome(conversation, runtime, settled.status, settled.status === 'unanswered' ? settled.detail : undefined);\n settling = true;\n await runtime.settle(lease, outcome);\n } catch (error) {\n if (!lease || error instanceof CloudDoError && error.code === 'CLOUD_TOOL_BUSY') {\n if (error instanceof CloudDoError && error.code === 'CLOUD_TOOL_BUSY') return false;\n throw safeCloudError(error);\n }\n // Infrastructure failures retain the running claim for alarm repair. Do not replace a completed pi outcome.\n if (settling || !(error instanceof CloudDoError)) throw safeCloudError(error);\n const code = (lease.conversationId === undefined ? undefined : runtime.fatal(lease.conversationId)) ?? safeCloudError(error).code;\n runtime.cloud.failQueued(selected.map(row => row.seq), code, guard);\n if (conversation && runtime.cloud.readRun(conversation.id)?.state === 'running') {\n runtime.cancel(lease, code);\n await conversation.abort(BACKGROUND_CONTEXT, { background: true });\n await conversation.waitForIdle(BACKGROUND_CONTEXT);\n }\n if (conversation) {\n settling = true;\n await runtime.settle(lease, { state: 'interrupted', errorCode: code });\n }\n notify();\n } finally {\n if (lease) await runtime.release(lease,retryCount);\n else guard.dispose();\n }\n return lease !== undefined;\n}\n","import { DurableObject } from 'cloudflare:workers';\nimport { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\nimport { Harness, watchEvents, type AgentEvent, type ConversationId, type EntryRecord } from '@earendil-works/pi-durable';\nimport type { AssistantMessage } from '@earendil-works/pi-ai';\nimport { admitCloudSubmission } from './admission';\nimport { CloudDoError, cloudErrorResponse, type CloudDoErrorCode } from './errors';\nimport { PLATFORM_PROFILES, platformCredentialReader, type PlatformProfileId } from './platform-credentials';\nimport { admitCloudText } from './input-guard';\nimport { SessionRuntime, type CloudRenewRequest, type CloudRenewResult, type CloudRunSettlement, type ExecutionLease } from './session-runtime';\nimport type { CloudToolDispatcher } from './tools';\nimport type { InvocationTerminalState, InvocationRow } from './invocation-ledger';\nimport { admitCloudInbox } from './inbox-admission';\nimport { runInputSeqs, utf8Prefix, type AdmissionIdentity, type InboxRow, type TranscriptCursor, type TranscriptRun } from './cloud-state';\nimport { CloudEventDoorbell, CloudEventStreams } from './event-stream';\nimport { runCloudWake, committedRunOutcome, type CloudWakeAdmission } from './wake-runner';\nimport { safeCloudError } from './errors';\n\nexport { CLOUD_HARNESS_SETTINGS } from './session-runtime';\n\nfunction modelFailureCode(message: string | undefined): CloudDoErrorCode {\n return safeCloudError(new Error(message)).code;\n}\n\nfunction assistantText(message: AssistantMessage): string {\n return message.content.flatMap(block => block.type === 'text' ? [block.text] : []).join('');\n}\n\nfunction finalAssistant(entries: readonly EntryRecord[]) {\n const entry = [...entries].reverse().find(entry => entry.kind === 'pi.assistant'\n && entry.model?.some(message => message.role === 'assistant' && message.stopReason !== 'toolUse'));\n const assistant = entry?.model?.find(message => message.role === 'assistant' && message.stopReason !== 'toolUse');\n return assistant?.role === 'assistant' && entry ? { entry, assistant } : undefined;\n}\n\nfunction inputTexts(entries: readonly EntryRecord[]): Map<number, string> {\n const seqs = new Set(runInputSeqs(entries));\n if (!seqs.size) return new Map();\n const data = entries.find(entry => entry.kind === 'byok.run-input')?.data as {items?:{seq:number;text:string}[]} | undefined;\n return new Map((data?.items ?? []).filter(item => seqs.has(item.seq)).map(item => [item.seq,item.text]));\n}\n\n/** RPC options accept data properties only. */\nfunction transcriptRecord(value: unknown, keys: readonly string[]): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)\n || (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const result: Record<string, unknown> = {};\n for (const key of Reflect.ownKeys(value)) {\n const field = Object.getOwnPropertyDescriptor(value, key);\n if (typeof key !== 'string' || !keys.includes(key) || !field?.enumerable || !('value' in field)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n result[key] = field.value;\n }\n return result;\n}\n\n/** Native watch batches can contain a whole message, a block, or a delta. */\nfunction projectText(blocks: Map<number, string>, event: AgentEvent): string | undefined {\n const replace = (message: AssistantMessage) => {\n blocks.clear();\n message.content.forEach((block, index) => { if (block.type === 'text') blocks.set(index, block.text); });\n };\n if (event.type === 'message_start' && event.message.role === 'assistant') replace(event.message);\n else if (event.type === 'snapshot' && event.generation?.message) replace(event.generation.message);\n else if (event.type === 'message_update') {\n for (const change of event.changes) {\n if (change.type === 'text_delta') blocks.set(change.contentIndex, (blocks.get(change.contentIndex) ?? '') + change.delta);\n if (change.type === 'text_start' || change.type === 'block') {\n if (change.block.type === 'text') blocks.set(change.contentIndex, change.block.text);\n else blocks.delete(change.contentIndex);\n }\n if (change.type === 'message') replace(change.message);\n }\n } else if (event.type === 'message_end' && event.entry.model?.[0]?.role === 'assistant') return assistantText(event.entry.model[0]);\n else return undefined;\n return [...blocks.entries()].sort(([a], [b]) => a - b).map(([, text]) => text).join('');\n}\n\n/** One named DO owns one Harness; 4b adds platform-only text model submissions. */\nexport class AgentDO extends DurableObject<Record<string, unknown>> {\n #runtime?: SessionRuntime;\n #doorbell = new CloudEventDoorbell();\n #eventStreams = new CloudEventStreams(this.#doorbell);\n\n /** The consuming Worker supplies trusted code. No executable function is persisted. */\n protected createDispatcher(_id: string): CloudToolDispatcher | undefined { return undefined; }\n\n /** Post-commit notification. Consumer failures never change the invocation outcome. */\n protected onInvocationSettled(_id: string, _state: InvocationTerminalState): void | Promise<void> {}\n\n protected projectInvocation(_row: InvocationRow): { key: string; dataJson: string } | undefined { return undefined; }\n\n /** The consumer owns billing truth and fences every pending admission key on release. */\n protected admitWake(_items: readonly InboxRow[], _signal: AbortSignal, _key: string, _admission: AdmissionIdentity): CloudWakeAdmission | Promise<CloudWakeAdmission> {\n return { accepted: true, reservation: 'none' };\n }\n\n protected instructions(_profile: PlatformProfileId): string | undefined { return undefined; }\n protected renew(_request: CloudRenewRequest, _signal: AbortSignal): CloudRenewResult | Promise<CloudRenewResult> { return { ok: true }; }\n protected settleRun(_run: CloudRunSettlement, _signal: AbortSignal): void | Promise<void> {}\n\n protected sessionRuntime(): SessionRuntime {\n return this.#runtime ??= new SessionRuntime(this.ctx, this.env, {\n createDispatcher: id => this.createDispatcher(id),\n projectInvocation: row => this.projectInvocation(row),\n onCommit: () => this.#doorbell.ring(),\n onInvocationSettled: (id, state) => this.onInvocationSettled(id, state),\n instructions: profile => this.instructions(profile),\n renew: (request, signal) => this.renew(request, signal),\n settleRun: (run, signal) => this.settleRun(run, signal),\n });\n }\n\n async configureSession(input: unknown): Promise<Response> {\n try { await this.sessionRuntime().configure(input); return Response.json({ configured: true }); }\n catch (error) { return cloudErrorResponse(error); }\n }\n\n async readInvocation(id: string) {\n await this.sessionRuntime().ready();\n if (typeof id !== 'string' || !/^[a-f0-9]{64}$/.test(id)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return this.sessionRuntime().readInvocation(id);\n }\n\n async enqueue(input: unknown): Promise<Response> {\n let guard;\n try {\n const admitted = admitCloudInbox(input);\n const runtime = this.sessionRuntime();\n guard = await runtime.prepareGuard();\n runtime.cloud.validateEnqueue(admitted, guard);\n await runtime.ready();\n const result = await runtime.cloud.enqueue(admitted, guard, Date.now(), {\n busy: runtime.hasLiveOwner, repairRetrying: runtime.repairRetrying,\n });\n this.#doorbell.ring();\n return Response.json({ accepted: result.accepted, ...result.row });\n } catch (error) { return cloudErrorResponse(error); }\n finally { guard?.dispose(); }\n }\n\n /** The platform supplies retryCount. This handler never replaces a live owner. */\n async alarm(info?: AlarmInvocationInfo): Promise<void> {\n const runtime = this.sessionRuntime();\n let harness: Harness;\n try { harness = await runtime.ready(); }\n catch (error) {\n // A rejected recovery promise is cached. Only a restart can recover it.\n if (runtime.recovering) return;\n throw safeCloudError(error);\n }\n if (runtime.hasLiveOwner) {\n const guard = runtime.activeLease?.guard;\n if (guard) runtime.cloud.expireQueued(guard);\n runtime.cloud.retention();\n this.#doorbell.ring();\n // Settlement debt has no lease and may progress while unrelated native work is live.\n if (runtime.cloud.unackedRuns().length) await runtime.deliverSettlementsForAlarm(info?.retryCount ?? 0,guard);\n else await runtime.cloud.rearmAlarm({ busy: true, repairRetrying: runtime.repairRetrying });\n return;\n }\n try {\n await runtime.repairPendingRuns(info?.retryCount ?? 0);\n if (runtime.busy) return;\n const woke = await runCloudWake(runtime, harness, this.env, (items, signal, key, admission) => this.admitWake(items, signal, key, admission),\n () => this.#doorbell.ring(),info?.retryCount ?? 0);\n if (!woke) await runtime.deliverSettlementsForAlarm(info?.retryCount ?? 0);\n } catch (error) { throw safeCloudError(error); }\n }\n\n async events(input: { after?: number } = {}): Promise<Response> {\n try {\n const fields = this.#readOptions(input, ['after']);\n const runtime = this.sessionRuntime();\n await runtime.ready();\n return this.#eventStreams.open(runtime.cloud, fields.after, work => this.ctx.waitUntil(work));\n } catch (error) { return cloudErrorResponse(error); }\n }\n\n async readSnapshot() { await this.sessionRuntime().ready(); return this.sessionRuntime().cloud.snapshot(); }\n async readRuns(input: { after?: number; limit?: number } = {}) {\n await this.sessionRuntime().ready(); return this.sessionRuntime().cloud.readRuns(this.#readOptions(input, ['after', 'limit']));\n }\n async readInbox(input: { after?: number; limit?: number } = {}) {\n await this.sessionRuntime().ready(); return this.sessionRuntime().cloud.readInbox(this.#readOptions(input, ['after', 'limit']));\n }\n async readInvocations(input: { after?: number; limit?: number } = {}) {\n await this.sessionRuntime().ready(); return this.sessionRuntime().cloud.readInvocations(this.#readOptions(input, ['after', 'limit']));\n }\n async readTranscript(input: { after?: TranscriptCursor; limit?: number } = {}) {\n const options = transcriptRecord(input, ['after','limit']);\n const limit = options.limit === undefined ? 20 : options.limit;\n if (typeof limit !== 'number' || !Number.isSafeInteger(limit) || limit < 1 || limit > 50) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n let after: TranscriptCursor | undefined;\n if (options.after !== undefined) {\n const cursor = transcriptRecord(options.after, ['horizon','run','item']);\n if (Object.keys(cursor).length !== 3 || typeof cursor.horizon !== 'number' || !Number.isSafeInteger(cursor.horizon) || cursor.horizon < 0\n || [cursor.run,cursor.item].some(value => value !== null && (typeof value !== 'number' || !Number.isSafeInteger(value) || value <= 0))) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n after = cursor as unknown as TranscriptCursor;\n }\n const runtime = this.sessionRuntime();\n const harness = await runtime.ready();\n const plan = runtime.cloud.planTranscript(after,limit);\n const contexts = new Map<number, Promise<readonly EntryRecord[]>>();\n const entries = (id: number): Promise<readonly EntryRecord[]> => {\n const cached = contexts.get(id);\n if (cached) return cached;\n const read = harness.conversation(id as ConversationId, BACKGROUND_CONTEXT).then(async conversation =>\n conversation ? (await conversation.context(BACKGROUND_CONTEXT)).entries : []).catch(error => {\n if (runtime.cloud.readRun(id)?.membershipPending === 1) return [];\n throw error;\n });\n contexts.set(id,read);\n return read;\n };\n const runs: TranscriptRun[] = [];\n for (const {run,turns,invocations} of plan.runs) {\n const claimedSeqs = runtime.cloud.claimedSeqs(run.conversationId);\n const view = await entries(run.conversationId);\n const texts = inputTexts(view);\n const final = finalAssistant(view);\n const result: TranscriptRun = { nativeRunId: run.conversationId, revision: run.revision, state: run.state,\n errorCode: run.errorCode, trigger: run.trigger, settlementAck: run.settlementAck === null || run.settlementAck === 1,\n claimedSeqs, turns: turns.map(turn => ({ ...turn, text: texts.get(turn.seq) ?? turn.text })), invocations };\n if (final) {\n const text = assistantText(final.assistant);\n const truncated = new TextEncoder().encode(text).length > 16_384;\n result.text = truncated ? utf8Prefix(text,1024) : text;\n if (truncated) result.truncated = true;\n }\n runs.push(result);\n }\n for (const item of plan.items) if (item.text === null && item.runId !== null) {\n item.text = inputTexts(await entries(item.runId)).get(item.seq) ?? null;\n }\n return { runs, items: plan.items, next: plan.next };\n }\n #readOptions(input: unknown, allowed: readonly string[]): Record<string, number | undefined> {\n if (!input || typeof input !== 'object' || Array.isArray(input)\n || (Object.getPrototypeOf(input) !== Object.prototype && Object.getPrototypeOf(input) !== null)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const result: Record<string, number | undefined> = {};\n for (const key of Reflect.ownKeys(input)) {\n const field = Object.getOwnPropertyDescriptor(input, key);\n if (typeof key !== 'string' || !allowed.includes(key) || !field?.enumerable || !('value' in field)\n || (field.value !== undefined && typeof field.value !== 'number')) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n result[key] = field.value;\n }\n return result;\n }\n\n async readRunOutput(conversationId: number, input: { entryId?: number; offset?: number } = {}) {\n if (!Number.isSafeInteger(conversationId) || conversationId < 2) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const options = this.#readOptions(input, ['entryId', 'offset']);\n const runtime = this.sessionRuntime();\n const harness = await runtime.ready();\n if (!runtime.cloud.readRun(conversationId)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const conversation = await harness.conversation(conversationId as ConversationId, BACKGROUND_CONTEXT);\n if (!conversation) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const context = await conversation.context(BACKGROUND_CONTEXT);\n const final = finalAssistant(context.entries);\n if (!final || (options.entryId !== undefined && options.entryId !== final.entry.id)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const {entry,assistant} = final;\n const bytes = new TextEncoder().encode(assistantText(assistant));\n const offset = options.offset ?? 0;\n if (!Number.isSafeInteger(offset) || offset < 0 || offset > bytes.length\n || (offset < bytes.length && (bytes[offset]! & 0xc0) === 0x80)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n let end = Math.min(bytes.length, offset + 65_536);\n while (end < bytes.length && (bytes[end]! & 0xc0) === 0x80) end--;\n return { entryId: entry.id, offset, nextOffset: end, done: end === bytes.length,\n text: new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes.subarray(offset, end)) };\n }\n\n async cancelActiveRun(): Promise<Response> {\n try { const runtime = this.sessionRuntime(); await runtime.ready(); return Response.json({ cancelled: runtime.cancelActive() }); }\n catch (error) { return cloudErrorResponse(error); }\n }\n async cancelInboxItem(seq: number): Promise<Response> {\n let guard;\n try {\n if (!Number.isSafeInteger(seq) || seq < 1) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const runtime = this.sessionRuntime(); await runtime.ready();\n const row = runtime.cloud.readInboxItem(seq);\n if (!row) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (row.state === 'running') {\n if (runtime.activeLease?.conversationId === row.runId) runtime.cancelActive();\n } else if (row.state === 'queued') {\n guard = await runtime.prepareGuard(); runtime.cloud.cancelQueued(seq, guard);\n }\n await runtime.cloud.rearmAlarm({ busy: runtime.hasLiveOwner, repairRetrying: runtime.repairRetrying });\n this.#doorbell.ring();\n return Response.json({ item: runtime.cloud.readInboxItem(seq) });\n } catch (error) { return cloudErrorResponse(error); }\n finally { guard?.dispose(); }\n }\n\n // Admission and credential preflight happen before even schema initialization.\n #harness(): Promise<Harness> {\n return this.sessionRuntime().open();\n }\n\n async open() {\n const harness = await this.#harness();\n return { scheduling: (await harness.inspect(BACKGROUND_CONTEXT)).scheduling };\n }\n\n /** D1: every call allocates a new ownerless conversation, including after a restart. */\n async openExecution(): Promise<{ conversationId: number }> {\n const harness = await this.#harness();\n const conversation = await harness.createConversation({ ownership: { kind: 'ownerless' } }, BACKGROUND_CONTEXT);\n return { conversationId: conversation.id };\n }\n\n async #execution(id: number) {\n if (!Number.isSafeInteger(id) || id < 2) throw new Error('Invalid execution conversation');\n const conversation = await (await this.#harness()).conversation(id as ConversationId, BACKGROUND_CONTEXT);\n if (!conversation) throw new Error('Unknown execution conversation');\n return conversation;\n }\n\n async #admitText(text: string, selected?: PlatformProfileId): Promise<void> {\n await admitCloudText(this.env, text, selected);\n }\n\n /** Passive native pi entries prove storage without starting a model or tool task. */\n async appendExecution(conversationId: number, text: string): Promise<void> {\n if (typeof text !== 'string') throw new Error('Execution text must be a string');\n await this.#admitText(text);\n const conversation = await this.#execution(conversationId);\n await conversation.commit(tx => tx.appendEntry(conversation.id, { kind: 'byok.execution', data: { text } }), BACKGROUND_CONTEXT);\n }\n\n async readExecution(conversationId: number): Promise<string[]> {\n const conversation = await this.#execution(conversationId);\n const context = await conversation.context(BACKGROUND_CONTEXT);\n return context.entries.filter(entry => entry.kind === 'byok.execution').map(entry => {\n const data = entry.data as { text: string };\n return data.text;\n });\n }\n\n /** Binding/RPC-only. The consumer authorizes identity before obtaining this stub.\n * Errors are structured Responses so the same code/status survive DO RPC. */\n async submit(input: unknown): Promise<Response> {\n let lease: ExecutionLease | undefined;\n let guard;\n try {\n const admitted = admitCloudSubmission(input);\n const profile = PLATFORM_PROFILES[admitted.profile];\n await platformCredentialReader(this.env).get(profile.secretName);\n // Check every configured platform key before input enters durable storage.\n await this.#admitText(admitted.instruction, admitted.profile);\n const runtime = this.sessionRuntime();\n const harness = await runtime.ready(admitted.profile);\n guard = await runtime.prepareGuard(admitted.profile);\n lease = runtime.reserve(admitted.profile, guard);\n const conversation = await harness.createConversation({ ownership: { kind: 'ownerless' },\n agent: runtime.agentChange(admitted.profile, guard) }, BACKGROUND_CONTEXT);\n const execution = lease;\n runtime.attach(execution, conversation.id);\n const events = await watchEvents(harness, conversation.id, BACKGROUND_CONTEXT);\n const encoder = new TextEncoder();\n // Keep backpressure, with a controller that can interrupt a pending write.\n // Native IdentityTransformStream writer.abort() queues behind that write.\n let bodyController!: TransformStreamDefaultController<Uint8Array>;\n const body = new TransformStream<Uint8Array, Uint8Array>({ start(controller) { bodyController = controller; } });\n const writer = body.writable.getWriter();\n let cancelled = false;\n let aborting: Promise<void> | undefined;\n let failure: string | undefined;\n let released = '';\n const textBlocks = new Map<number, string>();\n // Delivery has its own lifetime: durable settlement clears the execution\n // timer, but must not leave a blocked native write or listener alive.\n // Briefly allow a draining consumer to receive a timeout/cancel frame.\n const deliveryGraceMs = 250;\n let deliveryTimer: ReturnType<typeof setTimeout>;\n const stopDelivery = () => {\n cancelled = true;\n clearTimeout(deliveryTimer);\n clearInterval(probe);\n bodyController.error(new CloudDoError('CLOUD_EXECUTION_ABORTED'));\n void writer.abort().catch(() => undefined);\n };\n const boundAbortedDelivery = () => {\n if (cancelled) return;\n clearTimeout(deliveryTimer);\n deliveryTimer = setTimeout(stopDelivery, deliveryGraceMs);\n };\n deliveryTimer = setTimeout(stopDelivery, Math.max(0, execution.deadlineAt - Date.now()) + deliveryGraceMs);\n execution.controller.signal.addEventListener('abort', boundAbortedDelivery, { once: true });\n if (execution.controller.signal.aborted) boundAbortedDelivery();\n const cancel = () => {\n stopDelivery();\n if (!aborting && !execution.settled && execution.liveOwner) {\n runtime.cancel(execution);\n // A disconnected consumer has no error channel. Do not expose a raw exception.\n aborting = conversation.abort(BACKGROUND_CONTEXT).finally(() => events.stop()).catch(() => undefined);\n }\n return aborting;\n };\n void writer.closed.catch(cancel);\n const write = async (value: unknown) => {\n if (cancelled) return;\n try { await writer.write(encoder.encode(`data: ${JSON.stringify(value)}\\n\\n`)); }\n catch { void cancel(); }\n };\n // A transferred response stream reports a disconnected peer on its next\n // write. Keep one request-scoped probe in flight. This is not a DO alarm.\n let probing = false;\n const probe = setInterval(() => {\n if (cancelled || probing) return;\n probing = true;\n void writer.write(encoder.encode(': keepalive\\n\\n')).catch(() => cancel()).finally(() => { probing = false; });\n }, 250);\n const publish = async (text: string) => {\n if (text.startsWith(released) && text.length > released.length) {\n const delta = text.slice(released.length);\n released = text;\n await write({ type: 'text_delta', delta });\n }\n };\n events.start(async batch => {\n for (const event of batch) {\n if (event.type === 'message_start' && event.message.role === 'assistant') released = '';\n const text = projectText(textBlocks, event);\n if (text !== undefined) await publish(text);\n if (event.type === 'message_end') {\n const message = event.entry.model?.[0];\n if (message?.role === 'assistant' && message.stopReason === 'error') {\n failure = modelFailureCode(message.errorMessage);\n }\n }\n if (event.type === 'task_failed') failure ??= runtime.fatal(conversation.id) ?? 'CLOUD_MODEL_REQUEST_FAILED';\n }\n });\n const run = async () => {\n let outcomeWriting = false;\n let ownerReleased = false;\n const release = async () => {\n if (ownerReleased) return;\n ownerReleased = true;\n await runtime.release(execution);\n };\n try {\n const submission = await conversation.submit({ type: 'input', content: admitted.instruction, whenBusy: 'reject', requestId: runtime.cloud.readRun(conversation.id)!.requestId! }, BACKGROUND_CONTEXT);\n runtime.recordSubmission(conversation.id, submission.id);\n const settled = await submission.wait(BACKGROUND_CONTEXT);\n await conversation.waitForIdle(BACKGROUND_CONTEXT);\n const stopped = await events.stop();\n // Backpressure can leave a final watch batch undelivered. Native\n // committed state is the authority for the final text and error code.\n const context = await conversation.context(BACKGROUND_CONTEXT);\n const last = [...context.entries].reverse().find(entry => entry.kind === 'pi.assistant')?.model?.[0];\n if (last?.role === 'assistant' && last.stopReason === 'error') failure = modelFailureCode(last.errorMessage);\n failure = runtime.fatal(conversation.id) ?? failure;\n if (settled.status !== 'done' || stopped.reason === 'listener_error') failure ??= 'CLOUD_MODEL_REQUEST_FAILED';\n const outcome = await committedRunOutcome(conversation, runtime, settled.status, settled.status === 'unanswered' ? settled.detail : undefined);\n if (failure) { outcome.state = 'failed'; outcome.errorCode = modelFailureCode(failure); delete outcome.text; }\n outcomeWriting = true;\n await runtime.settle(execution, outcome);\n const committed = runtime.cloud.readRun(conversation.id);\n if (committed?.state !== 'completed') failure = committed?.errorCode ?? 'CLOUD_MODEL_REQUEST_FAILED';\n // Native work is idle and terminal state is durable. Response delivery\n // cannot retain this execution's owner or affect its committed outcome.\n await release();\n if (last?.role === 'assistant') await publish(assistantText(last));\n if (failure) await write({ type: 'error', code: failure, retryable: false });\n else await write({ type: 'done', conversationId: conversation.id });\n } catch (error) {\n const code = runtime.fatal(conversation.id) ?? safeCloudError(error).code;\n await events.stop();\n // A native/business failure is terminal. A failed durable settlement belongs to repair.\n if (!outcomeWriting && error instanceof CloudDoError && runtime.cloud.readRun(conversation.id)?.state === 'running') {\n runtime.cancel(execution, code);\n await conversation.abort(BACKGROUND_CONTEXT, { background: true });\n await conversation.waitForIdle(BACKGROUND_CONTEXT);\n await runtime.settle(execution, { state: 'failed', errorCode: code });\n }\n await release();\n await write({ type: 'error', code, retryable: false });\n }\n finally {\n try {\n await release();\n if (!cancelled) { try { await writer.close(); } catch { void cancel(); } }\n } finally {\n clearInterval(probe);\n clearTimeout(deliveryTimer);\n execution.controller.signal.removeEventListener('abort', boundAbortedDelivery);\n if (!cancelled) stopDelivery();\n }\n }\n };\n this.ctx.waitUntil(run());\n return new Response(body.readable, { headers: { 'content-type': 'text/event-stream', 'cache-control': 'no-store' } });\n } catch (error) {\n if (lease) await this.sessionRuntime().release(lease);\n else guard?.dispose();\n return cloudErrorResponse(error);\n }\n }\n}\n","import type { AgentDO } from './agent-do';\n\nexport interface AgentIdentity {\n readonly tenantId: string;\n readonly workspaceId: string;\n readonly agentId: string;\n}\n\nexport interface SessionIdentity extends AgentIdentity {\n readonly sessionId: string;\n}\n\nexport async function agentObjectName(identity: AgentIdentity): Promise<string> {\n const ids = [identity.tenantId, identity.workspaceId, identity.agentId];\n if (ids.some(id => typeof id !== 'string' || !id)) throw new Error('Agent identity requires three nonempty ids');\n // JSON array encoding preserves tuple boundaries, Unicode and embedded delimiters.\n const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(JSON.stringify(ids)));\n return `agent:${Array.from(new Uint8Array(digest), byte => byte.toString(16).padStart(2, '0')).join('')}`;\n}\n\n/** Call only after the platform has authorized the tenant/workspace/agent identity. */\nexport async function getAgentObject(namespace: DurableObjectNamespace<AgentDO>, identity: AgentIdentity) {\n return namespace.getByName(await agentObjectName(identity));\n}\n\nexport async function sessionObjectName(identity: SessionIdentity): Promise<string> {\n const ids = [identity.tenantId, identity.workspaceId, identity.agentId, identity.sessionId];\n if (ids.some(id => typeof id !== 'string' || !id)) throw new Error('Session identity requires four nonempty ids');\n const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(JSON.stringify(ids)));\n return `session:${Array.from(new Uint8Array(digest), byte => byte.toString(16).padStart(2, '0')).join('')}`;\n}\n\n/** The consuming platform authorizes all four identity fields before this lookup. */\nexport async function getSessionObject(namespace: DurableObjectNamespace<AgentDO>, identity: SessionIdentity) {\n return namespace.getByName(await sessionObjectName(identity));\n}\n","export { AgentDO } from './agent-do';\nexport type { CloudWakeAdmission } from './wake-runner';\nexport type { InboxRow, RunRow, CloudEventRow, CloudEventMeta } from './cloud-state';\nexport type { TranscriptCursor, TranscriptRun, TranscriptTurn, TranscriptItem } from './cloud-state';\nexport type { CloudRenewRequest, CloudRenewResult, CloudRunSettlement } from './session-runtime';\nexport { agentObjectName, getAgentObject, type AgentIdentity } from './identity';\nexport { sessionObjectName, getSessionObject, type SessionIdentity } from './identity';\nexport { CLOUD_SAFE_REPLAY_TOOLS, CLOUD_LIVE_IPO_TOOLS, type CloudToolResult, type CloudToolDefinition, type CloudToolDispatcher, type CloudDispatchContext, type CloudToolCallContext } from './tools';\nexport { DurableObjectSqliteDatabase, openDurableObjectStorage } from './storage';\n\n// This slice is binding/RPC-only. Public request routing belongs to the consuming platform.\nexport default { fetch: () => new Response('Not found', { status: 404 }) };\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/platform-credentials.ts","../src/admission.ts","../src/leak-guard.ts","../src/input-guard.ts","../src/inbox-admission.ts","../src/tools.ts","../src/cloud-state.ts","../src/provider-fetch.ts","../src/platform-provider.ts","../src/invocation-ledger.ts","../src/session-config.ts","../src/storage.ts","../src/session-runtime.ts","../src/event-stream.ts","../src/wake-runner.ts","../src/agent-do.ts","../src/identity.ts","../src/index.ts"],"names":["profile","text","credentials","names","row","a","b","encoder","terminal","model","claimed","tool","message","record","BACKGROUND_CONTEXT","entry","status","fields","digest"],"mappings":"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","file":"index.js","sourcesContent":["const status = {\n CLOUD_REQUEST_INVALID: 400,\n CLOUD_INBOX_FULL: 429,\n CLOUD_INBOX_CONFLICT: 409,\n CLOUD_INBOX_EXPIRED: 409,\n CLOUD_INBOX_TOO_LARGE: 400,\n CLOUD_WAKE_EXHAUSTED: 409,\n CLOUD_WAKE_EMPTY: 409,\n CLOUD_EVENT_CURSOR_EXPIRED: 410,\n CLOUD_EVENTS_BUSY: 429,\n CLOUD_USER_CREDENTIAL_REJECTED: 400,\n CLOUD_MODEL_CREDENTIAL_UNAVAILABLE: 503,\n CLOUD_MODEL_RESPONSE_REJECTED: 502,\n CLOUD_MODEL_REQUEST_FAILED: 502,\n CLOUD_SESSION_CONFLICT: 409,\n CLOUD_TOOL_NOT_AVAILABLE: 400,\n CLOUD_TOOL_INVOCATION_CONFLICT: 409,\n CLOUD_TOOL_ARGUMENT_INVALID: 400,\n CLOUD_TOOL_LIMIT: 400,\n CLOUD_STEP_LIMIT: 400,\n CLOUD_BUDGET_EXCEEDED: 400,\n CLOUD_TOOL_RESULT_LIMIT: 502,\n CLOUD_TOOL_USAGE_INVALID: 502,\n CLOUD_TOOL_BUSY: 409,\n CLOUD_TOOL_TIMEOUT: 504,\n CLOUD_EXECUTION_TIMEOUT: 504,\n CLOUD_EXECUTION_INTERRUPTED: 409,\n CLOUD_EXECUTION_ABORTED: 409,\n CLOUD_TOOL_FAILED: 502,\n} as const;\n\nexport type CloudDoErrorCode = keyof typeof status;\n\n/** Never attach an upstream exception, request, response, env, or credential. */\nexport class CloudDoError extends Error {\n readonly status: number;\n readonly retryable = false;\n constructor(readonly code: CloudDoErrorCode) {\n super(code);\n this.name = 'CloudDoError';\n this.status = status[code];\n }\n}\n\nexport function safeCloudError(error: unknown): CloudDoError {\n try {\n if (error instanceof CloudDoError) {\n const code = Object.getOwnPropertyDescriptor(error, 'code')?.value;\n if (typeof code === 'string' && Object.hasOwn(status, code)) return new CloudDoError(code as CloudDoErrorCode);\n }\n // RPC erases the subclass. Read data properties only; do not invoke upstream getters.\n if (error instanceof Error) {\n const message = Object.getOwnPropertyDescriptor(error, 'message')?.value;\n if (typeof message === 'string' && Object.hasOwn(status, message)) return new CloudDoError(message as CloudDoErrorCode);\n }\n } catch { /* An upstream Proxy or accessor cannot escape the fixed error boundary. */ }\n return new CloudDoError('CLOUD_MODEL_REQUEST_FAILED');\n}\n\nexport function cloudErrorResponse(error: unknown): Response {\n const safe = safeCloudError(error);\n return Response.json({ error: { code: safe.code, retryable: false } }, { status: safe.status });\n}\n","import { CloudDoError } from './errors';\n\n/** The platform reads one key. It does not own a local credential store. */\nexport type ModelProviderSecretName = `model-${string}-api-key`;\nexport interface PlatformCredentialReader {\n get(name: ModelProviderSecretName): Promise<string | undefined>;\n}\ntype PlatformVendorId = 'zai' | 'deepseek';\n\n// Aiphabee 3defa6e1; vendor ids/base URLs agree with keys' catalog. No runtime keys import.\nexport const PLATFORM_PROFILES = Object.freeze({\n zai_openai: Object.freeze({ vendor: 'zai' satisfies PlatformVendorId, baseUrl: 'https://api.z.ai/api/coding/paas/v4', model: 'glm-5.3-flash', binding: 'AIPHABEE_ZAI_API_KEY', secretName: 'model-zai_openai-api-key' satisfies ModelProviderSecretName }),\n deepseek_direct: Object.freeze({ vendor: 'deepseek' satisfies PlatformVendorId, baseUrl: 'https://api.deepseek.com', model: 'deepseek-v4-flash', binding: 'AIPHABEE_DEEPSEEK_API_KEY', secretName: 'model-deepseek_direct-api-key' satisfies ModelProviderSecretName }),\n});\nexport type PlatformProfileId = keyof typeof PLATFORM_PROFILES;\nexport type PlatformProfile = (typeof PLATFORM_PROFILES)[PlatformProfileId];\n\nexport function platformProfile(id: unknown): PlatformProfileId {\n if (typeof id !== 'string' || !Object.hasOwn(PLATFORM_PROFILES, id)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return id as PlatformProfileId;\n}\n\n/** A small bounded ASCII token, never whitespace/control characters or a header fragment. */\nexport function requirePlatformKey(value: unknown): string {\n if (typeof value !== 'string' || !/^[A-Za-z0-9._~+/-]{16,512}$/u.test(value)) throw new CloudDoError('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE');\n return value;\n}\n\n/** The concrete reader returns a valid key or rejects with a fixed error. */\nexport function platformCredentialReader(env: Readonly<Record<string, unknown>>): {\n get(name: ModelProviderSecretName): Promise<string>;\n} {\n return {\n async get(name) {\n const profile = Object.values(PLATFORM_PROFILES).find(profile => profile.secretName === name);\n if (!profile) throw new CloudDoError('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE');\n try { return requirePlatformKey(env[profile.binding]); }\n catch { throw new CloudDoError('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE'); }\n },\n } satisfies PlatformCredentialReader;\n}\n","import { CloudDoError } from './errors';\nimport { platformProfile, type PlatformProfileId } from './platform-credentials';\n\nexport interface CloudSubmission { readonly instruction: string; readonly profile: PlatformProfileId }\nconst credentialFields = new Set(['credential', 'credentials', 'apikey', 'api_key', 'secret', 'authorization', 'x-api-key', 'api-key', 'x-goog-api-key', 'proxy-authorization', 'cf-aig-authorization', 'headers']);\n\nfunction rejectCredentialFields(value: unknown, depth = 0, seen = new Set<object>()): void {\n if (value === null || typeof value !== 'object') return;\n if (depth > 8 || seen.has(value)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n seen.add(value);\n for (const [name, child] of Object.entries(value)) {\n if (credentialFields.has(name.toLowerCase())) throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED');\n rejectCredentialFields(child, depth + 1, seen);\n }\n}\n\n/** Best effort, not a claim that arbitrary or obfuscated keys can be recognized. */\nexport function hasUserKeyShape(text: string): boolean {\n return /\\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{16,}\\b|\\b[a-f\\d]{32}\\.[A-Za-z0-9_-]{16,}\\b/u.test(text);\n}\n\n/** Frozen schema for the only 4b operation. No open metadata/config bags, no stripping. */\nexport function admitCloudSubmission(input: unknown): CloudSubmission {\n rejectCredentialFields(input);\n if (!input || typeof input !== 'object' || Array.isArray(input)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const body = input as Record<string, unknown>;\n if (Object.keys(body).some(name => name !== 'instruction' && name !== 'profile') || typeof body.instruction !== 'string'\n || !body.instruction.trim() || body.instruction.length > 16_000) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (hasUserKeyShape(body.instruction)) throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED');\n return { instruction: body.instruction, profile: platformProfile(body.profile === undefined ? 'zai_openai' : body.profile) };\n}\n","import { CloudDoError } from './errors';\n\nconst FRAGMENT_LENGTH = 16;\n\nfunction percentPattern(secret: string): RegExp {\n return new RegExp(Array.from(secret, character => {\n const literal = character.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const hex = character.charCodeAt(0).toString(16).padStart(2, '0')\n .replace(/[a-f]/g, digit => `[${digit}${digit.toUpperCase()}]`);\n return `(?:${literal}|%${hex})`;\n }).join(''));\n}\n\nfunction addEncodedForms(forms: Set<string>, secret: string): void {\n forms.add(secret);\n const encoded = btoa(secret);\n forms.add(encoded);\n forms.add(encoded.replace(/=+$/, ''));\n forms.add(encoded.replace(/\\+/g, '-').replace(/\\//g, '_'));\n forms.add(encoded.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, ''));\n for (let offset = 0; offset < 3; offset++) {\n // Only six-bit characters wholly inside the secret are independent of the\n // unknown surrounding bytes. Drop both boundary characters if necessary.\n const interior = btoa('\\0'.repeat(offset) + secret).slice(\n Math.ceil(8 * offset / 6), Math.floor(8 * (offset + secret.length) / 6),\n );\n forms.add(interior);\n forms.add(interior.replace(/\\+/g, '-').replace(/\\//g, '_'));\n }\n}\n\n/** Scans decoded model text, before any of it reaches pi or persistence. */\nexport class RollingLeakGuard {\n readonly tailLength: number;\n private readonly forms: readonly string[];\n private readonly percentForms: readonly RegExp[];\n private pending = '';\n private closed = false;\n\n constructor(key: string) {\n // The credential boundary validates visible ASCII token characters and\n // 16 <= K <= 512 before constructing a guard. The largest matching form is\n // the all-percent-encoded full key (3K). Base64, including alignment, is at\n // most 4*ceil((K+2)/3), which is <= 3K for K >= 16. Fragments are shorter.\n // Thus L=3K and tail=L-1 <= 1535 characters, with O(K) candidates.\n this.tailLength = 3 * key.length - 1;\n const secrets = new Set([key]);\n const sensitive = key.replace(/^(?:sk-(?:ant-|proj-)?|zai[-_])/, '');\n for (let start = 0; start <= sensitive.length - FRAGMENT_LENGTH; start++) {\n // Every longer sensitive fragment contains one of these exact windows.\n secrets.add(sensitive.slice(start, start + FRAGMENT_LENGTH));\n }\n const forms = new Set<string>();\n const percentForms: RegExp[] = [];\n for (const secret of secrets) {\n addEncodedForms(forms, secret);\n percentForms.push(percentPattern(secret));\n }\n this.forms = [...forms];\n this.percentForms = percentForms;\n }\n\n push(text: string): string {\n if (this.closed) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n const combined = this.pending + text;\n this.scan(combined);\n // Any future-completed form has length <= L. Its unfinished prefix has\n // length <= L-1 and must remain here, never inside the released prefix.\n const releaseLength = Math.max(0, combined.length - this.tailLength);\n this.pending = combined.slice(releaseLength);\n return combined.slice(0, releaseLength);\n }\n\n finish(): string {\n if (this.closed) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n this.scan(this.pending);\n const safe = this.pending;\n this.discard();\n return safe;\n }\n\n discard(): void {\n this.pending = '';\n this.closed = true;\n }\n\n private scan(text: string): void {\n if (this.forms.some(form => text.includes(form))\n || this.percentForms.some(pattern => pattern.test(text))) {\n this.discard();\n throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n }\n }\n}\n","import { hasUserKeyShape } from './admission';\nimport { CloudDoError } from './errors';\nimport { RollingLeakGuard } from './leak-guard';\nimport { PLATFORM_PROFILES, platformCredentialReader, type PlatformProfileId } from './platform-credentials';\n\n/** Keep the existing pre-storage text guard shared by submission and tool data. */\nexport async function admitCloudText(env: Readonly<Record<string, unknown>>, text: string, selected?: PlatformProfileId): Promise<void> {\n if (typeof text !== 'string') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (hasUserKeyShape(text)) throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED');\n const credentials = platformCredentialReader(env);\n for (const [id, profile] of Object.entries(PLATFORM_PROFILES)) {\n let key: string | undefined;\n try {\n if (env[profile.binding] === undefined) continue;\n key = await credentials.get(profile.secretName);\n } catch {\n // A broken unused profile does not disable a valid selected provider.\n // Every valid configured key still gets the pre-storage text check.\n if (selected && id !== selected) continue;\n throw new CloudDoError('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE');\n }\n const guard = new RollingLeakGuard(key!);\n try { guard.push(text); guard.finish(); }\n catch { throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED'); }\n }\n}\n\n/** Check decoded JSON values before any part enters pi or the invocation ledger. */\nexport async function admitCloudPayload(env: Readonly<Record<string, unknown>>, value: unknown, selected?: PlatformProfileId): Promise<void> {\n const ancestors = new Set<object>();\n let nodes = 0;\n const visit = async (item: unknown, depth: number): Promise<void> => {\n if (++nodes > 10_000 || depth > 32) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (typeof item === 'string') { await admitCloudText(env, item, selected); return; }\n if (item === null || typeof item === 'boolean' || (typeof item === 'number' && Number.isFinite(item))) return;\n if (!item || typeof item !== 'object' || ancestors.has(item)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (!Array.isArray(item) && Object.getPrototypeOf(item) !== Object.prototype && Object.getPrototypeOf(item) !== null) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n ancestors.add(item);\n try {\n if (Array.isArray(item)) {\n if (Reflect.ownKeys(item).length !== item.length + 1) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n for (let i = 0; i < item.length; i++) {\n const field = Object.getOwnPropertyDescriptor(item, String(i));\n if (!field || !('value' in field) || !field.enumerable) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n await visit(field.value, depth + 1);\n }\n } else {\n for (const key of Reflect.ownKeys(item)) {\n const field = Object.getOwnPropertyDescriptor(item, key);\n // Accessors, symbols and hidden fields are not persisted JSON data.\n if (typeof key !== 'string' || !field || !('value' in field) || !field.enumerable) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n await visit(key, depth + 1);\n await visit(field.value, depth + 1);\n }\n }\n } finally { ancestors.delete(item); }\n };\n await visit(value, 0);\n}\n\n/** Keys belong to one operation. Dispose the guard when that operation ends. */\nexport interface CloudOperationGuard {\n guardText(text: string): void;\n /** Decode first. Check every key and value before admitted re-serialization. */\n guardPayload(dataJson: string): string;\n dispose(): void;\n}\nexport async function prepareCloudGuard(env: Readonly<Record<string, unknown>>, selected?: PlatformProfileId): Promise<CloudOperationGuard> {\n if (selected !== undefined && (typeof selected !== 'string' || !Object.hasOwn(PLATFORM_PROFILES, selected))) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const credentials = platformCredentialReader(env);\n const keys: string[] = [];\n for (const [id, profile] of Object.entries(PLATFORM_PROFILES)) {\n try {\n if (env[profile.binding] === undefined && id !== selected) continue;\n keys.push(await credentials.get(profile.secretName));\n }\n catch {\n // Preserve 4b isolation. Only an explicit selected profile permits this exception.\n if (selected && id !== selected) continue;\n keys.length = 0;\n throw new CloudDoError('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE');\n }\n }\n let disposed = false;\n const guardText = (text: string): void => {\n if (disposed || typeof text !== 'string') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (hasUserKeyShape(text)) throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED');\n for (const key of keys) {\n const guard = new RollingLeakGuard(key);\n try { guard.push(text); guard.finish(); }\n catch { throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED'); }\n }\n };\n return {\n guardText,\n guardPayload(dataJson) {\n if (disposed || typeof dataJson !== 'string') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n let value: unknown;\n try { value = JSON.parse(dataJson); }\n catch { throw new CloudDoError('CLOUD_REQUEST_INVALID'); }\n let nodes = 0;\n const visit = (item: unknown, depth: number): void => {\n if (++nodes > 10_000 || depth > 32) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (typeof item === 'string') { guardText(item); return; }\n if (item === null || typeof item === 'boolean' || (typeof item === 'number' && Number.isFinite(item))) return;\n if (!item || typeof item !== 'object') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (Array.isArray(item)) { for (const field of item) visit(field, depth + 1); }\n else {\n if (Object.getPrototypeOf(item) !== Object.prototype && Object.getPrototypeOf(item) !== null) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n for (const [key, field] of Object.entries(item)) { visit(key, depth + 1); visit(field, depth + 1); }\n }\n };\n visit(value, 0);\n return JSON.stringify(value);\n },\n dispose() { keys.length = 0; disposed = true; },\n };\n}\n","import { hasUserKeyShape } from './admission';\nimport { CloudDoError } from './errors';\nimport { platformProfile, type PlatformProfileId } from './platform-credentials';\n\nexport type InboxSource = 'message' | 'schedule' | 'invocation';\nexport interface CloudInboxAdmission {\n readonly dedupKey: string;\n readonly source: InboxSource;\n readonly text: string;\n readonly profile: PlatformProfileId;\n readonly availableAt?: number;\n readonly expiresAt?: number;\n}\nconst fields = new Set(['dedupKey', 'source', 'text', 'profile', 'availableAt', 'expiresAt']);\nconst credentials = new Set(['credential', 'credentials', 'apikey', 'api_key', 'secret', 'authorization', 'x-api-key', 'api-key', 'x-goog-api-key', 'proxy-authorization', 'cf-aig-authorization', 'headers']);\nexport const INBOX_DAY = 86_400_000;\n\n/** Freeze the wire schema before credential reads or storage writes. */\nexport function admitCloudInbox(input: unknown, now = Date.now()): CloudInboxAdmission {\n if (!input || typeof input !== 'object' || Array.isArray(input)\n || (Object.getPrototypeOf(input) !== Object.prototype && Object.getPrototypeOf(input) !== null)) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n for (const key of Reflect.ownKeys(input)) {\n if (typeof key === 'string' && credentials.has(key.toLowerCase())) throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED');\n const descriptor = Object.getOwnPropertyDescriptor(input, key);\n if (typeof key !== 'string' || !fields.has(key) || !descriptor?.enumerable || !('value' in descriptor)) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n }\n const body = input as Record<string, unknown>;\n if (typeof body.dedupKey !== 'string' || !body.dedupKey.length || body.dedupKey.length > 128\n || /[\\u0000-\\u001f\\u007f-\\u009f]/u.test(body.dedupKey)\n || typeof body.text !== 'string' || !body.text.trim() || body.text.length > 16_000\n || !['message', 'schedule', 'invocation'].includes(body.source as string)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (hasUserKeyShape(body.text) || hasUserKeyShape(body.dedupKey)) throw new CloudDoError('CLOUD_USER_CREDENTIAL_REJECTED');\n for (const key of ['availableAt', 'expiresAt']) {\n if (body[key] !== undefined && !Number.isSafeInteger(body[key])) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n const availableAt = body.availableAt as number | undefined;\n const expiresAt = body.expiresAt as number | undefined;\n if ((availableAt !== undefined && availableAt > now + 30 * INBOX_DAY)\n || (expiresAt !== undefined && availableAt !== undefined && expiresAt <= availableAt)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n // An omitted availability on retry resolves from the retained row, not this admission clock.\n // CloudState validates the complete pair before any item/event/alarm write.\n return Object.freeze({ dedupKey: body.dedupKey, source: body.source as InboxSource, text: body.text,\n profile: platformProfile(body.profile === undefined ? 'zai_openai' : body.profile),\n ...(availableAt === undefined ? {} : { availableAt }), ...(expiresAt === undefined ? {} : { expiresAt }) });\n}\n","import type { JsonValue } from '@earendil-works/pi-ai';\nimport type { ToolRegistration } from '@earendil-works/pi-durable';\nimport { CloudDoError, type CloudDoErrorCode } from './errors';\nimport type { SessionIdentity } from './identity';\n\nexport const CLOUD_SAFE_REPLAY_TOOLS = Object.freeze([\n 'load_financial_analysis_skill', 'resolve_security', 'guarded_screen', 'search_f10_datasets',\n 'query_f10_dataset', 'get_security_profile', 'get_quote_snapshot', 'get_corporate_actions',\n 'get_financial_statements', 'get_financial_facts', 'get_financial_ratios', 'get_sdi_disclosures',\n 'get_directorate', 'get_ownership', 'get_related_warrants',\n] as const);\n\nexport const CLOUD_LIVE_IPO_TOOLS = Object.freeze([\n 'get_ipo_profile', 'search_ipo_calendar', 'get_ipo_timetable', 'get_ipo_offering',\n 'get_ipo_allotment', 'screen_ipos', 'compare_ipos',\n] as const);\n\nconst safeTools: ReadonlySet<string> = new Set(CLOUD_SAFE_REPLAY_TOOLS);\nconst admittedNames: ReadonlySet<string> = new Set([...CLOUD_SAFE_REPLAY_TOOLS, ...CLOUD_LIVE_IPO_TOOLS]);\n\nexport interface CloudToolDefinition {\n readonly name: string;\n readonly description: string;\n readonly parameters: ToolRegistration['parameters'];\n readonly execution: 'read_only_live' | 'skill' | 'scaffold' | 'pure';\n readonly resolverRpc?: string;\n readonly mode?: 'inline' | 'job';\n readonly requiredCapabilities?: readonly string[];\n}\n\nexport interface CloudDispatchContext {\n readonly identity: SessionIdentity;\n readonly principal: { readonly accountId: string; readonly workspaceId: string; readonly channel: string };\n readonly scopes: readonly string[];\n readonly dispatcherId: string;\n readonly call?: { readonly invocationId: string; readonly conversationId: number; readonly toolCallId: string; readonly attempt: number };\n /** Session-local lookup can return a non-terminal invocation. */\n readonly lookup?: (invocationId: string) => {\n toolName: string; state: string; errorCode: string | null; resultJson: string | null;\n conversationId: number; toolCallId: string; settledAt: number | null; settledEventSeq: number | null;\n } | undefined;\n}\n\n/** Runtime calls supply these fields. Configuration remains source compatible. */\nexport interface CloudToolCallContext extends CloudDispatchContext {\n readonly call: NonNullable<CloudDispatchContext['call']>;\n readonly lookup: NonNullable<CloudDispatchContext['lookup']>;\n}\n\nexport type CloudToolResult = Record<string, unknown> & { modelView?: JsonValue };\n\nexport interface CloudToolDispatcher {\n readonly pureTools?: readonly string[];\n readonly domainErrors?: readonly string[];\n readonly modelViews?: boolean;\n readonly tools: readonly CloudToolDefinition[];\n execute(context: CloudDispatchContext, name: string, args: Record<string, unknown>, signal: AbortSignal): Promise<CloudToolResult>;\n}\n\n// Keep the fixed serving-domain vocabulary. Declared codes cannot use these names.\nexport const CLOUD_DOMAIN_ERROR_CODES: Readonly<Record<string, CloudDoErrorCode>> = Object.freeze({\n NOT_FOUND: 'CLOUD_TOOL_NOT_AVAILABLE', DATA_NOT_LICENSED: 'CLOUD_TOOL_NOT_AVAILABLE',\n DATA_QUALITY_HOLD: 'CLOUD_TOOL_NOT_AVAILABLE', SCOPE_DENIED: 'CLOUD_TOOL_NOT_AVAILABLE',\n TOOL_UNAVAILABLE: 'CLOUD_TOOL_NOT_AVAILABLE', TOOL_ARGUMENT_INVALID: 'CLOUD_TOOL_ARGUMENT_INVALID',\n OUT_OF_RANGE: 'CLOUD_TOOL_ARGUMENT_INVALID', TOO_MANY_ROWS: 'CLOUD_TOOL_ARGUMENT_INVALID',\n AMBIGUOUS_SECURITY: 'CLOUD_TOOL_ARGUMENT_INVALID', SYMBOL_AMBIGUOUS: 'CLOUD_TOOL_ARGUMENT_INVALID',\n});\n\nfunction policyNames(names: readonly string[] | undefined, max: number, pattern: RegExp,\n forbidden: (name: string) => boolean): readonly string[] {\n if (names === undefined) return Object.freeze([]);\n if (!Array.isArray(names) || names.length > max || new Set(names).size !== names.length\n || Array.from(names).some(name => typeof name !== 'string' || !pattern.test(name) || forbidden(name))) {\n throw new CloudDoError('CLOUD_TOOL_NOT_AVAILABLE');\n }\n return Object.freeze([...names].sort());\n}\n\n/** Admission does not grant resolver access. The trusted dispatcher checks access at execution. */\nexport function admitCloudTools(tools: readonly CloudToolDefinition[], pureTools: readonly string[] = []): readonly CloudToolDefinition[] {\n const pure = new Set(policyNames(pureTools, 8, /^[a-z][a-z0-9_]{2,63}$/, name => admittedNames.has(name)));\n const seen = new Set<string>();\n for (const tool of tools) {\n // Native TSchema is opaque. Inspect its JSON Schema fields at admission.\n const schema = tool.parameters as unknown as Record<string, unknown>;\n if (!(tool.execution === 'pure' ? pure.has(tool.name) : admittedNames.has(tool.name)) || seen.has(tool.name) || typeof tool.description !== 'string'\n || (tool.mode !== undefined && tool.mode !== 'inline') || (tool.requiredCapabilities?.length ?? 0) > 0\n || !schema || schema.type !== 'object' || schema.additionalProperties !== false\n || !schema.properties || typeof schema.properties !== 'object' || Array.isArray(schema.properties)\n || (tool.execution === 'pure' ? tool.resolverRpc !== undefined : tool.name === 'load_financial_analysis_skill'\n ? tool.execution !== 'skill' || Object.keys(schema.properties).length !== 0\n : tool.execution !== 'read_only_live' || typeof tool.resolverRpc !== 'string' || !tool.resolverRpc.trim())) {\n throw new CloudDoError('CLOUD_TOOL_NOT_AVAILABLE');\n }\n seen.add(tool.name);\n }\n return Object.freeze([...tools]);\n}\n\n/** Copy policy values so consumer mutation cannot change an installed policy. */\nexport function admitCloudDispatcher(dispatcher: CloudToolDispatcher): CloudToolDispatcher {\n const pureTools = policyNames(dispatcher.pureTools, 8, /^[a-z][a-z0-9_]{2,63}$/, name => admittedNames.has(name));\n const domainErrors = policyNames(dispatcher.domainErrors, 64, /^[A-Z][A-Z0-9_]{2,63}$/, name => name.startsWith('CLOUD_') || Object.hasOwn(CLOUD_DOMAIN_ERROR_CODES, name));\n if (dispatcher.modelViews !== undefined && typeof dispatcher.modelViews !== 'boolean') throw new CloudDoError('CLOUD_TOOL_NOT_AVAILABLE');\n const tools = admitCloudTools(dispatcher.tools, pureTools);\n const snapshot = JSON.parse(JSON.stringify({ tools })) as { tools: CloudToolDefinition[] };\n const freeze = (value: unknown): void => {\n if (value && typeof value === 'object') { Object.values(value).forEach(freeze); Object.freeze(value); }\n };\n freeze(snapshot);\n return Object.freeze({ tools: snapshot.tools, pureTools, domainErrors, modelViews: dispatcher.modelViews ?? false,\n execute: dispatcher.execute.bind(dispatcher) });\n}\n\nexport function dispatcherDigest(dispatcher: CloudToolDispatcher): Promise<string> {\n return digest(canonicalArgs({\n tools: dispatcher.tools.map(({ name, execution, parameters }) => ({ name, execution, parameters })).sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0),\n pureTools: [...(dispatcher.pureTools ?? [])].sort(), domainErrors: [...(dispatcher.domainErrors ?? [])].sort(),\n modelViews: dispatcher.modelViews ?? false,\n }));\n}\n\n/** This policy is stored in the ledger only. Native pi registrations always use unsafe. */\nexport function replayForTool(name: string): 'safe' | 'unsafe' {\n return safeTools.has(name) ? 'safe' : 'unsafe';\n}\n\nfunction canonical(value: unknown, ancestors: Set<object>): string {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return JSON.stringify(value);\n if (typeof value === 'number' && Number.isFinite(value)) return JSON.stringify(value);\n if (typeof value !== 'object' || ancestors.has(value)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (!Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n // Sparse arrays are not parsed JSON and must not collide with valid arrays.\n if (Object.keys(value).length !== value.length) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return `[${value.map(item => canonical(item, ancestors)).join(',')}]`;\n }\n return `{${Object.keys(value).sort().map(key => `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key], ancestors)}`).join(',')}}`;\n } finally { ancestors.delete(value); }\n}\n\nexport function canonicalArgs(args: Record<string, unknown>): string {\n if (!args || typeof args !== 'object' || Array.isArray(args)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return canonical(args, new Set());\n}\n\nasync function digest(value: string): Promise<string> {\n const bytes = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value));\n return Array.from(new Uint8Array(bytes), byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\nexport function invocationId(conversationId: number, assistantEntryId: number, toolCallId: string): Promise<string> {\n return digest(JSON.stringify([conversationId, assistantEntryId, toolCallId]));\n}\n\nexport function argsDigest(toolName: string, args: Record<string, unknown>): Promise<string> {\n return digest(`[${JSON.stringify(toolName)},${canonicalArgs(args)}]`);\n}\n","import { CloudDoError, type CloudDoErrorCode } from './errors';\nimport { INBOX_DAY, type CloudInboxAdmission, type InboxSource } from './inbox-admission';\nimport type { CloudOperationGuard } from './input-guard';\nimport type { ExecutionRow, InvocationRow } from './invocation-ledger';\nimport type { PlatformProfileId } from './platform-credentials';\nimport { canonicalArgs } from './tools';\n\nexport type InboxState = 'queued' | 'running' | 'done' | 'failed' | 'interrupted' | 'cancelled' | 'expired';\nexport interface InboxRow {\n seq: number; dedupKey: string; payloadDigest: string; source: InboxSource; profile: PlatformProfileId;\n payloadJson: string | null; availableAt: number; expiresAt: number; state: InboxState;\n runId: number | null; attempts: number; errorCode: CloudDoErrorCode | null; createdAt: number; settledAt: number | null; inputDurable: number; revision: number | null;\n}\nexport interface RunRow extends ExecutionRow {\n trigger: 'submit' | 'wake'; requestId: string | null; submissionId: number | null;\n state: 'starting' | 'running' | 'completed' | 'failed' | 'interrupted';\n errorCode: CloudDoErrorCode | null; startedAt: number | null; settledAt: number | null;\n reservation: 'none' | 'pending' | 'held' | 'released'; eligibilityJson: string | null;\n admissionDigest: string | null; admittedSeqs: string | null; settlementAck: number | null; revision: number | null;\n}\nexport interface TranscriptCursor { horizon: number; run: number | null; item: number | null }\nexport interface TranscriptTurn {\n seq: number; runId: number | null; state: InboxState | null; errorCode: CloudDoErrorCode | null;\n revision: number | null; text: string | null;\n}\nexport interface TranscriptItem {\n seq: number; dedupKey: string; state: InboxState; errorCode: CloudDoErrorCode | null;\n runId: number | null; attempts: number; revision: number | null; text: string | null;\n}\nexport interface TranscriptInvocation {\n invocationId: string; toolName: string; state: InvocationRow['state']; errorCode: CloudDoErrorCode | null; revision: number | null;\n}\nexport interface TranscriptRun {\n nativeRunId: number; revision: number | null; state: RunRow['state']; errorCode: CloudDoErrorCode | null;\n trigger: RunRow['trigger']; settlementAck: boolean; claimedSeqs: number[]; turns: TranscriptTurn[];\n text?: string; truncated?: boolean; invocations: TranscriptInvocation[];\n}\nexport interface TranscriptPlan {\n runs: Array<{ run: RunRow; turns: TranscriptTurn[]; invocations: TranscriptInvocation[] }>;\n items: TranscriptItem[]; next: TranscriptCursor;\n}\nexport interface AdmissionIdentity { digest: string; seqs: number[] }\nexport interface CloudEventRow {\n seq: number; eventKey: string; type: string; conversationId: number | null; ref: string | null; dataJson: string; createdAt: number;\n}\nexport interface CloudEventInput {\n eventKey: string; type: string; conversationId?: number; ref?: string; data: Record<string, unknown>; createdAt?: number;\n}\nexport interface CloudEventMeta { trimmedThrough: number; highWater: number }\nexport interface SchedulingState { busy?: boolean; repairRetrying?: boolean }\nexport interface RunSettlement {\n state: 'completed' | 'failed' | 'interrupted'; errorCode?: CloudDoErrorCode; text?: string; entryId?: number;\n /** The caller derives this only from the durable pre-recovery eligibility snapshot. */\n requeue?: boolean;\n}\nexport interface RunHistory { input: unknown; reply: string }\nexport interface InboxInput { seq: number; source: InboxSource; text: string }\nexport type InvocationProjection = (row: InvocationRow) => { key: string; dataJson: string } | undefined;\ntype SqlRow<T> = T & Record<string, SqlStorageValue>;\nconst encoder = new TextEncoder();\nexport const CLOUD_CONTEXT_BYTES = 48_000;\nconst RETENTION = 7 * INBOX_DAY;\nconst terminalInbox = \"state NOT IN ('queued','running')\";\nconst terminalRun = \"state NOT IN ('starting','running')\";\nconst terminalInvocation = \"state NOT IN ('accepted','running')\";\n\nexport function inboxInput(rows: readonly InboxRow[]): InboxInput[] {\n return rows.map(row => ({ seq: row.seq, source: row.source, text: (JSON.parse(row.payloadJson!) as { text: string }).text }));\n}\nexport function admissionIdentity(rows: readonly InboxRow[]): AdmissionIdentity {\n return { digest: sha256(JSON.stringify(rows.map(row => [row.seq, row.dedupKey,\n sha256((JSON.parse(row.payloadJson!) as { text: string }).text), row.profile]))), seqs: rows.map(row => row.seq) };\n}\n/** Accept only the committed native wake input shape. */\nexport function runInputSeqs(entries: readonly unknown[]): number[] {\n if (!Array.isArray(entries)) return [];\n const entry = entries.find(value => value !== null && typeof value === 'object' && (value as {kind?:unknown}).kind === 'byok.run-input');\n if (!entry || typeof entry !== 'object') return [];\n const data = (entry as {data?:unknown}).data;\n if (!data || typeof data !== 'object' || Array.isArray(data)) return [];\n const items = (data as {items?:unknown}).items;\n if (!Array.isArray(items) || items.length > 16) return [];\n const seqs: number[] = [];\n for (const item of items) {\n if (!item || typeof item !== 'object' || Array.isArray(item)) return [];\n const {seq, source, text} = item as {seq?:unknown;source?:unknown;text?:unknown};\n if (typeof seq !== 'number' || !Number.isSafeInteger(seq) || seq <= 0 || seqs.includes(seq)\n || (typeof source !== 'string' || !['message','schedule','invocation'].includes(source)) || typeof text !== 'string') return [];\n seqs.push(seq);\n }\n return seqs;\n}\nfunction payloadText(row: InboxRow | undefined): string | null {\n if (row?.payloadJson === null || row?.payloadJson === undefined) return null;\n const value = JSON.parse(row.payloadJson) as {text?:unknown};\n return typeof value.text === 'string' ? value.text : null;\n}\n/** Fit inbox first. Add the newest history prefix, then emit it in chronological order. */\nexport function composeCloudInput(rows: readonly InboxRow[], historyNewestFirst: readonly RunHistory[] = []): string {\n const inbox = inboxInput(rows);\n const history: RunHistory[] = [];\n for (const item of historyNewestFirst.slice(0, 20)) {\n const candidate = [item, ...history];\n if (encoder.encode(canonicalArgs({ history: candidate, inbox })).byteLength > CLOUD_CONTEXT_BYTES) break;\n history.unshift(item);\n }\n return canonicalArgs({ history, inbox });\n}\nexport function utf8Prefix(text: string, maxBytes: number): string {\n let bytes = 0; let end = 0;\n for (const point of text) {\n const size = encoder.encode(point).length;\n if (bytes + size > maxBytes) break;\n bytes += size; end += point.length;\n }\n return text.slice(0, end);\n}\n\n/** Synchronous SHA-256 keeps projection digests inside the existing SQLite transaction. */\nfunction sha256(text: string): string {\n const constants = [0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,\n 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,\n 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,\n 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,\n 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,\n 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,\n 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,\n 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2];\n const source = encoder.encode(text); const data = new Uint8Array(Math.ceil((source.length + 9) / 64) * 64);\n data.set(source); data[source.length] = 0x80;\n const view = new DataView(data.buffer);\n view.setUint32(data.length - 8, Math.floor(source.length / 0x20000000));\n view.setUint32(data.length - 4, source.length * 8);\n const hash = [0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19];\n const rotate = (value: number, count: number) => (value >>> count) | (value << (32 - count));\n const words = new Uint32Array(64);\n for (let offset = 0; offset < data.length; offset += 64) {\n for (let i = 0; i < 16; i++) words[i] = view.getUint32(offset + i * 4);\n for (let i = 16; i < 64; i++) {\n const a = words[i - 15]!; const b = words[i - 2]!;\n words[i] = words[i - 16]! + (rotate(a,7) ^ rotate(a,18) ^ (a >>> 3)) + words[i - 7]!\n + (rotate(b,17) ^ rotate(b,19) ^ (b >>> 10));\n }\n let [a,b,c,d,e,f,g,h] = hash as [number,number,number,number,number,number,number,number];\n for (let i = 0; i < 64; i++) {\n const first = (h + (rotate(e,6) ^ rotate(e,11) ^ rotate(e,25)) + ((e & f) ^ (~e & g)) + constants[i]! + words[i]!) | 0;\n const second = ((rotate(a,2) ^ rotate(a,13) ^ rotate(a,22)) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h=g; g=f; f=e; e=(d+first)|0; d=c; c=b; b=a; a=(first+second)|0;\n }\n for (const [index,value] of [a,b,c,d,e,f,g,h].entries()) hash[index] = (hash[index]! + value) >>> 0;\n }\n return hash.map(value => value.toString(16).padStart(8,'0')).join('');\n}\n\n/** Visible SQL state. Sync helpers can participate in the caller's transaction. */\nexport class CloudState {\n private scheduling: SchedulingState = {};\n constructor(private readonly storage: DurableObjectStorage) {}\n private rows<T>(query: string, ...values: SqlStorageValue[]): T[] {\n return this.storage.sql.exec<SqlRow<T>>(query, ...values).toArray();\n }\n ensureSchema(): void {\n this.storage.transactionSync(() => {\n this.storage.sql.exec(`CREATE TABLE IF NOT EXISTS cloud_inbox (\n seq INTEGER PRIMARY KEY AUTOINCREMENT, dedupKey TEXT NOT NULL UNIQUE, payloadDigest TEXT NOT NULL,\n source TEXT NOT NULL CHECK(source IN ('message','schedule','invocation')), profile TEXT NOT NULL, payloadJson TEXT,\n availableAt INTEGER NOT NULL, expiresAt INTEGER NOT NULL,\n state TEXT NOT NULL CHECK(state IN ('queued','running','done','failed','interrupted','cancelled','expired')),\n runId INTEGER, attempts INTEGER NOT NULL DEFAULT 0, errorCode TEXT, createdAt INTEGER NOT NULL, settledAt INTEGER,\n inputDurable INTEGER NOT NULL DEFAULT 0, revision INTEGER);\n CREATE INDEX IF NOT EXISTS cloud_inbox_runnable ON cloud_inbox(state,availableAt,seq);\n CREATE TABLE IF NOT EXISTS cloud_events (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,eventKey TEXT NOT NULL UNIQUE,type TEXT NOT NULL,\n conversationId INTEGER,ref TEXT,dataJson TEXT NOT NULL,createdAt INTEGER NOT NULL);\n CREATE TABLE IF NOT EXISTS cloud_event_meta (\n singleton INTEGER PRIMARY KEY CHECK(singleton=1),trimmedThrough INTEGER NOT NULL DEFAULT 0,\n highWater INTEGER NOT NULL DEFAULT 0,pendingMaintenanceAt INTEGER);\n INSERT INTO cloud_event_meta(singleton) VALUES(1) ON CONFLICT DO NOTHING;\n CREATE TABLE IF NOT EXISTS cloud_projections (\n key TEXT PRIMARY KEY,invocationId TEXT NOT NULL,state TEXT NOT NULL,payloadDigest TEXT NOT NULL,\n dataJson TEXT NOT NULL,errorCode TEXT,createdAt INTEGER NOT NULL);\n CREATE TABLE IF NOT EXISTS cloud_run_turns (\n runId INTEGER NOT NULL, seq INTEGER NOT NULL, claimEvent INTEGER, releaseEvent INTEGER,\n PRIMARY KEY (runId,seq));\n CREATE INDEX IF NOT EXISTS cloud_run_turns_by_seq ON cloud_run_turns(seq,runId)`);\n });\n }\n readInboxItem(seq: number): InboxRow | undefined { return this.rows<InboxRow>('SELECT * FROM cloud_inbox WHERE seq=?', seq)[0]; }\n run(conversationId: number): RunRow | undefined { return this.rows<RunRow>('SELECT * FROM cloud_executions WHERE conversationId=?', conversationId)[0]; }\n unsettledRuns(): RunRow[] { return this.rows<RunRow>(`SELECT * FROM cloud_executions WHERE ${terminalRun.replace('NOT IN', 'IN')} ORDER BY conversationId`); }\n completedRuns(): RunRow[] { return this.rows<RunRow>(\"SELECT * FROM cloud_executions WHERE state='completed' ORDER BY conversationId DESC LIMIT 20\"); }\n invocationRowsForRun(id: number): InvocationRow[] { return this.rows<InvocationRow>('SELECT * FROM cloud_invocations WHERE conversationId=? ORDER BY seq', id); }\n\n private stamp(table: 'cloud_inbox' | 'cloud_executions', key: number, revision: number): void {\n this.storage.sql.exec(`UPDATE ${table} SET revision=? WHERE ${table === 'cloud_inbox' ? 'seq' : 'conversationId'}=? AND (revision IS NULL OR revision<?)`, revision, key, revision);\n }\n claimedSeqs(id: number): number[] {\n return this.rows<{seq:number}>('SELECT seq FROM cloud_run_turns WHERE runId=? ORDER BY seq',id).map(row => row.seq);\n }\n markInputDurable(id: number, seqs: readonly number[]): void {\n this.storage.transactionSync(() => {\n for (const seq of seqs) this.storage.sql.exec(\"UPDATE cloud_inbox SET inputDurable=1 WHERE seq=? AND runId=? AND state='running'\",seq,id);\n });\n }\n unackedRuns(): RunRow[] {\n return this.rows<RunRow>(`SELECT * FROM cloud_executions WHERE ${terminalRun} AND settlementAck=0 ORDER BY conversationId`);\n }\n ackSettlement(id: number, guard: CloudOperationGuard, now=Date.now()): boolean {\n return this.storage.transactionSync(() => {\n if (this.run(id)?.settlementAck !== 0) return false;\n this.storage.sql.exec('UPDATE cloud_executions SET settlementAck=1 WHERE conversationId=?',id);\n const event = this.appendEvent({eventKey:`run:${id}:settlement`,type:'run.settlement',conversationId:id,\n data:{nativeRunId:id,ack:true},createdAt:now},guard);\n this.stamp('cloud_executions',id,event.seq);\n return true;\n });\n }\n\n /** Read-only preflight also works before this DO has initialized its schema. */\n validateEnqueue(input: CloudInboxAdmission, guard: CloudOperationGuard, now = Date.now()): void {\n guard.guardText(input.text); guard.guardText(input.dedupKey);\n const exists = this.rows<{name:string}>(\"SELECT name FROM sqlite_master WHERE type='table' AND name='cloud_inbox'\").length > 0;\n const previous = exists ? this.rows<InboxRow>('SELECT * FROM cloud_inbox WHERE dedupKey=?', input.dedupKey)[0] : undefined;\n this.enqueueIdentity(input, previous, now);\n }\n private enqueueIdentity(input: CloudInboxAdmission, previous: InboxRow | undefined, now: number) {\n const retained = previous && (previous.settledAt === null || previous.settledAt + RETENTION > now) ? previous : undefined;\n const availableAt = input.availableAt ?? retained?.availableAt ?? now;\n const expiresAt = input.expiresAt ?? retained?.expiresAt ?? availableAt + INBOX_DAY;\n if (!Number.isSafeInteger(availableAt) || !Number.isSafeInteger(expiresAt)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const payloadDigest = sha256(canonicalArgs({ source: input.source, text: input.text, profile: input.profile, availableAt, expiresAt }));\n if (retained && retained.payloadDigest !== payloadDigest) throw new CloudDoError('CLOUD_INBOX_CONFLICT');\n if (expiresAt <= availableAt || (!retained && availableAt > now + 30 * INBOX_DAY)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return { retained, availableAt, expiresAt, payloadDigest };\n }\n\n async enqueue(input: CloudInboxAdmission, guard: CloudOperationGuard, now = Date.now(), options?: SchedulingState): Promise<{ accepted: boolean; row: InboxRow }> {\n guard.guardText(input.text); guard.guardText(input.dedupKey);\n if (options) this.setSchedulingState(options);\n return this.storage.transaction(async () => {\n const previous = this.rows<InboxRow>('SELECT * FROM cloud_inbox WHERE dedupKey=?', input.dedupKey)[0];\n const {retained,availableAt,expiresAt,payloadDigest} = this.enqueueIdentity(input, previous, now);\n if (retained) return { accepted: false, row: retained };\n if (this.rows<{ count: number }>(\"SELECT COUNT(*) AS count FROM cloud_inbox WHERE state='queued'\")[0]!.count >= 100) throw new CloudDoError('CLOUD_INBOX_FULL');\n if (previous) this.storage.sql.exec('DELETE FROM cloud_inbox WHERE seq=?', previous.seq);\n const row = this.rows<InboxRow>(`INSERT INTO cloud_inbox(dedupKey,payloadDigest,source,profile,payloadJson,availableAt,expiresAt,state,createdAt)\n VALUES(?,?,?,?,?,?,?,'queued',?) RETURNING *`, input.dedupKey,payloadDigest,input.source,input.profile,\n guard.guardPayload(JSON.stringify({ text: input.text })),availableAt,expiresAt,now)[0]!;\n const event = this.appendEvent({ eventKey: `inbox:${row.seq}:accepted`,type:'inbox.accepted',ref:String(row.seq),data:{ seq:row.seq,source:row.source,profile:row.profile,availableAt,expiresAt },createdAt:now },guard);\n this.stamp('cloud_inbox',row.seq,event.seq);\n await this.rearmAlarm(undefined, now);\n return { accepted: true, row: this.readInboxItem(row.seq)! };\n });\n }\n\n /** Selection never skips another profile or a prefix item that exceeds the budget. */\n selectBatch(now = Date.now(), guard?: CloudOperationGuard): InboxRow[] {\n return this.storage.transactionSync(() => {\n const candidates = this.rows<InboxRow>(\"SELECT * FROM cloud_inbox WHERE state='queued' AND availableAt<=? AND expiresAt>? ORDER BY availableAt,seq LIMIT 17\",now,now);\n const selected: InboxRow[] = [];\n for (const row of candidates) {\n if (selected.length >= 16 || (selected.length && row.profile !== selected[0]!.profile)) break;\n if (encoder.encode(composeCloudInput([...selected,row])).length > CLOUD_CONTEXT_BYTES) {\n if (!selected.length && guard) this.settleItem(row,'failed','CLOUD_INBOX_TOO_LARGE',guard,now);\n break;\n }\n selected.push(row);\n }\n return selected;\n });\n }\n startRun(id: number, trigger: 'submit' | 'wake', deadlineAt: number, guard: CloudOperationGuard, now = Date.now()): RunRow {\n return this.storage.transactionSync(() => {\n this.storage.sql.exec(`INSERT INTO cloud_executions(conversationId,deadlineAt,trigger,requestId,state,startedAt,settlementAck)\n VALUES(?,?,?,?,?,?,0) ON CONFLICT(conversationId) DO UPDATE SET trigger=excluded.trigger,\n requestId=excluded.requestId,state=excluded.state,startedAt=excluded.startedAt,settlementAck=0 WHERE cloud_executions.startedAt IS NULL`,id,deadlineAt,trigger,`${trigger}:${id}`,trigger==='wake'?'starting':'running',now);\n if (trigger==='submit') {\n const event = this.appendEvent({eventKey:`run:${id}:started`,type:'run.started',conversationId:id,data:{trigger},createdAt:now},guard);\n this.stamp('cloud_executions',id,event.seq);\n }\n return this.run(id)!;\n });\n }\n markRunning(id: number, guard: CloudOperationGuard, now = Date.now()): void {\n this.storage.transactionSync(() => {\n const row = this.run(id);\n if (!row || row.state !== 'starting') return;\n this.storage.sql.exec(\"UPDATE cloud_executions SET state='running' WHERE conversationId=?\",id);\n const event = this.appendEvent({eventKey:`run:${id}:started`,type:'run.started',conversationId:id,data:{trigger:row.trigger},createdAt:now},guard);\n this.stamp('cloud_executions',id,event.seq);\n });\n }\n recordSubmission(id: number, submissionId: number): void { this.storage.sql.exec('UPDATE cloud_executions SET submissionId=? WHERE conversationId=?',submissionId,id); }\n markReservation(id: number, reservation: RunRow['reservation'], guard: CloudOperationGuard, now = Date.now(), admission?: AdmissionIdentity): void {\n this.storage.transactionSync(() => {\n const row = this.run(id);\n if (!row || (row.state !== 'starting' && row.state !== 'running')) return;\n if (reservation === 'pending' && admission && row.admissionDigest === null) this.storage.sql.exec(\n 'UPDATE cloud_executions SET admissionDigest=?,admittedSeqs=? WHERE conversationId=? AND admissionDigest IS NULL',admission.digest,JSON.stringify(admission.seqs),id);\n if (row.reservation === reservation) return;\n this.storage.sql.exec('UPDATE cloud_executions SET reservation=? WHERE conversationId=?',reservation,id);\n if (reservation !== 'pending') this.appendEvent({eventKey:`run:${id}:reservation:${reservation}`,type:'run.reservation',conversationId:id,\n data:{key:row.requestId,reservation,action:reservation==='released'?'release':'reserve'},createdAt:now},guard);\n });\n }\n captureEligibility(originalStale?: ReadonlySet<number>): RunRow[] {\n return this.storage.transactionSync(() => {\n for (const row of this.unsettledRuns()) if (row.eligibilityJson === null) this.storage.sql.exec(\n 'UPDATE cloud_executions SET eligibilityJson=? WHERE conversationId=? AND eligibilityJson IS NULL',\n JSON.stringify({steps:row.steps,aborted:row.aborted,fatalCode:row.fatalCode,wasStale:originalStale?.has(row.conversationId)??false}),row.conversationId);\n return this.unsettledRuns();\n });\n }\n claim(id: number, seqs: readonly number[], profile: PlatformProfileId, guard: CloudOperationGuard, now = Date.now()): InboxRow[] {\n return this.storage.transactionSync(() => {\n const run = this.run(id);\n if (!run || run.state !== 'starting') return [];\n const stopped = run.fatalCode ?? (run.aborted ? 'CLOUD_EXECUTION_ABORTED' : now >= run.deadlineAt ? 'CLOUD_EXECUTION_TIMEOUT' : undefined);\n if (stopped) { this.settleRun(id,{state:'interrupted',errorCode:stopped},guard,now); return []; }\n const allowed = new Set(seqs);\n const selected: InboxRow[] = [];\n for (const row of this.selectBatch(now,guard)) {\n if (!allowed.has(row.seq) || row.profile !== profile) break;\n selected.push(row);\n }\n const claimed: InboxRow[] = [];\n for (const row of selected) {\n if (row.attempts >= 3) { this.storage.sql.exec('UPDATE cloud_inbox SET attempts=attempts+1 WHERE seq=?',row.seq); this.settleItem(row,'failed','CLOUD_WAKE_EXHAUSTED',guard,now); continue; }\n this.storage.sql.exec(\"UPDATE cloud_inbox SET state='running',runId=?,attempts=attempts+1 WHERE seq=? AND state='queued'\",id,row.seq);\n claimed.push(this.readInboxItem(row.seq)!);\n }\n if (!claimed.length) { this.settleRun(id,{state:'interrupted',errorCode:'CLOUD_WAKE_EMPTY'},guard,now); return []; }\n this.storage.sql.exec(\"UPDATE cloud_executions SET state='running' WHERE conversationId=?\",id);\n const event = this.appendEvent({eventKey:`run:${id}:started`,type:'run.started',conversationId:id,data:{trigger:'wake',seqs:claimed.map(row=>row.seq)},createdAt:now},guard);\n for (const item of claimed) {\n this.storage.sql.exec('INSERT INTO cloud_run_turns(runId,seq,claimEvent) VALUES(?,?,?)',id,item.seq,event.seq);\n this.stamp('cloud_inbox',item.seq,event.seq);\n }\n this.stamp('cloud_executions',id,event.seq);\n return claimed.map(item => this.readInboxItem(item.seq)!);\n });\n }\n private settleItem(row: InboxRow, state: Exclude<InboxState,'queued'|'running'>, code: CloudDoErrorCode | undefined, guard: CloudOperationGuard, now: number): void {\n this.storage.sql.exec('UPDATE cloud_inbox SET state=?,errorCode=?,payloadJson=CASE WHEN inputDurable=1 THEN NULL ELSE payloadJson END,settledAt=? WHERE seq=? AND state IN (\\'queued\\',\\'running\\')',state,code??null,now,row.seq);\n const event = this.appendEvent({eventKey:`inbox:${row.seq}:settled`,type:'inbox.settled',conversationId:row.runId??undefined,ref:String(row.seq),data:{seq:row.seq,state,errorCode:code??null},createdAt:now},guard);\n this.stamp('cloud_inbox',row.seq,event.seq);\n }\n failQueued(seqs: readonly number[], code: CloudDoErrorCode, guard: CloudOperationGuard, now = Date.now()): void {\n this.storage.transactionSync(() => { for (const seq of seqs) { const row=this.readInboxItem(seq); if(row?.state==='queued') this.settleItem(row,'failed',code,guard,now); } });\n }\n cancelQueued(seq: number, guard: CloudOperationGuard, now = Date.now()): InboxRow | undefined {\n return this.storage.transactionSync(() => { const row=this.readInboxItem(seq); if(row?.state==='queued') this.settleItem(row,'cancelled','CLOUD_EXECUTION_ABORTED',guard,now); return this.readInboxItem(seq); });\n }\n expireQueued(guard: CloudOperationGuard, now = Date.now()): number {\n return this.storage.transactionSync(() => {\n const rows=this.rows<InboxRow>(\"SELECT * FROM cloud_inbox WHERE state='queued' AND expiresAt<=? ORDER BY expiresAt,seq LIMIT 100\",now);\n for(const row of rows) this.settleItem(row,'expired','CLOUD_INBOX_EXPIRED',guard,now);\n return rows.length;\n });\n }\n settleRun(id: number, outcome: RunSettlement, guard: CloudOperationGuard, now = Date.now()): RunRow | undefined {\n return this.storage.transactionSync(() => {\n const row=this.run(id);\n if(!row || (row.state!=='starting' && row.state!=='running')) return row;\n const items=this.rows<InboxRow>(\"SELECT * FROM cloud_inbox WHERE runId=? AND state='running' ORDER BY seq\",id);\n for(const item of items) {\n if(outcome.requeue && item.expiresAt>now) this.storage.sql.exec(\"UPDATE cloud_inbox SET state='queued',runId=NULL,inputDurable=0 WHERE seq=? AND state='running'\",item.seq);\n else {\n const expiredRequeue = outcome.requeue && item.expiresAt <= now;\n this.settleItem(item,expiredRequeue?'expired':outcome.state==='completed'?'done':outcome.state==='failed'?'failed':'interrupted',\n expiredRequeue?'CLOUD_INBOX_EXPIRED':outcome.errorCode,guard,now);\n }\n }\n if(row.reservation==='pending'||row.reservation==='held') {\n this.storage.sql.exec(\"UPDATE cloud_executions SET reservation='released' WHERE conversationId=?\",id);\n this.appendEvent({eventKey:`run:${id}:reservation:released`,type:'run.reservation',conversationId:id,data:{key:row.requestId,reservation:'released',action:'release'},createdAt:now},guard);\n }\n this.storage.sql.exec('UPDATE cloud_executions SET state=?,errorCode=?,settledAt=?,settlementAck=0 WHERE conversationId=?',outcome.state,outcome.errorCode??null,now,id);\n const data:Record<string,unknown>={state:outcome.state,errorCode:outcome.errorCode??null,seqs:items.map(item=>item.seq)};\n if(outcome.requeue) data.requeued=items.filter(item=>item.expiresAt>now).map(item=>item.seq);\n if(outcome.entryId!==undefined) data.entryId=outcome.entryId;\n if(outcome.state==='completed'&&outcome.text!==undefined) {\n try { guard.guardText(outcome.text); data.text=outcome.text; }\n catch { data.errorCode='CLOUD_MODEL_RESPONSE_REJECTED'; }\n if(encoder.encode(JSON.stringify(data)).length>65_536) { data.text=utf8Prefix(outcome.text,1024); data.truncated=true; }\n }\n const event = this.appendEvent({eventKey:`run:${id}:settled`,type:`run.${outcome.state}`,conversationId:id,data,createdAt:now},guard);\n for (const item of items) if (outcome.requeue && item.expiresAt > now) {\n this.storage.sql.exec('UPDATE cloud_run_turns SET releaseEvent=? WHERE runId=? AND seq=? AND releaseEvent IS NULL',event.seq,id,item.seq);\n this.stamp('cloud_inbox',item.seq,event.seq);\n }\n this.stamp('cloud_executions',id,event.seq);\n return this.run(id);\n });\n }\n\n /** The caller must wrap this and its state write in one transaction. */\n appendEvent(event: CloudEventInput, guard: CloudOperationGuard): CloudEventRow {\n guard.guardText(event.eventKey); guard.guardText(event.type);\n if(event.ref!==undefined) guard.guardText(event.ref);\n const dataJson=guard.guardPayload(JSON.stringify(event.data));\n if(encoder.encode(dataJson).length>65_536) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const previous=this.rows<CloudEventRow>('SELECT * FROM cloud_events WHERE eventKey=?',event.eventKey)[0];\n if(previous) {\n if(previous.type!==event.type||previous.conversationId!==(event.conversationId??null)||previous.ref!==(event.ref??null)||previous.dataJson!==dataJson) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return previous;\n }\n const count=this.rows<{count:number}>('SELECT COUNT(*) AS count FROM cloud_events')[0]!.count;\n if(count>=10_000) this.trimPrefix(count-9500);\n const row=this.rows<CloudEventRow>(`INSERT INTO cloud_events(eventKey,type,conversationId,ref,dataJson,createdAt)\n VALUES(?,?,?,?,?,?) RETURNING *`,event.eventKey,event.type,event.conversationId??null,event.ref??null,dataJson,event.createdAt??Date.now())[0]!;\n this.storage.sql.exec('UPDATE cloud_event_meta SET highWater=? WHERE singleton=1',row.seq);\n return row;\n }\n eventMeta(): CloudEventMeta { return this.rows<CloudEventMeta>('SELECT trimmedThrough,highWater FROM cloud_event_meta WHERE singleton=1')[0]!; }\n eventPage(after: number, limit = 100): CloudEventRow[] {\n return this.storage.transactionSync(() => {\n const meta=this.eventMeta();\n if(!Number.isSafeInteger(after)||after<0||(after!==0&&after<meta.trimmedThrough)||after>meta.highWater) throw new CloudDoError('CLOUD_EVENT_CURSOR_EXPIRED');\n return this.rows<CloudEventRow>('SELECT * FROM cloud_events WHERE seq>? ORDER BY seq LIMIT ?',after===0?meta.trimmedThrough:after,this.pageLimit(limit));\n });\n }\n private pageLimit(value=100): number {\n if(!Number.isSafeInteger(value)||value<1||value>100) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return value;\n }\n /** Capture ownership and payloads before any asynchronous pi context read. */\n planTranscript(after: TranscriptCursor | undefined, limit: number): TranscriptPlan {\n return this.storage.transactionSync(() => {\n const highWater = this.eventMeta().highWater;\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 50) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (after !== undefined) {\n if (!after || typeof after !== 'object' || Array.isArray(after)\n || Object.keys(after).length !== 3 || !['horizon','run','item'].every(key => Object.hasOwn(after,key))\n || !Number.isSafeInteger(after.horizon) || after.horizon < 0 || after.horizon > highWater\n || [after.run,after.item].some(value => value !== null && (!Number.isSafeInteger(value) || value <= 0))) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n }\n const horizon = after?.horizon ?? highWater;\n const runRows = after?.run === null ? [] : this.rows<RunRow>(\n 'SELECT * FROM cloud_executions WHERE conversationId<? ORDER BY conversationId DESC LIMIT ?',after?.run ?? Number.MAX_SAFE_INTEGER,limit);\n const runs = runRows.map(run => {\n const memberships = this.rows<{seq:number}>(`SELECT seq FROM cloud_run_turns WHERE runId=?\n AND (claimEvent IS NULL OR claimEvent<=?) AND (releaseEvent IS NULL OR releaseEvent>?) ORDER BY seq`,run.conversationId,horizon,horizon);\n const turns = memberships.map(({seq}): TranscriptTurn => {\n const inbox = this.readInboxItem(seq);\n // A NULL legacy clock proves historical input only. Live membership proves the current link.\n const current = inbox ? inbox.runId : this.rows<{runId:number}>(`SELECT runId FROM cloud_run_turns\n WHERE seq=? AND claimEvent IS NOT NULL AND releaseEvent IS NULL ORDER BY runId DESC LIMIT 1`,seq)[0]?.runId ?? null;\n return {seq,runId:current,state:inbox?.state ?? null,errorCode:inbox?.errorCode ?? null,\n revision:inbox?.revision ?? null,text:payloadText(inbox)};\n });\n const invocations = this.invocationRowsForRun(run.conversationId).map(row => ({\n invocationId:row.invocationId,toolName:row.toolName,state:row.state,errorCode:row.errorCode,\n revision:row.state === 'accepted' || row.state === 'running' ? null : row.settledEventSeq,\n }));\n return {run,turns,invocations};\n });\n const itemRows = after?.item === null ? [] : this.rows<InboxRow>(`SELECT i.* FROM cloud_inbox i WHERE i.seq<?\n AND NOT EXISTS(SELECT 1 FROM cloud_run_turns t WHERE t.seq=i.seq\n AND (t.claimEvent IS NULL OR t.claimEvent<=?) AND (t.releaseEvent IS NULL OR t.releaseEvent>?))\n ORDER BY i.seq DESC LIMIT ?`,after?.item ?? Number.MAX_SAFE_INTEGER,horizon,horizon,limit);\n const items = itemRows.map(row => ({seq:row.seq,dedupKey:row.dedupKey,state:row.state,errorCode:row.errorCode,\n runId:row.runId,attempts:row.attempts,revision:row.revision,text:payloadText(row)}));\n return {runs,items,next:{horizon,run:runRows.length < limit ? null : runRows.at(-1)!.conversationId,\n item:itemRows.length < limit ? null : itemRows.at(-1)!.seq}};\n });\n }\n readRun(id: number): RunRow | undefined { return this.run(id); }\n readRuns(options: {after?:number;limit?:number} = {}): RunRow[] {\n return this.rows<RunRow>(`SELECT * FROM cloud_executions WHERE ${terminalRun} AND conversationId<? ORDER BY conversationId DESC LIMIT ?`,this.pageAfter(options.after),this.pageLimit(options.limit));\n }\n readInbox(options: {after?:number;limit?:number} = {}): InboxRow[] {\n return this.rows<InboxRow>(`SELECT * FROM cloud_inbox WHERE ${terminalInbox} AND seq<? ORDER BY seq DESC LIMIT ?`,this.pageAfter(options.after),this.pageLimit(options.limit)).map(row=>({...row,payloadJson:null}));\n }\n readInvocations(options: {after?:number;limit?:number} = {}): Array<Pick<InvocationRow,'seq'|'invocationId'|'toolName'|'state'|'errorCode'>> {\n return this.rows(`SELECT seq,invocationId,toolName,state,errorCode FROM cloud_invocations WHERE ${terminalInvocation} AND seq<? ORDER BY seq DESC LIMIT ?`,this.pageAfter(options.after),this.pageLimit(options.limit));\n }\n private pageAfter(after: number | undefined): number {\n if(after!==undefined&&(!Number.isSafeInteger(after)||after<0)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return after??Number.MAX_SAFE_INTEGER;\n }\n snapshot(): {highWater:number;trimmedThrough:number;inbox:InboxRow[];runs:RunRow[];invocations:Array<Pick<InvocationRow,'seq'|'invocationId'|'toolName'|'state'|'errorCode'>>} {\n return this.storage.transactionSync(() => {\n const inbox=[...this.rows<InboxRow>(\"SELECT * FROM cloud_inbox WHERE state IN ('queued','running') ORDER BY seq\"),...this.readInbox()].map(row=>({...row,payloadJson:null}));\n const runs=[...this.unsettledRuns(),...this.readRuns()];\n const invocations=[...this.rows<Pick<InvocationRow,'seq'|'invocationId'|'toolName'|'state'|'errorCode'>>(\"SELECT seq,invocationId,toolName,state,errorCode FROM cloud_invocations WHERE state IN ('accepted','running') ORDER BY seq\"),...this.readInvocations()];\n return {...this.eventMeta(),inbox,runs,invocations};\n });\n }\n setDelivery(id: string, state: 'delivered'|'undelivered', taskId: number|null, entryId: number|null, guard: CloudOperationGuard, now=Date.now()): void {\n const row=this.rows<InvocationRow&{deliveredState:string;taskId:number|null;resultEntryId:number|null}>('SELECT * FROM cloud_invocations WHERE invocationId=?',id)[0];\n if(!row||row.deliveredState===state&&row.taskId===taskId&&row.resultEntryId===entryId) return;\n this.storage.sql.exec('UPDATE cloud_invocations SET deliveredState=?,taskId=?,resultEntryId=? WHERE invocationId=?',state,taskId,entryId,id);\n this.appendEvent({eventKey:`tool:${id}:delivered:${state}:${taskId??''}:${entryId??''}`,type:'tool.delivered',conversationId:row.conversationId,ref:id,\n data:{invocationId:id,deliveredState:state,taskId,resultEntryId:entryId},createdAt:now},guard);\n }\n projectInvocation(row: InvocationRow, project: InvocationProjection | undefined, guard: CloudOperationGuard, now=Date.now()): void {\n if(!project) return;\n let admitted:{key:string;dataJson:string;digest:string}|undefined;\n try {\n const value=project(Object.freeze({...row}));\n if(value===undefined) return;\n const key = value.key;\n const rawDataJson = value.dataJson;\n if(typeof key!=='string'||!key.length||key.length>128||/[\\u0000-\\u001f\\u007f-\\u009f]/u.test(key)||typeof rawDataJson!=='string') throw new Error();\n // Bound raw hook input before JSON parsing and decoded-value traversal.\n if (rawDataJson.length > 16_384 || encoder.encode(rawDataJson).byteLength > 16_384) throw new Error();\n guard.guardText(key);\n const dataJson=guard.guardPayload(rawDataJson);\n if(encoder.encode(dataJson).length>16_384) throw new Error();\n admitted={key:`projection:${row.invocationId}:${key}`,dataJson,digest:sha256(dataJson)};\n } catch { this.projectionFailed(row,guard,now); return; }\n const previous=this.rows<{invocationId:string;state:string;payloadDigest:string}>('SELECT invocationId,state,payloadDigest FROM cloud_projections WHERE key=?',admitted.key)[0];\n if(previous) {\n if(previous.invocationId!==row.invocationId||previous.state!==row.state||previous.payloadDigest!==admitted.digest) this.projectionFailed(row,guard,now);\n return;\n }\n this.storage.sql.exec('INSERT INTO cloud_projections(key,invocationId,state,payloadDigest,dataJson,createdAt) VALUES(?,?,?,?,?,?)',admitted.key,row.invocationId,row.state,admitted.digest,admitted.dataJson,now);\n this.appendEvent({eventKey:admitted.key,type:'projection',conversationId:row.conversationId,ref:row.invocationId,\n data:{key:admitted.key,invocationId:row.invocationId,data:JSON.parse(admitted.dataJson)},createdAt:now},guard);\n }\n private projectionFailed(row: InvocationRow, guard: CloudOperationGuard, now: number): void {\n const key=`sdk:${row.invocationId}:projection-failed`;\n const existing=this.rows<{key:string}>('SELECT key FROM cloud_projections WHERE key=?',key)[0];\n if(existing) return;\n const dataJson='{\"code\":\"CLOUD_PROJECTION_FAILED\"}';\n this.storage.sql.exec('INSERT INTO cloud_projections(key,invocationId,state,payloadDigest,dataJson,errorCode,createdAt) VALUES(?,?,?,?,?,?,?)',key,row.invocationId,row.state,sha256(dataJson),dataJson,'CLOUD_PROJECTION_FAILED',now);\n this.appendEvent({eventKey:key,type:'projection.failed',conversationId:row.conversationId,ref:row.invocationId,data:{invocationId:row.invocationId,code:'CLOUD_PROJECTION_FAILED'},createdAt:now},guard);\n }\n private trimPrefix(count: number): number {\n const rows=this.rows<{seq:number}>('SELECT seq FROM cloud_events ORDER BY seq LIMIT ?',count);\n if(!rows.length) return 0;\n const through=rows.at(-1)!.seq;\n this.storage.sql.exec('DELETE FROM cloud_events WHERE seq<=?',through);\n this.storage.sql.exec('UPDATE cloud_event_meta SET trimmedThrough=MAX(trimmedThrough,?) WHERE singleton=1',through);\n return rows.length;\n }\n retention(now=Date.now()): {events:number;inbox:number} {\n return this.storage.transactionSync(() => {\n // Scan only the retained head. Even backdated rows never remove a middle segment.\n const head=this.rows<{seq:number;createdAt:number}>('SELECT seq,createdAt FROM cloud_events ORDER BY seq LIMIT 500');\n let count=0; for(const row of head) { if(row.createdAt+RETENTION>now) break; count++; }\n const events=this.trimPrefix(count);\n const expired=this.rows<{seq:number}>(`SELECT seq FROM cloud_inbox WHERE ${terminalInbox} AND settledAt<=? ORDER BY seq LIMIT 500`,now-RETENTION);\n for(const row of expired) this.storage.sql.exec('DELETE FROM cloud_inbox WHERE seq=?',row.seq);\n return {events,inbox:expired.length};\n });\n }\n setSchedulingState(options: SchedulingState): void {\n if (options.busy !== undefined) this.scheduling.busy = options.busy;\n if (options.repairRetrying !== undefined) this.scheduling.repairRetrying = options.repairRetrying;\n }\n nextAlarm(now=Date.now(), busy=this.scheduling.busy??false): number|null {\n const targets:number[]=[];\n const queued=this.rows<{availableAt:number;expiresAt:number}>(\"SELECT availableAt,expiresAt FROM cloud_inbox WHERE state='queued'\");\n for(const row of queued) {\n if(!busy||row.availableAt>now) targets.push(Math.max(now,row.availableAt));\n targets.push(Math.max(now,row.expiresAt));\n }\n if(!busy&&(this.unsettledRuns().length||this.unackedRuns().length)) targets.push(now);\n const head=this.rows<{createdAt:number}>('SELECT createdAt FROM cloud_events ORDER BY seq LIMIT 1')[0];\n if(head) targets.push(Math.max(now,head.createdAt+RETENTION));\n const settled=this.rows<{settledAt:number}>(`SELECT settledAt FROM cloud_inbox WHERE ${terminalInbox} AND settledAt IS NOT NULL ORDER BY settledAt LIMIT 1`)[0];\n if(settled) targets.push(Math.max(now,settled.settledAt+RETENTION));\n return targets.length?Math.min(...targets):null;\n }\n /** This is the only alarm mutation path. Async enqueue calls it inside its storage transaction. */\n async rearmAlarm(options?: SchedulingState, now=Date.now()): Promise<void> {\n if(options) this.setSchedulingState(options);\n const target=this.nextAlarm(now);\n if(this.scheduling.repairRetrying) {\n this.storage.sql.exec('UPDATE cloud_event_meta SET pendingMaintenanceAt=? WHERE singleton=1',target);\n return;\n }\n this.storage.sql.exec('UPDATE cloud_event_meta SET pendingMaintenanceAt=NULL WHERE singleton=1');\n if(target===null) await this.storage.deleteAlarm(); else await this.storage.setAlarm(target);\n }\n}\n","import type { FetchFunction } from '@earendil-works/pi-ai';\nimport { CloudDoError, safeCloudError } from './errors';\nimport { RollingLeakGuard } from './leak-guard';\nimport { hasUserKeyShape } from './admission';\nimport { requirePlatformKey, type PlatformProfile } from './platform-credentials';\n\nconst FRAME_LIMIT = 65_536;\nconst TOOL_ARGUMENT_LIMIT = 65_536;\nconst TOOL_CALL_LIMIT = 12;\n\nexport interface CloudToolTransport {\n readonly offeredToolNames: readonly string[];\n admitToolCall(name: string, rawId: string, args: Record<string, unknown>): void | Promise<void>;\n onSend?(): void;\n onUsage?(usage: Record<string, number>): void;\n}\n\ntype ToolAssembly = { id?: string; name?: string; type?: 'function'; arguments: string };\ntype CheckedToolCall = { index: number; id: string; type: 'function'; function: { name: string; arguments: string } };\n\n/** Tool fields stay private until the whole response is complete and admitted. */\nclass ToolCallAssembly {\n private readonly calls = new Map<number, ToolAssembly>();\n private argumentBytes = 0;\n private readonly encoder = new TextEncoder();\n constructor(private readonly key: string, private readonly config?: CloudToolTransport) {}\n\n private reject(): never { throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED'); }\n\n private checkString(value: string): void {\n if (hasUserKeyShape(value)) this.reject();\n const guard = new RollingLeakGuard(this.key);\n guard.push(value); guard.finish();\n }\n\n private checkValues(value: unknown): void {\n const pending = [value];\n while (pending.length) {\n const next = pending.pop();\n if (typeof next === 'string') this.checkString(next);\n else if (Array.isArray(next)) pending.push(...next);\n else if (object(next)) {\n for (const [name, child] of Object.entries(next as Record<string, unknown>)) {\n this.checkString(name); pending.push(child);\n }\n }\n }\n }\n\n add(value: unknown): void {\n if (!this.config || !Array.isArray(value) || value.length > TOOL_CALL_LIMIT) this.reject();\n const indices = new Set<number>();\n for (const item of value) {\n const row = object(item);\n if (!row || !Number.isSafeInteger(row.index) || (row.index as number) < 0 || (row.index as number) >= TOOL_CALL_LIMIT) this.reject();\n const index = row.index as number;\n if (indices.has(index)) this.reject();\n indices.add(index);\n const call = this.calls.get(index) ?? { arguments: '' };\n if (!this.calls.has(index)) this.calls.set(index, call);\n if (row.id != null) {\n if (call.id !== undefined || typeof row.id !== 'string' || !row.id || row.id.length > 512) this.reject();\n this.checkString(row.id); call.id = row.id;\n }\n if (row.type != null) {\n if (call.type !== undefined || row.type !== 'function') this.reject();\n call.type = 'function';\n }\n if (row.function != null) {\n const fn = object(row.function);\n if (!fn) this.reject();\n if (fn.name != null) {\n if (call.name !== undefined || typeof fn.name !== 'string' || !this.config!.offeredToolNames.includes(fn.name)) this.reject();\n this.checkString(fn.name); call.name = fn.name;\n }\n if (fn.arguments != null) {\n if (typeof fn.arguments !== 'string') this.reject();\n this.argumentBytes += this.encoder.encode(fn.arguments).byteLength;\n if (this.argumentBytes > TOOL_ARGUMENT_LIMIT) this.reject();\n call.arguments += fn.arguments;\n }\n }\n }\n }\n\n get size(): number { return this.calls.size; }\n\n async finish(): Promise<CheckedToolCall[]> {\n const checked: { index: number; call: ToolAssembly; args: Record<string, unknown> }[] = [];\n const ids = new Set<string>();\n const ordered = [...this.calls].sort(([left], [right]) => left - right);\n for (const [index, call] of ordered) {\n if (index !== checked.length || !call.id || !call.name || call.type !== 'function' || ids.has(call.id)) this.reject();\n ids.add(call.id);\n let parsed: unknown;\n try { parsed = JSON.parse(call.arguments); } catch { this.reject(); }\n const args = object(parsed);\n if (!args) this.reject();\n this.checkValues(args);\n checked.push({ index, call, args });\n }\n // Admit every call before returning any native event or retained tool field.\n for (const { call, args } of checked) await this.config!.admitToolCall(call.name!, call.id!, args);\n return checked.map(({ index, call, args }) => ({ index, id: `call_${index + 1}`, type: 'function',\n function: { name: call.name!, arguments: JSON.stringify(args) } }));\n }\n}\ntype Lane = 'content' | 'reasoning_content';\ntype Segment = { lane: Lane; text: string };\nconst object = (value: unknown): Record<string, unknown> | undefined =>\n value !== null && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n\n/** Read bounded complete SSE frames, not an entire provider response. JSON escaping\n * is decoded by the caller before text enters the rolling guard. */\nasync function* frames(reader: ReadableStreamDefaultReader<Uint8Array>): AsyncGenerator<string> {\n const decoder = new TextDecoder('utf-8', { fatal: true, ignoreBOM: false });\n let frame = '';\n let line = '';\n let lastWasCR = false;\n while (true) {\n const next = await reader.read();\n const text = next.done ? decoder.decode() : decoder.decode(next.value, { stream: true });\n for (const character of text) {\n if (character === '\\n' && lastWasCR) { lastWasCR = false; continue; }\n lastWasCR = character === '\\r';\n if (character === '\\n' || character === '\\r') {\n if (!line) { if (frame) yield frame; frame = ''; }\n else { frame += `${line}\\n`; line = ''; }\n } else line += character;\n if (frame.length + line.length > FRAME_LIMIT) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n }\n if (next.done) {\n if (line || frame) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n return;\n }\n }\n}\n\nfunction eventData(frame: string): string {\n return frame.split('\\n').filter(line => line.startsWith('data:')).map(line => line.slice(5).replace(/^ /, '')).join('\\n');\n}\n\nexport async function* readSseData(body: ReadableStream<Uint8Array>): AsyncGenerator<string> {\n const reader = body.getReader();\n try {\n for await (const frame of frames(reader)) {\n const data = eventData(frame);\n if (data) yield data;\n }\n } finally { try { await reader.cancel(); } catch { /* Never retain an upstream error. */ } }\n}\n\nfunction numericUsage(value: unknown): Record<string, number> | undefined {\n const usage = object(value);\n if (!usage) return undefined;\n const result: Record<string, number> = {};\n for (const field of ['prompt_tokens', 'completion_tokens', 'total_tokens']) {\n const n = usage[field];\n if (typeof n === 'number' && Number.isSafeInteger(n) && n >= 0) result[field] = n;\n }\n return Object.keys(result).length ? result : undefined;\n}\n\n/** The SDK receives only re-encoded, checked text and bounded numeric usage. IDs,\n * headers and arbitrary vendor fields never cross this boundary. Tool calls cross\n * only after terminal assembly, decoded-value checks and admission. */\nfunction guardedBody(body: ReadableStream<Uint8Array>, key: string, profile: PlatformProfile, abort: AbortController, cleanup: () => void, transport?: CloudToolTransport): ReadableStream<Uint8Array> {\n const reader = body.getReader();\n const guard = new RollingLeakGuard(key);\n // pi reconstructs each lane separately. Checking only wire order lets benign\n // thinking deltas hide a key that is reassembled inside the content lane.\n const laneGuards = { content: new RollingLeakGuard(key), reasoning_content: new RollingLeakGuard(key) };\n const segments: Segment[] = [];\n const encoder = new TextEncoder();\n let finishReason: 'stop' | 'length' | 'content_filter' | 'tool_calls' | undefined;\n const tools = new ToolCallAssembly(key, transport);\n let usage: Record<string, number> | undefined;\n const encode = (delta: Record<string, unknown>, finish: string | null = null) =>\n `data: ${JSON.stringify({ id: 'cloud', object: 'chat.completion.chunk', created: 0, model: profile.model,\n choices: [{ index: 0, delta, finish_reason: finish }] })}\\n\\n`;\n const release = (text: string): string => {\n let remaining = text.length;\n let result = '';\n while (remaining > 0) {\n const first = segments[0]!;\n const size = Math.min(first.text.length, remaining);\n result += encode({ [first.lane]: first.text.slice(0, size) });\n first.text = first.text.slice(size);\n remaining -= size;\n if (!first.text) segments.shift();\n }\n return result;\n };\n const stop = async () => {\n guard.discard(); laneGuards.content.discard(); laneGuards.reasoning_content.discard(); segments.length = 0;\n try { await reader.cancel(); } catch { /* No upstream exceptions escape. */ }\n finally { abort.abort(); cleanup(); }\n };\n const checkedLane = (lane: Lane, text: string): string => {\n if (!text) return '';\n const previous = segments.at(-1);\n if (previous?.lane === lane) previous.text += text;\n else segments.push({ lane, text });\n return release(guard.push(text));\n };\n async function* output(): AsyncGenerator<string> {\n let done = false;\n try {\n for await (const frame of frames(reader)) {\n const data = eventData(frame);\n if (!data) continue;\n if (data === '[DONE]') { done = true; break; }\n const payload = object(JSON.parse(data));\n if (!payload || payload.error) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n const currentUsage = numericUsage(payload.usage);\n if (currentUsage) {\n for (const [field, value] of Object.entries(currentUsage)) {\n if (usage?.[field] !== undefined && value < usage[field]!) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n }\n usage = { ...usage, ...currentUsage };\n transport?.onUsage?.(usage);\n }\n if (!Array.isArray(payload.choices)) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n const choice = payload.choices.find(item => object(item)?.index === 0);\n if (!choice) continue; // e.g. the terminal numeric-usage frame\n const row = object(choice)!;\n const delta = object(row.delta);\n if (!delta || delta.function_call || delta.refusal) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n if (finishReason && (delta.tool_calls != null || delta.content || delta.reasoning_content)) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n if (delta.tool_calls != null) tools.add(delta.tool_calls);\n for (const lane of ['content', 'reasoning_content'] as const) {\n const text = delta[lane];\n if (text === undefined || text === null) continue;\n if (typeof text !== 'string') throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n if (!text) continue;\n const safe = checkedLane(lane, laneGuards[lane].push(text));\n if (safe) yield safe;\n }\n if (row.finish_reason != null) {\n if (finishReason || !['stop', 'length', 'content_filter', 'tool_calls'].includes(String(row.finish_reason))) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n finishReason = row.finish_reason as 'stop' | 'length' | 'content_filter' | 'tool_calls';\n }\n }\n if (!done && !finishReason) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n if ((tools.size > 0) !== (finishReason === 'tool_calls')) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n const checkedTools = tools.size ? await tools.finish() : [];\n const terminal = encode(checkedTools.length ? { tool_calls: checkedTools } : {}, finishReason ?? 'stop');\n if (terminal.length > FRAME_LIMIT) throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n for (const lane of ['content', 'reasoning_content'] as const) {\n const safe = checkedLane(lane, laneGuards[lane].finish());\n if (safe) yield safe;\n }\n const final = release(guard.finish());\n if (final) yield final;\n yield terminal;\n if (usage) yield `data: ${JSON.stringify({ choices: [], usage })}\\n\\n`;\n yield 'data: [DONE]\\n\\n';\n } catch (error) { throw safeCloudError(error); }\n finally { await stop(); }\n }\n const iterator = output();\n return new ReadableStream({\n async pull(controller) {\n try {\n const next = await iterator.next();\n if (next.done) controller.close();\n else controller.enqueue(encoder.encode(next.value));\n } catch (error) { controller.error(safeCloudError(error)); }\n },\n async cancel() { await stop(); await iterator.return(undefined); },\n });\n}\n\n/** Credential only in auth headers; never follow any redirect, even same origin. */\nexport function createProviderFetch(profile: PlatformProfile, secret: string, fetchImpl: FetchFunction = globalThis.fetch, transport?: CloudToolTransport): FetchFunction {\n const key = requirePlatformKey(secret);\n const endpoint = `${profile.baseUrl.replace(/\\/$/, '')}/chat/completions`;\n return async (input, init) => {\n let request: Request;\n try { request = new Request(input, init); }\n catch { throw new CloudDoError('CLOUD_REQUEST_INVALID'); }\n if (request.url !== endpoint || request.method !== 'POST') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const abort = new AbortController();\n const onAbort = () => abort.abort();\n request.signal.addEventListener('abort', onAbort, { once: true });\n if (request.signal.aborted) abort.abort();\n const cleanup = () => request.signal.removeEventListener('abort', onAbort);\n try {\n const dispatch = new Request(request, { signal: abort.signal,\n redirect: 'manual', headers: { authorization: `Bearer ${key}`, 'content-type': 'application/json', accept: 'text/event-stream' } });\n if (abort.signal.aborted) throw new CloudDoError('CLOUD_MODEL_REQUEST_FAILED');\n transport?.onSend?.();\n const response = await fetchImpl(dispatch);\n if (!response.ok || (response.status >= 300 && response.status < 400) || !response.body\n || !response.headers.get('content-type')?.toLowerCase().startsWith('text/event-stream')) {\n abort.abort(); cleanup();\n try { await response.body?.cancel(); } catch { /* Drop raw error bodies. */ }\n throw new CloudDoError('CLOUD_MODEL_REQUEST_FAILED');\n }\n return new Response(guardedBody(response.body, key, profile, abort, cleanup, transport), { headers: { 'content-type': 'text/event-stream' } });\n } catch (error) { abort.abort(); cleanup(); throw safeCloudError(error); }\n };\n}\n","import { createModels, createProvider } from '@earendil-works/pi-ai/models';\nimport { AssistantMessageEventStream } from '@earendil-works/pi-ai/utils/event-stream';\nimport type { Api, AssistantMessage, JsonObject, Model, ProviderStreams, StreamOptions, ToolCall } from '@earendil-works/pi-ai';\nimport { getCurrentTools, type TranscriptContext } from '@earendil-works/pi-ai/utils/transcript';\nimport { getSystemMessageText } from '@earendil-works/pi-ai/utils/text';\nimport { CloudDoError, safeCloudError } from './errors';\nimport { createProviderFetch, readSseData } from './provider-fetch';\nimport { PLATFORM_PROFILES, platformCredentialReader, requirePlatformKey, type PlatformProfile, type PlatformCredentialReader } from './platform-credentials';\n\nexport const PLATFORM_MAX_OUTPUT_TOKENS = 4096;\nexport const REQUEST_FRAMING_BYTES = 4096;\n\nfunction emptyAssistant(model: Model<Api>): AssistantMessage {\n return { role: 'assistant', content: [], api: model.api, provider: model.provider, model: model.id,\n usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } },\n stopReason: 'stop', timestamp: Date.now() };\n}\n\n/** pi resolves auth before calling ProviderStreams. Strip its auth error wrapper\n * before any error event or result reaches durable persistence. */\nfunction fixedModelErrors(source: AssistantMessageEventStream, model: Model<Api>): AssistantMessageEventStream {\n const events = new AssistantMessageEventStream();\n const run = async () => {\n let terminal: AssistantMessage | undefined;\n try {\n for await (const event of source) {\n if (event.type === 'error') {\n const message = event.error.errorMessage;\n const code = message?.includes('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE')\n ? 'CLOUD_MODEL_CREDENTIAL_UNAVAILABLE' : safeCloudError(new Error(message)).code;\n terminal = { ...emptyAssistant(model), content: event.error.content, usage: event.error.usage,\n stopReason: event.reason, errorMessage: code };\n events.push({ type: 'error', reason: event.reason, error: terminal });\n } else {\n if (event.type === 'done') terminal = event.message;\n events.push(event);\n }\n }\n if (!terminal) throw new CloudDoError('CLOUD_MODEL_REQUEST_FAILED');\n } catch {\n terminal = { ...emptyAssistant(model), stopReason: 'error', errorMessage: 'CLOUD_MODEL_REQUEST_FAILED' };\n events.push({ type: 'error', reason: 'error', error: terminal });\n } finally { events.end(terminal); }\n };\n void run();\n return events;\n}\n\nexport interface CloudModelAccount {\n sent(): void;\n usage(usage: { input?: number; output?: number }): void;\n}\n\nexport interface CloudModelRuntime {\n beforeRequest(info: { inputBytes: number }): void | CloudModelAccount | Promise<void | CloudModelAccount>;\n admitToolCall(name: string, id: string, args: Record<string, unknown>): void | Promise<void>;\n requestSignal?(signal?: AbortSignal): AbortSignal;\n}\n\ntype ProviderMessage = { role: string; content: string; tool_call_id?: string;\n tool_calls?: { id: string; type: 'function'; function: { name: string; arguments: string } }[] };\n\nfunction messages(context: TranscriptContext): ProviderMessage[] {\n return context.messages.map(message => {\n if (message.role === 'system') return { role: 'system', content: getSystemMessageText(message) };\n if (message.role === 'toolResult') return { role: 'tool', tool_call_id: message.toolCallId,\n content: message.content.map(block => {\n if (block.type !== 'text') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return block.text;\n }).join('') };\n if (message.role !== 'user' && message.role !== 'assistant') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const calls: NonNullable<ProviderMessage['tool_calls']> = [];\n const content = typeof message.content === 'string' ? message.content : message.content.map(block => {\n if (block.type === 'toolCall' && message.role === 'assistant') {\n calls.push({ id: block.id, type: 'function', function: { name: block.name, arguments: JSON.stringify(block.arguments) } });\n return '';\n }\n if (block.type !== 'text' && block.type !== 'thinking') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return block.type === 'text' ? block.text : '';\n }).join('');\n return { role: message.role, content, ...(calls.length ? { tool_calls: calls } : {}) };\n });\n}\n\n/** Web OpenAI-compatible transport. Native pi generation owns tool rounds. */\nfunction stream(profile: PlatformProfile, model: Model<Api>, context: TranscriptContext, options?: StreamOptions, runtime?: CloudModelRuntime): AssistantMessageEventStream {\n const events = new AssistantMessageEventStream();\n const output = emptyAssistant(model);\n const blocks = new Map<'content' | 'reasoning_content', number>();\n const run = async () => {\n try {\n const currentTools = getCurrentTools(context.messages);\n const body = JSON.stringify({ model: profile.model, messages: messages(context), stream: true,\n stream_options: { include_usage: true }, max_tokens: PLATFORM_MAX_OUTPUT_TOKENS,\n ...(currentTools.length ? { tools: currentTools.map(tool => ({ type: 'function',\n function: { name: tool.name, description: tool.description, parameters: tool.parameters } })) } : {}) });\n const account = await runtime?.beforeRequest({ inputBytes: new TextEncoder().encode(body).byteLength });\n const key = requirePlatformKey(options?.apiKey);\n const request = createProviderFetch(profile, key, globalThis.fetch, { offeredToolNames: currentTools.map(tool => tool.name),\n admitToolCall: (name, id, args) => runtime?.admitToolCall(name, id, args),\n onSend: () => account?.sent(),\n onUsage: usage => account?.usage({ input: usage.prompt_tokens, output: usage.completion_tokens }) });\n const response = await request(`${profile.baseUrl}/chat/completions`, { method: 'POST', signal: runtime?.requestSignal?.(options?.signal) ?? options?.signal,\n body });\n events.push({ type: 'start', partial: output });\n for await (const data of readSseData(response.body!)) {\n if (data === '[DONE]') break;\n // Only provider-fetch's re-encoded whitelist reaches here, never raw frames.\n const frame = JSON.parse(data) as { choices: { delta: { content?: string; reasoning_content?: string; tool_calls?: { id: string; function: { name: string; arguments: string } }[] }; finish_reason: string | null }[]; usage?: { prompt_tokens?: number; completion_tokens?: number; total_tokens?: number } };\n if (frame.usage) {\n output.usage.input = frame.usage.prompt_tokens ?? 0;\n output.usage.output = frame.usage.completion_tokens ?? 0;\n output.usage.totalTokens = frame.usage.total_tokens ?? output.usage.input + output.usage.output;\n }\n for (const choice of frame.choices) {\n if (choice.finish_reason === 'length') output.stopReason = 'length';\n if (choice.finish_reason === 'tool_calls') output.stopReason = 'toolUse';\n for (const call of choice.delta.tool_calls ?? []) {\n const index = output.content.length;\n const toolCall: ToolCall = { type: 'toolCall', id: call.id, name: call.function.name,\n arguments: JSON.parse(call.function.arguments) as JsonObject };\n output.content.push(toolCall);\n events.push({ type: 'toolcall_start', contentIndex: index, partial: output });\n events.push({ type: 'toolcall_delta', contentIndex: index, delta: call.function.arguments, partial: output });\n events.push({ type: 'toolcall_end', contentIndex: index, toolCall, partial: output });\n }\n for (const lane of ['content', 'reasoning_content'] as const) {\n const delta = choice.delta[lane];\n if (!delta) continue;\n let index = blocks.get(lane);\n if (index === undefined) {\n index = output.content.length; blocks.set(lane, index);\n output.content.push(lane === 'content' ? { type: 'text', text: '' } : { type: 'thinking', thinking: '' });\n events.push({ type: lane === 'content' ? 'text_start' : 'thinking_start', contentIndex: index, partial: output });\n }\n const block = output.content[index]!;\n if (block.type === 'text') block.text += delta;\n else if (block.type === 'thinking') block.thinking += delta;\n events.push({ type: lane === 'content' ? 'text_delta' : 'thinking_delta', contentIndex: index, delta, partial: output });\n }\n }\n }\n for (const [lane, index] of blocks) {\n const block = output.content[index]!;\n events.push({ type: lane === 'content' ? 'text_end' : 'thinking_end', contentIndex: index,\n content: block.type === 'text' ? block.text : block.type === 'thinking' ? block.thinking : '', partial: output });\n }\n events.push({ type: 'done', reason: output.stopReason as 'stop' | 'length' | 'toolUse', message: output });\n } catch (error) {\n output.stopReason = options?.signal?.aborted ? 'aborted' : 'error';\n output.errorMessage = safeCloudError(error).code;\n events.push({ type: 'error', reason: output.stopReason, error: output });\n } finally { events.end(output); }\n };\n void run();\n return events;\n}\n\nexport function createPlatformModels(env: Readonly<Record<string, unknown>>,\n credentials: PlatformCredentialReader = platformCredentialReader(env), runtime?: CloudModelRuntime) {\n const models = createModels({ authContext: { env: async () => undefined, fileExists: async () => false } });\n for (const [id, profile] of Object.entries(PLATFORM_PROFILES)) {\n const implementation: ProviderStreams = { stream: (model, context, options) => stream(profile, model, context, options, runtime),\n streamSimple: (model, context, options) => stream(profile, model, context, options, runtime) };\n const model: Model<'openai-completions'> = { id: profile.model, name: profile.model, provider: id, api: 'openai-completions', baseUrl: profile.baseUrl,\n reasoning: false, input: ['text'], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65_536, maxTokens: PLATFORM_MAX_OUTPUT_TOKENS };\n models.setProvider(createProvider({ id, models: [model], api: implementation,\n auth: { apiKey: { name: 'Platform model key', resolve: async () => {\n try {\n const key = requirePlatformKey(await credentials.get(profile.secretName));\n return { auth: { apiKey: key }, source: 'platform' };\n } catch { throw new CloudDoError('CLOUD_MODEL_CREDENTIAL_UNAVAILABLE'); }\n } } } }));\n }\n const rawStream = models.stream.bind(models);\n const rawSimple = models.streamSimple.bind(models);\n models.stream = (model, context, options) => fixedModelErrors(rawStream(model, context, options), model);\n models.streamSimple = (model, context, options) => fixedModelErrors(rawSimple(model, context, options), model);\n return models;\n}\n","import { CloudDoError, type CloudDoErrorCode } from './errors';\nimport type { CloudOperationGuard } from './input-guard';\nimport { PLATFORM_MAX_OUTPUT_TOKENS, REQUEST_FRAMING_BYTES } from './platform-provider';\n\nexport type InvocationState = 'accepted' | 'running' | 'succeeded' | 'failed' | 'aborted' | 'interrupted' | 'timed_out';\nexport type InvocationTerminalState = Exclude<InvocationState, 'accepted' | 'running'>;\nexport interface InvocationInput {\n invocationId: string;\n sessionId: string;\n conversationId: number;\n assistantEntryId: number;\n toolCallId: string;\n toolName: string;\n argsDigest: string;\n argsJson: string;\n replay: 'safe' | 'unsafe';\n deadlineAt: number;\n}\nexport interface InvocationRow extends InvocationInput {\n seq: number;\n state: InvocationState;\n attempt: number;\n replayCount: number;\n abortRequested: number;\n resultJson: string | null;\n settledAt: number | null;\n settledEventSeq: number | null;\n errorCode: CloudDoErrorCode | null;\n mode: 'inline' | 'job';\n segmentStartedAt: number | null;\n nextSegmentAt: number | null;\n jobStateJson: string | null;\n progressJson: string | null;\n deliveredState?: 'delivered' | 'undelivered';\n taskId?: number | null;\n resultEntryId?: number | null;\n}\nexport interface ExecutionRow {\n conversationId: number;\n deadlineAt: number;\n steps: number;\n tools: number;\n inputTokens: number;\n outputTokens: number;\n credits: number;\n sentRequests: number;\n fatalCode: CloudDoErrorCode | null;\n aborted: number;\n}\nexport interface InvocationFinishOptions {\n /** An old attempt cannot settle an invocation claimed by recovery. */\n attempt?: number;\n clientConnected?: boolean;\n /** Ledger recovery may settle after the old native conversation was aborted. */\n recovery?: boolean;\n creditCap?: number;\n}\n\nexport interface InvocationLedgerOptions {\n started?(row: InvocationRow, guard?: CloudOperationGuard): void;\n startedCommitted?(row: InvocationRow): void;\n /** Runs inside the state transaction. Errors roll back state and events together. */\n terminal?(row: InvocationRow, recovery: boolean): { seq: number; createdAt: number } | void;\n /** Post-commit notification cannot affect the invocation outcome. */\n committed?(row: InvocationRow): void;\n}\n\nconst terminal = (state: InvocationState) => state !== 'accepted' && state !== 'running';\nconst fatalCodes = new Set<CloudDoErrorCode>([\n 'CLOUD_TOOL_RESULT_LIMIT', 'CLOUD_TOOL_LIMIT', 'CLOUD_STEP_LIMIT',\n 'CLOUD_TOOL_TIMEOUT', 'CLOUD_EXECUTION_TIMEOUT',\n]);\n\n/** Host tables share the DO database with the pi_ tables. No function enters storage. */\nexport class InvocationLedger {\n constructor(private readonly storage: DurableObjectStorage, private readonly options: InvocationLedgerOptions = {}) {}\n\n /** The host calls this only after credential and identity preflight. */\n ensureSchema(): void {\n this.storage.transactionSync(() => {\n this.storage.sql.exec(`CREATE TABLE IF NOT EXISTS cloud_invocations (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n invocationId TEXT NOT NULL UNIQUE, sessionId TEXT NOT NULL,\n conversationId INTEGER NOT NULL, assistantEntryId INTEGER NOT NULL,\n toolCallId TEXT NOT NULL, toolName TEXT NOT NULL,\n argsDigest TEXT NOT NULL, argsJson TEXT NOT NULL,\n replay TEXT NOT NULL CHECK (replay IN ('safe','unsafe')),\n state TEXT NOT NULL CHECK (state IN ('accepted','running','succeeded','failed','aborted','interrupted','timed_out')),\n attempt INTEGER NOT NULL, replayCount INTEGER NOT NULL DEFAULT 0,\n deadlineAt INTEGER NOT NULL, abortRequested INTEGER NOT NULL DEFAULT 0,\n resultJson TEXT, errorCode TEXT,\n mode TEXT NOT NULL DEFAULT 'inline' CHECK (mode IN ('inline','job')),\n segmentStartedAt INTEGER, nextSegmentAt INTEGER, jobStateJson TEXT, progressJson TEXT,\n settledAt INTEGER, settledEventSeq INTEGER,\n deliveredState TEXT NOT NULL DEFAULT 'undelivered', taskId INTEGER, resultEntryId INTEGER\n );\n CREATE INDEX IF NOT EXISTS cloud_invocations_pending ON cloud_invocations(state,seq);\n CREATE TABLE IF NOT EXISTS cloud_executions (\n conversationId INTEGER PRIMARY KEY, deadlineAt INTEGER NOT NULL,\n steps INTEGER NOT NULL DEFAULT 0, tools INTEGER NOT NULL DEFAULT 0,\n fatalCode TEXT, aborted INTEGER NOT NULL DEFAULT 0,\n inputTokens INTEGER NOT NULL DEFAULT 0, outputTokens INTEGER NOT NULL DEFAULT 0,\n credits INTEGER NOT NULL DEFAULT 0, sentRequests INTEGER NOT NULL DEFAULT 0,\n trigger TEXT NOT NULL DEFAULT 'submit', requestId TEXT, submissionId INTEGER,\n state TEXT NOT NULL DEFAULT 'interrupted', errorCode TEXT, startedAt INTEGER, settledAt INTEGER,\n reservation TEXT NOT NULL DEFAULT 'none', eligibilityJson TEXT,\n admissionDigest TEXT, admittedSeqs TEXT, settlementAck INTEGER, revision INTEGER\n );\n CREATE TABLE IF NOT EXISTS cloud_counted_tools (\n conversationId INTEGER NOT NULL, taskId TEXT NOT NULL,\n PRIMARY KEY(conversationId,taskId)\n )`);\n });\n }\n\n read(id: string): InvocationRow | undefined {\n return this.storage.sql.exec<InvocationRow & Record<string, SqlStorageValue>>('SELECT * FROM cloud_invocations WHERE invocationId = ?', id).toArray()[0];\n }\n\n pending(): InvocationRow[] {\n return this.storage.sql.exec<InvocationRow & Record<string, SqlStorageValue>>(\"SELECT * FROM cloud_invocations WHERE state IN ('accepted','running') ORDER BY seq\").toArray();\n }\n\n begin(input: InvocationInput, guard?: CloudOperationGuard): { kind: 'started' | 'pending' | 'settled'; row: InvocationRow } {\n const begun = this.storage.transactionSync<{ kind: 'started' | 'pending' | 'settled'; row: InvocationRow }>(() => {\n const previous = this.read(input.invocationId);\n if (previous) {\n if (previous.argsDigest !== input.argsDigest || previous.toolName !== input.toolName) {\n throw new CloudDoError('CLOUD_TOOL_INVOCATION_CONFLICT');\n }\n return { kind: terminal(previous.state) ? 'settled' : 'pending', row: previous };\n }\n this.storage.sql.exec(`INSERT INTO cloud_invocations\n (invocationId,sessionId,conversationId,assistantEntryId,toolCallId,toolName,argsDigest,argsJson,replay,state,attempt,deadlineAt)\n VALUES (?,?,?,?,?,?,?,?,?,'running',1,?)`, input.invocationId, input.sessionId,\n input.conversationId, input.assistantEntryId, input.toolCallId, input.toolName,\n input.argsDigest, input.argsJson, input.replay, input.deadlineAt);\n const row = this.read(input.invocationId)!;\n this.options.started?.(row, guard);\n return { kind: 'started', row };\n });\n if (begun.kind === 'started') {\n try { this.options.startedCommitted?.(begun.row); }\n catch { /* A doorbell cannot change a committed invocation. */ }\n }\n return begun;\n }\n\n finish(id: string, state: InvocationTerminalState, result?: Record<string, unknown>, errorCode?: CloudDoErrorCode,\n now = Date.now(), options: InvocationFinishOptions = {}): InvocationRow | undefined {\n let changed: InvocationRow | undefined;\n const resultRow = this.storage.transactionSync(() => {\n const row = this.read(id);\n if (!row || terminal(row.state) || (options.attempt !== undefined && options.attempt !== row.attempt)) return row;\n const execution = this.execution(row.conversationId);\n let settledState = state;\n let settledError = errorCode ?? null;\n if (state === 'succeeded') {\n if (row.abortRequested || options.clientConnected === false || (!options.recovery && execution?.aborted)) {\n settledState = 'aborted'; settledError = 'CLOUD_EXECUTION_ABORTED';\n } else if (now >= row.deadlineAt || (execution && now >= execution.deadlineAt)) {\n settledState = 'timed_out';\n settledError = execution && now >= execution.deadlineAt ? 'CLOUD_EXECUTION_TIMEOUT' : 'CLOUD_TOOL_TIMEOUT';\n } else if (!options.recovery && execution?.fatalCode) {\n settledState = 'failed'; settledError = execution.fatalCode;\n }\n }\n this.storage.sql.exec(`UPDATE cloud_invocations SET state=?,resultJson=?,errorCode=?\n WHERE invocationId=? AND attempt=? AND state IN ('accepted','running')`,\n settledState, settledState === 'succeeded' && result !== undefined ? JSON.stringify(result) : null, settledError, id, row.attempt);\n const credits = (result?.usage as { credits?: unknown } | undefined)?.credits;\n if (typeof credits === 'number' && Number.isSafeInteger(credits) && credits >= 0) {\n this.storage.sql.exec('UPDATE cloud_executions SET credits=MIN(credits+?,9007199254740991) WHERE conversationId=?', credits, row.conversationId);\n if (options.creditCap !== undefined && (this.execution(row.conversationId)?.credits ?? 0) > options.creditCap) {\n this.failExecution(row.conversationId, 'CLOUD_BUDGET_EXCEEDED');\n }\n }\n if (settledError && fatalCodes.has(settledError)) this.failExecution(row.conversationId, settledError);\n changed = this.read(id)!;\n changed = this.#terminal(changed, options.recovery === true);\n return changed;\n });\n if (changed) this.#notify(changed);\n return resultRow;\n }\n\n #terminal(row: InvocationRow, recovery: boolean): InvocationRow {\n const event = this.options.terminal?.(row, recovery);\n if (event) {\n this.storage.sql.exec('UPDATE cloud_invocations SET settledAt=?,settledEventSeq=? WHERE invocationId=?', event.createdAt, event.seq, row.invocationId);\n }\n return this.read(row.invocationId)!;\n }\n\n #notify(row: InvocationRow): void {\n try { this.options.committed?.(row); }\n catch { /* The state and event are already committed. */ }\n }\n\n /** Claim before network replay. A second restart never dispatches a claimed row again. */\n claimRecovery(now = Date.now()): InvocationRow[] {\n const settled: InvocationRow[] = [];\n const claimed = this.storage.transactionSync(() => {\n const claimed: InvocationRow[] = [];\n for (const row of this.pending()) {\n const execution = this.execution(row.conversationId);\n if (row.abortRequested || execution?.aborted) {\n this.storage.sql.exec(`UPDATE cloud_invocations SET state='aborted',resultJson=NULL,errorCode='CLOUD_EXECUTION_ABORTED'\n WHERE invocationId=? AND state IN ('accepted','running')`, row.invocationId);\n } else if (now >= row.deadlineAt || (execution && now >= execution.deadlineAt)) {\n const code = execution && now >= execution.deadlineAt ? 'CLOUD_EXECUTION_TIMEOUT' : 'CLOUD_TOOL_TIMEOUT';\n this.storage.sql.exec(`UPDATE cloud_invocations SET state='timed_out',resultJson=NULL,errorCode=?\n WHERE invocationId=? AND state IN ('accepted','running')`, code, row.invocationId);\n this.failExecution(row.conversationId, code);\n } else if (row.replay === 'safe' && row.mode === 'inline' && row.replayCount === 0) {\n this.storage.sql.exec(`UPDATE cloud_invocations SET replayCount=1,attempt=attempt+1,state='running'\n WHERE invocationId=? AND replayCount=0 AND state IN ('accepted','running')`, row.invocationId);\n claimed.push(this.read(row.invocationId)!);\n } else {\n this.storage.sql.exec(`UPDATE cloud_invocations SET state=?,resultJson=NULL,errorCode='CLOUD_EXECUTION_INTERRUPTED'\n WHERE invocationId=? AND state IN ('accepted','running')`,\n row.replayCount >= 1 ? 'failed' : 'interrupted', row.invocationId);\n }\n const updated = this.read(row.invocationId)!;\n if (terminal(updated.state)) {\n settled.push(this.#terminal(updated, true));\n }\n }\n return claimed;\n });\n for (const row of settled) this.#notify(row);\n return claimed;\n }\n\n forConversation(conversationId: number): InvocationRow[] {\n return this.storage.sql.exec<InvocationRow & Record<string, SqlStorageValue>>('SELECT * FROM cloud_invocations WHERE conversationId=? ORDER BY seq', conversationId).toArray();\n }\n\n startExecution(conversationId: number, deadlineAt: number): ExecutionRow {\n this.storage.sql.exec('INSERT INTO cloud_executions(conversationId,deadlineAt) VALUES (?,?) ON CONFLICT(conversationId) DO NOTHING', conversationId, deadlineAt);\n return this.execution(conversationId)!;\n }\n\n execution(conversationId: number): ExecutionRow | undefined {\n return this.storage.sql.exec<ExecutionRow & Record<string, SqlStorageValue>>('SELECT * FROM cloud_executions WHERE conversationId=?', conversationId).toArray()[0];\n }\n\n failExecution(conversationId: number, code: CloudDoErrorCode): ExecutionRow | undefined {\n this.storage.sql.exec('UPDATE cloud_executions SET fatalCode=COALESCE(fatalCode,?) WHERE conversationId=?', code, conversationId);\n return this.execution(conversationId);\n }\n\n abortExecution(conversationId: number, code: CloudDoErrorCode): ExecutionRow | undefined {\n return this.storage.transactionSync(() => {\n this.storage.sql.exec('UPDATE cloud_executions SET aborted=1,fatalCode=COALESCE(fatalCode,?) WHERE conversationId=?', code, conversationId);\n this.storage.sql.exec(`UPDATE cloud_invocations SET abortRequested=1\n WHERE conversationId=? AND state IN ('accepted','running')`, conversationId);\n return this.execution(conversationId);\n });\n }\n\n private executionRejection(row: ExecutionRow, now: number): CloudDoErrorCode | undefined {\n if (row.fatalCode) return row.fatalCode;\n if (row.aborted) return 'CLOUD_EXECUTION_ABORTED';\n if (now >= row.deadlineAt) return 'CLOUD_EXECUTION_TIMEOUT';\n return undefined;\n }\n\n countModel(conversationId: number, maxSteps = 8, now = Date.now(),\n budget?: { inputBytes: number; inputTokens: number; outputTokens: number }): ExecutionRow {\n const outcome = this.storage.transactionSync(() => {\n const row = this.execution(conversationId);\n if (!row) return { code: 'CLOUD_EXECUTION_INTERRUPTED' as const };\n const code = this.executionRejection(row, now) ?? (row.steps >= maxSteps ? 'CLOUD_STEP_LIMIT' : undefined);\n if (code) { this.failExecution(conversationId, code); return { code }; }\n if (budget && (row.inputTokens + budget.inputBytes + REQUEST_FRAMING_BYTES > budget.inputTokens\n || row.outputTokens + PLATFORM_MAX_OUTPUT_TOKENS > budget.outputTokens)) {\n this.failExecution(conversationId, 'CLOUD_BUDGET_EXCEEDED');\n return { code: 'CLOUD_BUDGET_EXCEEDED' as const };\n }\n this.storage.sql.exec('UPDATE cloud_executions SET steps=steps+1 WHERE conversationId=?', conversationId);\n return { row: this.execution(conversationId)! };\n });\n // Throw outside the transaction so the fatal disposition remains durable.\n if (outcome.code) throw new CloudDoError(outcome.code);\n return outcome.row!;\n }\n\n addModelUsage(conversationId: number, input: number, output: number): void {\n this.storage.sql.exec(`UPDATE cloud_executions SET inputTokens=MIN(inputTokens+?,9007199254740991),\n outputTokens=MIN(outputTokens+?,9007199254740991) WHERE conversationId=?`, input, output, conversationId);\n }\n\n /** This mark records durable dispatch intent. It does not prove network receipt. */\n markModelSent(conversationId: number): void {\n const update = this.storage.sql.exec(`UPDATE cloud_executions SET sentRequests=sentRequests+1\n WHERE conversationId=? AND sentRequests < steps`, conversationId);\n if (update.rowsWritten === 0) throw new CloudDoError('CLOUD_MODEL_REQUEST_FAILED');\n }\n\n countTool(conversationId: number, taskId: string, maxTools = 12, now = Date.now()): ExecutionRow {\n const outcome = this.storage.transactionSync(() => {\n const row = this.execution(conversationId);\n if (!row) return { code: 'CLOUD_EXECUTION_INTERRUPTED' as const };\n const stopped = this.executionRejection(row, now);\n if (stopped) { this.failExecution(conversationId, stopped); return { code: stopped }; }\n const counted = this.storage.sql.exec('SELECT taskId FROM cloud_counted_tools WHERE conversationId=? AND taskId=?', conversationId, taskId).toArray()[0];\n if (counted) return { row };\n if (row.tools >= maxTools) {\n this.failExecution(conversationId, 'CLOUD_TOOL_LIMIT');\n return { code: 'CLOUD_TOOL_LIMIT' as const };\n }\n this.storage.sql.exec('INSERT INTO cloud_counted_tools(conversationId,taskId) VALUES (?,?)', conversationId, taskId);\n this.storage.sql.exec('UPDATE cloud_executions SET tools=tools+1 WHERE conversationId=?', conversationId);\n return { row: this.execution(conversationId)! };\n });\n if (outcome.code) throw new CloudDoError(outcome.code);\n return outcome.row!;\n }\n}\n","import { CloudDoError } from './errors';\nimport type { SessionIdentity } from './identity';\nimport type { CloudDispatchContext } from './tools';\n\nexport interface CloudLimits {\n readonly modelSteps: number;\n readonly toolCalls: number;\n readonly inlineFetches: number;\n readonly callTimeoutMs: number;\n readonly turnTimeoutMs: number;\n readonly resultBytes: number;\n}\n\nexport const CLOUD_LIMITS: Readonly<CloudLimits> = Object.freeze({\n modelSteps: 8, toolCalls: 12, inlineFetches: 4,\n callTimeoutMs: 60_000, turnTimeoutMs: 240_000, resultBytes: 48_000,\n});\n\nexport const CLOUD_BUDGET = Object.freeze({ credits: 100, inputTokens: 128_000, outputTokens: 32_768 });\n\nexport interface CloudSessionConfig extends Omit<CloudDispatchContext, 'call' | 'lookup'> {\n readonly limits: CloudLimits;\n}\n\nfunction record(value: unknown, keys: readonly string[]): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)\n || (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n const result: Record<string, unknown> = {};\n for (const key of Reflect.ownKeys(value)) {\n const field = Object.getOwnPropertyDescriptor(value, key);\n if (typeof key !== 'string' || !keys.includes(key) || !field || !('value' in field) || !field.enumerable) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n result[key] = field.value;\n }\n return result;\n}\n\nfunction text(value: unknown, max = 256): string {\n if (typeof value !== 'string' || !value.trim() || value.length > max || /\\p{Cc}/u.test(value)) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n return value;\n}\n\n/** The consuming platform authorizes this data. It supplies the dispatcher in code. */\nexport function admitSessionConfig(input: unknown): CloudSessionConfig {\n const body = record(input, ['identity', 'principal', 'scopes', 'dispatcherId', 'limits']);\n const ids = record(body.identity, ['tenantId', 'workspaceId', 'agentId', 'sessionId']);\n const identity: SessionIdentity = {\n tenantId: text(ids.tenantId), workspaceId: text(ids.workspaceId),\n agentId: text(ids.agentId), sessionId: text(ids.sessionId),\n };\n const rawPrincipal = record(body.principal, ['accountId', 'workspaceId', 'channel']);\n const principal = { accountId: text(rawPrincipal.accountId), workspaceId: text(rawPrincipal.workspaceId), channel: text(rawPrincipal.channel) };\n if (principal.workspaceId !== identity.workspaceId || !['web', 'api', 'mcp'].includes(principal.channel)) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n if (!Array.isArray(body.scopes) || body.scopes.length > 64 || Reflect.ownKeys(body.scopes).length !== body.scopes.length + 1) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n const scopes: string[] = [];\n for (let i = 0; i < body.scopes.length; i++) {\n const field = Object.getOwnPropertyDescriptor(body.scopes, String(i));\n if (!field || !('value' in field) || !field.enumerable) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n scopes.push(text(field.value, 128));\n }\n if (new Set(scopes).size !== scopes.length) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const limits = { ...CLOUD_LIMITS };\n if (Object.hasOwn(body, 'limits')) {\n const overrides = record(body.limits, Object.keys(CLOUD_LIMITS));\n for (const key of Object.keys(overrides) as (keyof CloudLimits)[]) {\n const value = overrides[key];\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value <= 0 || value > CLOUD_LIMITS[key]) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n limits[key] = value;\n }\n }\n return { identity, principal, scopes, dispatcherId: text(body.dispatcherId), limits };\n}\n","import { SQLITE_MIGRATIONS, SqliteStorage, type SqliteDatabase, type SqliteExecutor, type SqliteValue } from '@earendil-works/pi-durable/storage/sqlite';\nimport type { Storage } from '@earendil-works/pi-durable';\n\n/** Construction returns pi's native Storage interface. */\ntype DurableStorageFactory<Location> = (location: Location) => Promise<Storage>;\n\n// pi owns schema/migrations. Discover its identifiers rather than maintaining a second schema.\nconst names = new Set(['durable_schema']);\nfor (const migration of SQLITE_MIGRATIONS) for (const sql of migration.statements) {\n for (const match of sql.matchAll(/\\bCREATE\\s+(?:UNIQUE\\s+)?(?:TABLE|INDEX)\\s+(?:IF\\s+NOT\\s+EXISTS\\s+)?([A-Za-z_][A-Za-z0-9_]*)/gi)) names.add(match[1]!);\n}\nconst identifiers = new RegExp(`\\\\b(${[...names].join('|')})\\\\b`, 'g');\nfunction prefixed(sql: string): string {\n return sql.split(/('(?:[^']|'')*')/).map((part, i) => i % 2 ? part : part.replace(identifiers, name => `pi_${name}`)).join('');\n}\nfunction binding(value: SqliteValue): SqlStorageValue {\n if (typeof value === 'bigint') {\n if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) throw new RangeError('SQLite integer outside safe range');\n return Number(value);\n }\n if (value instanceof Uint8Array) return new Uint8Array(value).buffer;\n return value;\n}\nfunction row<T extends object>(raw: Record<string, SqlStorageValue>): T {\n const result: Record<string, unknown> = { ...raw };\n for (const [key, value] of Object.entries(result)) if (value instanceof ArrayBuffer) result[key] = new Uint8Array(value);\n return result as T;\n}\n\n/** One adapter per DO database: unrelated reads, writes, transactions and close share this queue. */\nexport class DurableObjectSqliteDatabase implements SqliteDatabase {\n private tail: Promise<unknown> = Promise.resolve();\n private closed = false;\n constructor(private readonly storage: DurableObjectStorage) {}\n\n private queued<T>(operation: () => T | Promise<T>, allowClosed = false): Promise<T> {\n const result = this.tail.then(() => {\n if (this.closed && !allowClosed) throw new Error('SQLite database is closed');\n return operation();\n });\n this.tail = result.then(() => {}, () => {});\n return result;\n }\n\n private executor(active: () => boolean): SqliteExecutor {\n const query = (sql: string, params: SqliteValue[]) => {\n if (!active()) throw new Error('SQLite transaction handle is no longer active');\n return this.storage.sql.exec(prefixed(sql), ...params.map(binding));\n };\n return {\n exec: async sql => { query(sql, []).toArray(); },\n run: async (sql, ...params) => { query(sql, params).toArray(); },\n get: async <T extends object>(sql: string, ...params: SqliteValue[]) => {\n const rows = query(sql, params).toArray();\n return rows[0] === undefined ? undefined : row<T>(rows[0]);\n },\n all: async <T extends object>(sql: string, ...params: SqliteValue[]) => query(sql, params).toArray().map(raw => row<T>(raw)),\n };\n }\n\n exec(sql: string): Promise<void> { return this.queued(() => this.executor(() => true).exec(sql)); }\n run(sql: string, ...params: SqliteValue[]): Promise<void> { return this.queued(() => this.executor(() => true).run(sql, ...params)); }\n get<T extends object>(sql: string, ...params: SqliteValue[]): Promise<T | undefined> { return this.queued(() => this.executor(() => true).get<T>(sql, ...params)); }\n all<T extends object>(sql: string, ...params: SqliteValue[]): Promise<T[]> { return this.queued(() => this.executor(() => true).all<T>(sql, ...params)); }\n\n transaction<T>(callback: (transaction: SqliteExecutor) => Promise<T>): Promise<T> {\n return this.queued(() => this.storage.transaction(async () => {\n let active = true;\n try { return await callback(this.executor(() => active)); }\n finally { active = false; }\n }));\n }\n\n close(): Promise<void> {\n // The DO owns the physical connection; closing only invalidates this adapter.\n return this.queued(() => {\n if (this.closed) return;\n this.closed = true;\n }, true); // Only idempotent close may pass the closed-operation gate.\n }\n}\n\nexport const openDurableObjectStorage: DurableStorageFactory<DurableObjectStorage> = storage =>\n SqliteStorage.open(new DurableObjectSqliteDatabase(storage));\n","import { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\nimport type { Context } from '@earendil-works/chord';\nimport type { JsonObject } from '@earendil-works/pi-ai';\nimport { Harness, ToolTask, createRegistry, defineExtension, hook, type AgentChange, type ConversationId, type ToolExecutionApi, type ToolExecutionResult, type Storage, type Cursor } from '@earendil-works/pi-durable';\nimport { validateToolArguments } from '@earendil-works/pi-ai/utils/validation';\nimport { CloudDoError, safeCloudError, type CloudDoErrorCode } from './errors';\nimport { admitCloudPayload, prepareCloudGuard, type CloudOperationGuard } from './input-guard';\nimport { CloudState, CLOUD_CONTEXT_BYTES, type RunRow } from './cloud-state';\nimport { InvocationLedger, type ExecutionRow, type InvocationRow, type InvocationTerminalState } from './invocation-ledger';\nimport { createPlatformModels, type CloudModelAccount } from './platform-provider';\nimport { PLATFORM_PROFILES, platformCredentialReader, type PlatformProfileId } from './platform-credentials';\nimport { CLOUD_BUDGET, CLOUD_LIMITS, admitSessionConfig, type CloudSessionConfig } from './session-config';\nimport { openDurableObjectStorage } from './storage';\nimport { admitCloudDispatcher, dispatcherDigest, CLOUD_DOMAIN_ERROR_CODES, argsDigest, canonicalArgs, invocationId, replayForTool, type CloudToolDispatcher } from './tools';\n\n/**\n * `restartLimit: Infinity` keeps the Pi 1.3 behavior: a task that an eviction,\n * crash or reset cut off is run again on the next open, never parked.\n */\nexport const CLOUD_HARNESS_SETTINGS = {\n compaction: { enabled: false }, retry: { enabled: false, maxRetries: 0 }, stream: { maxRetries: 0 }, restartLimit: Infinity,\n} as const;\n\nclass StaleInvocationAttempt extends CloudDoError {\n constructor() { super('CLOUD_EXECUTION_INTERRUPTED'); }\n}\n\nexport interface ExecutionLease {\n conversationId?: number;\n trigger?: 'submit' | 'wake';\n readonly profile: PlatformProfileId;\n readonly deadlineAt: number;\n readonly controller: AbortController;\n connected: boolean;\n timer?: ReturnType<typeof setTimeout>;\n guard?: CloudOperationGuard;\n liveOwner: boolean;\n settled: boolean;\n}\n\nexport interface CloudRenewRequest {\n nativeRunId: number;\n requestId: string | null;\n kind: 'model' | 'tool';\n toolName?: string;\n recovery: boolean;\n}\nexport type CloudRenewResult = { ok: true } | { ok: false; code: CloudDoErrorCode };\nexport interface CloudRunSettlement {\n nativeRunId: number;\n requestId: string | null;\n trigger: RunRow['trigger'];\n state: 'completed' | 'failed' | 'interrupted';\n errorCode: CloudDoErrorCode | null;\n reservation: RunRow['reservation'];\n admissionDigest: string | null;\n admittedSeqs: readonly number[];\n claimedSeqs: readonly number[];\n usage: Readonly<{ steps: number; sentRequests: number; inputTokens: number; outputTokens: number; credits: number }>;\n}\n\nasync function raceSignal<T>(work: Promise<T>, signal: AbortSignal, code: () => CloudDoErrorCode): Promise<T> {\n let remove = () => {};\n const cancelled = new Promise<never>((_resolve, reject) => {\n const abort = () => reject(new CloudDoError(code()));\n signal.addEventListener('abort', abort, { once: true });\n remove = () => signal.removeEventListener('abort', abort);\n if (signal.aborted) abort();\n });\n try { return await Promise.race([work, cancelled]); }\n finally { remove(); }\n}\n\n/** Bound consumer work even when it ignores the supplied signal. */\nexport function raceLease<T>(work: Promise<T>, lease: ExecutionLease): Promise<T> {\n return raceSignal(work, lease.controller.signal,\n () => Date.now() >= lease.deadlineAt ? 'CLOUD_EXECUTION_TIMEOUT' : 'CLOUD_EXECUTION_ABORTED');\n}\n\nexport interface RuntimeOptions {\n createDispatcher(id: string): CloudToolDispatcher | undefined;\n projectInvocation?(row: InvocationRow): { key: string; dataJson: string } | undefined;\n onCommit?(): void;\n onInvocationSettled?(id: string, state: InvocationTerminalState): void | Promise<void>;\n instructions?(profile: PlatformProfileId): string | undefined;\n renew?(request: CloudRenewRequest, signal: AbortSignal): CloudRenewResult | Promise<CloudRenewResult>;\n settleRun?(run: CloudRunSettlement, signal: AbortSignal): void | Promise<void>;\n}\n\nexport interface RunOutcome {\n state: 'completed' | 'failed' | 'interrupted';\n errorCode?: CloudDoErrorCode;\n text?: string;\n entryId?: number;\n requeue?: boolean;\n}\n\n/** One physical DO owns this runtime. Native pi owns all model and task scheduling. */\nexport class SessionRuntime {\n readonly ledger: InvocationLedger;\n readonly cloud: CloudState;\n #piStorage?: Storage;\n #recoveryGuard?: CloudOperationGuard;\n #repairRetrying = false;\n #repairing = false;\n #settlementFlights = new Map<number, Promise<void>>();\n #initializing = false;\n #deferredSettlements: InvocationRow[] = [];\n #opened?: Promise<Harness>;\n /** Pi 1.2: the cached Harness's Session failed and closed. The next open() replaces it from Storage. */\n #sessionFailed = false;\n #recovery?: Promise<void>;\n #recovered = false;\n #config?: CloudSessionConfig;\n #dispatcher?: CloudToolDispatcher;\n #bootstrapFailure?: CloudDoErrorCode;\n #stale = new Set<number>();\n #active?: ExecutionLease;\n #inline = 0;\n #invocations = new Map<string, Promise<Record<string, unknown>>>();\n #fatalDispositions = new Map<number, CloudDoErrorCode>();\n\n constructor(private readonly state: DurableObjectState, private readonly env: Readonly<Record<string, unknown>>,\n private readonly options: RuntimeOptions) {\n this.cloud = new CloudState(state.storage);\n this.ledger = new InvocationLedger(state.storage, {\n started: (row, guard) => {\n this.cloud.appendEvent({ eventKey: `tool:${row.invocationId}:started`, type: 'tool.started', conversationId: row.conversationId,\n ref: row.invocationId, data: { invocationId: row.invocationId, toolName: row.toolName, state: row.state } }, guard ?? this.#guard());\n },\n startedCommitted: () => this.#doorbell(),\n terminal: (row, recovery) => {\n const guard = this.#guard();\n const event = this.cloud.appendEvent({ eventKey: `tool:${row.invocationId}:settled`, type: 'tool.settled', conversationId: row.conversationId,\n ref: row.invocationId, data: { invocationId: row.invocationId, state: row.state, errorCode: row.errorCode, late: recovery } }, guard);\n row.settledAt = event.createdAt;\n row.settledEventSeq = event.seq;\n this.cloud.projectInvocation(row, this.options.projectInvocation, guard);\n return event;\n },\n committed: row => {\n if (this.#initializing) this.#deferredSettlements.push(row);\n else this.#notifyCommitted(row);\n },\n });\n }\n\n get recovering(): boolean { return !this.#recovered; }\n get activeLease(): ExecutionLease | undefined { return this.#active; }\n get hasLiveOwner(): boolean { return this.#active?.liveOwner === true; }\n get busy(): boolean { return this.#active !== undefined || this.#repairing; }\n get repairRetrying(): boolean { return this.#repairRetrying; }\n #schedulingBusy(): boolean { return this.hasLiveOwner || this.#repairing; }\n #clearSettlementRetry(): void {\n if (!this.#repairing && (!this.#active || this.hasLiveOwner)) this.#repairRetrying = false;\n }\n prepareGuard(profile?: PlatformProfileId): Promise<CloudOperationGuard> { return prepareCloudGuard(this.env, profile); }\n #guard(): CloudOperationGuard {\n const guard = this.#active?.guard ?? this.#recoveryGuard;\n if (!guard) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n return guard;\n }\n #doorbell(): void { try { this.options.onCommit?.(); } catch { /* Doorbells are advisory. */ } }\n #notifyCommitted(row: InvocationRow): void {\n this.#doorbell();\n // A post-commit hook never enters an execution's catch path.\n void Promise.resolve().then(() => this.options.onInvocationSettled?.(row.invocationId, row.state as InvocationTerminalState)).catch(() => undefined);\n }\n #flushSettlements(): void {\n this.#initializing = false;\n for (const row of this.#deferredSettlements.splice(0)) this.#notifyCommitted(row);\n }\n\n /** Binding/RPC callers authorize the session before calling this immutable configuration operation. */\n async configure(input: unknown): Promise<void> {\n const config = admitSessionConfig(input);\n await admitCloudPayload(this.env, config);\n const candidate = this.options.createDispatcher(config.dispatcherId);\n if (!candidate) throw new CloudDoError('CLOUD_TOOL_NOT_AVAILABLE');\n const dispatcher = admitCloudDispatcher(candidate);\n await this.#guardToolMetadata(dispatcher);\n const policyDigest = await dispatcherDigest(dispatcher);\n this.#sessionSchema();\n this.state.storage.transactionSync(() => {\n const existing = this.#storedConfig();\n if (existing) {\n if (JSON.stringify(existing) !== JSON.stringify(config) || this.#storedDispatcherDigest() !== policyDigest) throw new CloudDoError('CLOUD_SESSION_CONFLICT');\n return;\n }\n if (this.#opened) throw new CloudDoError('CLOUD_SESSION_CONFLICT');\n this.state.storage.sql.exec('UPDATE cloud_session SET configJson=?,dispatcherDigest=? WHERE id=1', JSON.stringify(config), policyDigest);\n });\n }\n\n open(selected?: PlatformProfileId): Promise<Harness> {\n if (!this.#opened || this.#sessionFailed) {\n // Replace a failed Session in this synchronous step: no caller sees a half-reset runtime.\n this.#sessionFailed = false;\n let openGuard: CloudOperationGuard | undefined;\n const disposeOpenGuard = () => {\n openGuard?.dispose();\n if (this.#recoveryGuard === openGuard) this.#recoveryGuard = undefined;\n };\n // Credential reads must finish before entering the bounded initialization gate.\n const initialized = prepareCloudGuard(this.env, selected).then(guard => {\n openGuard = guard;\n this.#recoveryGuard = guard;\n this.#initializing = true;\n return this.state.blockConcurrencyWhile(async () => {\n this.ledger.ensureSchema();\n this.cloud.ensureSchema();\n this.#sessionSchema();\n this.#dispatcher = undefined;\n this.#bootstrapFailure = undefined;\n this.#config = this.#storedConfig();\n if (!this.#config && this.ledger.pending().length) this.#bootstrapFailure = 'CLOUD_TOOL_NOT_AVAILABLE';\n if (this.#config) {\n this.#config = admitSessionConfig(this.#config);\n const candidate = this.options.createDispatcher(this.#config.dispatcherId);\n if (!candidate) this.#bootstrapFailure = 'CLOUD_TOOL_NOT_AVAILABLE';\n else {\n const dispatcher = admitCloudDispatcher(candidate);\n const metadata = dispatcher.tools.map(({ name, description, parameters }) => ({ name, description, parameters }));\n guard.guardPayload(JSON.stringify(metadata));\n if (await dispatcherDigest(dispatcher) !== this.#storedDispatcherDigest()) this.#bootstrapFailure = 'CLOUD_SESSION_CONFLICT';\n else this.#dispatcher = dispatcher;\n }\n }\n const registry = createRegistry();\n const tools = this.#dispatcher?.tools.map(tool => ({ name: tool.name, description: tool.description,\n parameters: tool.parameters, replay: 'unsafe' as const,\n outputLimits: { maxBytes: CLOUD_LIMITS.resultBytes, maxLines: CLOUD_LIMITS.resultBytes },\n execute: (args: Record<string, unknown>, api: ToolExecutionApi, context: Context) => this.#execute(tool.name, args, api, context),\n })) ?? [];\n registry.install(defineExtension({ name: 'cloud-session-tools', tools,\n hooks: [hook(ToolTask, { beforeTool: async (_call, api) => {\n if (this.#stale.has(api.conversationId)) return { block: 'CLOUD_EXECUTION_INTERRUPTED' };\n try { this.ledger.countTool(api.conversationId, String(api.taskId), this.#limits().toolCalls); }\n catch (error) {\n const code = safeCloudError(error).code;\n this.#recordFatal(api.conversationId, code);\n return { block: code };\n }\n } })],\n }));\n this.#piStorage = await openDurableObjectStorage(this.state.storage);\n const harness = await Harness.open(this.#piStorage, {\n models: createPlatformModels(this.env, platformCredentialReader(this.env), {\n beforeRequest: info => this.#beforeRequest(info),\n admitToolCall: async (name, id, args) => {\n try { await admitCloudPayload(this.env, { name, id, args }, this.#active?.profile); }\n catch (error) {\n if (error instanceof CloudDoError && error.code === 'CLOUD_USER_CREDENTIAL_REJECTED') {\n throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n }\n throw error;\n }\n const tool = this.#dispatcher?.tools.find(tool => tool.name === name);\n if (!tool) throw new CloudDoError('CLOUD_TOOL_NOT_AVAILABLE');\n try { validateToolArguments(tool, { type: 'toolCall', id, name, arguments: args as JsonObject }); }\n catch { throw new CloudDoError('CLOUD_TOOL_ARGUMENT_INVALID'); }\n },\n requestSignal: signal => this.#requestSignal(signal),\n }), registry, settings: CLOUD_HARNESS_SETTINGS,\n }, BACKGROUND_CONTEXT);\n const inspection = await harness.inspect(BACKGROUND_CONTEXT);\n this.#stale = new Set([...inspection.tasks.map(task => task.record.conversationId),\n ...inspection.submissions.map(submission => submission.conversationId)]);\n this.state.storage.sql.exec('UPDATE cloud_session SET staleJson=? WHERE id=1', JSON.stringify([...this.#stale]));\n this.cloud.captureEligibility(this.#stale);\n const replay = this.ledger.claimRecovery();\n await this.cloud.rearmAlarm({ busy: false, repairRetrying: false });\n return { harness, replay };\n\n });\n });\n // This continuation runs after the initialization input gate was released.\n const opened: Promise<Harness> = initialized.then(({ harness, replay }) => {\n this.#flushSettlements();\n // A failed Session closes itself, Storage included, before `closed` settles. Until a caller reopens,\n // every call on it rejects with SessionFailed and no model request is admitted.\n void harness.closed.then(end => {\n if (end.reason !== 'failed' || this.#opened !== opened) return;\n this.#recovered = false;\n this.#sessionFailed = true;\n });\n this.#recovery = this.#recover(harness, replay).finally(disposeOpenGuard);\n void this.#recovery.catch(() => undefined);\n return harness;\n }, error => {\n this.#flushSettlements();\n disposeOpenGuard();\n throw error;\n });\n this.#opened = opened;\n }\n return this.#opened;\n }\n\n async ready(selected?: PlatformProfileId): Promise<Harness> {\n const harness = await this.open(selected);\n await this.#recovery;\n return harness;\n }\n\n agentChange(profile: PlatformProfileId, guard: CloudOperationGuard): AgentChange {\n const model = { provider: profile, modelId: PLATFORM_PROFILES[profile].model };\n try {\n const text = this.options.instructions?.(profile);\n if (text === undefined) return { model };\n if (typeof text !== 'string' || !text.trim() || new TextEncoder().encode(text).length > CLOUD_CONTEXT_BYTES) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n guard.guardText(text);\n return { model, instructions: text };\n } catch { throw new CloudDoError('CLOUD_REQUEST_INVALID'); }\n }\n\n reserve(profile: PlatformProfileId, guard?: CloudOperationGuard): ExecutionLease {\n if (!this.#recovered) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n if (this.#bootstrapFailure) throw new CloudDoError(this.#bootstrapFailure);\n if (this.#active) throw new CloudDoError('CLOUD_TOOL_BUSY');\n if (this.#repairing) throw new CloudDoError('CLOUD_TOOL_BUSY');\n const lease: ExecutionLease = { profile, deadlineAt: Date.now() + this.#limits().turnTimeoutMs,\n controller: new AbortController(), connected: true, liveOwner: true, settled: false, guard };\n this.#active = lease;\n this.cloud.setSchedulingState({ busy: true, repairRetrying: this.#repairRetrying });\n return lease;\n }\n\n attach(lease: ExecutionLease, conversationId: number, trigger: 'submit' | 'wake' = 'submit', guard = lease.guard): void {\n if (this.#active !== lease || lease.conversationId !== undefined) throw new CloudDoError('CLOUD_TOOL_BUSY');\n lease.conversationId = conversationId;\n lease.trigger = trigger;\n lease.guard = guard;\n if (!lease.guard) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n this.cloud.startRun(conversationId, trigger, lease.deadlineAt, lease.guard);\n if (trigger === 'submit') this.cloud.markRunning(conversationId, lease.guard);\n lease.timer = setTimeout(() => {\n if (this.#active !== lease || lease.settled) return;\n this.#recordFatal(conversationId, 'CLOUD_EXECUTION_TIMEOUT');\n lease.controller.abort();\n }, Math.max(0, lease.deadlineAt - Date.now()));\n this.#doorbell();\n }\n\n cancel(lease: ExecutionLease, code: CloudDoErrorCode = 'CLOUD_EXECUTION_ABORTED'): void {\n if (this.#active !== lease || lease.settled) return;\n if (lease.conversationId !== undefined) {\n const row = this.cloud.run(lease.conversationId);\n if (row && row.state !== 'starting' && row.state !== 'running') return;\n }\n lease.connected = false;\n if (lease.conversationId !== undefined) {\n this.#recordFatal(lease.conversationId, code);\n try { this.ledger.abortExecution(lease.conversationId, code); }\n catch { /* The in-memory disposition still closes the transport if storage fails. */ }\n }\n lease.controller.abort();\n }\n\n async release(lease: ExecutionLease, retryCount = 0): Promise<void> {\n clearTimeout(lease.timer);\n lease.liveOwner = false;\n if (this.#active !== lease) return;\n try {\n const run = lease.conversationId === undefined ? undefined : this.cloud.run(lease.conversationId);\n if (run?.state === 'running') {\n // A wake already owns an alarm generation. A submit needs its first repair alarm.\n this.#repairRetrying = lease.trigger === 'wake';\n await this.cloud.rearmAlarm({ busy: false, repairRetrying: this.#repairRetrying });\n return;\n }\n if (run?.state === 'starting') {\n this.cloud.settleRun(run.conversationId, { state: 'interrupted', errorCode: this.fatal(run.conversationId) ?? 'CLOUD_WAKE_EMPTY' }, this.#guard());\n this.#doorbell();\n }\n // Consumer settlement owns no execution lease. A later run may start now.\n this.#active = undefined;\n try {\n await this.#deliverSettlements(lease.guard);\n this.#clearSettlementRetry();\n }\n catch (error) {\n if (lease.trigger === 'wake') {\n this.#repairRetrying = retryCount < 6;\n this.cloud.setSchedulingState({ busy: this.#schedulingBusy(), repairRetrying: this.#repairRetrying });\n throw error;\n }\n // Keep an existing retry generation. A submit without one creates its first alarm.\n }\n await this.cloud.rearmAlarm({ busy: this.#schedulingBusy(), repairRetrying: this.#repairRetrying });\n } catch (error) {\n if (this.#active === lease) {\n this.#repairRetrying = lease.trigger === 'wake';\n this.cloud.setSchedulingState({ busy: false, repairRetrying: this.#repairRetrying });\n // A failed submit has no platform retry generation to protect.\n if (!this.#repairRetrying) await this.cloud.rearmAlarm({ busy: false, repairRetrying: false });\n }\n throw error;\n } finally {\n lease.guard?.dispose();\n lease.guard = undefined;\n }\n }\n\n recordSubmission(conversationId: number, submissionId: number): void {\n this.cloud.recordSubmission(conversationId, submissionId);\n }\n markReservation(conversationId: number, reservation: 'pending' | 'held' | 'none', admission?: { digest: string; seqs: number[] }): void {\n this.cloud.markReservation(conversationId, reservation, this.#guard(), Date.now(), admission);\n this.#doorbell();\n }\n claimWake(lease: ExecutionLease, seqs: readonly number[], profile = lease.profile) {\n if (this.#active !== lease || lease.conversationId === undefined || !lease.liveOwner) throw new CloudDoError('CLOUD_TOOL_BUSY');\n const claimed = this.cloud.claim(lease.conversationId, [...seqs], profile, this.#guard());\n this.#doorbell();\n return claimed;\n }\n async settle(lease: ExecutionLease, outcome: RunOutcome): Promise<void> {\n if (this.#active !== lease || lease.conversationId === undefined) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n const delivery = await this.#deliveryEvidence(await this.#opened!, lease.conversationId, outcome.state === 'completed');\n this.state.storage.transactionSync(() => {\n const fatal = this.fatal(lease.conversationId!)\n ?? (lease.controller.signal.aborted ? 'CLOUD_EXECUTION_ABORTED' : Date.now() >= lease.deadlineAt ? 'CLOUD_EXECUTION_TIMEOUT' : undefined);\n const finalOutcome = outcome.state === 'completed' && fatal ? { state: 'failed' as const, errorCode: fatal } : outcome;\n const stored = this.cloud.settleRun(lease.conversationId!, finalOutcome, this.#guard());\n for (const link of delivery) this.cloud.setDelivery(link.invocationId,\n stored?.state === 'completed' ? link.state : 'undelivered',\n stored?.state === 'completed' ? link.taskId : null,\n stored?.state === 'completed' ? link.entryId : null, this.#guard());\n });\n lease.settled = true;\n clearTimeout(lease.timer);\n this.#doorbell();\n }\n cancelActive(code: CloudDoErrorCode = 'CLOUD_EXECUTION_ABORTED'): boolean {\n if (!this.#active || this.#active.settled) return false;\n this.cancel(this.#active, code);\n return true;\n }\n /** Only an owner that exited may be repaired. A live provider run is never adjudicated here. */\n async repairPendingRuns(retryCount = 0): Promise<boolean> {\n if (this.hasLiveOwner || this.#repairing) return false;\n const runs = this.cloud.unsettledRuns();\n if (!runs.length) {\n if (this.#repairRetrying && !this.cloud.unackedRuns().length) {\n this.#repairRetrying = false;\n await this.cloud.rearmAlarm({ busy: this.busy, repairRetrying: false });\n }\n return false;\n }\n this.#repairing = true;\n this.#repairRetrying = true;\n this.cloud.setSchedulingState({ busy: true, repairRetrying: true });\n let guard: CloudOperationGuard | undefined;\n const previousGuard = this.#active?.guard;\n try {\n guard = await this.prepareGuard();\n this.#recoveryGuard = guard;\n if (this.#active) this.#active.guard = guard;\n const harness = await this.#opened!;\n const inspection = await harness.inspect(BACKGROUND_CONTEXT);\n const live = new Set<number>([...inspection.tasks.map(task => task.record.conversationId), ...inspection.submissions.map(submission => submission.conversationId)]);\n this.cloud.captureEligibility(live);\n for (const run of runs) {\n const id = run.conversationId;\n if (!live.has(id as ConversationId)) continue;\n this.#stale.add(id);\n this.#recordFatal(id, 'CLOUD_EXECUTION_INTERRUPTED');\n const conversation = await harness.conversation(id as ConversationId, BACKGROUND_CONTEXT);\n if (conversation) { await conversation.abort(BACKGROUND_CONTEXT, { background: true }); await conversation.waitForIdle(BACKGROUND_CONTEXT); }\n }\n await this.#adjudicateRuns(harness);\n clearTimeout(this.#active?.timer);\n this.#active = undefined;\n this.#repairRetrying = this.cloud.unackedRuns().length > 0;\n await this.cloud.rearmAlarm({ busy: false, repairRetrying: this.#repairRetrying });\n return true;\n } catch (error) {\n // The platform's count belongs to this alarm generation. No SDK retry counter or timer.\n this.#repairRetrying = retryCount < 6;\n this.cloud.setSchedulingState({ busy: false, repairRetrying: this.#repairRetrying });\n throw error;\n } finally {\n this.#repairing = false;\n guard?.dispose();\n previousGuard?.dispose();\n if (this.#recoveryGuard === guard) this.#recoveryGuard = undefined;\n if (this.#active) this.#active.guard = undefined;\n }\n }\n\n async deliverSettlementsForAlarm(retryCount = 0, providedGuard?: CloudOperationGuard): Promise<void> {\n let ownGuard: CloudOperationGuard | undefined;\n try {\n if (this.cloud.unackedRuns().length) {\n const guard = providedGuard ?? (ownGuard = await this.prepareGuard());\n await this.#deliverSettlements(guard);\n }\n this.#clearSettlementRetry();\n await this.cloud.rearmAlarm({ busy: this.#schedulingBusy(), repairRetrying: this.#repairRetrying });\n } catch (error) {\n this.#repairRetrying = retryCount < 6;\n this.cloud.setSchedulingState({ busy: this.#schedulingBusy(), repairRetrying: this.#repairRetrying });\n throw safeCloudError(error);\n } finally { ownGuard?.dispose(); }\n }\n\n async #deliverSettlements(guard?: CloudOperationGuard): Promise<void> {\n const rows = this.cloud.unackedRuns();\n if (!rows.length) return;\n if (!guard) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n const jobs = rows.map(row => {\n const previous = this.#settlementFlights.get(row.conversationId);\n if (previous) return previous;\n const job = this.#deliverSettlement(row, guard).finally(() => this.#settlementFlights.delete(row.conversationId));\n this.#settlementFlights.set(row.conversationId, job);\n return job;\n });\n // Every run is tried. All hook deadlines run together, so a batch does not wait N times 60 s.\n const results = await Promise.allSettled(jobs);\n const failures = results.filter((result): result is PromiseRejectedResult => result.status === 'rejected');\n if (failures.length) throw safeCloudError(failures[0]!.reason);\n }\n\n async #deliverSettlement(row: RunRow, guard: CloudOperationGuard): Promise<void> {\n if (this.cloud.readRun(row.conversationId)?.settlementAck !== 0) return;\n const input: CloudRunSettlement = Object.freeze({\n nativeRunId: row.conversationId, requestId: row.requestId, trigger: row.trigger,\n state: row.state as CloudRunSettlement['state'], errorCode: row.errorCode,\n reservation: row.reservation, admissionDigest: row.admissionDigest,\n admittedSeqs: Object.freeze(JSON.parse(row.admittedSeqs ?? '[]') as number[]),\n claimedSeqs: Object.freeze(this.cloud.claimedSeqs(row.conversationId)),\n usage: Object.freeze({ steps: row.steps, sentRequests: row.sentRequests,\n inputTokens: row.inputTokens, outputTokens: row.outputTokens, credits: row.credits }),\n });\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), CLOUD_LIMITS.callTimeoutMs);\n try {\n await raceSignal(Promise.resolve().then(() => this.options.settleRun?.(input, controller.signal)),\n controller.signal, () => 'CLOUD_EXECUTION_TIMEOUT');\n if (this.cloud.ackSettlement(row.conversationId, guard)) this.#doorbell();\n } catch (error) { throw safeCloudError(error); }\n finally { clearTimeout(timer); controller.abort(); }\n }\n\n async #adjudicateRuns(harness: Harness): Promise<void> {\n for (const run of this.cloud.unsettledRuns()) {\n const eligibility = JSON.parse(run.eligibilityJson ?? JSON.stringify({ steps: run.steps, aborted: run.aborted, fatalCode: run.fatalCode })) as Pick<ExecutionRow, 'steps' | 'aborted' | 'fatalCode'> & { wasStale?: boolean };\n const aborted = eligibility.aborted || run.aborted;\n let outcome: RunOutcome;\n const submission = run.requestId ? await this.#piStorage!.submissionByRequest(run.conversationId as ConversationId, run.requestId, BACKGROUND_CONTEXT) : undefined;\n if (run.state === 'starting') outcome = { state: 'interrupted', errorCode: 'CLOUD_WAKE_EMPTY' };\n else if (!aborted && !eligibility.fatalCode && submission?.status === 'done') {\n const conversation = await harness.conversation(run.conversationId as ConversationId, BACKGROUND_CONTEXT);\n const context = conversation ? await conversation.context(BACKGROUND_CONTEXT) : undefined;\n const final = context ? [...context.entries].reverse().find(entry => entry.kind === 'pi.assistant' && entry.model?.some(message => message.role === 'assistant' && message.stopReason !== 'toolUse')) : undefined;\n const message = final?.model?.find(message => message.role === 'assistant' && message.stopReason !== 'toolUse');\n const text = message?.role === 'assistant' ? message.content.filter(part => part.type === 'text').map(part => part.text).join('') : '';\n outcome = { state: 'completed', text, entryId: final?.id };\n } else if (!aborted && !eligibility.fatalCode && submission?.status === 'unanswered' && submission.reason !== 'aborted') {\n outcome = { state: 'failed', errorCode: safeCloudError(new Error(typeof submission.detail === 'string' ? submission.detail : '')).code };\n } else {\n // Pi abort writes an unanswered/aborted receipt. It is interrupted work, not a model failure.\n // Eligibility alone decides whether that unpaid wake can return to the inbox.\n outcome = { state: 'interrupted', errorCode: eligibility.fatalCode ?? (aborted ? 'CLOUD_EXECUTION_ABORTED' : 'CLOUD_EXECUTION_INTERRUPTED'),\n requeue: run.trigger === 'wake' && eligibility.steps === 0 && !aborted && !eligibility.fatalCode };\n }\n const delivery = await this.#deliveryEvidence(harness, run.conversationId, outcome.state === 'completed');\n this.state.storage.transactionSync(() => {\n // A binding cancellation can arrive during the asynchronous pi evidence reads.\n const current = this.cloud.run(run.conversationId);\n const finalOutcome = current?.aborted && !eligibility.aborted\n ? { state: 'interrupted' as const, errorCode: 'CLOUD_EXECUTION_ABORTED' as const }\n : outcome;\n const stored = this.cloud.settleRun(run.conversationId, finalOutcome, this.#guard());\n for (const link of delivery) this.cloud.setDelivery(link.invocationId,\n stored?.state === 'completed' ? link.state : 'undelivered',\n stored?.state === 'completed' ? link.taskId : null,\n stored?.state === 'completed' ? link.entryId : null, this.#guard());\n });\n this.#doorbell();\n }\n }\n\n async #deliveryEvidence(harness: Harness, conversationId: number, completed: boolean) {\n const rows = this.ledger.forConversation(conversationId);\n const links = rows.map(row => ({ invocationId: row.invocationId, state: 'undelivered' as 'delivered' | 'undelivered', taskId: null as number | null, entryId: null as number | null }));\n if (!completed || !rows.length) return links;\n const conversation = await harness.conversation(conversationId as ConversationId, BACKGROUND_CONTEXT);\n if (!conversation) return links;\n const context = await conversation.context(BACKGROUND_CONTEXT);\n let cursor: Cursor | undefined;\n do {\n const page = await this.#piStorage!.scanTasks({ conversationId: conversationId as ConversationId, kind: ToolTask.definition.name }, 100, cursor, BACKGROUND_CONTEXT);\n for (const task of page.items) {\n if (task.state.status !== 'terminal' || task.state.outcome.status !== 'completed') continue;\n const input = task.input as unknown as { assistant?: number; callId?: string };\n const rowIndex = rows.findIndex(row => row.assistantEntryId === input.assistant && row.toolCallId === input.callId);\n if (rowIndex < 0) continue;\n const result = task.state.outcome.result as unknown as { entryId?: number };\n const entryIndex = context.entries.findIndex(entry => entry.id === result.entryId && entry.kind === 'pi.tool-result' && entry.byTaskId === task.id);\n if (entryIndex < 0 || !context.contributions[entryIndex]?.some(message => message.role === 'toolResult')) continue;\n links[rowIndex] = { invocationId: rows[rowIndex]!.invocationId, state: 'delivered', taskId: task.id, entryId: result.entryId! };\n }\n cursor = page.next;\n } while (cursor !== undefined);\n return links;\n }\n\n fatal(conversationId: number): CloudDoErrorCode | undefined {\n const remembered = this.#fatalDispositions.get(conversationId);\n if (remembered) return remembered;\n try {\n const code = this.ledger.execution(conversationId)?.fatalCode;\n return code ? this.#toolErrorCode(new Error(code)) : undefined;\n }\n catch { return this.#recordFatal(conversationId, 'CLOUD_TOOL_FAILED'); }\n }\n readInvocation(id: string): InvocationRow | undefined { return this.ledger.read(id); }\n #limits() { return this.#config?.limits ?? CLOUD_LIMITS; }\n\n async #guardToolMetadata(dispatcher: CloudToolDispatcher): Promise<void> {\n // Pi persists tool schemas and descriptions before the first model request.\n const metadata = dispatcher.tools.map(({ name, description, parameters }) => ({ name, description, parameters }));\n await admitCloudPayload(this.env, JSON.parse(JSON.stringify(metadata)));\n }\n\n #sessionSchema(): void {\n this.state.storage.sql.exec(`CREATE TABLE IF NOT EXISTS cloud_session (\n id INTEGER PRIMARY KEY CHECK(id=1), configJson TEXT, staleJson TEXT NOT NULL DEFAULT '[]', dispatcherDigest TEXT\n ); INSERT OR IGNORE INTO cloud_session(id) VALUES(1)`);\n }\n\n #storedDispatcherDigest(): string | null {\n return this.state.storage.sql.exec<{ dispatcherDigest: string | null }>('SELECT dispatcherDigest FROM cloud_session WHERE id=1').one().dispatcherDigest;\n }\n\n #storedConfig(): CloudSessionConfig | undefined {\n const row = this.state.storage.sql.exec<{ configJson: string | null }>('SELECT configJson FROM cloud_session WHERE id=1').toArray()[0];\n return row?.configJson ? JSON.parse(row.configJson) as CloudSessionConfig : undefined;\n }\n\n async #renew(request: CloudRenewRequest, signal: AbortSignal): Promise<void> {\n const result = this.options.renew ? await this.options.renew(Object.freeze(request), signal) : { ok: true };\n if (!result || typeof result !== 'object' || typeof result.ok !== 'boolean') throw new CloudDoError('CLOUD_MODEL_REQUEST_FAILED');\n if (!result.ok) throw safeCloudError(new Error((result as {code: string}).code));\n }\n\n async #beforeRequest(info: { inputBytes: number }): Promise<CloudModelAccount> {\n if (!this.#recovered || !this.#active?.liveOwner || this.#active.conversationId === undefined) {\n throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n }\n const lease = this.#active;\n const id = lease.conversationId!;\n const fatal = this.fatal(id);\n if (fatal) throw new CloudDoError(fatal);\n try {\n await raceLease(Promise.resolve().then(() => this.#renew({ nativeRunId: id,\n requestId: this.cloud.readRun(id)?.requestId ?? null, kind: 'model', recovery: false }, lease.controller.signal)), lease);\n if (this.#active !== lease || !lease.liveOwner) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n const stopped = this.fatal(id);\n if (stopped) throw new CloudDoError(stopped);\n this.ledger.countModel(id, this.#limits().modelSteps, Date.now(), {\n inputBytes: info.inputBytes, inputTokens: CLOUD_BUDGET.inputTokens, outputTokens: CLOUD_BUDGET.outputTokens,\n });\n } catch (error) { throw new CloudDoError(this.#recordFatal(id, safeCloudError(error).code)); }\n const seen = { input: 0, output: 0 };\n const record = (work: () => void): void => {\n try { work(); }\n catch { throw new CloudDoError(this.#recordFatal(id, 'CLOUD_MODEL_REQUEST_FAILED')); }\n };\n return {\n sent: () => record(() => this.ledger.markModelSent(id)),\n usage: usage => record(() => {\n const input = usage.input ?? seen.input;\n const output = usage.output ?? seen.output;\n if (!Number.isSafeInteger(input) || !Number.isSafeInteger(output) || input < seen.input || output < seen.output) {\n throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n }\n if (input !== seen.input || output !== seen.output) this.ledger.addModelUsage(id, input - seen.input, output - seen.output);\n seen.input = input; seen.output = output;\n }),\n };\n }\n\n #requestSignal(native?: AbortSignal): AbortSignal {\n const signals = [...(native ? [native] : []), ...(this.#active ? [this.#active.controller.signal] : [])];\n return AbortSignal.any(signals);\n }\n\n async #recover(harness: Harness, replay: InvocationRow[]): Promise<void> {\n for (const id of this.#stale) {\n this.#recordFatal(id, 'CLOUD_EXECUTION_INTERRUPTED');\n const conversation = await harness.conversation(id as ConversationId, BACKGROUND_CONTEXT);\n if (conversation) {\n await conversation.abort(BACKGROUND_CONTEXT, { background: true });\n await conversation.waitForIdle(BACKGROUND_CONTEXT);\n }\n }\n for (const row of replay) {\n if (!this.#config || !this.#dispatcher) {\n this.ledger.finish(row.invocationId, 'failed', undefined, 'CLOUD_EXECUTION_INTERRUPTED');\n continue;\n }\n await this.#runInvocation(row, undefined, true).catch(() => undefined);\n }\n await this.#adjudicateRuns(harness);\n // After a Session failure, an owner that already exited left its lease for repair. Its run is settled now.\n if (this.#active && !this.#active.liveOwner) {\n clearTimeout(this.#active.timer);\n this.#active = undefined;\n }\n await this.cloud.rearmAlarm({ busy: false, repairRetrying: false });\n this.#recovered = true;\n }\n\n async #execute(name: string, args: Record<string, unknown>, api: ToolExecutionApi, context: Context): Promise<ToolExecutionResult> {\n try { return await this.#executeChecked(name, args, api, context); }\n catch (error) {\n const code = this.#toolErrorCode(error);\n this.#recordFatal(api.conversationId, code);\n try {\n if (error instanceof StaleInvocationAttempt) {\n const harness = await this.#opened!;\n // abortTask marks first, then joins this invocation. Never await the self-join here.\n void harness.abortTask(api.taskId, BACKGROUND_CONTEXT).catch(() => undefined);\n await harness.getTask(api.taskId, BACKGROUND_CONTEXT);\n }\n } catch { /* The fixed receipt remains the only SDK output if cancellation storage fails. */ }\n return this.#errorResult(code);\n }\n }\n\n async #executeChecked(name: string, args: Record<string, unknown>, api: ToolExecutionApi, context: Context): Promise<ToolExecutionResult> {\n if (this.#stale.has(api.conversationId) || !this.#config || !this.#dispatcher) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n const task = await api.getTask(api.taskId, context);\n const input = task?.input;\n if (!input || typeof input !== 'object' || Array.isArray(input) || typeof input.assistant !== 'number') {\n throw new CloudDoError('CLOUD_TOOL_FAILED');\n }\n this.#guard().guardPayload(canonicalArgs({ name, id: api.callId, args }));\n const id = await invocationId(api.conversationId, input.assistant, api.callId);\n const execution = this.ledger.execution(api.conversationId);\n if (!execution) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n const begun = this.ledger.begin({ invocationId: id, sessionId: this.#config.identity.sessionId,\n conversationId: api.conversationId, assistantEntryId: input.assistant, toolCallId: api.callId,\n toolName: name, argsDigest: await argsDigest(name, args), argsJson: canonicalArgs(args), replay: replayForTool(name),\n deadlineAt: Math.min(Date.now() + this.#limits().callTimeoutMs, execution.deadlineAt),\n });\n if (begun.kind === 'pending') {\n const pending = this.#invocations.get(id);\n if (!pending) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n await pending;\n } else if (begun.kind === 'started') {\n const running = this.#runInvocation(begun.row, context.abortSignal, false);\n this.#invocations.set(id, running);\n try { await running; }\n finally { this.#invocations.delete(id); }\n }\n return this.#modelResult(this.ledger.read(id)!);\n }\n\n #modelResult(row: InvocationRow): ToolExecutionResult {\n const result = this.#result(row);\n const error = result.error as { code: string; data?: unknown } | undefined;\n if (Object.hasOwn(result, 'modelView')) return { isError: result.ok === false,\n output: [{ type: 'text', text: JSON.stringify(result.modelView) }] };\n if (result.ok === false) {\n if (this.#dispatcher?.domainErrors?.includes(error!.code)) return { isError: true,\n output: [{ type: 'text', text: JSON.stringify({ ok: false, error }) }] };\n return this.#errorResult(error!.code as CloudDoErrorCode);\n }\n return { output: [{ type: 'text', text: JSON.stringify(result) }] };\n }\n\n #errorResult(code: CloudDoErrorCode): ToolExecutionResult {\n const fixed = safeCloudError(new Error(typeof code === 'string' ? code : 'CLOUD_TOOL_FAILED')).code;\n return { isError: true, output: [{ type: 'text', text: JSON.stringify({ ok: false, error: { code: fixed } }) }] };\n }\n\n #toolErrorCode(error: unknown): CloudDoErrorCode {\n const code = safeCloudError(error).code;\n return code === 'CLOUD_MODEL_REQUEST_FAILED' ? 'CLOUD_TOOL_FAILED' : code;\n }\n\n #recordFatal(conversationId: number, code: CloudDoErrorCode): CloudDoErrorCode {\n let first = this.#fatalDispositions.get(conversationId);\n if (!first) {\n try {\n const stored = this.ledger.execution(conversationId)?.fatalCode;\n first = stored ? this.#toolErrorCode(new Error(stored)) : code;\n }\n catch { first = code; }\n this.#fatalDispositions.set(conversationId, first);\n }\n try { this.ledger.failExecution(conversationId, first); }\n catch { /* Fail closed in memory. Do not expose an exception from failure persistence. */ }\n return first;\n }\n\n #result(row: InvocationRow): Record<string, unknown> {\n if (row.state !== 'succeeded' || row.resultJson === null) throw new CloudDoError(row.errorCode ?? 'CLOUD_TOOL_FAILED');\n return JSON.parse(row.resultJson) as Record<string, unknown>;\n }\n\n async #runInvocation(row: InvocationRow, native: AbortSignal | undefined, recovery: boolean): Promise<Record<string, unknown>> {\n const lease = recovery ? undefined : this.#active;\n const controller = new AbortController();\n let deadline = row.deadlineAt;\n const signals = [controller.signal, ...(native ? [native] : []), ...(lease ? [lease.controller.signal] : [])];\n const signal = AbortSignal.any(signals);\n let timer: ReturnType<typeof setTimeout> | undefined;\n let removeAbort: (() => void) | undefined;\n try {\n deadline = Math.min(row.deadlineAt, this.ledger.execution(row.conversationId)?.deadlineAt ?? row.deadlineAt);\n if (Date.now() >= deadline) throw new CloudDoError(this.#timeoutCode(row.conversationId));\n if (!this.#config || !this.#dispatcher) throw new CloudDoError('CLOUD_EXECUTION_INTERRUPTED');\n if (!recovery && this.fatal(row.conversationId)) throw new CloudDoError(this.fatal(row.conversationId)!);\n const args = JSON.parse(row.argsJson) as Record<string, unknown>;\n await admitCloudPayload(this.env, args, lease?.profile);\n if (Date.now() >= deadline) throw new CloudDoError(this.#timeoutCode(row.conversationId));\n signal.throwIfAborted();\n const cancelled = new Promise<never>((_resolve, reject) => {\n const abort = () => reject(new CloudDoError(Date.now() >= deadline\n ? Date.now() >= (this.ledger.execution(row.conversationId)?.deadlineAt ?? Infinity)\n ? 'CLOUD_EXECUTION_TIMEOUT' : 'CLOUD_TOOL_TIMEOUT'\n : 'CLOUD_EXECUTION_ABORTED'));\n signal.addEventListener('abort', abort, { once: true });\n removeAbort = () => signal.removeEventListener('abort', abort);\n if (signal.aborted) abort();\n });\n timer = setTimeout(() => controller.abort(), Math.max(0, deadline - Date.now()));\n await Promise.race([Promise.resolve().then(() => this.#renew({ nativeRunId: row.conversationId,\n requestId: this.cloud.readRun(row.conversationId)?.requestId ?? null, kind: 'tool',\n toolName: row.toolName, recovery }, signal)), cancelled]);\n if (Date.now() >= deadline) throw new CloudDoError(this.#timeoutCode(row.conversationId));\n signal.throwIfAborted();\n if (!recovery && this.fatal(row.conversationId)) throw new CloudDoError(this.fatal(row.conversationId)!);\n if ((this.ledger.execution(row.conversationId)?.credits ?? 0) > CLOUD_BUDGET.credits) throw new CloudDoError('CLOUD_BUDGET_EXCEEDED');\n const usesFetchSlot = this.#dispatcher.tools.find(tool => tool.name === row.toolName)?.execution !== 'pure';\n if (usesFetchSlot && this.#inline >= this.#limits().inlineFetches) throw new CloudDoError('CLOUD_TOOL_BUSY');\n if (usesFetchSlot) this.#inline++;\n const dispatchContext = Object.freeze({\n identity: Object.freeze({ ...this.#config.identity }),\n principal: Object.freeze({ ...this.#config.principal }),\n scopes: Object.freeze([...this.#config.scopes]), dispatcherId: this.#config.dispatcherId,\n call: Object.freeze({ invocationId: row.invocationId, conversationId: row.conversationId, toolCallId: row.toolCallId, attempt: row.attempt }),\n lookup: (id: string) => {\n const found = this.ledger.read(id);\n if (!found || found.sessionId !== this.#config?.identity.sessionId) return undefined;\n return Object.freeze({ toolName: found.toolName, state: found.state, errorCode: found.errorCode, resultJson: found.resultJson,\n conversationId: found.conversationId, toolCallId: found.toolCallId, settledAt: found.settledAt, settledEventSeq: found.settledEventSeq });\n },\n });\n const dispatcher = this.#dispatcher;\n const work = Promise.resolve().then(() => {\n if (Date.now() >= deadline) throw new CloudDoError(this.#timeoutCode(row.conversationId));\n signal.throwIfAborted();\n return dispatcher.execute(dispatchContext, row.toolName, args, signal);\n });\n // A dispatcher that ignores cancellation cannot release a still-running fetch slot early.\n void work.finally(() => { if (usesFetchSlot) this.#inline--; }).catch(() => undefined);\n let result = await Promise.race([work, cancelled]);\n try {\n await admitCloudPayload(this.env, result, lease?.profile);\n result = JSON.parse(this.#guard().guardPayload(JSON.stringify(result))) as Record<string, unknown>;\n }\n catch (error) {\n if (error instanceof CloudDoError && error.code === 'CLOUD_USER_CREDENTIAL_REJECTED') {\n throw new CloudDoError('CLOUD_MODEL_RESPONSE_REJECTED');\n }\n throw error;\n }\n if (Object.hasOwn(result, 'modelView') && !this.#dispatcher.modelViews) throw new CloudDoError('CLOUD_TOOL_FAILED');\n const usage = result.usage;\n if (!usage || typeof usage !== 'object' || Array.isArray(usage)\n || !Number.isSafeInteger((usage as Record<string, unknown>).credits) || Number((usage as Record<string, unknown>).credits) < 0) {\n throw new CloudDoError('CLOUD_TOOL_USAGE_INVALID');\n }\n if (typeof result.ok !== 'boolean' || (result.ok && result.error != null)) throw new CloudDoError('CLOUD_TOOL_FAILED');\n let responseFailure: CloudDoErrorCode | undefined;\n if (result.ok === false) {\n const rawCode = result.error && typeof result.error === 'object' && !Array.isArray(result.error)\n ? (result.error as Record<string, unknown>).code : undefined;\n const domainCode = typeof rawCode === 'string' && Object.hasOwn(CLOUD_DOMAIN_ERROR_CODES, rawCode) ? CLOUD_DOMAIN_ERROR_CODES[rawCode] : undefined;\n if (typeof rawCode === 'string' && this.#dispatcher.domainErrors?.includes(rawCode)) {\n const rawError = result.error as Record<string, unknown>;\n const hasData = Object.hasOwn(rawError, 'data');\n // Measure the guard-parsed value with the same JSON serialization used by the ledger.\n if (hasData && new TextEncoder().encode(JSON.stringify(rawError.data)).length > 2_048) throw new CloudDoError('CLOUD_TOOL_RESULT_LIMIT');\n result = { ...result, error: { code: rawCode, ...(hasData ? { data: rawError.data } : {}) } };\n } else {\n const code = domainCode ?? 'CLOUD_TOOL_FAILED';\n const bill = usage as Record<string, unknown>;\n result = { ok: false, error: { code }, usage: { credits: bill.credits,\n ...(Number.isSafeInteger(bill.rows) && Number(bill.rows) >= 0 ? { rows: bill.rows } : {}),\n ...(typeof bill.cached === 'boolean' ? { cached: bill.cached } : {}),\n } };\n if (!domainCode) responseFailure = code;\n }\n }\n if (new TextEncoder().encode(JSON.stringify(result)).length > this.#limits().resultBytes) throw new CloudDoError('CLOUD_TOOL_RESULT_LIMIT');\n const settled = this.ledger.finish(row.invocationId, 'succeeded', result, undefined, Date.now(), {\n attempt: row.attempt, clientConnected: recovery || lease?.connected === true, recovery, creditCap: CLOUD_BUDGET.credits,\n });\n if (!settled) throw new CloudDoError('CLOUD_TOOL_FAILED');\n if (settled.attempt !== row.attempt) throw new StaleInvocationAttempt();\n if (responseFailure && !recovery) this.#recordFatal(row.conversationId, responseFailure);\n return this.#result(settled);\n } catch (error) {\n if (error instanceof StaleInvocationAttempt) throw error;\n const code = signal.aborted\n ? Date.now() >= deadline ? this.#timeoutCode(row.conversationId) : 'CLOUD_EXECUTION_ABORTED'\n : this.#toolErrorCode(error);\n const state: InvocationTerminalState = code === 'CLOUD_TOOL_TIMEOUT' || code === 'CLOUD_EXECUTION_TIMEOUT' ? 'timed_out'\n : code === 'CLOUD_EXECUTION_ABORTED' ? 'aborted' : 'failed';\n let settled: InvocationRow | undefined;\n try { settled = this.ledger.finish(row.invocationId, state, undefined, code, Date.now(), { attempt: row.attempt, recovery }); }\n catch { /* Do not replace a fixed code with raw storage error text. */ }\n if (settled && settled.attempt !== row.attempt) throw new StaleInvocationAttempt();\n if (!recovery) this.#recordFatal(row.conversationId, code);\n throw new CloudDoError(code);\n } finally {\n clearTimeout(timer);\n removeAbort?.();\n controller.abort();\n }\n }\n\n #timeoutCode(conversationId: number): CloudDoErrorCode {\n return Date.now() >= (this.ledger.execution(conversationId)?.deadlineAt ?? Infinity)\n ? 'CLOUD_EXECUTION_TIMEOUT' : 'CLOUD_TOOL_TIMEOUT';\n }\n}\n","import { CloudDoError, safeCloudError } from './errors';\nimport type { CloudState } from './cloud-state';\n\n/** A doorbell is advisory. Every delivery reads the durable SQL cursor again. */\nexport class CloudEventDoorbell {\n private generation = 0;\n private listeners = new Set<() => void>();\n ring(): void { this.generation++; for (const listener of [...this.listeners]) listener(); }\n get version(): number { return this.generation; }\n wait(version: number, signal: AbortSignal, duration = 15_000): Promise<void> {\n return new Promise(resolve => {\n let timer: ReturnType<typeof setTimeout>;\n const finish = () => { clearTimeout(timer); this.listeners.delete(finish); signal.removeEventListener('abort', finish); resolve(); };\n timer = setTimeout(finish, duration);\n this.listeners.add(finish); signal.addEventListener('abort', finish, { once: true });\n if (signal.aborted || version !== this.generation) finish();\n });\n }\n}\n\nexport class CloudEventStreams {\n private readers = 0;\n constructor(private readonly bell: CloudEventDoorbell) {}\n open(state: CloudState, after: number | undefined, waitUntil: (work: Promise<unknown>) => void): Response {\n if (this.readers >= 8) throw new CloudDoError('CLOUD_EVENTS_BUSY');\n const meta = state.eventMeta();\n const cursor = after === undefined ? meta.highWater : after === 0 ? meta.trimmedThrough : after;\n try { state.eventPage(cursor, 1); }\n catch (error) {\n if (safeCloudError(error).code === 'CLOUD_EVENT_CURSOR_EXPIRED') return Response.json({ error: { code: 'CLOUD_EVENT_CURSOR_EXPIRED', retryable: false }, ...meta }, { status: 410 });\n throw error;\n }\n this.readers++;\n const body = new IdentityTransformStream();\n const writer = body.writable.getWriter();\n const controller = new AbortController();\n const encoder = new TextEncoder();\n let cleaned = false;\n let last = cursor;\n const close = () => { if (!cleaned) { cleaned = true; this.readers--; controller.abort(); } };\n const limit = setTimeout(() => { close(); void writer.abort().catch(() => undefined); }, 110_000);\n void writer.closed.catch(close);\n let probing = false;\n const probe = setInterval(() => {\n if (controller.signal.aborted || probing) return;\n probing = true;\n void writer.write(encoder.encode(': keepalive\\n\\n')).catch(close).finally(() => { probing = false; });\n }, 250);\n const run = async () => {\n try {\n while (!controller.signal.aborted) {\n const version = this.bell.version;\n let rows;\n try { rows = state.eventPage(last); }\n catch (error) {\n if (safeCloudError(error).code !== 'CLOUD_EVENT_CURSOR_EXPIRED') throw error;\n await writer.write(encoder.encode('event: reset\\ndata: ' + JSON.stringify(state.eventMeta()) + '\\n\\n'));\n break;\n }\n for (const row of rows) {\n if (controller.signal.aborted) break;\n await writer.write(encoder.encode('id: ' + row.seq + '\\nevent: ' + row.type + '\\ndata: ' + row.dataJson + '\\n\\n'));\n last = row.seq;\n }\n if (!rows.length && !controller.signal.aborted) {\n await this.bell.wait(version, controller.signal);\n if (!controller.signal.aborted && version === this.bell.version) await writer.write(encoder.encode(': keepalive\\n\\n'));\n }\n }\n try { await writer.close(); } catch { /* A peer may already have closed the native stream. */ }\n } catch { try { await writer.abort(); } catch { /* No raw transport exception escapes. */ } }\n finally { clearTimeout(limit); clearInterval(probe); close(); }\n };\n waitUntil(run());\n return new Response(body.readable, { headers: { 'content-type': 'text/event-stream', 'cache-control': 'no-store' } });\n }\n}\n","import { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\nimport type { Conversation, Harness } from '@earendil-works/pi-durable';\nimport { admissionIdentity, composeCloudInput, inboxInput, type AdmissionIdentity, type InboxRow, type RunHistory } from './cloud-state';\nimport { CloudDoError, safeCloudError, type CloudDoErrorCode } from './errors';\nimport { PLATFORM_PROFILES, platformCredentialReader } from './platform-credentials';\nimport type { CloudOperationGuard } from './input-guard';\nimport { raceLease, type ExecutionLease, type RunOutcome, type SessionRuntime } from './session-runtime';\n\nexport type CloudWakeAdmission = { accepted: true; reservation: 'held' | 'none' }\n | { accepted: false; code: CloudDoErrorCode };\nexport type WakeAdmission = (items: readonly InboxRow[], signal: AbortSignal, key: string,\n admission: AdmissionIdentity) => CloudWakeAdmission | Promise<CloudWakeAdmission>;\n\nexport async function cloudRunHistory(runtime: SessionRuntime, harness: Harness): Promise<RunHistory[]> {\n const history: RunHistory[] = [];\n for (const run of runtime.cloud.completedRuns()) {\n const conversation = await harness.conversation(run.conversationId as Conversation['id'], BACKGROUND_CONTEXT);\n if (!conversation) continue;\n const view = await conversation.context(BACKGROUND_CONTEXT);\n const input = run.trigger === 'wake'\n ? view.entries.find(entry => entry.kind === 'byok.run-input')?.data\n : view.entries.find(entry => entry.kind === 'pi.user')?.model?.find(message => message.role === 'user')?.content;\n const entry = [...view.entries].reverse().find(entry => entry.kind === 'pi.assistant');\n const reply = entry?.model?.find(message => message.role === 'assistant');\n if (input === undefined || reply?.role !== 'assistant') continue;\n history.push({ input, reply: reply.content.flatMap(block => block.type === 'text' ? [block.text] : []).join('') });\n }\n return history;\n}\n\nexport async function committedRunOutcome(conversation: Conversation, runtime: SessionRuntime,\n status: string, detail?: unknown): Promise<RunOutcome> {\n const view = await conversation.context(BACKGROUND_CONTEXT);\n const entry = [...view.entries].reverse().find(entry => entry.kind === 'pi.assistant');\n const last = entry?.model?.find(message => message.role === 'assistant');\n const failure = runtime.fatal(conversation.id)\n ?? (last?.role === 'assistant' && (last.stopReason === 'error' || last.stopReason === 'aborted')\n ? safeCloudError(new Error(last.errorMessage)).code : undefined)\n ?? (status !== 'done' ? safeCloudError(new Error(typeof detail === 'string' ? detail : '')).code : undefined);\n if (failure) return { state: 'failed', errorCode: failure };\n return { state: 'completed', entryId: entry?.id,\n text: last?.role === 'assistant' ? last.content.flatMap(block => block.type === 'text' ? [block.text] : []).join('') : '' };\n}\n\n/** Each invocation of this function owns a fresh conversation and one shared runtime lease. */\nexport async function runCloudWake(runtime: SessionRuntime, harness: Harness,\n env: Readonly<Record<string, unknown>>, admit: WakeAdmission, notify: () => void, retryCount = 0): Promise<boolean> {\n const guard = await runtime.prepareGuard();\n let lease: ExecutionLease | undefined;\n let conversation: Conversation | undefined;\n let selected: InboxRow[] = [];\n let settling = false;\n try {\n runtime.cloud.expireQueued(guard);\n runtime.cloud.retention();\n selected = runtime.cloud.selectBatch(Date.now(), guard);\n notify();\n if (!selected.length) { await runtime.cloud.rearmAlarm({ busy: runtime.hasLiveOwner, repairRetrying: runtime.repairRetrying }); return false; }\n lease = runtime.reserve(selected[0]!.profile, guard);\n const profile = PLATFORM_PROFILES[lease.profile];\n conversation = await harness.createConversation({ ownership: { kind: 'ownerless' },\n agent: runtime.agentChange(lease.profile, guard) }, BACKGROUND_CONTEXT);\n runtime.attach(lease, conversation.id, 'wake', guard);\n const identity = admissionIdentity(selected);\n runtime.markReservation(conversation.id, 'pending', identity);\n const key = runtime.cloud.readRun(conversation.id)!.requestId!;\n const admission = await raceLease(Promise.resolve().then(() => admit(Object.freeze(selected.map(row => Object.freeze({ ...row }))),\n lease!.controller.signal, key, identity)), lease);\n if (!admission || typeof admission !== 'object' || typeof admission.accepted !== 'boolean') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (!admission.accepted) {\n runtime.markReservation(conversation.id, 'none');\n throw safeCloudError(new Error(admission.code));\n }\n if (admission.reservation !== 'held' && admission.reservation !== 'none') throw new CloudDoError('CLOUD_REQUEST_INVALID');\n runtime.markReservation(conversation.id, admission.reservation);\n await platformCredentialReader(env).get(profile.secretName);\n const claimed = runtime.claimWake(lease, selected.map(row => row.seq));\n notify();\n if (!claimed.length) {\n const closed = runtime.cloud.readRun(conversation.id);\n if (closed?.errorCode && closed.errorCode !== 'CLOUD_WAKE_EMPTY') throw new CloudDoError(closed.errorCode);\n return true;\n }\n const inputs = { items: inboxInput(claimed) };\n const data = JSON.parse(guard.guardPayload(JSON.stringify(inputs)));\n await conversation.commit(tx => {\n if (lease!.controller.signal.aborted) throw new CloudDoError(runtime.fatal(conversation!.id) ?? 'CLOUD_EXECUTION_ABORTED');\n return tx.appendEntry(conversation!.id, { kind: 'byok.run-input', data });\n }, BACKGROUND_CONTEXT);\n const committed = (await conversation.context(BACKGROUND_CONTEXT)).entries.find(entry => entry.kind === 'byok.run-input')?.data as typeof inputs | undefined;\n const durable = claimed.filter(row => committed?.items.some(item => item.seq === row.seq\n && item.text === (JSON.parse(row.payloadJson!) as {text:string}).text)).map(row => row.seq);\n runtime.cloud.markInputDurable(conversation.id, durable);\n const content = composeCloudInput(claimed, await cloudRunHistory(runtime, harness));\n guard.guardText(content);\n const submission = await conversation.submit({ type: 'input', content, whenBusy: 'reject', requestId: key }, BACKGROUND_CONTEXT);\n runtime.recordSubmission(conversation.id, submission.id);\n const settled = await submission.wait(BACKGROUND_CONTEXT);\n await conversation.waitForIdle(BACKGROUND_CONTEXT);\n const outcome = await committedRunOutcome(conversation, runtime, settled.status, settled.status === 'unanswered' ? settled.detail : undefined);\n settling = true;\n await runtime.settle(lease, outcome);\n } catch (error) {\n if (!lease || error instanceof CloudDoError && error.code === 'CLOUD_TOOL_BUSY') {\n if (error instanceof CloudDoError && error.code === 'CLOUD_TOOL_BUSY') return false;\n throw safeCloudError(error);\n }\n // Infrastructure failures retain the running claim for alarm repair. Do not replace a completed pi outcome.\n if (settling || !(error instanceof CloudDoError)) throw safeCloudError(error);\n const code = (lease.conversationId === undefined ? undefined : runtime.fatal(lease.conversationId)) ?? safeCloudError(error).code;\n runtime.cloud.failQueued(selected.map(row => row.seq), code, guard);\n if (conversation && runtime.cloud.readRun(conversation.id)?.state === 'running') {\n runtime.cancel(lease, code);\n await conversation.abort(BACKGROUND_CONTEXT, { background: true });\n await conversation.waitForIdle(BACKGROUND_CONTEXT);\n }\n if (conversation) {\n settling = true;\n await runtime.settle(lease, { state: 'interrupted', errorCode: code });\n }\n notify();\n } finally {\n if (lease) await runtime.release(lease,retryCount);\n else guard.dispose();\n }\n return lease !== undefined;\n}\n","import { DurableObject } from 'cloudflare:workers';\nimport { BACKGROUND_CONTEXT } from '@earendil-works/chord/context';\nimport { Harness, watchEvents, type AgentEvent, type ConversationId, type EntryRecord } from '@earendil-works/pi-durable';\nimport type { AssistantMessage } from '@earendil-works/pi-ai';\nimport { admitCloudSubmission } from './admission';\nimport { CloudDoError, cloudErrorResponse, type CloudDoErrorCode } from './errors';\nimport { PLATFORM_PROFILES, platformCredentialReader, type PlatformProfileId } from './platform-credentials';\nimport { admitCloudText } from './input-guard';\nimport { SessionRuntime, type CloudRenewRequest, type CloudRenewResult, type CloudRunSettlement, type ExecutionLease } from './session-runtime';\nimport type { CloudToolDispatcher } from './tools';\nimport type { InvocationTerminalState, InvocationRow } from './invocation-ledger';\nimport { admitCloudInbox } from './inbox-admission';\nimport { runInputSeqs, utf8Prefix, type AdmissionIdentity, type InboxRow, type TranscriptCursor, type TranscriptRun } from './cloud-state';\nimport { CloudEventDoorbell, CloudEventStreams } from './event-stream';\nimport { runCloudWake, committedRunOutcome, type CloudWakeAdmission } from './wake-runner';\nimport { safeCloudError } from './errors';\n\nexport { CLOUD_HARNESS_SETTINGS } from './session-runtime';\n\nfunction modelFailureCode(message: string | undefined): CloudDoErrorCode {\n return safeCloudError(new Error(message)).code;\n}\n\nfunction assistantText(message: AssistantMessage): string {\n return message.content.flatMap(block => block.type === 'text' ? [block.text] : []).join('');\n}\n\nfunction finalAssistant(entries: readonly EntryRecord[]) {\n const entry = [...entries].reverse().find(entry => entry.kind === 'pi.assistant'\n && entry.model?.some(message => message.role === 'assistant' && message.stopReason !== 'toolUse'));\n const assistant = entry?.model?.find(message => message.role === 'assistant' && message.stopReason !== 'toolUse');\n return assistant?.role === 'assistant' && entry ? { entry, assistant } : undefined;\n}\n\nfunction inputTexts(entries: readonly EntryRecord[]): Map<number, string> {\n const seqs = new Set(runInputSeqs(entries));\n if (!seqs.size) return new Map();\n const data = entries.find(entry => entry.kind === 'byok.run-input')?.data as {items?:{seq:number;text:string}[]} | undefined;\n return new Map((data?.items ?? []).filter(item => seqs.has(item.seq)).map(item => [item.seq,item.text]));\n}\n\n/** RPC options accept data properties only. */\nfunction transcriptRecord(value: unknown, keys: readonly string[]): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)\n || (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const result: Record<string, unknown> = {};\n for (const key of Reflect.ownKeys(value)) {\n const field = Object.getOwnPropertyDescriptor(value, key);\n if (typeof key !== 'string' || !keys.includes(key) || !field?.enumerable || !('value' in field)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n result[key] = field.value;\n }\n return result;\n}\n\n/** Native watch batches can contain a whole message, a block, or a delta. */\nfunction projectText(blocks: Map<number, string>, event: AgentEvent): string | undefined {\n const replace = (message: AssistantMessage) => {\n blocks.clear();\n message.content.forEach((block, index) => { if (block.type === 'text') blocks.set(index, block.text); });\n };\n if (event.type === 'message_start' && event.message.role === 'assistant') replace(event.message);\n else if (event.type === 'snapshot' && event.generation?.message) replace(event.generation.message);\n else if (event.type === 'message_update') {\n for (const change of event.changes) {\n if (change.type === 'text_delta') blocks.set(change.contentIndex, (blocks.get(change.contentIndex) ?? '') + change.delta);\n if (change.type === 'text_start' || change.type === 'block') {\n if (change.block.type === 'text') blocks.set(change.contentIndex, change.block.text);\n else blocks.delete(change.contentIndex);\n }\n if (change.type === 'message') replace(change.message);\n }\n } else if (event.type === 'message_end' && event.entry.model?.[0]?.role === 'assistant') return assistantText(event.entry.model[0]);\n else return undefined;\n return [...blocks.entries()].sort(([a], [b]) => a - b).map(([, text]) => text).join('');\n}\n\n/** One named DO owns one Harness; 4b adds platform-only text model submissions. */\nexport class AgentDO extends DurableObject<Record<string, unknown>> {\n #runtime?: SessionRuntime;\n #doorbell = new CloudEventDoorbell();\n #eventStreams = new CloudEventStreams(this.#doorbell);\n\n /** The consuming Worker supplies trusted code. No executable function is persisted. */\n protected createDispatcher(_id: string): CloudToolDispatcher | undefined { return undefined; }\n\n /** Post-commit notification. Consumer failures never change the invocation outcome. */\n protected onInvocationSettled(_id: string, _state: InvocationTerminalState): void | Promise<void> {}\n\n protected projectInvocation(_row: InvocationRow): { key: string; dataJson: string } | undefined { return undefined; }\n\n /** The consumer owns billing truth and fences every pending admission key on release. */\n protected admitWake(_items: readonly InboxRow[], _signal: AbortSignal, _key: string, _admission: AdmissionIdentity): CloudWakeAdmission | Promise<CloudWakeAdmission> {\n return { accepted: true, reservation: 'none' };\n }\n\n protected instructions(_profile: PlatformProfileId): string | undefined { return undefined; }\n protected renew(_request: CloudRenewRequest, _signal: AbortSignal): CloudRenewResult | Promise<CloudRenewResult> { return { ok: true }; }\n protected settleRun(_run: CloudRunSettlement, _signal: AbortSignal): void | Promise<void> {}\n\n protected sessionRuntime(): SessionRuntime {\n return this.#runtime ??= new SessionRuntime(this.ctx, this.env, {\n createDispatcher: id => this.createDispatcher(id),\n projectInvocation: row => this.projectInvocation(row),\n onCommit: () => this.#doorbell.ring(),\n onInvocationSettled: (id, state) => this.onInvocationSettled(id, state),\n instructions: profile => this.instructions(profile),\n renew: (request, signal) => this.renew(request, signal),\n settleRun: (run, signal) => this.settleRun(run, signal),\n });\n }\n\n async configureSession(input: unknown): Promise<Response> {\n try { await this.sessionRuntime().configure(input); return Response.json({ configured: true }); }\n catch (error) { return cloudErrorResponse(error); }\n }\n\n async readInvocation(id: string) {\n await this.sessionRuntime().ready();\n if (typeof id !== 'string' || !/^[a-f0-9]{64}$/.test(id)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n return this.sessionRuntime().readInvocation(id);\n }\n\n async enqueue(input: unknown): Promise<Response> {\n let guard;\n try {\n const admitted = admitCloudInbox(input);\n const runtime = this.sessionRuntime();\n guard = await runtime.prepareGuard();\n runtime.cloud.validateEnqueue(admitted, guard);\n await runtime.ready();\n const result = await runtime.cloud.enqueue(admitted, guard, Date.now(), {\n busy: runtime.hasLiveOwner, repairRetrying: runtime.repairRetrying,\n });\n this.#doorbell.ring();\n return Response.json({ accepted: result.accepted, ...result.row });\n } catch (error) { return cloudErrorResponse(error); }\n finally { guard?.dispose(); }\n }\n\n /** The platform supplies retryCount. This handler never replaces a live owner. */\n async alarm(info?: AlarmInvocationInfo): Promise<void> {\n const runtime = this.sessionRuntime();\n let harness: Harness;\n try { harness = await runtime.ready(); }\n catch (error) {\n // A rejected recovery promise is cached. Only a restart can recover it.\n if (runtime.recovering) return;\n throw safeCloudError(error);\n }\n if (runtime.hasLiveOwner) {\n const guard = runtime.activeLease?.guard;\n if (guard) runtime.cloud.expireQueued(guard);\n runtime.cloud.retention();\n this.#doorbell.ring();\n // Settlement debt has no lease and may progress while unrelated native work is live.\n if (runtime.cloud.unackedRuns().length) await runtime.deliverSettlementsForAlarm(info?.retryCount ?? 0,guard);\n else await runtime.cloud.rearmAlarm({ busy: true, repairRetrying: runtime.repairRetrying });\n return;\n }\n try {\n await runtime.repairPendingRuns(info?.retryCount ?? 0);\n if (runtime.busy) return;\n const woke = await runCloudWake(runtime, harness, this.env, (items, signal, key, admission) => this.admitWake(items, signal, key, admission),\n () => this.#doorbell.ring(),info?.retryCount ?? 0);\n if (!woke) await runtime.deliverSettlementsForAlarm(info?.retryCount ?? 0);\n } catch (error) { throw safeCloudError(error); }\n }\n\n async events(input: { after?: number } = {}): Promise<Response> {\n try {\n const fields = this.#readOptions(input, ['after']);\n const runtime = this.sessionRuntime();\n await runtime.ready();\n return this.#eventStreams.open(runtime.cloud, fields.after, work => this.ctx.waitUntil(work));\n } catch (error) { return cloudErrorResponse(error); }\n }\n\n async readSnapshot() { await this.sessionRuntime().ready(); return this.sessionRuntime().cloud.snapshot(); }\n async readRuns(input: { after?: number; limit?: number } = {}) {\n await this.sessionRuntime().ready(); return this.sessionRuntime().cloud.readRuns(this.#readOptions(input, ['after', 'limit']));\n }\n async readInbox(input: { after?: number; limit?: number } = {}) {\n await this.sessionRuntime().ready(); return this.sessionRuntime().cloud.readInbox(this.#readOptions(input, ['after', 'limit']));\n }\n async readInvocations(input: { after?: number; limit?: number } = {}) {\n await this.sessionRuntime().ready(); return this.sessionRuntime().cloud.readInvocations(this.#readOptions(input, ['after', 'limit']));\n }\n async readTranscript(input: { after?: TranscriptCursor; limit?: number } = {}) {\n const options = transcriptRecord(input, ['after','limit']);\n const limit = options.limit === undefined ? 20 : options.limit;\n if (typeof limit !== 'number' || !Number.isSafeInteger(limit) || limit < 1 || limit > 50) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n let after: TranscriptCursor | undefined;\n if (options.after !== undefined) {\n const cursor = transcriptRecord(options.after, ['horizon','run','item']);\n if (Object.keys(cursor).length !== 3 || typeof cursor.horizon !== 'number' || !Number.isSafeInteger(cursor.horizon) || cursor.horizon < 0\n || [cursor.run,cursor.item].some(value => value !== null && (typeof value !== 'number' || !Number.isSafeInteger(value) || value <= 0))) {\n throw new CloudDoError('CLOUD_REQUEST_INVALID');\n }\n after = cursor as unknown as TranscriptCursor;\n }\n const runtime = this.sessionRuntime();\n const harness = await runtime.ready();\n const plan = runtime.cloud.planTranscript(after,limit);\n const contexts = new Map<number, Promise<readonly EntryRecord[]>>();\n const entries = (id: number): Promise<readonly EntryRecord[]> => {\n const cached = contexts.get(id);\n if (cached) return cached;\n const read = harness.conversation(id as ConversationId, BACKGROUND_CONTEXT).then(async conversation =>\n conversation ? (await conversation.context(BACKGROUND_CONTEXT)).entries : []);\n contexts.set(id,read);\n return read;\n };\n const runs: TranscriptRun[] = [];\n for (const {run,turns,invocations} of plan.runs) {\n const claimedSeqs = runtime.cloud.claimedSeqs(run.conversationId);\n const view = await entries(run.conversationId);\n const texts = inputTexts(view);\n const final = finalAssistant(view);\n const result: TranscriptRun = { nativeRunId: run.conversationId, revision: run.revision, state: run.state,\n errorCode: run.errorCode, trigger: run.trigger, settlementAck: run.settlementAck === null || run.settlementAck === 1,\n claimedSeqs, turns: turns.map(turn => ({ ...turn, text: texts.get(turn.seq) ?? turn.text })), invocations };\n if (final) {\n const text = assistantText(final.assistant);\n const truncated = new TextEncoder().encode(text).length > 16_384;\n result.text = truncated ? utf8Prefix(text,1024) : text;\n if (truncated) result.truncated = true;\n }\n runs.push(result);\n }\n for (const item of plan.items) if (item.text === null && item.runId !== null) {\n item.text = inputTexts(await entries(item.runId)).get(item.seq) ?? null;\n }\n return { runs, items: plan.items, next: plan.next };\n }\n #readOptions(input: unknown, allowed: readonly string[]): Record<string, number | undefined> {\n if (!input || typeof input !== 'object' || Array.isArray(input)\n || (Object.getPrototypeOf(input) !== Object.prototype && Object.getPrototypeOf(input) !== null)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const result: Record<string, number | undefined> = {};\n for (const key of Reflect.ownKeys(input)) {\n const field = Object.getOwnPropertyDescriptor(input, key);\n if (typeof key !== 'string' || !allowed.includes(key) || !field?.enumerable || !('value' in field)\n || (field.value !== undefined && typeof field.value !== 'number')) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n result[key] = field.value;\n }\n return result;\n }\n\n async readRunOutput(conversationId: number, input: { entryId?: number; offset?: number } = {}) {\n if (!Number.isSafeInteger(conversationId) || conversationId < 2) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const options = this.#readOptions(input, ['entryId', 'offset']);\n const runtime = this.sessionRuntime();\n const harness = await runtime.ready();\n if (!runtime.cloud.readRun(conversationId)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const conversation = await harness.conversation(conversationId as ConversationId, BACKGROUND_CONTEXT);\n if (!conversation) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const context = await conversation.context(BACKGROUND_CONTEXT);\n const final = finalAssistant(context.entries);\n if (!final || (options.entryId !== undefined && options.entryId !== final.entry.id)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const {entry,assistant} = final;\n const bytes = new TextEncoder().encode(assistantText(assistant));\n const offset = options.offset ?? 0;\n if (!Number.isSafeInteger(offset) || offset < 0 || offset > bytes.length\n || (offset < bytes.length && (bytes[offset]! & 0xc0) === 0x80)) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n let end = Math.min(bytes.length, offset + 65_536);\n while (end < bytes.length && (bytes[end]! & 0xc0) === 0x80) end--;\n return { entryId: entry.id, offset, nextOffset: end, done: end === bytes.length,\n text: new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes.subarray(offset, end)) };\n }\n\n async cancelActiveRun(): Promise<Response> {\n try { const runtime = this.sessionRuntime(); await runtime.ready(); return Response.json({ cancelled: runtime.cancelActive() }); }\n catch (error) { return cloudErrorResponse(error); }\n }\n async cancelInboxItem(seq: number): Promise<Response> {\n let guard;\n try {\n if (!Number.isSafeInteger(seq) || seq < 1) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n const runtime = this.sessionRuntime(); await runtime.ready();\n const row = runtime.cloud.readInboxItem(seq);\n if (!row) throw new CloudDoError('CLOUD_REQUEST_INVALID');\n if (row.state === 'running') {\n if (runtime.activeLease?.conversationId === row.runId) runtime.cancelActive();\n } else if (row.state === 'queued') {\n guard = await runtime.prepareGuard(); runtime.cloud.cancelQueued(seq, guard);\n }\n await runtime.cloud.rearmAlarm({ busy: runtime.hasLiveOwner, repairRetrying: runtime.repairRetrying });\n this.#doorbell.ring();\n return Response.json({ item: runtime.cloud.readInboxItem(seq) });\n } catch (error) { return cloudErrorResponse(error); }\n finally { guard?.dispose(); }\n }\n\n // Admission and credential preflight happen before even schema initialization.\n #harness(): Promise<Harness> {\n return this.sessionRuntime().open();\n }\n\n async open() {\n const harness = await this.#harness();\n return { scheduling: (await harness.inspect(BACKGROUND_CONTEXT)).scheduling };\n }\n\n /** D1: every call allocates a new ownerless conversation, including after a restart. */\n async openExecution(): Promise<{ conversationId: number }> {\n const harness = await this.#harness();\n const conversation = await harness.createConversation({ ownership: { kind: 'ownerless' } }, BACKGROUND_CONTEXT);\n return { conversationId: conversation.id };\n }\n\n async #execution(id: number) {\n if (!Number.isSafeInteger(id) || id < 2) throw new Error('Invalid execution conversation');\n const conversation = await (await this.#harness()).conversation(id as ConversationId, BACKGROUND_CONTEXT);\n if (!conversation) throw new Error('Unknown execution conversation');\n return conversation;\n }\n\n async #admitText(text: string, selected?: PlatformProfileId): Promise<void> {\n await admitCloudText(this.env, text, selected);\n }\n\n /** Passive native pi entries prove storage without starting a model or tool task. */\n async appendExecution(conversationId: number, text: string): Promise<void> {\n if (typeof text !== 'string') throw new Error('Execution text must be a string');\n await this.#admitText(text);\n const conversation = await this.#execution(conversationId);\n await conversation.commit(tx => tx.appendEntry(conversation.id, { kind: 'byok.execution', data: { text } }), BACKGROUND_CONTEXT);\n }\n\n async readExecution(conversationId: number): Promise<string[]> {\n const conversation = await this.#execution(conversationId);\n const context = await conversation.context(BACKGROUND_CONTEXT);\n return context.entries.filter(entry => entry.kind === 'byok.execution').map(entry => {\n const data = entry.data as { text: string };\n return data.text;\n });\n }\n\n /** Binding/RPC-only. The consumer authorizes identity before obtaining this stub.\n * Errors are structured Responses so the same code/status survive DO RPC. */\n async submit(input: unknown): Promise<Response> {\n let lease: ExecutionLease | undefined;\n let guard;\n try {\n const admitted = admitCloudSubmission(input);\n const profile = PLATFORM_PROFILES[admitted.profile];\n await platformCredentialReader(this.env).get(profile.secretName);\n // Check every configured platform key before input enters durable storage.\n await this.#admitText(admitted.instruction, admitted.profile);\n const runtime = this.sessionRuntime();\n const harness = await runtime.ready(admitted.profile);\n guard = await runtime.prepareGuard(admitted.profile);\n lease = runtime.reserve(admitted.profile, guard);\n const conversation = await harness.createConversation({ ownership: { kind: 'ownerless' },\n agent: runtime.agentChange(admitted.profile, guard) }, BACKGROUND_CONTEXT);\n const execution = lease;\n runtime.attach(execution, conversation.id);\n const events = await watchEvents(harness, conversation.id, BACKGROUND_CONTEXT);\n const encoder = new TextEncoder();\n // Keep backpressure, with a controller that can interrupt a pending write.\n // Native IdentityTransformStream writer.abort() queues behind that write.\n let bodyController!: TransformStreamDefaultController<Uint8Array>;\n const body = new TransformStream<Uint8Array, Uint8Array>({ start(controller) { bodyController = controller; } });\n const writer = body.writable.getWriter();\n let cancelled = false;\n let aborting: Promise<void> | undefined;\n let failure: string | undefined;\n let released = '';\n const textBlocks = new Map<number, string>();\n // Delivery has its own lifetime: durable settlement clears the execution\n // timer, but must not leave a blocked native write or listener alive.\n // Briefly allow a draining consumer to receive a timeout/cancel frame.\n const deliveryGraceMs = 250;\n let deliveryTimer: ReturnType<typeof setTimeout>;\n const stopDelivery = () => {\n cancelled = true;\n clearTimeout(deliveryTimer);\n clearInterval(probe);\n bodyController.error(new CloudDoError('CLOUD_EXECUTION_ABORTED'));\n void writer.abort().catch(() => undefined);\n };\n const boundAbortedDelivery = () => {\n if (cancelled) return;\n clearTimeout(deliveryTimer);\n deliveryTimer = setTimeout(stopDelivery, deliveryGraceMs);\n };\n deliveryTimer = setTimeout(stopDelivery, Math.max(0, execution.deadlineAt - Date.now()) + deliveryGraceMs);\n execution.controller.signal.addEventListener('abort', boundAbortedDelivery, { once: true });\n if (execution.controller.signal.aborted) boundAbortedDelivery();\n const cancel = () => {\n stopDelivery();\n if (!aborting && !execution.settled && execution.liveOwner) {\n runtime.cancel(execution);\n // A disconnected consumer has no error channel. Do not expose a raw exception.\n aborting = conversation.abort(BACKGROUND_CONTEXT).finally(() => events.stop()).catch(() => undefined);\n }\n return aborting;\n };\n void writer.closed.catch(cancel);\n const write = async (value: unknown) => {\n if (cancelled) return;\n try { await writer.write(encoder.encode(`data: ${JSON.stringify(value)}\\n\\n`)); }\n catch { void cancel(); }\n };\n // A transferred response stream reports a disconnected peer on its next\n // write. Keep one request-scoped probe in flight. This is not a DO alarm.\n let probing = false;\n const probe = setInterval(() => {\n if (cancelled || probing) return;\n probing = true;\n void writer.write(encoder.encode(': keepalive\\n\\n')).catch(() => cancel()).finally(() => { probing = false; });\n }, 250);\n const publish = async (text: string) => {\n if (text.startsWith(released) && text.length > released.length) {\n const delta = text.slice(released.length);\n released = text;\n await write({ type: 'text_delta', delta });\n }\n };\n events.start(async batch => {\n for (const event of batch) {\n if (event.type === 'message_start' && event.message.role === 'assistant') released = '';\n const text = projectText(textBlocks, event);\n if (text !== undefined) await publish(text);\n if (event.type === 'message_end') {\n const message = event.entry.model?.[0];\n if (message?.role === 'assistant' && message.stopReason === 'error') {\n failure = modelFailureCode(message.errorMessage);\n }\n }\n if (event.type === 'task_failed') failure ??= runtime.fatal(conversation.id) ?? 'CLOUD_MODEL_REQUEST_FAILED';\n }\n });\n const run = async () => {\n let outcomeWriting = false;\n let ownerReleased = false;\n const release = async () => {\n if (ownerReleased) return;\n ownerReleased = true;\n await runtime.release(execution);\n };\n try {\n const submission = await conversation.submit({ type: 'input', content: admitted.instruction, whenBusy: 'reject', requestId: runtime.cloud.readRun(conversation.id)!.requestId! }, BACKGROUND_CONTEXT);\n runtime.recordSubmission(conversation.id, submission.id);\n const settled = await submission.wait(BACKGROUND_CONTEXT);\n await conversation.waitForIdle(BACKGROUND_CONTEXT);\n const stopped = await events.stop();\n // Backpressure can leave a final watch batch undelivered. Native\n // committed state is the authority for the final text and error code.\n const context = await conversation.context(BACKGROUND_CONTEXT);\n const last = [...context.entries].reverse().find(entry => entry.kind === 'pi.assistant')?.model?.[0];\n if (last?.role === 'assistant' && last.stopReason === 'error') failure = modelFailureCode(last.errorMessage);\n failure = runtime.fatal(conversation.id) ?? failure;\n if (settled.status !== 'done' || stopped.reason === 'listener_error') failure ??= 'CLOUD_MODEL_REQUEST_FAILED';\n const outcome = await committedRunOutcome(conversation, runtime, settled.status, settled.status === 'unanswered' ? settled.detail : undefined);\n if (failure) { outcome.state = 'failed'; outcome.errorCode = modelFailureCode(failure); delete outcome.text; }\n outcomeWriting = true;\n await runtime.settle(execution, outcome);\n const committed = runtime.cloud.readRun(conversation.id);\n if (committed?.state !== 'completed') failure = committed?.errorCode ?? 'CLOUD_MODEL_REQUEST_FAILED';\n // Native work is idle and terminal state is durable. Response delivery\n // cannot retain this execution's owner or affect its committed outcome.\n await release();\n if (last?.role === 'assistant') await publish(assistantText(last));\n if (failure) await write({ type: 'error', code: failure, retryable: false });\n else await write({ type: 'done', conversationId: conversation.id });\n } catch (error) {\n const code = runtime.fatal(conversation.id) ?? safeCloudError(error).code;\n await events.stop();\n // A native/business failure is terminal. A failed durable settlement belongs to repair.\n if (!outcomeWriting && error instanceof CloudDoError && runtime.cloud.readRun(conversation.id)?.state === 'running') {\n runtime.cancel(execution, code);\n await conversation.abort(BACKGROUND_CONTEXT, { background: true });\n await conversation.waitForIdle(BACKGROUND_CONTEXT);\n await runtime.settle(execution, { state: 'failed', errorCode: code });\n }\n await release();\n await write({ type: 'error', code, retryable: false });\n }\n finally {\n try {\n await release();\n if (!cancelled) { try { await writer.close(); } catch { void cancel(); } }\n } finally {\n clearInterval(probe);\n clearTimeout(deliveryTimer);\n execution.controller.signal.removeEventListener('abort', boundAbortedDelivery);\n if (!cancelled) stopDelivery();\n }\n }\n };\n this.ctx.waitUntil(run());\n return new Response(body.readable, { headers: { 'content-type': 'text/event-stream', 'cache-control': 'no-store' } });\n } catch (error) {\n if (lease) await this.sessionRuntime().release(lease);\n else guard?.dispose();\n return cloudErrorResponse(error);\n }\n }\n}\n","import type { AgentDO } from './agent-do';\n\nexport interface AgentIdentity {\n readonly tenantId: string;\n readonly workspaceId: string;\n readonly agentId: string;\n}\n\nexport interface SessionIdentity extends AgentIdentity {\n readonly sessionId: string;\n}\n\nexport async function agentObjectName(identity: AgentIdentity): Promise<string> {\n const ids = [identity.tenantId, identity.workspaceId, identity.agentId];\n if (ids.some(id => typeof id !== 'string' || !id)) throw new Error('Agent identity requires three nonempty ids');\n // JSON array encoding preserves tuple boundaries, Unicode and embedded delimiters.\n const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(JSON.stringify(ids)));\n return `agent:${Array.from(new Uint8Array(digest), byte => byte.toString(16).padStart(2, '0')).join('')}`;\n}\n\n/** Call only after the platform has authorized the tenant/workspace/agent identity. */\nexport async function getAgentObject(namespace: DurableObjectNamespace<AgentDO>, identity: AgentIdentity) {\n return namespace.getByName(await agentObjectName(identity));\n}\n\nexport async function sessionObjectName(identity: SessionIdentity): Promise<string> {\n const ids = [identity.tenantId, identity.workspaceId, identity.agentId, identity.sessionId];\n if (ids.some(id => typeof id !== 'string' || !id)) throw new Error('Session identity requires four nonempty ids');\n const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(JSON.stringify(ids)));\n return `session:${Array.from(new Uint8Array(digest), byte => byte.toString(16).padStart(2, '0')).join('')}`;\n}\n\n/** The consuming platform authorizes all four identity fields before this lookup. */\nexport async function getSessionObject(namespace: DurableObjectNamespace<AgentDO>, identity: SessionIdentity) {\n return namespace.getByName(await sessionObjectName(identity));\n}\n","export { AgentDO } from './agent-do';\nexport type { CloudWakeAdmission } from './wake-runner';\nexport type { InboxRow, RunRow, CloudEventRow, CloudEventMeta } from './cloud-state';\nexport type { TranscriptCursor, TranscriptRun, TranscriptTurn, TranscriptItem } from './cloud-state';\nexport type { CloudRenewRequest, CloudRenewResult, CloudRunSettlement } from './session-runtime';\nexport { agentObjectName, getAgentObject, type AgentIdentity } from './identity';\nexport { sessionObjectName, getSessionObject, type SessionIdentity } from './identity';\nexport { CLOUD_SAFE_REPLAY_TOOLS, CLOUD_LIVE_IPO_TOOLS, type CloudToolResult, type CloudToolDefinition, type CloudToolDispatcher, type CloudDispatchContext, type CloudToolCallContext } from './tools';\nexport { DurableObjectSqliteDatabase, openDurableObjectStorage } from './storage';\n\n// This slice is binding/RPC-only. Public request routing belongs to the consuming platform.\nexport default { fetch: () => new Response('Not found', { status: 404 }) };\n"]}