niceeval 0.14.1-canary.51 → 0.14.2
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/INDEX.md +1 -1
- package/dist/agents/codex-app-server.cjs +7 -1
- package/dist/agents/codex-app-server.cjs.map +1 -1
- package/dist/inspection/overview.cjs +7 -3
- package/dist/inspection/overview.cjs.map +1 -1
- package/dist/sandbox/incus/control.cjs +28 -1
- package/dist/sandbox/incus/control.cjs.map +1 -1
- package/dist/show/render.cjs +28 -15
- package/dist/show/render.cjs.map +1 -1
- package/dist/view/function-runtime.mjs +2 -2
- package/docs-site/zh/reference/cli.mdx +4 -2
- package/docs-site/zh/troubleshooting/debugging.mdx +20 -1
- package/docs-site/zh/tutorials/criteria-files.mdx +2 -0
- package/docs-site/zh/tutorials/evaluation-kinds.mdx +1 -1
- package/docs-site/zh/tutorials/rerun-and-cache.mdx +3 -1
- package/docs-site/zh/tutorials/viewing-results.mdx +43 -4
- package/node_modules/undici/docs/docs/api/Client.md +4 -0
- package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +3 -2
- package/node_modules/undici/docs/docs/api/EventSource.md +4 -0
- package/node_modules/undici/lib/cache/memory-cache-store.js +1 -1
- package/node_modules/undici/lib/dispatcher/agent.js +7 -2
- package/node_modules/undici/lib/dispatcher/balanced-pool.js +1 -1
- package/node_modules/undici/lib/dispatcher/client-h1.js +12 -4
- package/node_modules/undici/lib/dispatcher/client-h2.js +43 -3
- package/node_modules/undici/lib/dispatcher/client.js +3 -2
- package/node_modules/undici/lib/dispatcher/dispatcher-base.js +13 -1
- package/node_modules/undici/lib/dispatcher/dispatcher.js +10 -0
- package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +10 -3
- package/node_modules/undici/lib/dispatcher/proxy-agent.js +1 -1
- package/node_modules/undici/lib/dispatcher/round-robin-pool.js +1 -1
- package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +3 -1
- package/node_modules/undici/lib/handler/cache-handler.js +8 -0
- package/node_modules/undici/lib/handler/decorator-handler.js +7 -1
- package/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
- package/node_modules/undici/lib/handler/redirect-handler.js +8 -0
- package/node_modules/undici/lib/handler/retry-handler.js +83 -11
- package/node_modules/undici/lib/interceptor/dump.js +1 -1
- package/node_modules/undici/lib/mock/mock-agent.js +13 -1
- package/node_modules/undici/lib/mock/mock-utils.js +11 -10
- package/node_modules/undici/lib/web/cookies/parse.js +4 -2
- package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
- package/node_modules/undici/lib/web/eventsource/eventsource.js +4 -1
- package/node_modules/undici/lib/web/fetch/request.js +2 -3
- package/node_modules/undici/package.json +3 -3
- package/node_modules/undici/types/client.d.ts +10 -0
- package/package.json +4 -4
package/INDEX.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
1. **先确认目标和边界。** 读用户项目的 README、依赖、被测入口和现有 NiceEval 文件,确认要评什么真实用例、被测应用怎样启动、使用哪个 Agent / Sandbox / Judge,以及允许的时间和费用。不要用「你好」式占位题代替真实用例;付费模型、全量 benchmark 或批量重跑先征得用户同意。
|
|
16
16
|
2. **只读完成当前步骤需要的文档。** 从下面的树进入 `agent-onboarding` 或 `quickstart`,再按被测对象选择一页接入教程;需要精确字段或命令时补读一页 Reference。不要一次加载整站,也不要凭记忆发明 API。
|
|
17
|
-
3. **先建立最小闭环。** Adapter 连接真实被测入口,Experiment
|
|
17
|
+
3. **先建立最小闭环。** Adapter 连接真实被测入口,Experiment 明确选择评估用例与运行条件,评估用例覆盖目标产品有区分度的核心任务,不能退化成普通聊天或算术。写代码前确认四条链都能闭合:协议链从 Experiment 到目标响应,核心能力链从真实输入到业务断言,配置链从声明值到 runtime 消费方,生命周期链从启动、进程级凭证和 readiness 到失败清理。先运行 `niceeval exp list`,再用 `niceeval exp <experiment> <eval> --dry` 核对选择、模型、Attempt 数和结果沿用;生命周期或 Sandbox 不明确时用 `niceeval debug <experiment> <eval>` 查看静态计划。
|
|
18
18
|
4. **小范围真实运行。** 先跑一条评估用例、一个 Experiment 和足够证明链路的最小 Attempt 数;需要时给预算与并发加保护。保留完成反馈中的 `createdRunIds` 与 `publicationCutoff`。先用 `niceeval show --run <run-id>` 在终端快速审阅;需要稳定 JSON 时,运行 `niceeval query discover`,再以 versioned request 调用 `niceeval query explain` 或 `niceeval query run`。需要浏览器连续深读时使用 `niceeval view --run <run-id>`。不要只看进程退出码。
|
|
19
19
|
5. **交付可复现结果。** 告诉用户新增或修改了哪些文件、实际运行了什么命令、Run ID、通过/失败/不可用状态和下一步。没有真实运行就明确说明,不把 `--dry`、typecheck 或配置发现说成实验已经跑通。
|
|
20
20
|
|
|
@@ -316,7 +316,13 @@ async function drive(state, ctx, from, turnId) {
|
|
|
316
316
|
const frame = record(value);
|
|
317
317
|
if (!belongsToTurn(value, state.threadId, turnId))
|
|
318
318
|
return false;
|
|
319
|
-
|
|
319
|
+
if (frame?.method === "error") {
|
|
320
|
+
// app-server emits transient stream errors before its own reconnect
|
|
321
|
+
// attempts. They remain part of this turn's evidence, but only an error
|
|
322
|
+
// with no promised retry is terminal for the adapter.
|
|
323
|
+
return record(frame.params)?.willRetry !== true;
|
|
324
|
+
}
|
|
325
|
+
return frame?.method === "item/tool/requestUserInput" || frame?.method === "turn/completed";
|
|
320
326
|
}, ctx.signal);
|
|
321
327
|
state.cursor = receipt.cursor;
|
|
322
328
|
const frame = record(receipt.frame);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-app-server.js","sourceRoot":"","sources":["codex-app-server.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InputResponse, SandboxAgentContext, StreamEvent, Turn, TurnEvidenceCoverage, Usage } from \"../types.ts\";\nimport { createSessionSlot } from \"./session-slot.ts\";\nimport { ManagedJsonlDriver } from \"./managed-jsonl.ts\";\nimport { shared } from \"./shared.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { normalizeExternalCause, type ExternalCause } from \"../shared/external-cause.ts\";\nimport { attemptResources } from \"../context/attempt-resources.ts\";\ntype RecordValue = globalThis.Record<string, unknown>;\ntype PendingQuestion = {\n readonly requestId: string;\n readonly nativeQuestionId: string;\n readonly prompt: string;\n readonly options: readonly string[];\n};\ntype PendingBatch = {\n readonly rpcId: string | number;\n readonly turnId: string;\n readonly questions: readonly PendingQuestion[];\n};\ntype CodexState = {\n readonly driver: ManagedJsonlDriver;\n cursor: number;\n readonly threadId: string;\n pending?: PendingBatch;\n readonly reported: Set<string>;\n};\nconst stateSlot = createSessionSlot<CodexState>(\"codex/app-server-native\");\nfunction record(value: unknown): RecordValue | undefined {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) ? value as RecordValue : undefined;\n}\nfunction progressPreview(value: unknown): string | undefined {\n if (typeof value !== \"string\")\n return undefined;\n const text = value.replace(/\\s+/g, \" \").trim();\n if (!text)\n return undefined;\n return text;\n}\nfunction jsonPreview(value: unknown): string | undefined {\n if (value === undefined)\n return undefined;\n try {\n return progressPreview(JSON.stringify(value));\n }\n catch {\n return undefined;\n }\n}\nfunction completedTool(label: string, completed: boolean): string {\n const detail = progressPreview(label) ?? \"tool\";\n return completed ? `tool: ${detail} · completed` : `tool: ${detail}`;\n}\n/** 选择 app-server v2 的可信字段;统一的脱敏、清理与有界化由 Runner ACTIVE 出口负责。 */\nfunction appServerProgressDetail(value: unknown): string | undefined {\n const frame = record(value);\n if (frame?.method !== \"item/started\" && frame?.method !== \"item/completed\")\n return undefined;\n const data = record(record(frame.params)?.item);\n if (!data)\n return undefined;\n const type = typeof data.type === \"string\" ? data.type : \"\";\n const completed = frame.method === \"item/completed\";\n if (type === \"commandExecution\" || type === \"command_execution\") {\n return completedTool(progressPreview(data.command) ?? \"shell\", completed);\n }\n if (type === \"mcpToolCall\" || type === \"mcp_tool_call\") {\n const tool = typeof data.tool === \"string\" ? data.tool : \"MCP\";\n const server = typeof data.server === \"string\" ? `${data.server}.` : \"\";\n const args = jsonPreview(data.arguments ?? data.input);\n return completedTool(`${server}${tool}${args ? ` ${args}` : \"\"}`, completed);\n }\n if (type === \"dynamicToolCall\" || type === \"dynamic_tool_call\") {\n const tool = typeof data.tool === \"string\" ? data.tool : \"dynamic tool\";\n const args = jsonPreview(data.arguments ?? data.input);\n return completedTool(`${tool}${args ? ` ${args}` : \"\"}`, completed);\n }\n if (type === \"webSearch\" || type === \"web_search\") {\n const query = progressPreview(data.query ?? data.search);\n return completedTool(`web search${query ? `: ${query}` : \"\"}`, completed);\n }\n if (type === \"fileChange\" || type === \"file_change\") {\n const paths = Array.isArray(data.changes)\n ? data.changes.flatMap((change) => {\n const path = record(change)?.path;\n return typeof path === \"string\" ? [path] : [];\n }).join(\", \")\n : undefined;\n const detail = progressPreview(paths) ?? progressPreview(data.path);\n return completedTool(`file change${detail ? `: ${detail}` : \"\"}`, completed);\n }\n if (type === \"imageView\" || type === \"image_view\") {\n const path = progressPreview(data.path);\n return completedTool(`image view${path ? `: ${path}` : \"\"}`, completed);\n }\n if (type === \"reasoning\") {\n return \"thinking\";\n }\n if (type === \"agentMessage\" || type === \"agent_message\") {\n return \"assistant response\";\n }\n return undefined;\n}\nfunction eventKey(event: StreamEvent): string | undefined {\n if (event.type === \"operation.started\" || event.type === \"operation.finished\")\n return `${event.type}:${event.operationId}`;\n if (event.type === \"skill.loaded\" && event.operationId)\n return `${event.type}:${event.operationId}`;\n return undefined;\n}\nfunction normalizeItem(value: unknown): unknown {\n const item = record(value);\n if (!item || typeof item.type !== \"string\")\n return value;\n const type = ({\n agentMessage: \"agent_message\",\n commandExecution: \"command_execution\",\n mcpToolCall: \"mcp_tool_call\",\n fileChange: \"file_change\",\n webSearch: \"web_search\",\n } as Record<string, string>)[item.type] ?? item.type;\n return { ...item, type };\n}\nfunction nativeTurnIdentity(value: unknown): {\n readonly threadId: string;\n readonly turnId: string;\n} | undefined {\n const params = record(record(value)?.params);\n if (!params || typeof params.threadId !== \"string\")\n return undefined;\n const directTurnId = params.turnId;\n const nestedTurnId = record(params.turn)?.id;\n const turnId = typeof directTurnId === \"string\"\n ? directTurnId\n : typeof nestedTurnId === \"string\"\n ? nestedTurnId\n : undefined;\n return turnId === undefined ? undefined : { threadId: params.threadId, turnId };\n}\nfunction belongsToTurn(value: unknown, threadId: string, turnId: string): boolean {\n const identity = nativeTurnIdentity(value);\n return identity?.threadId === threadId && identity.turnId === turnId;\n}\nfunction turnFrames(frames: readonly unknown[], threadId: string, turnId: string): readonly unknown[] {\n return frames.filter((frame) => belongsToTurn(frame, threadId, turnId));\n}\nfunction reportTurnProgress(value: unknown, threadId: string, turnId: string, ctx: SandboxAgentContext): void {\n if (!belongsToTurn(value, threadId, turnId))\n return;\n const detail = appServerProgressDetail(value);\n if (detail !== undefined)\n ctx.progress({ message: detail });\n}\nfunction appServerUsage(frames: readonly unknown[]): Usage | undefined {\n for (let index = frames.length - 1; index >= 0; index -= 1) {\n const frame = record(frames[index]);\n if (frame?.method !== \"thread/tokenUsage/updated\")\n continue;\n const last = record(record(record(frame.params)?.tokenUsage)?.last);\n if (!last)\n continue;\n const number = (value: unknown): number => typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : 0;\n const rawInput = number(last.inputTokens);\n const cacheReadTokens = number(last.cachedInputTokens);\n const reasoningTokens = number(last.reasoningOutputTokens);\n return {\n inputTokens: Math.max(0, rawInput - cacheReadTokens),\n outputTokens: number(last.outputTokens),\n ...(cacheReadTokens > 0 ? { cacheReadTokens } : {}),\n ...(reasoningTokens > 0 ? { reasoningTokens } : {}),\n requests: 1,\n };\n }\n return undefined;\n}\nfunction protocolEvents(frames: readonly unknown[], reported: Set<string>): {\n events: StreamEvent[];\n usage?: Usage;\n} {\n const normalized = frames.flatMap((value) => {\n const frame = record(value);\n if (!frame || typeof frame.method !== \"string\")\n return [];\n const params = record(frame.params) ?? {};\n const type = frame.method.replaceAll(\"/\", \".\");\n return [{ type, ...params, ...(params.item === undefined ? {} : { item: normalizeItem(params.item) }) }];\n });\n const parsed = shared.parseCodex(normalized.map((frame) => JSON.stringify(frame)).join(\"\\n\"));\n // app-server v2 streams per-turn usage separately from `turn/completed`.\n // `last` is already the current turn's total, so take the latest notification\n // in this send window instead of summing intermediate cumulative updates.\n const usage = appServerUsage(frames) ?? (Object.keys(parsed.usage).length === 0 ? undefined : parsed.usage);\n const events = parsed.events.filter((event) => {\n const key = eventKey(event);\n if (key === undefined)\n return true;\n if (reported.has(key))\n return false;\n reported.add(key);\n return true;\n });\n return { events, ...(usage === undefined ? {} : { usage }) };\n}\nfunction evidence(frames: readonly unknown[], parseSuccess: boolean, events: readonly StreamEvent[]): TurnEvidenceCoverage {\n if (frames.length === 0) {\n const reason = \"Codex app-server protocol output was unavailable; tool trajectory was not observed.\";\n return { events: { status: \"unavailable\", reason }, actions: { status: \"unavailable\", reason }, usage: { status: \"unavailable\", reason } };\n }\n if (!parseSuccess) {\n const reason = \"Some Codex app-server protocol frames could not be parsed.\";\n return { events: { status: \"partial\", reason }, actions: { status: \"partial\", reason } };\n }\n return unclassifiedToolActionsCoverage(events) ?? {};\n}\nasync function resolveBin(sandbox: SandboxAgentContext[\"sandbox\"]): Promise<string> {\n const result = await sandbox.runShell('if [ -x \"$HOME/.local/bin/codex\" ]; then printf %s \"$HOME/.local/bin/codex\"; else command -v codex; fi');\n const value = result.stdout.trim();\n if (result.exitCode !== 0 || !value)\n throw new Error(`Codex CLI path resolution failed: ${result.stderr}`);\n return value;\n}\nasync function rpc(driver: ManagedJsonlDriver, cursor: number, id: number, method: string, params: unknown, signal: AbortSignal): Promise<{\n result: RecordValue;\n cursor: number;\n}> {\n await driver.write({ id, method, params });\n const receipt = await driver.waitFor(cursor, (value) => record(value)?.id === id, signal);\n const frame = record(receipt.frame)!;\n if (frame.error !== undefined)\n throw new Error(`Codex app-server ${method} failed: ${JSON.stringify(frame.error)}`);\n return { result: record(frame.result) ?? {}, cursor: receipt.cursor };\n}\nasync function createState(ctx: SandboxAgentContext, env: Readonly<Record<string, string>>): Promise<CodexState> {\n const resources = attemptResources(ctx);\n if (!resources)\n throw new Error(\"Codex app-server requires an Attempt resource registry\");\n const driver = await ManagedJsonlDriver.start(ctx.sandbox, \"codex\", resources, {\n argv: [\n await resolveBin(ctx.sandbox),\n \"app-server\",\n \"--stdio\",\n \"--enable\", \"default_mode_request_user_input\",\n \"-c\", 'sandbox_mode=\"danger-full-access\"',\n \"-c\", 'approval_policy=\"never\"',\n ],\n cwd: ctx.sandbox.workdir,\n env,\n }, () => ({ id: 9999999, method: \"shutdown\", params: {} }));\n let cursor = 0;\n const initialized = await rpc(driver, cursor, 1, \"initialize\", {\n clientInfo: { name: \"niceeval\", title: \"NiceEval\", version: \"1\" },\n }, ctx.signal);\n cursor = initialized.cursor;\n await driver.write({ method: \"initialized\" });\n const started = await rpc(driver, cursor, 2, \"thread/start\", {\n cwd: ctx.sandbox.workdir,\n ...(ctx.model === undefined ? {} : { model: ctx.model }),\n approvalPolicy: \"never\",\n sandbox: \"danger-full-access\",\n // app-server 没有 `codex exec --dangerously-bypass-hook-trust` 的顶层 flag,\n // 但 thread/start.config 会把这个 runtime-only override 交给同一 ConfigBuilder。\n // Eval Sandbox 中的 hook 出处由 agent 配置显式声明,因此非交互运行统一 bypass。\n config: { bypass_hook_trust: true },\n }, ctx.signal);\n cursor = started.cursor;\n const threadId = record(started.result.thread)?.id;\n if (typeof threadId !== \"string\" || !threadId)\n throw new Error(\"Codex app-server thread/start returned no native thread id\");\n ctx.session.capture(threadId);\n return { driver, cursor, threadId, reported: new Set() };\n}\nfunction validateResponses(pending: PendingBatch, responses: readonly InputResponse[] | undefined): Record<string, {\n answers: string[];\n}> {\n if (!responses)\n throw new Error(\"Codex app-server is waiting for structured input responses\");\n const byId = new Map(responses.map((response) => [response.requestId, response]));\n if (byId.size !== responses.length)\n throw new Error(\"Codex input responses contain duplicate request ids\");\n const expected = new Set(pending.questions.map((question) => question.requestId));\n for (const id of byId.keys())\n if (!expected.has(id))\n throw new Error(`Unknown Codex input request ${id}`);\n if (byId.size !== expected.size)\n throw new Error(\"Codex input responses must answer the complete native question batch\");\n const answers: Record<string, {\n answers: string[];\n }> = {};\n for (const question of pending.questions) {\n const response = byId.get(question.requestId)!;\n const answer = \"optionId\" in response ? response.optionId : response.text;\n if (answer === undefined)\n throw new Error(`Codex input request ${question.requestId} has no answer`);\n if (\"optionId\" in response && response.optionId !== undefined && !question.options.includes(response.optionId)) {\n throw new Error(`Option ${response.optionId} is not available for Codex input request ${question.requestId}`);\n }\n answers[question.nativeQuestionId] = { answers: [answer] };\n }\n return answers;\n}\nfunction waitingTurn(state: CodexState, frame: RecordValue, from: number, cursor: number, turnId: string): Turn {\n const params = record(frame.params) ?? {};\n const questionsRaw = Array.isArray(params.questions) ? params.questions : [];\n const itemId = typeof params.itemId === \"string\" ? params.itemId : \"unknown-item\";\n const questions: PendingQuestion[] = questionsRaw.map((value) => {\n const question = record(value) ?? {};\n const nativeQuestionId = String(question.id ?? \"unknown-question\");\n const options = Array.isArray(question.options)\n ? question.options.map((option) => String(record(option)?.label ?? \"\")).filter(Boolean)\n : [];\n return {\n requestId: `${state.threadId}:${turnId}:${itemId}:${nativeQuestionId}`,\n nativeQuestionId,\n prompt: String(question.question ?? \"\"),\n options,\n };\n });\n if (questions.length === 0)\n throw new Error(\"Codex app-server request_user_input contained no questions\");\n const rpcId = frame.id;\n if (typeof rpcId !== \"string\" && typeof rpcId !== \"number\")\n throw new Error(\"Codex app-server request_user_input had no JSON-RPC id\");\n state.pending = { rpcId, turnId, questions };\n const frames = turnFrames(state.driver.framesSince(from).slice(0, cursor - from), state.threadId, turnId);\n const parsed = protocolEvents(frames, state.reported);\n return {\n status: \"waiting\",\n events: [\n ...parsed.events,\n ...questions.map((question): StreamEvent => ({\n type: \"input.requested\",\n request: {\n id: question.requestId,\n action: \"request_user_input\",\n prompt: question.prompt,\n options: question.options.map((id) => ({ id })),\n },\n })),\n ],\n ...(parsed.usage === undefined ? {} : { usage: parsed.usage }),\n evidenceCoverage: evidence(frames, true, parsed.events),\n };\n}\nasync function drive(state: CodexState, ctx: SandboxAgentContext, from: number, turnId: string): Promise<Turn> {\n const receipt = await state.driver.waitFor(state.cursor, (value) => {\n const frame = record(value);\n if (!belongsToTurn(value, state.threadId, turnId))\n return false;\n return frame?.method === \"item/tool/requestUserInput\" || frame?.method === \"turn/completed\" || frame?.method === \"error\";\n }, ctx.signal);\n state.cursor = receipt.cursor;\n const frame = record(receipt.frame)!;\n if (frame.method === \"item/tool/requestUserInput\")\n return waitingTurn(state, frame, from, receipt.cursor, turnId);\n const frames = turnFrames(state.driver.framesSince(from).slice(0, receipt.cursor - from), state.threadId, turnId);\n const parsed = protocolEvents(frames, state.reported);\n const turn = record(record(frame.params)?.turn);\n const status = turn?.status;\n if (frame.method === \"error\") {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(parsed.events),\n message: `Codex app-server turn failed: ${JSON.stringify(frame.params)}`,\n cause: normalizeExternalCause(frame.params),\n events: parsed.events,\n ...(parsed.usage === undefined ? {} : { usage: parsed.usage }),\n process: state.driver.processReceipt(),\n });\n }\n return {\n status: status === \"failed\" ? \"failed\" : \"completed\", events: parsed.events,\n ...(parsed.usage === undefined ? {} : { usage: parsed.usage }),\n evidenceCoverage: evidence(frames, true, parsed.events),\n };\n}\nexport async function sendCodexAppServer(input: {\n readonly text: string;\n readonly responses?: readonly InputResponse[];\n}, ctx: SandboxAgentContext, env: Readonly<Record<string, string>>, failureFacts?: (raw: string, events: readonly StreamEvent[], nativeText: string) => {\n readonly acceptance: \"rejected\" | \"started\" | \"unknown\";\n readonly cause?: ExternalCause;\n}): Promise<Turn> {\n let state = ctx.session.get(stateSlot);\n if (!state) {\n state = await createState(ctx, env);\n ctx.session.set(stateSlot, state);\n }\n // Anything arriving after the prior turn's terminal cursor is not allowed to\n // become part of a new durable window. Per-turn identity filtering below also\n // protects the race between this snapshot and the next turn/start write.\n if (!state.pending)\n state.cursor = state.driver.cursor();\n const from = state.cursor;\n let turnId = state.pending?.turnId;\n const bufferedProgress: unknown[] = [];\n const unsubscribe = state.driver.subscribeFrames((frame) => {\n if (turnId === undefined)\n bufferedProgress.push(frame);\n else\n reportTurnProgress(frame, state.threadId, turnId, ctx);\n });\n try {\n if (state.pending) {\n const pending = state.pending;\n const answers = validateResponses(pending, input.responses);\n if (state.driver.framesSince(state.cursor).length !== 0) {\n throw new Error(\"Codex app-server produced activity after entering waiting state; refusing an ambiguous answer\");\n }\n try {\n await state.driver.write({ id: pending.rpcId, result: { answers } });\n }\n catch (cause) {\n throw makeSendFailure({\n acceptance: \"started\",\n message: `Codex app-server answer transport failed: ${cause instanceof Error ? cause.message : String(cause)}`,\n cause: normalizeExternalCause(cause),\n process: state.driver.processReceipt(),\n });\n }\n // JSON-RPC response ids are native idempotency identities. Keep pending through\n // validation and transport failure; commit only after the write receipt succeeds.\n state.pending = undefined;\n }\n else {\n if (input.responses?.length)\n throw new Error(\"Codex app-server received responses while no input request was pending\");\n const started = await rpc(state.driver, state.cursor, 10000 + state.cursor, \"turn/start\", {\n threadId: state.threadId,\n input: [{ type: \"text\", text: input.text }],\n approvalPolicy: \"never\",\n sandboxPolicy: { type: \"dangerFullAccess\" },\n ...(ctx.model === undefined ? {} : { model: ctx.model }),\n ...(ctx.reasoningEffort === undefined ? {} : { effort: ctx.reasoningEffort }),\n }, ctx.signal);\n state.cursor = started.cursor;\n const startedTurnId = record(started.result.turn)?.id;\n if (typeof startedTurnId !== \"string\" || startedTurnId === \"\") {\n throw new Error(\"Codex app-server turn/start returned no native turn id\");\n }\n turnId = startedTurnId;\n for (const frame of bufferedProgress)\n reportTurnProgress(frame, state.threadId, turnId, ctx);\n }\n if (turnId === undefined)\n throw new Error(\"Codex app-server send has no native turn id\");\n return await drive(state, ctx, from, turnId);\n }\n catch (cause) {\n if (typeof cause === \"object\" && cause !== null && (cause as {\n type?: unknown;\n }).type === \"agent-send-failed\")\n throw cause;\n const frames = turnId === undefined\n ? []\n : turnFrames(state.driver.framesSince(from), state.threadId, turnId);\n const raw = frames.map((value) => JSON.stringify(value)).join(\"\\n\");\n const message = cause instanceof Error ? cause.message : String(cause);\n const facts = failureFacts?.(raw, protocolEvents(frames, new Set()).events, message);\n throw makeSendFailure({\n acceptance: facts?.acceptance ?? (state.pending === undefined ? \"unknown\" : \"started\"),\n message: `Codex app-server transport failed: ${message} (frames=${state.driver.frameKinds() || \"none\"})`,\n cause: facts?.cause ?? normalizeExternalCause(cause),\n process: state.driver.processReceipt(),\n });\n }\n finally {\n unsubscribe();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"codex-app-server.js","sourceRoot":"","sources":["codex-app-server.ts"],"names":[],"mappings":";;AA4XA,gDA6FC;AAxdD,uDAAsD;AACtD,yDAAwD;AACxD,2CAAqC;AACrC,yEAAgF;AAChF,kEAAwF;AACxF,mEAAyF;AACzF,0EAAmE;AAoBnE,MAAM,SAAS,GAAG,IAAA,mCAAiB,EAAa,yBAAyB,CAAC,CAAC;AAC3E,SAAS,MAAM,CAAC,KAAc;IAC1B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;AACnH,CAAC;AACD,SAAS,eAAe,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,SAAS,CAAC;IACrB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,IAAI;QACL,OAAO,SAAS,CAAC;IACrB,OAAO,IAAI,CAAC;AAChB,CAAC;AACD,SAAS,WAAW,CAAC,KAAc;IAC/B,IAAI,KAAK,KAAK,SAAS;QACnB,OAAO,SAAS,CAAC;IACrB,IAAI,CAAC;QACD,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,CAAC;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AACD,SAAS,aAAa,CAAC,KAAa,EAAE,SAAkB;IACpD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;IAChD,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,cAAc,CAAC,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC;AACzE,CAAC;AACD,+DAA+D;AAC/D,SAAS,uBAAuB,CAAC,KAAc;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,cAAc,IAAI,KAAK,EAAE,MAAM,KAAK,gBAAgB;QACtE,OAAO,SAAS,CAAC;IACrB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI;QACL,OAAO,SAAS,CAAC;IACrB,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,KAAK,gBAAgB,CAAC;IACpD,IAAI,IAAI,KAAK,kBAAkB,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QAC9D,OAAO,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/D,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,OAAO,aAAa,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;QACxE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,OAAO,aAAa,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,aAAa,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;gBAClC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACb,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,OAAO,aAAa,CAAC,cAAc,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,aAAa,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC;IACtB,CAAC;IACD,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QACtD,OAAO,oBAAoB,CAAC;IAChC,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,QAAQ,CAAC,KAAkB;IAChC,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB;QACzE,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,WAAW;QAClD,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;IAChD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,aAAa,CAAC,KAAc;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QACtC,OAAO,KAAK,CAAC;IACjB,MAAM,IAAI,GAAI;QACV,YAAY,EAAE,eAAe;QAC7B,gBAAgB,EAAE,mBAAmB;QACrC,WAAW,EAAE,eAAe;QAC5B,UAAU,EAAE,aAAa;QACzB,SAAS,EAAE,YAAY;KACC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;IACrD,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AACD,SAAS,kBAAkB,CAAC,KAAc;IAItC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QAC9C,OAAO,SAAS,CAAC;IACrB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,YAAY,KAAK,QAAQ;QAC3C,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,OAAO,YAAY,KAAK,QAAQ;YAC9B,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,SAAS,CAAC;IACpB,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;AACpF,CAAC;AACD,SAAS,aAAa,CAAC,KAAc,EAAE,QAAgB,EAAE,MAAc;IACnE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,QAAQ,EAAE,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC;AACzE,CAAC;AACD,SAAS,UAAU,CAAC,MAA0B,EAAE,QAAgB,EAAE,MAAc;IAC5E,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5E,CAAC;AACD,SAAS,kBAAkB,CAAC,KAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,GAAwB;IAClG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;QACvC,OAAO;IACX,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,SAAS;QACpB,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1C,CAAC;AACD,SAAS,cAAc,CAAC,MAA0B;IAC9C,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,IAAI,KAAK,EAAE,MAAM,KAAK,2BAA2B;YAC7C,SAAS;QACb,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI;YACL,SAAS;QACb,MAAM,MAAM,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACvD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC3D,OAAO;YACH,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,eAAe,CAAC;YACpD,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;YACvC,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,QAAQ,EAAE,CAAC;SACd,CAAC;IACN,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,cAAc,CAAC,MAA0B,EAAE,QAAqB;IAIrE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;YAC1C,OAAO,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7G,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,kBAAM,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9F,yEAAyE;IACzE,8EAA8E;IAC9E,0EAA0E;IAC1E,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,GAAG,KAAK,SAAS;YACjB,OAAO,IAAI,CAAC;QAChB,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YACjB,OAAO,KAAK,CAAC;QACjB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC;AACD,SAAS,QAAQ,CAAC,MAA0B,EAAE,YAAqB,EAAE,MAA8B;IAC/F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,qFAAqF,CAAC;QACrG,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC;IAC/I,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,4DAA4D,CAAC;QAC5E,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IAC7F,CAAC;IACD,OAAO,IAAA,uDAA+B,EAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACzD,CAAC;AACD,KAAK,UAAU,UAAU,CAAC,OAAuC;IAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,wGAAwG,CAAC,CAAC;IAChJ,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK;QAC/B,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,KAAK,UAAU,GAAG,CAAC,MAA0B,EAAE,MAAc,EAAE,EAAU,EAAE,MAAc,EAAE,MAAe,EAAE,MAAmB;IAI3H,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC;IACrC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QACzB,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzF,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AAC1E,CAAC;AACD,KAAK,UAAU,WAAW,CAAC,GAAwB,EAAE,GAAqC;IACtF,MAAM,SAAS,GAAG,IAAA,uCAAgB,EAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS;QACV,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,MAAM,qCAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;QAC3E,IAAI,EAAE;YACF,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;YAC7B,YAAY;YACZ,SAAS;YACT,UAAU,EAAE,iCAAiC;YAC7C,IAAI,EAAE,mCAAmC;YACzC,IAAI,EAAE,yBAAyB;SAClC;QACD,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO;QACxB,GAAG;KACN,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5D,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE;QAC3D,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE;KACpE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACf,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAC5B,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,EAAE;QACzD,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO;QACxB,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;QACxD,cAAc,EAAE,OAAO;QACvB,OAAO,EAAE,oBAAoB;QAC7B,uEAAuE;QACvE,uEAAuE;QACvE,0DAA0D;QAC1D,MAAM,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE;KACtC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACf,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;IACnD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ;QACzC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAClF,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAC7D,CAAC;AACD,SAAS,iBAAiB,CAAC,OAAqB,EAAE,SAA+C;IAG7F,IAAI,CAAC,SAAS;QACV,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM;QAC9B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAClF,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;QAC3B,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC5F,MAAM,OAAO,GAER,EAAE,CAAC;IACR,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,UAAU,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1E,IAAI,MAAM,KAAK,SAAS;YACpB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,SAAS,gBAAgB,CAAC,CAAC;QAC/E,IAAI,UAAU,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7G,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,CAAC,QAAQ,6CAA6C,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;QAClH,CAAC;QACD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/D,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AACD,SAAS,WAAW,CAAC,KAAiB,EAAE,KAAkB,EAAE,IAAY,EAAE,MAAc,EAAE,MAAc;IACpG,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;IAClF,MAAM,SAAS,GAAsB,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,kBAAkB,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACvF,CAAC,CAAC,EAAE,CAAC;QACT,OAAO;YACH,SAAS,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,IAAI,MAAM,IAAI,gBAAgB,EAAE;YACtE,gBAAgB;YAChB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;YACvC,OAAO;SACV,CAAC;IACN,CAAC,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAClF,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;IACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;QACtD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC9E,KAAK,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1G,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtD,OAAO;QACH,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE;YACJ,GAAG,MAAM,CAAC,MAAM;YAChB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAe,EAAE,CAAC,CAAC;gBACzC,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE;oBACL,EAAE,EAAE,QAAQ,CAAC,SAAS;oBACtB,MAAM,EAAE,oBAAoB;oBAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;iBAClD;aACJ,CAAC,CAAC;SACN;QACD,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9D,gBAAgB,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;KAC1D,CAAC;AACN,CAAC;AACD,KAAK,UAAU,KAAK,CAAC,KAAiB,EAAE,GAAwB,EAAE,IAAY,EAAE,MAAc;IAC1F,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC7C,OAAO,KAAK,CAAC;QACjB,IAAI,KAAK,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;YAC5B,oEAAoE;YACpE,wEAAwE;YACxE,sDAAsD;YACtD,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;QACpD,CAAC;QACD,OAAO,KAAK,EAAE,MAAM,KAAK,4BAA4B,IAAI,KAAK,EAAE,MAAM,KAAK,gBAAgB,CAAC;IAChG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACf,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,4BAA4B;QAC7C,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClH,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAA,kCAAe,EAAC;YAClB,UAAU,EAAE,IAAA,2CAAwB,EAAC,MAAM,CAAC,MAAM,CAAC;YACnD,OAAO,EAAE,iCAAiC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACxE,KAAK,EAAE,IAAA,0CAAsB,EAAC,KAAK,CAAC,MAAM,CAAC;YAC3C,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAC9D,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE;SACzC,CAAC,CAAC;IACP,CAAC;IACD,OAAO;QACH,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM;QAC3E,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9D,gBAAgB,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;KAC1D,CAAC;AACN,CAAC;AACM,KAAK,UAAU,kBAAkB,CAAC,KAGxC,EAAE,GAAwB,EAAE,GAAqC,EAAE,YAGnE;IACG,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,KAAK,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,6EAA6E;IAC7E,8EAA8E;IAC9E,yEAAyE;IACzE,IAAI,CAAC,KAAK,CAAC,OAAO;QACd,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;IAC1B,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;IACnC,MAAM,gBAAgB,GAAc,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,EAAE;QACvD,IAAI,MAAM,KAAK,SAAS;YACpB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YAE7B,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;YACrH,CAAC;YACD,IAAI,CAAC;gBACD,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,KAAK,EAAE,CAAC;gBACX,MAAM,IAAA,kCAAe,EAAC;oBAClB,UAAU,EAAE,SAAS;oBACrB,OAAO,EAAE,6CAA6C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBAC9G,KAAK,EAAE,IAAA,0CAAsB,EAAC,KAAK,CAAC;oBACpC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE;iBACzC,CAAC,CAAC;YACP,CAAC;YACD,gFAAgF;YAChF,kFAAkF;YAClF,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;QAC9B,CAAC;aACI,CAAC;YACF,IAAI,KAAK,CAAC,SAAS,EAAE,MAAM;gBACvB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;YAC9F,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE;gBACtF,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC3C,cAAc,EAAE,OAAO;gBACvB,aAAa,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;gBAC3C,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;gBACxD,GAAG,CAAC,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC;aAChF,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACf,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC9B,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACtD,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,EAAE,EAAE,CAAC;gBAC5D,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM,GAAG,aAAa,CAAC;YACvB,KAAK,MAAM,KAAK,IAAI,gBAAgB;gBAChC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,MAAM,KAAK,SAAS;YACpB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACnE,OAAO,MAAM,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACX,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAElD,CAAC,IAAI,KAAK,mBAAmB;YAC3B,MAAM,KAAK,CAAC;QAChB,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS;YAC/B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrF,MAAM,IAAA,kCAAe,EAAC;YAClB,UAAU,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACtF,OAAO,EAAE,sCAAsC,OAAO,YAAY,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,MAAM,GAAG;YACxG,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,IAAA,0CAAsB,EAAC,KAAK,CAAC;YACpD,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE;SACzC,CAAC,CAAC;IACP,CAAC;YACO,CAAC;QACL,WAAW,EAAE,CAAC;IAClB,CAAC;AACL,CAAC","sourcesContent":["import type { InputResponse, SandboxAgentContext, StreamEvent, Turn, TurnEvidenceCoverage, Usage } from \"../types.ts\";\nimport { createSessionSlot } from \"./session-slot.ts\";\nimport { ManagedJsonlDriver } from \"./managed-jsonl.ts\";\nimport { shared } from \"./shared.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { normalizeExternalCause, type ExternalCause } from \"../shared/external-cause.ts\";\nimport { attemptResources } from \"../context/attempt-resources.ts\";\ntype RecordValue = globalThis.Record<string, unknown>;\ntype PendingQuestion = {\n readonly requestId: string;\n readonly nativeQuestionId: string;\n readonly prompt: string;\n readonly options: readonly string[];\n};\ntype PendingBatch = {\n readonly rpcId: string | number;\n readonly turnId: string;\n readonly questions: readonly PendingQuestion[];\n};\ntype CodexState = {\n readonly driver: ManagedJsonlDriver;\n cursor: number;\n readonly threadId: string;\n pending?: PendingBatch;\n readonly reported: Set<string>;\n};\nconst stateSlot = createSessionSlot<CodexState>(\"codex/app-server-native\");\nfunction record(value: unknown): RecordValue | undefined {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) ? value as RecordValue : undefined;\n}\nfunction progressPreview(value: unknown): string | undefined {\n if (typeof value !== \"string\")\n return undefined;\n const text = value.replace(/\\s+/g, \" \").trim();\n if (!text)\n return undefined;\n return text;\n}\nfunction jsonPreview(value: unknown): string | undefined {\n if (value === undefined)\n return undefined;\n try {\n return progressPreview(JSON.stringify(value));\n }\n catch {\n return undefined;\n }\n}\nfunction completedTool(label: string, completed: boolean): string {\n const detail = progressPreview(label) ?? \"tool\";\n return completed ? `tool: ${detail} · completed` : `tool: ${detail}`;\n}\n/** 选择 app-server v2 的可信字段;统一的脱敏、清理与有界化由 Runner ACTIVE 出口负责。 */\nfunction appServerProgressDetail(value: unknown): string | undefined {\n const frame = record(value);\n if (frame?.method !== \"item/started\" && frame?.method !== \"item/completed\")\n return undefined;\n const data = record(record(frame.params)?.item);\n if (!data)\n return undefined;\n const type = typeof data.type === \"string\" ? data.type : \"\";\n const completed = frame.method === \"item/completed\";\n if (type === \"commandExecution\" || type === \"command_execution\") {\n return completedTool(progressPreview(data.command) ?? \"shell\", completed);\n }\n if (type === \"mcpToolCall\" || type === \"mcp_tool_call\") {\n const tool = typeof data.tool === \"string\" ? data.tool : \"MCP\";\n const server = typeof data.server === \"string\" ? `${data.server}.` : \"\";\n const args = jsonPreview(data.arguments ?? data.input);\n return completedTool(`${server}${tool}${args ? ` ${args}` : \"\"}`, completed);\n }\n if (type === \"dynamicToolCall\" || type === \"dynamic_tool_call\") {\n const tool = typeof data.tool === \"string\" ? data.tool : \"dynamic tool\";\n const args = jsonPreview(data.arguments ?? data.input);\n return completedTool(`${tool}${args ? ` ${args}` : \"\"}`, completed);\n }\n if (type === \"webSearch\" || type === \"web_search\") {\n const query = progressPreview(data.query ?? data.search);\n return completedTool(`web search${query ? `: ${query}` : \"\"}`, completed);\n }\n if (type === \"fileChange\" || type === \"file_change\") {\n const paths = Array.isArray(data.changes)\n ? data.changes.flatMap((change) => {\n const path = record(change)?.path;\n return typeof path === \"string\" ? [path] : [];\n }).join(\", \")\n : undefined;\n const detail = progressPreview(paths) ?? progressPreview(data.path);\n return completedTool(`file change${detail ? `: ${detail}` : \"\"}`, completed);\n }\n if (type === \"imageView\" || type === \"image_view\") {\n const path = progressPreview(data.path);\n return completedTool(`image view${path ? `: ${path}` : \"\"}`, completed);\n }\n if (type === \"reasoning\") {\n return \"thinking\";\n }\n if (type === \"agentMessage\" || type === \"agent_message\") {\n return \"assistant response\";\n }\n return undefined;\n}\nfunction eventKey(event: StreamEvent): string | undefined {\n if (event.type === \"operation.started\" || event.type === \"operation.finished\")\n return `${event.type}:${event.operationId}`;\n if (event.type === \"skill.loaded\" && event.operationId)\n return `${event.type}:${event.operationId}`;\n return undefined;\n}\nfunction normalizeItem(value: unknown): unknown {\n const item = record(value);\n if (!item || typeof item.type !== \"string\")\n return value;\n const type = ({\n agentMessage: \"agent_message\",\n commandExecution: \"command_execution\",\n mcpToolCall: \"mcp_tool_call\",\n fileChange: \"file_change\",\n webSearch: \"web_search\",\n } as Record<string, string>)[item.type] ?? item.type;\n return { ...item, type };\n}\nfunction nativeTurnIdentity(value: unknown): {\n readonly threadId: string;\n readonly turnId: string;\n} | undefined {\n const params = record(record(value)?.params);\n if (!params || typeof params.threadId !== \"string\")\n return undefined;\n const directTurnId = params.turnId;\n const nestedTurnId = record(params.turn)?.id;\n const turnId = typeof directTurnId === \"string\"\n ? directTurnId\n : typeof nestedTurnId === \"string\"\n ? nestedTurnId\n : undefined;\n return turnId === undefined ? undefined : { threadId: params.threadId, turnId };\n}\nfunction belongsToTurn(value: unknown, threadId: string, turnId: string): boolean {\n const identity = nativeTurnIdentity(value);\n return identity?.threadId === threadId && identity.turnId === turnId;\n}\nfunction turnFrames(frames: readonly unknown[], threadId: string, turnId: string): readonly unknown[] {\n return frames.filter((frame) => belongsToTurn(frame, threadId, turnId));\n}\nfunction reportTurnProgress(value: unknown, threadId: string, turnId: string, ctx: SandboxAgentContext): void {\n if (!belongsToTurn(value, threadId, turnId))\n return;\n const detail = appServerProgressDetail(value);\n if (detail !== undefined)\n ctx.progress({ message: detail });\n}\nfunction appServerUsage(frames: readonly unknown[]): Usage | undefined {\n for (let index = frames.length - 1; index >= 0; index -= 1) {\n const frame = record(frames[index]);\n if (frame?.method !== \"thread/tokenUsage/updated\")\n continue;\n const last = record(record(record(frame.params)?.tokenUsage)?.last);\n if (!last)\n continue;\n const number = (value: unknown): number => typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : 0;\n const rawInput = number(last.inputTokens);\n const cacheReadTokens = number(last.cachedInputTokens);\n const reasoningTokens = number(last.reasoningOutputTokens);\n return {\n inputTokens: Math.max(0, rawInput - cacheReadTokens),\n outputTokens: number(last.outputTokens),\n ...(cacheReadTokens > 0 ? { cacheReadTokens } : {}),\n ...(reasoningTokens > 0 ? { reasoningTokens } : {}),\n requests: 1,\n };\n }\n return undefined;\n}\nfunction protocolEvents(frames: readonly unknown[], reported: Set<string>): {\n events: StreamEvent[];\n usage?: Usage;\n} {\n const normalized = frames.flatMap((value) => {\n const frame = record(value);\n if (!frame || typeof frame.method !== \"string\")\n return [];\n const params = record(frame.params) ?? {};\n const type = frame.method.replaceAll(\"/\", \".\");\n return [{ type, ...params, ...(params.item === undefined ? {} : { item: normalizeItem(params.item) }) }];\n });\n const parsed = shared.parseCodex(normalized.map((frame) => JSON.stringify(frame)).join(\"\\n\"));\n // app-server v2 streams per-turn usage separately from `turn/completed`.\n // `last` is already the current turn's total, so take the latest notification\n // in this send window instead of summing intermediate cumulative updates.\n const usage = appServerUsage(frames) ?? (Object.keys(parsed.usage).length === 0 ? undefined : parsed.usage);\n const events = parsed.events.filter((event) => {\n const key = eventKey(event);\n if (key === undefined)\n return true;\n if (reported.has(key))\n return false;\n reported.add(key);\n return true;\n });\n return { events, ...(usage === undefined ? {} : { usage }) };\n}\nfunction evidence(frames: readonly unknown[], parseSuccess: boolean, events: readonly StreamEvent[]): TurnEvidenceCoverage {\n if (frames.length === 0) {\n const reason = \"Codex app-server protocol output was unavailable; tool trajectory was not observed.\";\n return { events: { status: \"unavailable\", reason }, actions: { status: \"unavailable\", reason }, usage: { status: \"unavailable\", reason } };\n }\n if (!parseSuccess) {\n const reason = \"Some Codex app-server protocol frames could not be parsed.\";\n return { events: { status: \"partial\", reason }, actions: { status: \"partial\", reason } };\n }\n return unclassifiedToolActionsCoverage(events) ?? {};\n}\nasync function resolveBin(sandbox: SandboxAgentContext[\"sandbox\"]): Promise<string> {\n const result = await sandbox.runShell('if [ -x \"$HOME/.local/bin/codex\" ]; then printf %s \"$HOME/.local/bin/codex\"; else command -v codex; fi');\n const value = result.stdout.trim();\n if (result.exitCode !== 0 || !value)\n throw new Error(`Codex CLI path resolution failed: ${result.stderr}`);\n return value;\n}\nasync function rpc(driver: ManagedJsonlDriver, cursor: number, id: number, method: string, params: unknown, signal: AbortSignal): Promise<{\n result: RecordValue;\n cursor: number;\n}> {\n await driver.write({ id, method, params });\n const receipt = await driver.waitFor(cursor, (value) => record(value)?.id === id, signal);\n const frame = record(receipt.frame)!;\n if (frame.error !== undefined)\n throw new Error(`Codex app-server ${method} failed: ${JSON.stringify(frame.error)}`);\n return { result: record(frame.result) ?? {}, cursor: receipt.cursor };\n}\nasync function createState(ctx: SandboxAgentContext, env: Readonly<Record<string, string>>): Promise<CodexState> {\n const resources = attemptResources(ctx);\n if (!resources)\n throw new Error(\"Codex app-server requires an Attempt resource registry\");\n const driver = await ManagedJsonlDriver.start(ctx.sandbox, \"codex\", resources, {\n argv: [\n await resolveBin(ctx.sandbox),\n \"app-server\",\n \"--stdio\",\n \"--enable\", \"default_mode_request_user_input\",\n \"-c\", 'sandbox_mode=\"danger-full-access\"',\n \"-c\", 'approval_policy=\"never\"',\n ],\n cwd: ctx.sandbox.workdir,\n env,\n }, () => ({ id: 9999999, method: \"shutdown\", params: {} }));\n let cursor = 0;\n const initialized = await rpc(driver, cursor, 1, \"initialize\", {\n clientInfo: { name: \"niceeval\", title: \"NiceEval\", version: \"1\" },\n }, ctx.signal);\n cursor = initialized.cursor;\n await driver.write({ method: \"initialized\" });\n const started = await rpc(driver, cursor, 2, \"thread/start\", {\n cwd: ctx.sandbox.workdir,\n ...(ctx.model === undefined ? {} : { model: ctx.model }),\n approvalPolicy: \"never\",\n sandbox: \"danger-full-access\",\n // app-server 没有 `codex exec --dangerously-bypass-hook-trust` 的顶层 flag,\n // 但 thread/start.config 会把这个 runtime-only override 交给同一 ConfigBuilder。\n // Eval Sandbox 中的 hook 出处由 agent 配置显式声明,因此非交互运行统一 bypass。\n config: { bypass_hook_trust: true },\n }, ctx.signal);\n cursor = started.cursor;\n const threadId = record(started.result.thread)?.id;\n if (typeof threadId !== \"string\" || !threadId)\n throw new Error(\"Codex app-server thread/start returned no native thread id\");\n ctx.session.capture(threadId);\n return { driver, cursor, threadId, reported: new Set() };\n}\nfunction validateResponses(pending: PendingBatch, responses: readonly InputResponse[] | undefined): Record<string, {\n answers: string[];\n}> {\n if (!responses)\n throw new Error(\"Codex app-server is waiting for structured input responses\");\n const byId = new Map(responses.map((response) => [response.requestId, response]));\n if (byId.size !== responses.length)\n throw new Error(\"Codex input responses contain duplicate request ids\");\n const expected = new Set(pending.questions.map((question) => question.requestId));\n for (const id of byId.keys())\n if (!expected.has(id))\n throw new Error(`Unknown Codex input request ${id}`);\n if (byId.size !== expected.size)\n throw new Error(\"Codex input responses must answer the complete native question batch\");\n const answers: Record<string, {\n answers: string[];\n }> = {};\n for (const question of pending.questions) {\n const response = byId.get(question.requestId)!;\n const answer = \"optionId\" in response ? response.optionId : response.text;\n if (answer === undefined)\n throw new Error(`Codex input request ${question.requestId} has no answer`);\n if (\"optionId\" in response && response.optionId !== undefined && !question.options.includes(response.optionId)) {\n throw new Error(`Option ${response.optionId} is not available for Codex input request ${question.requestId}`);\n }\n answers[question.nativeQuestionId] = { answers: [answer] };\n }\n return answers;\n}\nfunction waitingTurn(state: CodexState, frame: RecordValue, from: number, cursor: number, turnId: string): Turn {\n const params = record(frame.params) ?? {};\n const questionsRaw = Array.isArray(params.questions) ? params.questions : [];\n const itemId = typeof params.itemId === \"string\" ? params.itemId : \"unknown-item\";\n const questions: PendingQuestion[] = questionsRaw.map((value) => {\n const question = record(value) ?? {};\n const nativeQuestionId = String(question.id ?? \"unknown-question\");\n const options = Array.isArray(question.options)\n ? question.options.map((option) => String(record(option)?.label ?? \"\")).filter(Boolean)\n : [];\n return {\n requestId: `${state.threadId}:${turnId}:${itemId}:${nativeQuestionId}`,\n nativeQuestionId,\n prompt: String(question.question ?? \"\"),\n options,\n };\n });\n if (questions.length === 0)\n throw new Error(\"Codex app-server request_user_input contained no questions\");\n const rpcId = frame.id;\n if (typeof rpcId !== \"string\" && typeof rpcId !== \"number\")\n throw new Error(\"Codex app-server request_user_input had no JSON-RPC id\");\n state.pending = { rpcId, turnId, questions };\n const frames = turnFrames(state.driver.framesSince(from).slice(0, cursor - from), state.threadId, turnId);\n const parsed = protocolEvents(frames, state.reported);\n return {\n status: \"waiting\",\n events: [\n ...parsed.events,\n ...questions.map((question): StreamEvent => ({\n type: \"input.requested\",\n request: {\n id: question.requestId,\n action: \"request_user_input\",\n prompt: question.prompt,\n options: question.options.map((id) => ({ id })),\n },\n })),\n ],\n ...(parsed.usage === undefined ? {} : { usage: parsed.usage }),\n evidenceCoverage: evidence(frames, true, parsed.events),\n };\n}\nasync function drive(state: CodexState, ctx: SandboxAgentContext, from: number, turnId: string): Promise<Turn> {\n const receipt = await state.driver.waitFor(state.cursor, (value) => {\n const frame = record(value);\n if (!belongsToTurn(value, state.threadId, turnId))\n return false;\n if (frame?.method === \"error\") {\n // app-server emits transient stream errors before its own reconnect\n // attempts. They remain part of this turn's evidence, but only an error\n // with no promised retry is terminal for the adapter.\n return record(frame.params)?.willRetry !== true;\n }\n return frame?.method === \"item/tool/requestUserInput\" || frame?.method === \"turn/completed\";\n }, ctx.signal);\n state.cursor = receipt.cursor;\n const frame = record(receipt.frame)!;\n if (frame.method === \"item/tool/requestUserInput\")\n return waitingTurn(state, frame, from, receipt.cursor, turnId);\n const frames = turnFrames(state.driver.framesSince(from).slice(0, receipt.cursor - from), state.threadId, turnId);\n const parsed = protocolEvents(frames, state.reported);\n const turn = record(record(frame.params)?.turn);\n const status = turn?.status;\n if (frame.method === \"error\") {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(parsed.events),\n message: `Codex app-server turn failed: ${JSON.stringify(frame.params)}`,\n cause: normalizeExternalCause(frame.params),\n events: parsed.events,\n ...(parsed.usage === undefined ? {} : { usage: parsed.usage }),\n process: state.driver.processReceipt(),\n });\n }\n return {\n status: status === \"failed\" ? \"failed\" : \"completed\", events: parsed.events,\n ...(parsed.usage === undefined ? {} : { usage: parsed.usage }),\n evidenceCoverage: evidence(frames, true, parsed.events),\n };\n}\nexport async function sendCodexAppServer(input: {\n readonly text: string;\n readonly responses?: readonly InputResponse[];\n}, ctx: SandboxAgentContext, env: Readonly<Record<string, string>>, failureFacts?: (raw: string, events: readonly StreamEvent[], nativeText: string) => {\n readonly acceptance: \"rejected\" | \"started\" | \"unknown\";\n readonly cause?: ExternalCause;\n}): Promise<Turn> {\n let state = ctx.session.get(stateSlot);\n if (!state) {\n state = await createState(ctx, env);\n ctx.session.set(stateSlot, state);\n }\n // Anything arriving after the prior turn's terminal cursor is not allowed to\n // become part of a new durable window. Per-turn identity filtering below also\n // protects the race between this snapshot and the next turn/start write.\n if (!state.pending)\n state.cursor = state.driver.cursor();\n const from = state.cursor;\n let turnId = state.pending?.turnId;\n const bufferedProgress: unknown[] = [];\n const unsubscribe = state.driver.subscribeFrames((frame) => {\n if (turnId === undefined)\n bufferedProgress.push(frame);\n else\n reportTurnProgress(frame, state.threadId, turnId, ctx);\n });\n try {\n if (state.pending) {\n const pending = state.pending;\n const answers = validateResponses(pending, input.responses);\n if (state.driver.framesSince(state.cursor).length !== 0) {\n throw new Error(\"Codex app-server produced activity after entering waiting state; refusing an ambiguous answer\");\n }\n try {\n await state.driver.write({ id: pending.rpcId, result: { answers } });\n }\n catch (cause) {\n throw makeSendFailure({\n acceptance: \"started\",\n message: `Codex app-server answer transport failed: ${cause instanceof Error ? cause.message : String(cause)}`,\n cause: normalizeExternalCause(cause),\n process: state.driver.processReceipt(),\n });\n }\n // JSON-RPC response ids are native idempotency identities. Keep pending through\n // validation and transport failure; commit only after the write receipt succeeds.\n state.pending = undefined;\n }\n else {\n if (input.responses?.length)\n throw new Error(\"Codex app-server received responses while no input request was pending\");\n const started = await rpc(state.driver, state.cursor, 10000 + state.cursor, \"turn/start\", {\n threadId: state.threadId,\n input: [{ type: \"text\", text: input.text }],\n approvalPolicy: \"never\",\n sandboxPolicy: { type: \"dangerFullAccess\" },\n ...(ctx.model === undefined ? {} : { model: ctx.model }),\n ...(ctx.reasoningEffort === undefined ? {} : { effort: ctx.reasoningEffort }),\n }, ctx.signal);\n state.cursor = started.cursor;\n const startedTurnId = record(started.result.turn)?.id;\n if (typeof startedTurnId !== \"string\" || startedTurnId === \"\") {\n throw new Error(\"Codex app-server turn/start returned no native turn id\");\n }\n turnId = startedTurnId;\n for (const frame of bufferedProgress)\n reportTurnProgress(frame, state.threadId, turnId, ctx);\n }\n if (turnId === undefined)\n throw new Error(\"Codex app-server send has no native turn id\");\n return await drive(state, ctx, from, turnId);\n }\n catch (cause) {\n if (typeof cause === \"object\" && cause !== null && (cause as {\n type?: unknown;\n }).type === \"agent-send-failed\")\n throw cause;\n const frames = turnId === undefined\n ? []\n : turnFrames(state.driver.framesSince(from), state.threadId, turnId);\n const raw = frames.map((value) => JSON.stringify(value)).join(\"\\n\");\n const message = cause instanceof Error ? cause.message : String(cause);\n const facts = failureFacts?.(raw, protocolEvents(frames, new Set()).events, message);\n throw makeSendFailure({\n acceptance: facts?.acceptance ?? (state.pending === undefined ? \"unknown\" : \"started\"),\n message: `Codex app-server transport failed: ${message} (frames=${state.driver.frameKinds() || \"none\"})`,\n cause: facts?.cause ?? normalizeExternalCause(cause),\n process: state.driver.processReceipt(),\n });\n }\n finally {\n unsubscribe();\n }\n}\n"]}
|
|
@@ -373,9 +373,9 @@ function costForSlots(slots) {
|
|
|
373
373
|
const subjects = [...unique.values()];
|
|
374
374
|
const observed = subjects.filter(({ analysis }) => analysis.costUSD.observed !== null);
|
|
375
375
|
const estimated = subjects.filter(({ analysis }) => analysis.costUSD.estimated !== null);
|
|
376
|
-
const source =
|
|
376
|
+
const source = observed.length >= estimated.length && observed.length > 0
|
|
377
377
|
? "observed"
|
|
378
|
-
:
|
|
378
|
+
: estimated.length > 0
|
|
379
379
|
? "estimated"
|
|
380
380
|
: null;
|
|
381
381
|
const valued = source === "observed" ? observed : source === "estimated" ? estimated : [];
|
|
@@ -385,7 +385,11 @@ function costForSlots(slots) {
|
|
|
385
385
|
return Object.freeze({
|
|
386
386
|
value,
|
|
387
387
|
source,
|
|
388
|
-
state: source === null
|
|
388
|
+
state: source === null
|
|
389
|
+
? "unavailable"
|
|
390
|
+
: valued.length < subjects.length
|
|
391
|
+
? "partial"
|
|
392
|
+
: "available",
|
|
389
393
|
samples: valued.length,
|
|
390
394
|
total: subjects.length,
|
|
391
395
|
basis: "slot",
|