@humain/ui 2.1.62 → 2.1.65

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.
Files changed (160) hide show
  1. package/dist/components/organisms/ai/AIToolCall/AIToolCall.d.ts +9 -3
  2. package/dist/components/organisms/ai/AIToolRun/index.d.ts +1 -1
  3. package/dist/components/organisms/ai/AIToolRun/validation.d.ts +24 -3
  4. package/dist/components/organisms/ai/_shared/format-ai-duration.d.ts +1 -0
  5. package/dist/components/organisms/ai/_shared/workflow-step-renderer.d.ts +1 -0
  6. package/dist/index.js +52 -52
  7. package/dist/index151.js +1 -1
  8. package/dist/index174.js +10 -333
  9. package/dist/index174.js.map +1 -1
  10. package/dist/index175.js +310 -137
  11. package/dist/index175.js.map +1 -1
  12. package/dist/index176.js +148 -174
  13. package/dist/index176.js.map +1 -1
  14. package/dist/index177.js +186 -78
  15. package/dist/index177.js.map +1 -1
  16. package/dist/index178.js +74 -124
  17. package/dist/index178.js.map +1 -1
  18. package/dist/index179.js +133 -1
  19. package/dist/index179.js.map +1 -0
  20. package/dist/index180.js +2 -201
  21. package/dist/index181.js +201 -0
  22. package/dist/{index180.js.map → index181.js.map} +1 -1
  23. package/dist/index183.js +130 -166
  24. package/dist/index183.js.map +1 -1
  25. package/dist/index184.js +195 -983
  26. package/dist/index184.js.map +1 -1
  27. package/dist/index185.js +1069 -369
  28. package/dist/index185.js.map +1 -1
  29. package/dist/index186.js +395 -197
  30. package/dist/index186.js.map +1 -1
  31. package/dist/index187.js +198 -243
  32. package/dist/index187.js.map +1 -1
  33. package/dist/index188.js +263 -3
  34. package/dist/index188.js.map +1 -1
  35. package/dist/index189.js +3 -209
  36. package/dist/index189.js.map +1 -1
  37. package/dist/index190.js +190 -777
  38. package/dist/index190.js.map +1 -1
  39. package/dist/index191.js +771 -252
  40. package/dist/index191.js.map +1 -1
  41. package/dist/index192.js +250 -65
  42. package/dist/index192.js.map +1 -1
  43. package/dist/index193.js +72 -523
  44. package/dist/index193.js.map +1 -1
  45. package/dist/index194.js +537 -144
  46. package/dist/index194.js.map +1 -1
  47. package/dist/index195.js +139 -720
  48. package/dist/index195.js.map +1 -1
  49. package/dist/index196.js +707 -167
  50. package/dist/index196.js.map +1 -1
  51. package/dist/index197.js +175 -151
  52. package/dist/index197.js.map +1 -1
  53. package/dist/index198.js +152 -487
  54. package/dist/index198.js.map +1 -1
  55. package/dist/index199.js +472 -225
  56. package/dist/index199.js.map +1 -1
  57. package/dist/index200.js +236 -260
  58. package/dist/index200.js.map +1 -1
  59. package/dist/index201.js +265 -215
  60. package/dist/index201.js.map +1 -1
  61. package/dist/index202.js +207 -307
  62. package/dist/index202.js.map +1 -1
  63. package/dist/index203.js +302 -135
  64. package/dist/index203.js.map +1 -1
  65. package/dist/index204.js +140 -271
  66. package/dist/index204.js.map +1 -1
  67. package/dist/index205.js +263 -253
  68. package/dist/index205.js.map +1 -1
  69. package/dist/index206.js +244 -137
  70. package/dist/index206.js.map +1 -1
  71. package/dist/index207.js +100 -238
  72. package/dist/index207.js.map +1 -1
  73. package/dist/index208.js +278 -74
  74. package/dist/index208.js.map +1 -1
  75. package/dist/index209.js +56 -97
  76. package/dist/index209.js.map +1 -1
  77. package/dist/index210.js +142 -47
  78. package/dist/index210.js.map +1 -1
  79. package/dist/index211.js +38 -84
  80. package/dist/index211.js.map +1 -1
  81. package/dist/index212.js +72 -252
  82. package/dist/index212.js.map +1 -1
  83. package/dist/index213.js +274 -26
  84. package/dist/index213.js.map +1 -1
  85. package/dist/index214.js +29 -94
  86. package/dist/index214.js.map +1 -1
  87. package/dist/index215.js +98 -25
  88. package/dist/index215.js.map +1 -1
  89. package/dist/index216.js +20 -565
  90. package/dist/index216.js.map +1 -1
  91. package/dist/index217.js +564 -17
  92. package/dist/index217.js.map +1 -1
  93. package/dist/index218.js +20 -23
  94. package/dist/index218.js.map +1 -1
  95. package/dist/index219.js +20 -95
  96. package/dist/index219.js.map +1 -1
  97. package/dist/index220.js +92 -88
  98. package/dist/index220.js.map +1 -1
  99. package/dist/index221.js +97 -29
  100. package/dist/index221.js.map +1 -1
  101. package/dist/index222.js +24 -470
  102. package/dist/index222.js.map +1 -1
  103. package/dist/index223.js +446 -196
  104. package/dist/index223.js.map +1 -1
  105. package/dist/index224.js +199 -729
  106. package/dist/index224.js.map +1 -1
  107. package/dist/index225.js +750 -61
  108. package/dist/index225.js.map +1 -1
  109. package/dist/index226.js +58 -181
  110. package/dist/index226.js.map +1 -1
  111. package/dist/index227.js +175 -259
  112. package/dist/index227.js.map +1 -1
  113. package/dist/index228.js +246 -172
  114. package/dist/index228.js.map +1 -1
  115. package/dist/index229.js +195 -32
  116. package/dist/index229.js.map +1 -1
  117. package/dist/index230.js +12 -40
  118. package/dist/index230.js.map +1 -1
  119. package/dist/index231.js +23 -26
  120. package/dist/index231.js.map +1 -1
  121. package/dist/index232.js +45 -22
  122. package/dist/index232.js.map +1 -1
  123. package/dist/index233.js +27 -48
  124. package/dist/index233.js.map +1 -1
  125. package/dist/index234.js +52 -26
  126. package/dist/index234.js.map +1 -1
  127. package/dist/index235.js +40 -225
  128. package/dist/index235.js.map +1 -1
  129. package/dist/index236.js +217 -39
  130. package/dist/index236.js.map +1 -1
  131. package/dist/index237.js +50 -0
  132. package/dist/index237.js.map +1 -0
  133. package/dist/styles.css +1 -1
  134. package/dist/wc/AIToolCall.js +218 -0
  135. package/dist/wc/AIToolCall.js.map +1 -0
  136. package/dist/wc/hf-ai-tool-call.js +34 -219
  137. package/dist/wc/hf-ai-tool-call.js.map +1 -1
  138. package/dist/wc/hf-ai-tool-run.js +673 -576
  139. package/dist/wc/hf-ai-tool-run.js.map +1 -1
  140. package/dist/wc/workflow-step-renderer.js +94 -86
  141. package/dist/wc/workflow-step-renderer.js.map +1 -1
  142. package/dist/wc-react/AIToolCall.js +218 -0
  143. package/dist/wc-react/AIToolCall.js.map +1 -0
  144. package/dist/wc-react/hf-ai-tool-call.js +32 -217
  145. package/dist/wc-react/hf-ai-tool-call.js.map +1 -1
  146. package/dist/wc-react/hf-ai-tool-run.js +698 -601
  147. package/dist/wc-react/hf-ai-tool-run.js.map +1 -1
  148. package/dist/wc-react/workflow-step-renderer.js +76 -68
  149. package/dist/wc-react/workflow-step-renderer.js.map +1 -1
  150. package/package.json +1 -1
  151. package/skills/humain-ui/SKILL.md +1 -1
  152. package/skills/humain-ui-wc/SKILL.md +1 -1
  153. package/skills/humain-ui-wc.skill +0 -0
  154. package/skills/humain-ui.skill +0 -0
  155. package/dist/index182.js +0 -143
  156. package/dist/index182.js.map +0 -1
  157. package/dist/wc/wrench.js +0 -10
  158. package/dist/wc/wrench.js.map +0 -1
  159. package/dist/wc-react/wrench.js +0 -10
  160. package/dist/wc-react/wrench.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hf-ai-tool-run.js","names":[],"sources":["../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/lucide-react@1.25.0+0f58469d5b3bd39f/node_modules/lucide-react/dist/esm/icons/circle-pause.mjs","../../src/components/organisms/ai/AIToolRun/validation.ts","../../src/components/organisms/ai/AIToolRun/AIToolRun.tsx","../../src/wc/hf-ai-tool-run.ts"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"10\", x2: \"10\", y1: \"15\", y2: \"9\", key: \"c1nkhi\" }],\n [\"line\", { x1: \"14\", x2: \"14\", y1: \"15\", y2: \"9\", key: \"h65svq\" }]\n];\nconst CirclePause = createLucideIcon(\"circle-pause\", __iconNode);\n\nexport { __iconNode, CirclePause as default };\n//# sourceMappingURL=circle-pause.mjs.map\n","import { assertNever } from '@/lib/utils';\nimport type { SourceData } from '../AISource';\n\nexport type AIToolRunStatus =\n | 'ready'\n | 'running'\n | 'paused'\n | 'completed'\n | 'error';\n\nexport interface AIToolRunProgress {\n value: number;\n label?: string;\n meta?: string;\n}\n\nexport interface AIToolRunSource extends SourceData {\n id: string;\n}\n\ninterface AIToolRunToolCallSummaryBase {\n toolCallId: string;\n toolName: string;\n}\n\nexport type AIToolRunToolCallSummary =\n | (AIToolRunToolCallSummaryBase & {\n status: 'pending';\n error?: never;\n })\n | (AIToolRunToolCallSummaryBase & {\n status: 'running';\n error?: never;\n })\n | (AIToolRunToolCallSummaryBase & {\n status: 'success';\n error?: never;\n })\n | (AIToolRunToolCallSummaryBase & {\n status: 'error';\n error: string;\n });\n\ntype AIToolRunSummaryAt<S extends AIToolRunToolCallSummary['status']> = Extract<\n AIToolRunToolCallSummary,\n { status: S }\n>;\n\ninterface AIToolRunStepBase<S extends AIToolRunToolCallSummary['status']> {\n toolCall: AIToolRunSummaryAt<S>;\n title?: string;\n description?: string;\n}\n\nexport type AIToolRunStep =\n | (AIToolRunStepBase<'pending'> & {\n progress?: never;\n sourceIds?: never;\n currentSourceId?: never;\n durationMs?: never;\n })\n | (AIToolRunStepBase<'running'> & {\n progress?: AIToolRunProgress;\n sourceIds?: readonly string[];\n currentSourceId?: string;\n durationMs?: never;\n })\n | (AIToolRunStepBase<'success'> & {\n durationMs?: number;\n sourceIds?: readonly string[];\n progress?: never;\n currentSourceId?: never;\n })\n | (AIToolRunStepBase<'error'> & {\n sourceIds?: readonly string[];\n progress?: never;\n currentSourceId?: never;\n durationMs?: never;\n });\n\nexport type AIToolRunActionKind =\n | 'start'\n | 'pause'\n | 'resume'\n | 'retry'\n | 'dismiss'\n | 'custom';\n\ninterface AIToolRunActionBase {\n id: string;\n disabled?: boolean;\n loading?: boolean;\n}\n\nexport type AIToolRunAction =\n | (AIToolRunActionBase & {\n kind: Exclude<AIToolRunActionKind, 'custom'>;\n label?: string;\n })\n | (AIToolRunActionBase & {\n kind: 'custom';\n label: string;\n });\n\ninterface AIToolRunSnapshotBase {\n runId: string;\n header: {\n title: string;\n description?: string;\n metadata?: readonly { label: string; value: string }[];\n };\n steps: readonly AIToolRunStep[];\n sources?: readonly AIToolRunSource[];\n actions?: readonly AIToolRunAction[];\n}\n\nexport type AIToolRunSnapshot =\n | (AIToolRunSnapshotBase & {\n status: 'ready' | 'completed';\n progress?: never;\n activeStepId?: never;\n error?: never;\n })\n | (AIToolRunSnapshotBase & {\n status: 'running' | 'paused';\n progress?: AIToolRunProgress;\n activeStepId?: string;\n error?: never;\n })\n | (AIToolRunSnapshotBase & {\n status: 'error';\n progress?: AIToolRunProgress;\n activeStepId?: never;\n error: { message: string };\n });\n\nexport interface AIToolRunActionEvent {\n runId: string;\n actionId: string;\n kind: AIToolRunActionKind;\n}\n\ntype ValidationIssue = {\n path: string;\n message: string;\n};\n\nexport type AIToolRunValidationResult =\n | { valid: true; value: AIToolRunSnapshot }\n | { valid: false; issues: readonly ValidationIssue[] };\n\nconst ROOT_KEYS = new Set([\n 'runId',\n 'status',\n 'header',\n 'steps',\n 'sources',\n 'actions',\n 'progress',\n 'activeStepId',\n 'error',\n]);\nconst HEADER_KEYS = new Set(['title', 'description', 'metadata']);\nconst METADATA_KEYS = new Set(['label', 'value']);\nconst PROGRESS_KEYS = new Set(['value', 'label', 'meta']);\nconst ROOT_ERROR_KEYS = new Set(['message']);\nconst SOURCE_KEYS = new Set([\n 'id',\n 'url',\n 'title',\n 'description',\n 'favicon',\n 'siteName',\n]);\nconst ACTION_KEYS = new Set(['id', 'kind', 'label', 'disabled', 'loading']);\nconst STEP_KEYS = new Set([\n 'toolCall',\n 'title',\n 'description',\n 'progress',\n 'sourceIds',\n 'currentSourceId',\n 'durationMs',\n]);\nconst TOOL_CALL_KEYS = new Set(['toolCallId', 'toolName', 'status', 'error']);\n\nconst TOOL_STATUSES = {\n error: true,\n pending: true,\n running: true,\n success: true,\n} as const satisfies Record<AIToolRunToolCallSummary['status'], true>;\n\nconst RUN_STATUSES = {\n completed: true,\n error: true,\n paused: true,\n ready: true,\n running: true,\n} as const satisfies Record<AIToolRunStatus, true>;\n\nconst ACTION_KINDS = {\n custom: true,\n dismiss: true,\n pause: true,\n resume: true,\n retry: true,\n start: true,\n} as const satisfies Record<AIToolRunActionKind, true>;\n\nconst ACTIONS_BY_STATUS = {\n ready: ['start', 'dismiss', 'custom'],\n running: ['pause', 'dismiss', 'custom'],\n paused: ['resume', 'dismiss', 'custom'],\n completed: ['dismiss', 'custom'],\n error: ['retry', 'dismiss', 'custom'],\n} as const satisfies Record<AIToolRunStatus, readonly AIToolRunActionKind[]>;\n\nconst STEP_KEYS_BY_STATUS = {\n pending: new Set(['toolCall', 'title', 'description']),\n running: new Set([\n 'toolCall',\n 'title',\n 'description',\n 'progress',\n 'sourceIds',\n 'currentSourceId',\n ]),\n success: new Set([\n 'toolCall',\n 'title',\n 'description',\n 'durationMs',\n 'sourceIds',\n ]),\n error: new Set(['toolCall', 'title', 'description', 'sourceIds']),\n} as const satisfies Record<\n AIToolRunToolCallSummary['status'],\n ReadonlySet<string>\n>;\n\nconst TOOL_CALL_KEYS_BY_STATUS = {\n pending: new Set(['toolCallId', 'toolName', 'status']),\n running: new Set(['toolCallId', 'toolName', 'status']),\n success: new Set(['toolCallId', 'toolName', 'status']),\n error: new Set(['toolCallId', 'toolName', 'status', 'error']),\n} as const satisfies Record<\n AIToolRunToolCallSummary['status'],\n ReadonlySet<string>\n>;\n\nconst MAX_JSON_DEPTH = 100;\nconst MAX_JSON_NODES = 10_000;\nconst MAX_VALIDATION_ISSUES = 100;\nconst INSPECTION_FAILURE_MESSAGE = 'Value could not be inspected safely';\nconst INVALID_FIELD = Symbol('invalid-shape-field');\n\ntype InvalidField = typeof INVALID_FIELD;\n\ntype ContainerKind = 'array' | 'record' | 'other' | 'uninspectable';\n\ntype JsonWalkFrame =\n | { kind: 'visit'; value: unknown; path: string; depth: number }\n | { kind: 'leave'; value: object };\n\ninterface ArrayItem {\n index: number;\n value: unknown;\n}\n\ninterface ValidatedToolCall {\n toolCallId: string;\n status: AIToolRunToolCallSummary['status'];\n}\n\ninterface ValidatedStep {\n toolCall: ValidatedToolCall;\n sourceIds?: readonly string[];\n currentSourceId?: string;\n}\n\ninterface ValidatedAction {\n id: string;\n kind: AIToolRunActionKind;\n}\n\nfunction addIssue(\n issues: ValidationIssue[],\n path: string,\n message: string,\n): void {\n if (issues.length < MAX_VALIDATION_ISSUES) {\n issues.push({ path, message });\n }\n}\n\nfunction hasIssuesSince(\n issues: readonly ValidationIssue[],\n issueCount: number,\n): boolean {\n return issues.length > issueCount || issues.length >= MAX_VALIDATION_ISSUES;\n}\n\nfunction addInspectionIssue(issues: ValidationIssue[], path: string): void {\n addIssue(issues, path, INSPECTION_FAILURE_MESSAGE);\n}\n\nfunction getContainerKind(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): ContainerKind {\n if (value === null || typeof value !== 'object') return 'other';\n\n try {\n const prototype = Reflect.getPrototypeOf(value);\n if (Array.isArray(value)) {\n return prototype === Array.prototype ? 'array' : 'other';\n }\n return prototype === Object.prototype || prototype === null\n ? 'record'\n : 'other';\n } catch {\n addInspectionIssue(issues, path);\n return 'uninspectable';\n }\n}\n\nfunction getOwnKeys(\n value: object,\n path: string,\n issues: ValidationIssue[],\n): readonly PropertyKey[] | undefined {\n try {\n return Reflect.ownKeys(value);\n } catch {\n addInspectionIssue(issues, path);\n return undefined;\n }\n}\n\nfunction getOwnPropertyDescriptor(\n value: object,\n key: PropertyKey,\n path: string,\n issues: ValidationIssue[],\n): PropertyDescriptor | null | undefined {\n try {\n return Reflect.getOwnPropertyDescriptor(value, key);\n } catch {\n addInspectionIssue(issues, path);\n return null;\n }\n}\n\nfunction readEnumerableDataDescriptor(\n _value: object,\n _key: PropertyKey,\n descriptor: PropertyDescriptor,\n path: string,\n issues: ValidationIssue[],\n): { valid: true; value: unknown } | { valid: false } {\n if (!descriptor.enumerable || !Object.hasOwn(descriptor, 'value')) {\n addIssue(issues, path, 'Value must be an own enumerable data property');\n return { valid: false };\n }\n\n return { valid: true, value: descriptor.value };\n}\n\ninterface ReflectedPropertyDescriptor {\n descriptor: PropertyDescriptor;\n isOwn: boolean;\n}\n\ninterface DescriptorPropertyInspection extends ReflectedPropertyDescriptor {\n kind: 'descriptor';\n}\n\ntype PropertyInspection =\n | DescriptorPropertyInspection\n | { kind: 'absent' }\n | { kind: 'synthetic' };\n\nfunction findReflectedPropertyDescriptor(\n value: object,\n key: PropertyKey,\n path: string,\n issues: ValidationIssue[],\n): ReflectedPropertyDescriptor | null | undefined {\n const visited = new Set<object>();\n let current: object | null = value;\n let isOwn = true;\n\n while (current !== null) {\n if (visited.has(current)) {\n addInspectionIssue(issues, path);\n return null;\n }\n visited.add(current);\n\n const descriptor = getOwnPropertyDescriptor(current, key, path, issues);\n if (descriptor === null) return null;\n if (descriptor !== undefined) {\n if (isOwn) {\n const ownKeys = getOwnKeys(value, path, issues);\n if (!ownKeys) return null;\n if (!ownKeys.includes(key)) {\n addIssue(\n issues,\n path,\n 'Own property must be exposed by Reflect.ownKeys',\n );\n return null;\n }\n }\n return { descriptor, isOwn };\n }\n\n try {\n current = Reflect.getPrototypeOf(current);\n } catch {\n addInspectionIssue(issues, path);\n return null;\n }\n isOwn = false;\n }\n\n return undefined;\n}\n\nfunction inspectProperty(\n value: object,\n key: PropertyKey,\n path: string,\n issues: ValidationIssue[],\n): PropertyInspection | undefined {\n const descriptor = findReflectedPropertyDescriptor(value, key, path, issues);\n if (descriptor === null) return undefined;\n if (descriptor !== undefined) return { kind: 'descriptor', ...descriptor };\n\n let present: boolean;\n try {\n present = Reflect.has(value, key);\n } catch {\n addInspectionIssue(issues, path);\n return undefined;\n }\n if (present) return { kind: 'synthetic' };\n\n let visibleValue: unknown;\n try {\n visibleValue = Reflect.get(value, key);\n } catch {\n addInspectionIssue(issues, path);\n return undefined;\n }\n\n return present || visibleValue !== undefined\n ? { kind: 'synthetic' }\n : { kind: 'absent' };\n}\n\nfunction readShapeField(\n value: Record<string, unknown>,\n key: string,\n path: string,\n issues: ValidationIssue[],\n): unknown | InvalidField {\n const inspection = inspectProperty(value, key, path, issues);\n if (!inspection) return INVALID_FIELD;\n\n if (inspection.kind === 'absent') {\n return undefined;\n }\n\n if (inspection.kind === 'synthetic' || !inspection.isOwn) {\n addIssue(issues, path, 'Value must be an own enumerable data property');\n return INVALID_FIELD;\n }\n\n const field = readEnumerableDataDescriptor(\n value,\n key,\n inspection.descriptor,\n path,\n issues,\n );\n return field.valid ? field.value : INVALID_FIELD;\n}\n\nfunction readRequiredField(\n value: Record<string, unknown>,\n key: string,\n path: string,\n issues: ValidationIssue[],\n): unknown | InvalidField {\n return readShapeField(value, key, path, issues);\n}\n\nfunction readOptionalField(\n value: Record<string, unknown>,\n key: string,\n path: string,\n issues: ValidationIssue[],\n): unknown | InvalidField {\n return readShapeField(value, key, path, issues);\n}\n\nfunction isInvalidField(value: unknown): value is InvalidField {\n return value === INVALID_FIELD;\n}\n\nfunction getOwnEnumerableDataKeys(\n value: Record<string, unknown>,\n path: string,\n issues: ValidationIssue[],\n): readonly string[] | undefined {\n const keys = getOwnKeys(value, path, issues);\n if (!keys) return undefined;\n if (keys.length > MAX_JSON_NODES) {\n addIssue(issues, path, 'Value exceeds the maximum JSON node limit');\n return undefined;\n }\n\n const stringKeys: string[] = [];\n for (const key of keys) {\n const keyPath = typeof key === 'string' ? `${path}.${key}` : path;\n const descriptor = getOwnPropertyDescriptor(value, key, keyPath, issues);\n if (descriptor === null) return undefined;\n if (descriptor === undefined) {\n addInspectionIssue(issues, keyPath);\n return undefined;\n }\n if (typeof key !== 'string') {\n addIssue(issues, path, 'Symbol keys are not JSON-safe');\n continue;\n }\n if (\n !readEnumerableDataDescriptor(value, key, descriptor, keyPath, issues)\n .valid\n ) {\n continue;\n }\n stringKeys.push(key);\n }\n\n return stringKeys;\n}\n\nfunction isArrayIndexKey(key: string): number | undefined {\n const index = Number(key);\n if (\n !Number.isInteger(index) ||\n index < 0 ||\n index >= 2 ** 32 - 1 ||\n String(index) !== key\n ) {\n return undefined;\n }\n return index;\n}\n\nfunction readArrayLength(\n _value: readonly unknown[],\n descriptor: PropertyDescriptor,\n path: string,\n issues: ValidationIssue[],\n): number | undefined {\n if (\n descriptor.enumerable ||\n !Object.hasOwn(descriptor, 'value') ||\n typeof descriptor.value !== 'number' ||\n !Number.isInteger(descriptor.value) ||\n descriptor.value < 0 ||\n descriptor.value > 2 ** 32 - 1\n ) {\n addIssue(issues, path, 'Array length must be a valid data property');\n return undefined;\n }\n\n return descriptor.value;\n}\n\nfunction readArrayItems(\n value: readonly unknown[],\n path: string,\n issues: ValidationIssue[],\n): readonly ArrayItem[] | undefined {\n const issueCount = issues.length;\n const keys = getOwnKeys(value, path, issues);\n if (!keys) return undefined;\n if (keys.length > MAX_JSON_NODES + 1) {\n addIssue(issues, path, 'Value exceeds the maximum JSON node limit');\n return undefined;\n }\n\n let length: number | undefined;\n const items = new Map<number, unknown>();\n\n for (const key of keys) {\n const keyPath = typeof key === 'string' ? `${path}.${key}` : path;\n const descriptor = getOwnPropertyDescriptor(value, key, keyPath, issues);\n if (descriptor === null) return undefined;\n if (descriptor === undefined) {\n addInspectionIssue(issues, keyPath);\n return undefined;\n }\n if (typeof key !== 'string') {\n addIssue(issues, path, 'Symbol keys are not JSON-safe');\n continue;\n }\n if (key === 'length') {\n length = readArrayLength(value, descriptor, path, issues);\n continue;\n }\n\n const index = isArrayIndexKey(key);\n if (index === undefined) {\n addIssue(issues, keyPath, 'Arrays must not contain custom properties');\n continue;\n }\n\n const item = readEnumerableDataDescriptor(\n value,\n key,\n descriptor,\n `${path}[${index}]`,\n issues,\n );\n if (item.valid) {\n items.set(index, item.value);\n }\n }\n\n if (length === undefined) {\n if (!hasIssuesSince(issues, issueCount)) {\n addInspectionIssue(issues, path);\n }\n return undefined;\n }\n if (length > MAX_JSON_NODES) {\n addIssue(issues, path, 'Array length exceeds the maximum JSON node limit');\n return undefined;\n }\n\n const orderedItems = [...items.entries()].sort(\n ([left], [right]) => left - right,\n );\n let expectedIndex = 0;\n for (const [index] of orderedItems) {\n if (index !== expectedIndex) {\n addIssue(\n issues,\n `${path}[${expectedIndex}]`,\n 'Array holes are not JSON-safe',\n );\n return undefined;\n }\n expectedIndex += 1;\n }\n if (expectedIndex !== length) {\n addIssue(\n issues,\n `${path}[${expectedIndex}]`,\n 'Array holes are not JSON-safe',\n );\n return undefined;\n }\n if (hasIssuesSince(issues, issueCount)) return undefined;\n\n return orderedItems.map(([index, item]) => ({ index, value: item }));\n}\n\nfunction readObjectChildren(\n value: Record<string, unknown>,\n path: string,\n issues: ValidationIssue[],\n): readonly { path: string; value: unknown }[] | undefined {\n const issueCount = issues.length;\n const keys = getOwnKeys(value, path, issues);\n if (!keys) return undefined;\n if (keys.length > MAX_JSON_NODES) {\n addIssue(issues, path, 'Value exceeds the maximum JSON node limit');\n return undefined;\n }\n\n const children: Array<{ path: string; value: unknown }> = [];\n for (const key of keys) {\n const keyPath = typeof key === 'string' ? `${path}.${key}` : path;\n const descriptor = getOwnPropertyDescriptor(value, key, keyPath, issues);\n if (descriptor === null) return undefined;\n if (descriptor === undefined) {\n addInspectionIssue(issues, keyPath);\n return undefined;\n }\n if (typeof key !== 'string') {\n addIssue(issues, path, 'Symbol keys are not JSON-safe');\n continue;\n }\n\n const child = readEnumerableDataDescriptor(\n value,\n key,\n descriptor,\n keyPath,\n issues,\n );\n if (child.valid) {\n children.push({ path: keyPath, value: child.value });\n }\n }\n\n return hasIssuesSince(issues, issueCount) ? undefined : children;\n}\n\nfunction rejectUnknownKeys(\n value: Record<string, unknown>,\n allowed: ReadonlySet<string>,\n path: string,\n issues: ValidationIssue[],\n): void {\n const keys = getOwnEnumerableDataKeys(value, path, issues);\n if (!keys) return;\n for (const key of keys) {\n if (!allowed.has(key)) {\n addIssue(issues, `${path}.${key}`, `Unknown key \"${key}\"`);\n }\n }\n}\n\nfunction rejectDisallowedKeys(\n value: Record<string, unknown>,\n known: ReadonlySet<string>,\n allowed: ReadonlySet<string>,\n path: string,\n issues: ValidationIssue[],\n): void {\n for (const key of known) {\n if (!allowed.has(key)) {\n const inspection = inspectProperty(value, key, `${path}.${key}`, issues);\n if (!inspection) return;\n if (inspection.kind === 'absent') continue;\n addIssue(\n issues,\n `${path}.${key}`,\n 'Field is not allowed for this status',\n );\n }\n }\n}\n\nfunction rejectPresentKeys(\n value: Record<string, unknown>,\n keys: readonly string[],\n path: string,\n issues: ValidationIssue[],\n): void {\n for (const key of keys) {\n const inspection = inspectProperty(value, key, `${path}.${key}`, issues);\n if (!inspection) return;\n if (inspection.kind === 'absent') continue;\n addIssue(issues, `${path}.${key}`, 'Field is not allowed for this status');\n }\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction hasSafeToJSON(\n value: object,\n path: string,\n issues: ValidationIssue[],\n): boolean {\n const descriptor = findReflectedPropertyDescriptor(\n value,\n 'toJSON',\n path,\n issues,\n );\n if (descriptor === null) return false;\n if (descriptor !== undefined) {\n addIssue(issues, path, 'Value must not define toJSON');\n return false;\n }\n\n return true;\n}\n\nfunction validateJsonSafe(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): void {\n const ancestors = new Set<object>();\n const stack: JsonWalkFrame[] = [{ kind: 'visit', value, path, depth: 0 }];\n let nodeCount = 0;\n\n while (stack.length > 0 && issues.length < MAX_VALIDATION_ISSUES) {\n const frame = stack.pop();\n if (!frame) break;\n if (frame.kind === 'leave') {\n ancestors.delete(frame.value);\n continue;\n }\n\n if (frame.depth > MAX_JSON_DEPTH) {\n addIssue(\n issues,\n frame.path,\n 'Value exceeds the maximum JSON depth limit',\n );\n continue;\n }\n nodeCount += 1;\n if (nodeCount > MAX_JSON_NODES) {\n addIssue(issues, frame.path, 'Value exceeds the maximum JSON node limit');\n break;\n }\n\n const currentValue = frame.value;\n if (\n currentValue === undefined ||\n typeof currentValue === 'function' ||\n typeof currentValue === 'symbol' ||\n typeof currentValue === 'bigint'\n ) {\n addIssue(issues, frame.path, 'Value must be JSON-safe');\n continue;\n }\n if (typeof currentValue === 'number' && !isFiniteNumber(currentValue)) {\n addIssue(issues, frame.path, 'Number must be finite');\n continue;\n }\n if (currentValue === null || typeof currentValue !== 'object') continue;\n if (ancestors.has(currentValue)) {\n addIssue(issues, frame.path, 'Value must not contain cycles');\n continue;\n }\n\n const containerKind = getContainerKind(currentValue, frame.path, issues);\n if (containerKind === 'uninspectable') continue;\n if (containerKind === 'other') {\n addIssue(\n issues,\n frame.path,\n 'Value must contain only plain objects and arrays',\n );\n continue;\n }\n if (!hasSafeToJSON(currentValue, frame.path, issues)) continue;\n\n ancestors.add(currentValue);\n stack.push({ kind: 'leave', value: currentValue });\n if (containerKind === 'array') {\n const children = readArrayItems(\n currentValue as readonly unknown[],\n frame.path,\n issues,\n );\n if (!children) continue;\n for (let index = children.length - 1; index >= 0; index -= 1) {\n const child = children[index];\n stack.push({\n kind: 'visit',\n value: child.value,\n path: `${frame.path}[${child.index}]`,\n depth: frame.depth + 1,\n });\n }\n continue;\n }\n\n const children = readObjectChildren(\n currentValue as Record<string, unknown>,\n frame.path,\n issues,\n );\n if (!children) continue;\n for (let index = children.length - 1; index >= 0; index -= 1) {\n const child = children[index];\n stack.push({\n kind: 'visit',\n value: child.value,\n path: child.path,\n depth: frame.depth + 1,\n });\n }\n }\n}\n\nconst INVALID_JSON_SNAPSHOT = Symbol('invalid-json-snapshot');\n\ntype InvalidJsonSnapshot = typeof INVALID_JSON_SNAPSHOT;\n\nfunction captureJsonSnapshot(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): unknown | InvalidJsonSnapshot {\n const ancestors = new Set<object>();\n const snapshots = new Map<object, object>();\n let nodeCount = 0;\n\n function capture(\n currentValue: unknown,\n currentPath: string,\n depth: number,\n ): unknown | InvalidJsonSnapshot {\n if (issues.length >= MAX_VALIDATION_ISSUES) {\n return INVALID_JSON_SNAPSHOT;\n }\n if (depth > MAX_JSON_DEPTH) {\n addIssue(\n issues,\n currentPath,\n 'Value exceeds the maximum JSON depth limit',\n );\n return INVALID_JSON_SNAPSHOT;\n }\n\n nodeCount += 1;\n if (nodeCount > MAX_JSON_NODES) {\n addIssue(\n issues,\n currentPath,\n 'Value exceeds the maximum JSON node limit',\n );\n return INVALID_JSON_SNAPSHOT;\n }\n\n if (\n currentValue === undefined ||\n typeof currentValue === 'function' ||\n typeof currentValue === 'symbol' ||\n typeof currentValue === 'bigint'\n ) {\n addIssue(issues, currentPath, 'Value must be JSON-safe');\n return INVALID_JSON_SNAPSHOT;\n }\n if (typeof currentValue === 'number' && !isFiniteNumber(currentValue)) {\n addIssue(issues, currentPath, 'Number must be finite');\n return INVALID_JSON_SNAPSHOT;\n }\n if (currentValue === null || typeof currentValue !== 'object') {\n return currentValue;\n }\n if (ancestors.has(currentValue)) {\n addIssue(issues, currentPath, 'Value must not contain cycles');\n return INVALID_JSON_SNAPSHOT;\n }\n\n const containerKind = getContainerKind(currentValue, currentPath, issues);\n if (containerKind === 'uninspectable') return INVALID_JSON_SNAPSHOT;\n if (containerKind === 'other') {\n addIssue(\n issues,\n currentPath,\n 'Value must contain only plain objects and arrays',\n );\n return INVALID_JSON_SNAPSHOT;\n }\n if (!hasSafeToJSON(currentValue, currentPath, issues)) {\n return INVALID_JSON_SNAPSHOT;\n }\n\n const existingSnapshot = snapshots.get(currentValue);\n if (existingSnapshot !== undefined) return existingSnapshot;\n\n ancestors.add(currentValue);\n try {\n if (containerKind === 'array') {\n const items = readArrayItems(\n currentValue as readonly unknown[],\n currentPath,\n issues,\n );\n if (!items) return INVALID_JSON_SNAPSHOT;\n\n const snapshot: unknown[] = new Array(items.length);\n snapshots.set(currentValue, snapshot);\n for (const item of items) {\n const capturedItem = capture(\n item.value,\n `${currentPath}[${item.index}]`,\n depth + 1,\n );\n if (capturedItem === INVALID_JSON_SNAPSHOT) {\n return INVALID_JSON_SNAPSHOT;\n }\n snapshot[item.index] = capturedItem;\n }\n return snapshot;\n }\n\n const children = readObjectChildren(\n currentValue as Record<string, unknown>,\n currentPath,\n issues,\n );\n if (!children) return INVALID_JSON_SNAPSHOT;\n\n const snapshot = Object.create(null) as Record<string, unknown>;\n snapshots.set(currentValue, snapshot);\n for (const child of children) {\n const key = child.path.slice(currentPath.length + 1);\n const capturedChild = capture(child.value, child.path, depth + 1);\n if (capturedChild === INVALID_JSON_SNAPSHOT) {\n return INVALID_JSON_SNAPSHOT;\n }\n Object.defineProperty(snapshot, key, {\n configurable: true,\n enumerable: true,\n value: capturedChild,\n writable: true,\n });\n }\n return snapshot;\n } finally {\n ancestors.delete(currentValue);\n }\n }\n\n return capture(value, path, 0);\n}\n\nfunction requireRecord(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): Record<string, unknown> | undefined {\n if (isInvalidField(value)) return undefined;\n const containerKind = getContainerKind(value, path, issues);\n if (containerKind !== 'record') {\n if (containerKind !== 'uninspectable') {\n addIssue(issues, path, 'Value must be a plain object');\n }\n return undefined;\n }\n return value as Record<string, unknown>;\n}\n\nfunction requireString(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): string | undefined {\n if (isInvalidField(value)) return undefined;\n if (typeof value !== 'string') {\n addIssue(issues, path, 'Value must be a string');\n return undefined;\n }\n return value;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): string | undefined {\n const stringValue = requireString(value, path, issues);\n if (stringValue !== undefined && stringValue.length === 0) {\n addIssue(issues, path, 'Value must not be empty');\n return undefined;\n }\n return stringValue;\n}\n\nfunction requireNonWhitespaceString(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): string | undefined {\n const stringValue = requireString(value, path, issues);\n if (stringValue !== undefined && stringValue.trim().length === 0) {\n addIssue(issues, path, 'Value must be non-whitespace');\n return undefined;\n }\n return stringValue;\n}\n\nfunction requireBoolean(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): boolean | undefined {\n if (isInvalidField(value)) return undefined;\n if (typeof value !== 'boolean') {\n addIssue(issues, path, 'Value must be a boolean');\n return undefined;\n }\n return value;\n}\n\nfunction requireNumber(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): number | undefined {\n if (isInvalidField(value)) return undefined;\n if (typeof value !== 'number') {\n addIssue(issues, path, 'Value must be a number');\n return undefined;\n }\n return value;\n}\n\nfunction requireArray(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): readonly unknown[] | undefined {\n if (isInvalidField(value)) return undefined;\n try {\n if (Array.isArray(value)) return value;\n } catch {\n addInspectionIssue(issues, path);\n return undefined;\n }\n\n addIssue(issues, path, 'Value must be an array');\n return undefined;\n}\n\nfunction requireRunStatus(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): AIToolRunStatus | undefined {\n if (isInvalidField(value)) return undefined;\n if (typeof value !== 'string' || !Object.hasOwn(RUN_STATUSES, value)) {\n addIssue(issues, path, 'Value must be a supported run status');\n return undefined;\n }\n return value as AIToolRunStatus;\n}\n\nfunction requireToolStatus(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): AIToolRunToolCallSummary['status'] | undefined {\n if (isInvalidField(value)) return undefined;\n if (typeof value !== 'string' || !Object.hasOwn(TOOL_STATUSES, value)) {\n addIssue(issues, path, 'Value is not allowed as a tool status');\n return undefined;\n }\n return value as AIToolRunToolCallSummary['status'];\n}\n\nfunction requireActionKind(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): AIToolRunActionKind | undefined {\n if (isInvalidField(value)) return undefined;\n if (typeof value !== 'string' || !Object.hasOwn(ACTION_KINDS, value)) {\n addIssue(issues, path, 'Value must be an allowed action kind');\n return undefined;\n }\n return value as AIToolRunActionKind;\n}\n\nfunction validateProgress(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): void {\n const progress = requireRecord(value, path, issues);\n if (!progress) return;\n\n rejectUnknownKeys(progress, PROGRESS_KEYS, path, issues);\n const progressValue = requireNumber(\n readRequiredField(progress, 'value', `${path}.value`, issues),\n `${path}.value`,\n issues,\n );\n if (\n progressValue !== undefined &&\n (progressValue < 0 || progressValue > 100)\n ) {\n addIssue(issues, `${path}.value`, 'Value must be between 0 and 100');\n }\n const label = readOptionalField(progress, 'label', `${path}.label`, issues);\n if (label !== undefined && !isInvalidField(label)) {\n requireNonWhitespaceString(label, `${path}.label`, issues);\n }\n const meta = readOptionalField(progress, 'meta', `${path}.meta`, issues);\n if (meta !== undefined && !isInvalidField(meta)) {\n requireString(meta, `${path}.meta`, issues);\n }\n}\n\nfunction validateStringArray(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): readonly string[] | undefined {\n const issueCount = issues.length;\n const values = requireArray(value, path, issues);\n if (!values) return undefined;\n const items = readArrayItems(values, path, issues);\n if (!items) return undefined;\n\n const strings: string[] = [];\n for (const item of items) {\n const stringValue = requireString(\n item.value,\n `${path}[${item.index}]`,\n issues,\n );\n if (stringValue !== undefined) {\n strings.push(stringValue);\n }\n }\n return hasIssuesSince(issues, issueCount) ? undefined : strings;\n}\n\nfunction validateToolCall(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): ValidatedToolCall | undefined {\n const issueCount = issues.length;\n const toolCall = requireRecord(value, path, issues);\n if (!toolCall) return undefined;\n\n rejectUnknownKeys(toolCall, TOOL_CALL_KEYS, path, issues);\n const toolCallId = requireNonEmptyString(\n readRequiredField(toolCall, 'toolCallId', `${path}.toolCallId`, issues),\n `${path}.toolCallId`,\n issues,\n );\n requireNonWhitespaceString(\n readRequiredField(toolCall, 'toolName', `${path}.toolName`, issues),\n `${path}.toolName`,\n issues,\n );\n const status = requireToolStatus(\n readRequiredField(toolCall, 'status', `${path}.status`, issues),\n `${path}.status`,\n issues,\n );\n if (!status) return undefined;\n\n rejectDisallowedKeys(\n toolCall,\n TOOL_CALL_KEYS,\n TOOL_CALL_KEYS_BY_STATUS[status],\n path,\n issues,\n );\n if (status === 'error') {\n const error = readRequiredField(toolCall, 'error', `${path}.error`, issues);\n if (error === undefined) {\n addIssue(\n issues,\n `${path}.error`,\n 'Value is required for error tool calls',\n );\n } else if (!isInvalidField(error)) {\n requireNonWhitespaceString(error, `${path}.error`, issues);\n }\n }\n\n if (hasIssuesSince(issues, issueCount) || !toolCallId) return undefined;\n return { toolCallId, status };\n}\n\nfunction validateStep(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): ValidatedStep | undefined {\n const issueCount = issues.length;\n const step = requireRecord(value, path, issues);\n if (!step) return undefined;\n\n rejectUnknownKeys(step, STEP_KEYS, path, issues);\n const title = readOptionalField(step, 'title', `${path}.title`, issues);\n if (title !== undefined && !isInvalidField(title)) {\n requireString(title, `${path}.title`, issues);\n }\n const description = readOptionalField(\n step,\n 'description',\n `${path}.description`,\n issues,\n );\n if (description !== undefined && !isInvalidField(description)) {\n requireString(description, `${path}.description`, issues);\n }\n\n const toolCall = validateToolCall(\n readRequiredField(step, 'toolCall', `${path}.toolCall`, issues),\n `${path}.toolCall`,\n issues,\n );\n if (!toolCall) return undefined;\n const { status } = toolCall;\n\n rejectDisallowedKeys(\n step,\n STEP_KEYS,\n STEP_KEYS_BY_STATUS[status],\n path,\n issues,\n );\n const progress = readOptionalField(\n step,\n 'progress',\n `${path}.progress`,\n issues,\n );\n if (progress !== undefined && !isInvalidField(progress)) {\n validateProgress(progress, `${path}.progress`, issues);\n }\n const sourceIdsField = readOptionalField(\n step,\n 'sourceIds',\n `${path}.sourceIds`,\n issues,\n );\n const sourceIds =\n sourceIdsField === undefined || isInvalidField(sourceIdsField)\n ? undefined\n : validateStringArray(sourceIdsField, `${path}.sourceIds`, issues);\n\n const currentSourceIdField = readOptionalField(\n step,\n 'currentSourceId',\n `${path}.currentSourceId`,\n issues,\n );\n const currentSourceId =\n currentSourceIdField === undefined || isInvalidField(currentSourceIdField)\n ? undefined\n : requireString(currentSourceIdField, `${path}.currentSourceId`, issues);\n\n const durationMsField = readOptionalField(\n step,\n 'durationMs',\n `${path}.durationMs`,\n issues,\n );\n if (durationMsField !== undefined && !isInvalidField(durationMsField)) {\n const durationMs = requireNumber(\n durationMsField,\n `${path}.durationMs`,\n issues,\n );\n if (durationMs !== undefined && durationMs < 0) {\n addIssue(issues, `${path}.durationMs`, 'Value must be non-negative');\n }\n }\n\n if (hasIssuesSince(issues, issueCount)) return undefined;\n return {\n toolCall,\n ...(sourceIds === undefined ? {} : { sourceIds }),\n ...(currentSourceId === undefined ? {} : { currentSourceId }),\n };\n}\n\nfunction validateSource(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): string | undefined {\n const issueCount = issues.length;\n const source = requireRecord(value, path, issues);\n if (!source) return undefined;\n\n rejectUnknownKeys(source, SOURCE_KEYS, path, issues);\n const id = requireNonEmptyString(\n readRequiredField(source, 'id', `${path}.id`, issues),\n `${path}.id`,\n issues,\n );\n requireNonWhitespaceString(\n readRequiredField(source, 'url', `${path}.url`, issues),\n `${path}.url`,\n issues,\n );\n for (const key of ['title', 'description', 'favicon', 'siteName'] as const) {\n const field = readOptionalField(source, key, `${path}.${key}`, issues);\n if (field !== undefined && !isInvalidField(field)) {\n requireString(field, `${path}.${key}`, issues);\n }\n }\n\n return hasIssuesSince(issues, issueCount) || !id ? undefined : id;\n}\n\nfunction validateSources(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): Set<string> {\n const sourceIds = new Set<string>();\n const sources = requireArray(value, path, issues);\n if (!sources) return sourceIds;\n\n const sourceItems = readArrayItems(sources, path, issues);\n if (!sourceItems) return sourceIds;\n\n for (const item of sourceItems) {\n const sourcePath = `${path}[${item.index}]`;\n const sourceId = validateSource(item.value, sourcePath, issues);\n if (!sourceId) continue;\n if (sourceIds.has(sourceId)) {\n addIssue(issues, `${sourcePath}.id`, 'duplicate source ID');\n continue;\n }\n sourceIds.add(sourceId);\n }\n return sourceIds;\n}\n\nfunction validateAction(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): ValidatedAction | undefined {\n const issueCount = issues.length;\n const action = requireRecord(value, path, issues);\n if (!action) return undefined;\n\n rejectUnknownKeys(action, ACTION_KEYS, path, issues);\n const id = requireNonEmptyString(\n readRequiredField(action, 'id', `${path}.id`, issues),\n `${path}.id`,\n issues,\n );\n const kind = requireActionKind(\n readRequiredField(action, 'kind', `${path}.kind`, issues),\n `${path}.kind`,\n issues,\n );\n if (!kind) return undefined;\n\n const label =\n kind === 'custom'\n ? readRequiredField(action, 'label', `${path}.label`, issues)\n : readOptionalField(action, 'label', `${path}.label`, issues);\n if (kind === 'custom' && label === undefined) {\n addIssue(issues, `${path}.label`, 'Value is required for custom actions');\n } else if (label !== undefined && !isInvalidField(label)) {\n requireNonWhitespaceString(label, `${path}.label`, issues);\n }\n const disabled = readOptionalField(\n action,\n 'disabled',\n `${path}.disabled`,\n issues,\n );\n if (disabled !== undefined && !isInvalidField(disabled)) {\n requireBoolean(disabled, `${path}.disabled`, issues);\n }\n const loading = readOptionalField(\n action,\n 'loading',\n `${path}.loading`,\n issues,\n );\n if (loading !== undefined && !isInvalidField(loading)) {\n requireBoolean(loading, `${path}.loading`, issues);\n }\n\n return hasIssuesSince(issues, issueCount) || !id ? undefined : { id, kind };\n}\n\nfunction validateActions(\n value: unknown,\n path: string,\n status: AIToolRunStatus | undefined,\n issues: ValidationIssue[],\n): void {\n const actions = requireArray(value, path, issues);\n if (!actions) return;\n\n const actionItems = readArrayItems(actions, path, issues);\n if (!actionItems) return;\n\n const actionIds = new Set<string>();\n for (const item of actionItems) {\n const actionPath = `${path}[${item.index}]`;\n const action = validateAction(item.value, actionPath, issues);\n if (!action) continue;\n if (actionIds.has(action.id)) {\n addIssue(issues, `${actionPath}.id`, 'duplicate action ID');\n } else {\n actionIds.add(action.id);\n }\n if (\n status &&\n !(ACTIONS_BY_STATUS[status] as readonly AIToolRunActionKind[]).includes(\n action.kind,\n )\n ) {\n addIssue(\n issues,\n `${actionPath}.kind`,\n `Action kind \"${action.kind}\" is not allowed for ${status} runs`,\n );\n }\n }\n}\n\nfunction validateLifecycle(\n status: AIToolRunStatus,\n steps: readonly ValidatedStep[],\n issues: ValidationIssue[],\n): void {\n const statuses = steps.map((step) => step.toolCall.status);\n switch (status) {\n case 'ready':\n if (statuses.some((stepStatus) => stepStatus !== 'pending')) {\n addIssue(issues, '$.steps', 'Ready runs allow pending steps only');\n }\n return;\n case 'running':\n case 'paused':\n if (\n statuses.some(\n (stepStatus) =>\n stepStatus !== 'pending' &&\n stepStatus !== 'running' &&\n stepStatus !== 'success',\n ) ||\n !statuses.includes('running')\n ) {\n addIssue(\n issues,\n '$.steps',\n `${status} runs require at least one running step and allow pending, running, or success only`,\n );\n }\n return;\n case 'completed':\n if (\n steps.length === 0 ||\n statuses.some((stepStatus) => stepStatus !== 'success')\n ) {\n addIssue(\n issues,\n '$.steps',\n 'Completed runs require a non-empty all-success step list',\n );\n }\n return;\n case 'error':\n if (\n statuses.some(\n (stepStatus) =>\n stepStatus !== 'pending' &&\n stepStatus !== 'success' &&\n stepStatus !== 'error',\n )\n ) {\n addIssue(\n issues,\n '$.steps',\n 'Error runs allow pending, success, or error steps only',\n );\n }\n return;\n default:\n assertNever(status);\n }\n}\n\nfunction validateSourceReferences(\n steps: readonly ValidatedStep[],\n sourceIds: ReadonlySet<string>,\n issues: ValidationIssue[],\n): void {\n for (const [stepIndex, step] of steps.entries()) {\n const sourceIdPath = `$.steps[${stepIndex}].sourceIds`;\n const stepSourceIds = step.sourceIds;\n if (stepSourceIds) {\n for (const [sourceIndex, sourceId] of stepSourceIds.entries()) {\n if (!sourceIds.has(sourceId)) {\n addIssue(\n issues,\n `${sourceIdPath}[${sourceIndex}]`,\n 'Unknown source reference',\n );\n }\n }\n }\n\n const currentSourceId = step.currentSourceId;\n if (currentSourceId === undefined) continue;\n const currentSourcePath = `$.steps[${stepIndex}].currentSourceId`;\n if (!sourceIds.has(currentSourceId)) {\n addIssue(issues, currentSourcePath, 'Unknown current source reference');\n } else if (!stepSourceIds?.includes(currentSourceId)) {\n addIssue(\n issues,\n currentSourcePath,\n 'Current source ID must be included in sourceIds',\n );\n }\n }\n}\n\nfunction validateActiveStepReference(\n status: AIToolRunStatus | undefined,\n activeStepId: string | undefined,\n steps: readonly ValidatedStep[],\n issues: ValidationIssue[],\n): void {\n if (\n (status !== 'running' && status !== 'paused') ||\n activeStepId === undefined\n ) {\n return;\n }\n\n if (\n !steps.some(\n (step) =>\n step.toolCall.status === 'running' &&\n step.toolCall.toolCallId === activeStepId,\n )\n ) {\n addIssue(\n issues,\n '$.activeStepId',\n 'Active step ID must reference a running step',\n );\n }\n}\n\nfunction validateMetadata(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): void {\n const metadata = requireArray(value, path, issues);\n if (!metadata) return;\n\n const metadataItems = readArrayItems(metadata, path, issues);\n if (!metadataItems) return;\n\n for (const item of metadataItems) {\n const itemPath = `${path}[${item.index}]`;\n const record = requireRecord(item.value, itemPath, issues);\n if (!record) continue;\n rejectUnknownKeys(record, METADATA_KEYS, itemPath, issues);\n requireNonWhitespaceString(\n readRequiredField(record, 'label', `${itemPath}.label`, issues),\n `${itemPath}.label`,\n issues,\n );\n requireString(\n readRequiredField(record, 'value', `${itemPath}.value`, issues),\n `${itemPath}.value`,\n issues,\n );\n }\n}\n\nfunction validateHeader(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): void {\n const header = requireRecord(value, path, issues);\n if (!header) return;\n\n rejectUnknownKeys(header, HEADER_KEYS, path, issues);\n requireNonWhitespaceString(\n readRequiredField(header, 'title', `${path}.title`, issues),\n `${path}.title`,\n issues,\n );\n const description = readOptionalField(\n header,\n 'description',\n `${path}.description`,\n issues,\n );\n if (description !== undefined && !isInvalidField(description)) {\n requireString(description, `${path}.description`, issues);\n }\n const metadata = readOptionalField(\n header,\n 'metadata',\n `${path}.metadata`,\n issues,\n );\n if (metadata !== undefined && !isInvalidField(metadata)) {\n validateMetadata(metadata, `${path}.metadata`, issues);\n }\n}\n\nfunction validateStateFields(\n status: AIToolRunStatus,\n snapshot: Record<string, unknown>,\n issues: ValidationIssue[],\n): string | undefined {\n switch (status) {\n case 'ready':\n case 'completed':\n rejectPresentKeys(\n snapshot,\n ['progress', 'activeStepId', 'error'],\n '$',\n issues,\n );\n return undefined;\n case 'running':\n case 'paused': {\n rejectPresentKeys(snapshot, ['error'], '$', issues);\n const progress = readOptionalField(\n snapshot,\n 'progress',\n '$.progress',\n issues,\n );\n if (progress !== undefined && !isInvalidField(progress)) {\n validateProgress(progress, '$.progress', issues);\n }\n const activeStepId = readOptionalField(\n snapshot,\n 'activeStepId',\n '$.activeStepId',\n issues,\n );\n return activeStepId === undefined || isInvalidField(activeStepId)\n ? undefined\n : requireString(activeStepId, '$.activeStepId', issues);\n }\n case 'error': {\n rejectPresentKeys(snapshot, ['activeStepId'], '$', issues);\n const progress = readOptionalField(\n snapshot,\n 'progress',\n '$.progress',\n issues,\n );\n if (progress !== undefined && !isInvalidField(progress)) {\n validateProgress(progress, '$.progress', issues);\n }\n const error = requireRecord(\n readRequiredField(snapshot, 'error', '$.error', issues),\n '$.error',\n issues,\n );\n if (!error) return undefined;\n rejectUnknownKeys(error, ROOT_ERROR_KEYS, '$.error', issues);\n requireNonWhitespaceString(\n readRequiredField(error, 'message', '$.error.message', issues),\n '$.error.message',\n issues,\n );\n return undefined;\n }\n default:\n assertNever(status);\n }\n}\n\nexport function validateAIToolRunSnapshot(\n value: unknown,\n): AIToolRunValidationResult {\n const issues: ValidationIssue[] = [];\n\n try {\n const capturedValue = captureJsonSnapshot(value, '$', issues);\n if (issues.length > 0) {\n return { valid: false, issues };\n }\n if (capturedValue === INVALID_JSON_SNAPSHOT) {\n return {\n valid: false,\n issues: [{ path: '$', message: INSPECTION_FAILURE_MESSAGE }],\n };\n }\n\n validateJsonSafe(capturedValue, '$', issues);\n if (issues.length > 0) {\n return { valid: false, issues };\n }\n\n const snapshot = requireRecord(capturedValue, '$', issues);\n if (!snapshot) {\n return { valid: false, issues };\n }\n\n rejectUnknownKeys(snapshot, ROOT_KEYS, '$', issues);\n const status = requireRunStatus(\n readRequiredField(snapshot, 'status', '$.status', issues),\n '$.status',\n issues,\n );\n const activeStepId = status\n ? validateStateFields(status, snapshot, issues)\n : undefined;\n\n requireNonEmptyString(\n readRequiredField(snapshot, 'runId', '$.runId', issues),\n '$.runId',\n issues,\n );\n validateHeader(\n readRequiredField(snapshot, 'header', '$.header', issues),\n '$.header',\n issues,\n );\n\n const steps = requireArray(\n readRequiredField(snapshot, 'steps', '$.steps', issues),\n '$.steps',\n issues,\n );\n const validatedSteps: ValidatedStep[] = [];\n let stepsAreValid = false;\n if (steps) {\n const stepItems = readArrayItems(steps, '$.steps', issues);\n if (stepItems) {\n const toolCallIds = new Set<string>();\n for (const item of stepItems) {\n const validatedStep = validateStep(\n item.value,\n `$.steps[${item.index}]`,\n issues,\n );\n if (!validatedStep) continue;\n if (toolCallIds.has(validatedStep.toolCall.toolCallId)) {\n addIssue(\n issues,\n `$.steps[${item.index}].toolCall.toolCallId`,\n 'duplicate tool-call ID',\n );\n } else {\n toolCallIds.add(validatedStep.toolCall.toolCallId);\n }\n validatedSteps.push(validatedStep);\n }\n stepsAreValid = validatedSteps.length === stepItems.length;\n if (status && stepsAreValid) {\n validateLifecycle(status, validatedSteps, issues);\n }\n }\n }\n\n const sources = readOptionalField(snapshot, 'sources', '$.sources', issues);\n const sourceIds =\n sources === undefined || isInvalidField(sources)\n ? new Set<string>()\n : validateSources(sources, '$.sources', issues);\n if (stepsAreValid) {\n validateSourceReferences(validatedSteps, sourceIds, issues);\n validateActiveStepReference(status, activeStepId, validatedSteps, issues);\n }\n\n const actions = readOptionalField(snapshot, 'actions', '$.actions', issues);\n if (actions !== undefined && !isInvalidField(actions)) {\n validateActions(actions, '$.actions', status, issues);\n }\n\n if (issues.length > 0) {\n return { valid: false, issues };\n }\n return { valid: true, value: capturedValue as AIToolRunSnapshot };\n } catch {\n return {\n valid: false,\n issues: [{ path: '$', message: INSPECTION_FAILURE_MESSAGE }],\n };\n }\n}\n","'use client';\n\nimport {\n AlertCircle,\n Check,\n ChevronDown,\n ChevronRight,\n CirclePause,\n Clock,\n Wrench,\n} from 'lucide-react';\nimport * as React from 'react';\nimport { Button } from '@/components/atoms/buttons/Button';\nimport { Progress } from '@/components/atoms/display/Progress';\nimport { Card } from '@/components/atoms/layout/Card';\nimport {\n WorkflowStepRenderer,\n type WorkflowStepStatus,\n type WorkflowStepViewModel,\n} from '@/components/organisms/ai/_shared/workflow-step-renderer';\nimport { AISource } from '@/components/organisms/ai/AISource';\nimport { assertNever, cn } from '@/lib/utils';\nimport {\n type AIToolRunAction,\n type AIToolRunActionEvent,\n type AIToolRunActionKind,\n type AIToolRunProgress,\n type AIToolRunSnapshot,\n type AIToolRunSource,\n type AIToolRunStep,\n validateAIToolRunSnapshot,\n} from './validation';\n\nexport interface AIToolRunProps\n extends Omit<\n React.ComponentPropsWithoutRef<'section'>,\n 'children' | 'dangerouslySetInnerHTML'\n > {\n run: AIToolRunSnapshot;\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n expandedStepIds?: readonly string[];\n defaultExpandedStepIds?: readonly string[];\n onExpandedStepIdsChange?: (ids: readonly string[]) => void;\n onAction?: (event: AIToolRunActionEvent) => void;\n}\n\ninterface AIToolRunRuntimeBoundaryInput\n extends Omit<\n AIToolRunProps,\n | 'run'\n | 'headingLevel'\n | 'open'\n | 'defaultOpen'\n | 'expandedStepIds'\n | 'defaultExpandedStepIds'\n > {\n run: unknown;\n dangerouslySetInnerHTML?: unknown;\n headingLevel?: unknown;\n open?: unknown;\n defaultOpen?: unknown;\n expandedStepIds?: unknown;\n defaultExpandedStepIds?: unknown;\n}\n\ninterface AIToolRunViewOptions {\n headingLevel?: AIToolRunProps['headingLevel'];\n open?: boolean;\n defaultOpen?: boolean;\n expandedStepIds?: readonly string[];\n defaultExpandedStepIds?: readonly string[];\n}\n\ntype AIToolRunViewValidationResult =\n | { valid: true; value: AIToolRunViewOptions }\n | { valid: false; issues: readonly string[] };\n\nconst MAX_RUNTIME_EXPANDED_STEP_IDS = 10_000;\nconst INVALID_RUNTIME_STRING_ARRAY = Symbol('invalid-runtime-string-array');\nconst ARRAY_PROTOTYPE_MEMBER_KEYS = Reflect.ownKeys(Array.prototype).filter(\n (key) => key !== 'length',\n);\n\nfunction cloneRuntimeStringArray(\n value: unknown,\n): string[] | typeof INVALID_RUNTIME_STRING_ARRAY {\n try {\n if (!Array.isArray(value)) {\n return INVALID_RUNTIME_STRING_ARRAY;\n }\n\n const lengthDescriptor = Reflect.getOwnPropertyDescriptor(value, 'length');\n if (\n lengthDescriptor === undefined ||\n lengthDescriptor.enumerable ||\n !Object.hasOwn(lengthDescriptor, 'value') ||\n typeof lengthDescriptor.value !== 'number' ||\n !Number.isInteger(lengthDescriptor.value) ||\n lengthDescriptor.value < 0 ||\n lengthDescriptor.value > MAX_RUNTIME_EXPANDED_STEP_IDS ||\n !Object.is(Reflect.get(value, 'length'), lengthDescriptor.value)\n ) {\n return INVALID_RUNTIME_STRING_ARRAY;\n }\n\n for (const key of ARRAY_PROTOTYPE_MEMBER_KEYS) {\n if (Reflect.getOwnPropertyDescriptor(value, key) !== undefined) {\n return INVALID_RUNTIME_STRING_ARRAY;\n }\n }\n\n const copy: string[] = [];\n for (let index = 0; index < lengthDescriptor.value; index += 1) {\n const key = String(index);\n const descriptor = Reflect.getOwnPropertyDescriptor(value, key);\n if (\n descriptor === undefined ||\n descriptor.enumerable !== true ||\n !Object.hasOwn(descriptor, 'value') ||\n typeof descriptor.value !== 'string' ||\n !Object.is(Reflect.get(value, key), descriptor.value)\n ) {\n return INVALID_RUNTIME_STRING_ARRAY;\n }\n copy.push(descriptor.value);\n }\n return copy;\n } catch {\n return INVALID_RUNTIME_STRING_ARRAY;\n }\n}\n\nfunction validateRuntimeViewProps({\n headingLevel,\n open,\n defaultOpen,\n expandedStepIds,\n defaultExpandedStepIds,\n}: Pick<\n AIToolRunRuntimeBoundaryInput,\n | 'headingLevel'\n | 'open'\n | 'defaultOpen'\n | 'expandedStepIds'\n | 'defaultExpandedStepIds'\n>): AIToolRunViewValidationResult {\n const issues: string[] = [];\n let validatedExpandedStepIds: string[] | undefined;\n let validatedDefaultExpandedStepIds: string[] | undefined;\n\n if (\n headingLevel !== undefined &&\n (typeof headingLevel !== 'number' ||\n !Number.isInteger(headingLevel) ||\n headingLevel < 2 ||\n headingLevel > 6)\n ) {\n issues.push('headingLevel must be an integer from 2 through 6');\n }\n if (open !== undefined && typeof open !== 'boolean') {\n issues.push('open must be a boolean');\n }\n if (defaultOpen !== undefined && typeof defaultOpen !== 'boolean') {\n issues.push('defaultOpen must be a boolean');\n }\n if (expandedStepIds !== undefined) {\n const cloned = cloneRuntimeStringArray(expandedStepIds);\n if (cloned === INVALID_RUNTIME_STRING_ARRAY) {\n issues.push('expandedStepIds must be an array of strings');\n } else {\n validatedExpandedStepIds = cloned;\n }\n }\n if (defaultExpandedStepIds !== undefined) {\n const cloned = cloneRuntimeStringArray(defaultExpandedStepIds);\n if (cloned === INVALID_RUNTIME_STRING_ARRAY) {\n issues.push('defaultExpandedStepIds must be an array of strings');\n } else {\n validatedDefaultExpandedStepIds = cloned;\n }\n }\n\n if (issues.length > 0) return { valid: false, issues };\n\n return {\n valid: true,\n value: {\n ...(headingLevel === undefined\n ? {}\n : { headingLevel: headingLevel as AIToolRunProps['headingLevel'] }),\n ...(open === undefined ? {} : { open: open as boolean }),\n ...(defaultOpen === undefined\n ? {}\n : { defaultOpen: defaultOpen as boolean }),\n ...(expandedStepIds === undefined\n ? {}\n : { expandedStepIds: validatedExpandedStepIds }),\n ...(defaultExpandedStepIds === undefined\n ? {}\n : {\n defaultExpandedStepIds: validatedDefaultExpandedStepIds,\n }),\n },\n };\n}\n\nconst InvalidAIToolRun = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<'section'>\n>(({ className, ...sectionProps }, ref) => (\n <section\n {...sectionProps}\n ref={ref}\n data-slot=\"ai-tool-run\"\n role=\"alert\"\n aria-label=\"Tool run\"\n className={cn('w-full min-w-0', className)}\n >\n Unable to display tool run.\n </section>\n));\n\nInvalidAIToolRun.displayName = 'InvalidAIToolRun';\n\nconst RUN_STATUS_LABELS = {\n ready: 'Ready',\n running: 'Running',\n paused: 'Paused',\n completed: 'Completed',\n error: 'Failed',\n} as const satisfies Record<AIToolRunSnapshot['status'], string>;\n\nconst STANDARD_ACTION_LABELS = {\n start: 'Start',\n pause: 'Pause',\n resume: 'Resume',\n retry: 'Retry',\n dismiss: 'Dismiss',\n} as const satisfies Record<Exclude<AIToolRunActionKind, 'custom'>, string>;\n\nconst PAUSED_PROGRESS_CLASS_NAME =\n '[&_[data-slot=progress-indicator]]:!transition-none [&_[data-slot=progress-indicator]]:!animate-none';\n\nfunction RunStatusIcon({ status }: { status: AIToolRunSnapshot['status'] }) {\n switch (status) {\n case 'ready':\n return (\n <Wrench aria-hidden=\"true\" className=\"size-4 text-muted-foreground\" />\n );\n case 'running':\n return (\n <Clock\n aria-hidden=\"true\"\n className=\"size-4 text-primary animate-pulse motion-reduce:animate-none\"\n />\n );\n case 'paused':\n return <CirclePause aria-hidden=\"true\" className=\"size-4 text-warning\" />;\n case 'completed':\n return <Check aria-hidden=\"true\" className=\"size-4 text-success\" />;\n case 'error':\n return (\n <AlertCircle aria-hidden=\"true\" className=\"size-4 text-destructive\" />\n );\n default:\n return assertNever(status);\n }\n}\n\nRunStatusIcon.displayName = 'RunStatusIcon';\n\nfunction getActionLabel(action: AIToolRunAction): string {\n if (action.kind === 'custom') return action.label;\n return action.label ?? STANDARD_ACTION_LABELS[action.kind];\n}\n\nfunction getPoliteAnnouncement(run: AIToolRunSnapshot): string {\n if (run.status === 'error') return '';\n\n const activeStep =\n run.activeStepId === undefined\n ? undefined\n : run.steps.find((step) => step.toolCall.toolCallId === run.activeStepId);\n const statusLabel = RUN_STATUS_LABELS[run.status];\n\n return activeStep\n ? `${statusLabel}. Current step: ${activeStep.title ?? activeStep.toolCall.toolName}.`\n : `${statusLabel}.`;\n}\n\nfunction getWorkflowStepStatus(\n runStatus: AIToolRunSnapshot['status'],\n step: AIToolRunStep,\n): WorkflowStepStatus {\n const toolStatus = step.toolCall.status;\n switch (toolStatus) {\n case 'pending':\n return 'pending';\n case 'running':\n return runStatus === 'paused' ? 'suspended' : 'running';\n case 'success':\n return 'completed';\n case 'error':\n return 'error';\n default:\n return assertNever(toolStatus);\n }\n}\n\nfunction AIToolRunStepContent({\n progress,\n sources,\n title,\n paused,\n}: {\n progress?: AIToolRunProgress;\n sources: readonly AIToolRunSource[];\n title: string;\n paused: boolean;\n}) {\n return (\n <div className=\"grid min-w-0 gap-3\">\n {progress && (\n <Progress\n value={progress.value}\n label={progress.label}\n subLabel={progress.meta}\n className={paused ? PAUSED_PROGRESS_CLASS_NAME : undefined}\n />\n )}\n {sources.length > 0 && (\n <ul aria-label={`Sources for ${title}`} className=\"grid min-w-0 gap-2\">\n {sources.map((item, index) => (\n <li\n key={`${item.id}-${index}`}\n className=\"flex min-w-0 items-center gap-2\"\n >\n <AISource\n source={item}\n variant=\"minimal\"\n showTooltip={false}\n className=\"min-w-0 max-w-none\"\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nAIToolRunStepContent.displayName = 'AIToolRunStepContent';\n\nfunction toWorkflowStep(\n runStatus: AIToolRunSnapshot['status'],\n step: AIToolRunStep,\n sourcesById: ReadonlyMap<string, AIToolRunSource>,\n): WorkflowStepViewModel {\n const title = step.title ?? step.toolCall.toolName;\n const stepSources = (step.sourceIds ?? []).flatMap((sourceId) => {\n const source = sourcesById.get(sourceId);\n return source === undefined ? [] : [source];\n });\n const hasContent = step.progress !== undefined || stepSources.length > 0;\n\n return {\n id: step.toolCall.toolCallId,\n title,\n description: step.description,\n status: getWorkflowStepStatus(runStatus, step),\n content: hasContent ? (\n <AIToolRunStepContent\n progress={step.progress}\n sources={stepSources}\n title={title}\n paused={runStatus === 'paused'}\n />\n ) : undefined,\n durationMs: step.durationMs,\n error: step.toolCall.status === 'error' ? step.toolCall.error : undefined,\n };\n}\n\nfunction useAIToolRunOpenState({\n open,\n defaultOpen,\n onOpenChange,\n}: Pick<AIToolRunProps, 'open' | 'defaultOpen' | 'onOpenChange'>) {\n const isControlled = open !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(\n defaultOpen ?? true,\n );\n const lastControlledOpenRef = React.useRef(open ?? uncontrolledOpen);\n const wasControlledRef = React.useRef(isControlled);\n\n React.useLayoutEffect(() => {\n if (open !== undefined) {\n lastControlledOpenRef.current = open;\n }\n }, [open]);\n\n React.useLayoutEffect(() => {\n const wasControlled = wasControlledRef.current;\n wasControlledRef.current = isControlled;\n\n if (isControlled || !wasControlled) {\n return;\n }\n\n setUncontrolledOpen((currentOpen) =>\n currentOpen === lastControlledOpenRef.current\n ? currentOpen\n : lastControlledOpenRef.current,\n );\n }, [isControlled]);\n\n const setOpen = React.useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n return [isControlled ? open : uncontrolledOpen, setOpen] as const;\n}\n\nconst AIToolRunPresentation = React.forwardRef<HTMLElement, AIToolRunProps>(\n (\n {\n run,\n headingLevel = 2,\n open,\n defaultOpen,\n onOpenChange,\n expandedStepIds,\n defaultExpandedStepIds,\n onExpandedStepIdsChange,\n onAction,\n className,\n ...sectionProps\n },\n ref,\n ) => {\n const headingId = React.useId();\n const detailsId = React.useId();\n const Heading = `h${headingLevel}` as 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n const [isOpen, setIsOpen] = useAIToolRunOpenState({\n open,\n defaultOpen,\n onOpenChange,\n });\n const sourcesById = React.useMemo(\n () => new Map((run.sources ?? []).map((source) => [source.id, source])),\n [run.sources],\n );\n const workflowSteps = React.useMemo(\n () =>\n run.steps.map((step) => toWorkflowStep(run.status, step, sourcesById)),\n [run.status, run.steps, sourcesById],\n );\n const rootError = run.status === 'error' ? run.error.message : undefined;\n const politeAnnouncement = getPoliteAnnouncement(run);\n const { 'aria-busy': _ariaBusy, ...nativeSectionProps } = sectionProps;\n\n return (\n <section\n {...nativeSectionProps}\n ref={ref}\n data-slot=\"ai-tool-run\"\n aria-labelledby={headingId}\n className={cn('relative w-full min-w-0', className)}\n >\n <Card\n aria-busy={run.status === 'running' ? true : undefined}\n className=\"rounded-2xl\"\n >\n <Card.Header>\n <div className=\"grid min-w-0 gap-1\">\n <div className=\"flex min-w-0 items-center gap-2 text-xs font-medium text-secondary-foreground\">\n <RunStatusIcon status={run.status} />\n <span>Status: {RUN_STATUS_LABELS[run.status]}</span>\n </div>\n <Heading\n id={headingId}\n className=\"min-w-0 truncate text-base font-semibold text-foreground\"\n >\n {run.header.title}\n </Heading>\n {run.header.description && (\n <p className=\"line-clamp-2 text-sm text-secondary-foreground\">\n {run.header.description}\n </p>\n )}\n {run.header.metadata && run.header.metadata.length > 0 && (\n <dl className=\"flex flex-wrap gap-x-3 gap-y-1 text-xs text-secondary-foreground\">\n {run.header.metadata.map((item, index) => (\n <div\n key={`${item.label}-${index}`}\n className=\"flex min-w-0 items-center gap-1\"\n >\n <dt className=\"text-muted-foreground\">{item.label}:</dt>\n <dd className=\"min-w-0 truncate\">{item.value}</dd>\n </div>\n ))}\n </dl>\n )}\n {!isOpen && run.progress && (\n <Progress\n value={run.progress.value}\n label={run.progress.label}\n subLabel={run.progress.meta}\n className={\n run.status === 'paused'\n ? PAUSED_PROGRESS_CLASS_NAME\n : undefined\n }\n />\n )}\n </div>\n <Card.Action>\n <Button\n appearance=\"ghost\"\n variant=\"secondary\"\n size=\"icon-xl\"\n iconOnly\n aria-label={isOpen ? 'Collapse tool run' : 'Expand tool run'}\n aria-expanded={isOpen}\n aria-controls={detailsId}\n onClick={() => setIsOpen(!isOpen)}\n >\n {isOpen ? (\n <ChevronDown aria-hidden=\"true\" />\n ) : (\n <ChevronRight aria-hidden=\"true\" className=\"rtl:rotate-180\" />\n )}\n </Button>\n </Card.Action>\n </Card.Header>\n <Card.Content\n id={detailsId}\n hidden={!isOpen}\n className=\"grid min-w-0 gap-4\"\n >\n {run.progress && (\n <Progress\n value={run.progress.value}\n label={run.progress.label}\n subLabel={run.progress.meta}\n className={\n run.status === 'paused'\n ? PAUSED_PROGRESS_CLASS_NAME\n : undefined\n }\n />\n )}\n {rootError && (\n <div className=\"flex min-w-0 items-start gap-2 rounded-lg border border-destructive/50 bg-destructive/10 p-3\">\n <AlertCircle\n aria-hidden=\"true\"\n className=\"mt-0.5 size-4 shrink-0 text-destructive\"\n />\n <p className=\"min-w-0 text-sm text-destructive\">{rootError}</p>\n </div>\n )}\n <WorkflowStepRenderer\n key={run.runId}\n appearance=\"timeline\"\n steps={workflowSteps}\n activeStepId={run.activeStepId}\n expandedStepIds={expandedStepIds}\n defaultExpandedStepIds={defaultExpandedStepIds}\n onExpandedStepIdsChange={onExpandedStepIdsChange}\n renderItems={isOpen}\n />\n </Card.Content>\n {run.actions && run.actions.length > 0 && (\n <Card.Footer className=\"flex flex-wrap gap-2\">\n {run.actions.map((action) => (\n <Button\n key={action.id}\n appearance=\"outline\"\n variant=\"secondary\"\n disabled={action.disabled}\n loading={action.loading}\n aria-label={getActionLabel(action)}\n className=\"min-w-0 w-full max-w-full min-[480px]:w-auto h-auto min-h-9 whitespace-normal break-words [overflow-wrap:anywhere] [&>span]:min-w-0\"\n onClick={() => {\n if (action.disabled || action.loading) return;\n onAction?.({\n runId: run.runId,\n actionId: action.id,\n kind: action.kind,\n });\n }}\n >\n {getActionLabel(action)}\n </Button>\n ))}\n </Card.Footer>\n )}\n </Card>\n {rootError ? (\n <div\n role=\"alert\"\n aria-live=\"assertive\"\n className=\"sr-only left-0 top-0\"\n >\n {rootError}\n </div>\n ) : (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"sr-only left-0 top-0\"\n >\n {politeAnnouncement}\n </div>\n )}\n </section>\n );\n },\n);\n\nAIToolRunPresentation.displayName = 'AIToolRunPresentation';\n\nexport const AIToolRunRuntimeBoundary = React.forwardRef<\n HTMLElement,\n AIToolRunRuntimeBoundaryInput\n>((props, ref) => {\n const {\n run,\n headingLevel,\n open,\n defaultOpen,\n expandedStepIds,\n defaultExpandedStepIds,\n dangerouslySetInnerHTML: unsafeHtml,\n onOpenChange,\n onExpandedStepIdsChange,\n onAction,\n ...sectionProps\n } = props;\n void unsafeHtml;\n const snapshotResult = validateAIToolRunSnapshot(run);\n const viewResult = validateRuntimeViewProps({\n headingLevel,\n open,\n defaultOpen,\n expandedStepIds,\n defaultExpandedStepIds,\n });\n\n if (!snapshotResult.valid || !viewResult.valid) {\n return <InvalidAIToolRun {...sectionProps} ref={ref} />;\n }\n\n return (\n <AIToolRunPresentation\n {...sectionProps}\n {...viewResult.value}\n onOpenChange={onOpenChange}\n onExpandedStepIdsChange={onExpandedStepIdsChange}\n onAction={onAction}\n ref={ref}\n run={snapshotResult.value}\n />\n );\n});\n\n/**\n * Displays one validated AI tool run with lifecycle, progress, sources,\n * disclosure, and action intents.\n *\n * @llms Validated AI tool-run timeline with lifecycle, progress, sources, disclosure, and actions\n */\nexport const AIToolRun = React.forwardRef<HTMLElement, AIToolRunProps>(\n (props, ref) => <AIToolRunRuntimeBoundary {...props} ref={ref} />,\n);\n\nAIToolRunRuntimeBoundary.displayName = 'AIToolRunRuntimeBoundary';\nAIToolRun.displayName = 'AIToolRun';\n","/**\n * Web Component wrapper for AIToolRun (hand-crafted transport adapter).\n * Custom element: <hf-ai-tool-run>\n *\n * @generated by scripts/generate-wc-components.ts\n * DO NOT EDIT THE GENERATED src/wc COPY\n */\nimport React from 'react';\nimport { AIToolRunRuntimeBoundary } from '../components/organisms/ai/AIToolRun/AIToolRun';\nimport type { AIToolRunActionEvent } from '../components/organisms/ai/AIToolRun/validation';\nimport {\n BaseCompoundWC,\n camelToKebab,\n dispatchEvent,\n installPropAccessors,\n type PropDefs,\n registerWC,\n} from './_shared';\n\nconst PROP_DEFS: PropDefs = {\n run: 'json',\n headingLevel: 'number',\n open: 'boolean',\n defaultOpen: 'boolean',\n expandedStepIds: 'json',\n defaultExpandedStepIds: 'json',\n};\n\nconst INVALID_TRANSPORT_VALUE = Object.freeze({\n invalidAIToolRunTransportValue: true,\n});\n\nclass AIToolRunWC extends BaseCompoundWC {\n get propDefs() {\n return PROP_DEFS;\n }\n\n static get observedAttributes() {\n return Object.keys(PROP_DEFS).map(camelToKebab);\n }\n\n private _hasTransportValue(name: keyof typeof PROP_DEFS): boolean {\n return (\n Object.hasOwn(this._props, name) || this.hasAttribute(camelToKebab(name))\n );\n }\n\n private _readTransportValue(\n props: Record<string, unknown>,\n name: keyof typeof PROP_DEFS,\n fallback?: unknown,\n ): unknown {\n if (!this._hasTransportValue(name)) return fallback;\n return props[name] === undefined ? INVALID_TRANSPORT_VALUE : props[name];\n }\n\n protected _renderReact(): React.ReactElement {\n const props = this._readAllProps();\n const hasOpen = this._hasTransportValue('open');\n const hasExpandedStepIds = this._hasTransportValue('expandedStepIds');\n\n return React.createElement(AIToolRunRuntimeBoundary, {\n run: this._readTransportValue(props, 'run'),\n headingLevel: this._readTransportValue(props, 'headingLevel', 2),\n defaultOpen: this._readTransportValue(props, 'defaultOpen', true),\n defaultExpandedStepIds: this._readTransportValue(\n props,\n 'defaultExpandedStepIds',\n [],\n ),\n ...(hasOpen ? { open: this._readTransportValue(props, 'open') } : {}),\n ...(hasExpandedStepIds\n ? {\n expandedStepIds: this._readTransportValue(props, 'expandedStepIds'),\n }\n : {}),\n onAction: (event: AIToolRunActionEvent) =>\n dispatchEvent(this, 'action', event),\n onOpenChange: (open: boolean) => dispatchEvent(this, 'open-change', open),\n onExpandedStepIdsChange: (ids: readonly string[]) =>\n dispatchEvent(this, 'expanded-step-ids-change', [...ids]),\n });\n }\n}\n\ninstallPropAccessors(AIToolRunWC, PROP_DEFS);\nregisterWC('hf-ai-tool-run', AIToolRunWC);\n\nexport { AIToolRunWC };\nexport default AIToolRunWC;\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"hf-ai-tool-run.js","names":[],"sources":["../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/lucide-react@1.25.0+0f58469d5b3bd39f/node_modules/lucide-react/dist/esm/icons/circle-pause.mjs","../../src/components/organisms/ai/AIToolRun/validation.ts","../../src/components/organisms/ai/AIToolRun/AIToolRun.tsx","../../src/wc/hf-ai-tool-run.ts"],"sourcesContent":["/**\n * @license lucide-react v1.25.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"10\", x2: \"10\", y1: \"15\", y2: \"9\", key: \"c1nkhi\" }],\n [\"line\", { x1: \"14\", x2: \"14\", y1: \"15\", y2: \"9\", key: \"h65svq\" }]\n];\nconst CirclePause = createLucideIcon(\"circle-pause\", __iconNode);\n\nexport { __iconNode, CirclePause as default };\n//# sourceMappingURL=circle-pause.mjs.map\n","import { assertNever } from '@/lib/utils';\nimport type { SourceData } from '../AISource';\nimport type { ToolCallPart } from '../AIToolCall';\n\nexport type AIToolRunStatus =\n | 'ready'\n | 'running'\n | 'paused'\n | 'completed'\n | 'error';\n\nexport interface AIToolRunProgress {\n value: number;\n label?: string;\n meta?: string;\n}\n\nexport type AIToolRunSource =\n | (SourceData & {\n id: string;\n kind?: 'link';\n })\n | {\n id: string;\n kind: 'reference';\n title: string;\n description?: string;\n url?: never;\n favicon?: never;\n siteName?: never;\n };\n\nexport interface AIToolRunContext {\n id: string;\n label: string;\n}\n\nexport interface AIToolRunTechnicalDetails {\n label?: string;\n toolCalls: readonly ToolCallPart[];\n}\n\ninterface AIToolRunToolCallSummaryBase {\n toolCallId: string;\n toolName: string;\n}\n\nexport type AIToolRunToolCallSummary =\n | (AIToolRunToolCallSummaryBase & {\n status: 'pending';\n error?: never;\n })\n | (AIToolRunToolCallSummaryBase & {\n status: 'running';\n error?: never;\n })\n | (AIToolRunToolCallSummaryBase & {\n status: 'success';\n error?: never;\n })\n | (AIToolRunToolCallSummaryBase & {\n status: 'error';\n error: string;\n });\n\ntype AIToolRunSummaryAt<S extends AIToolRunToolCallSummary['status']> = Extract<\n AIToolRunToolCallSummary,\n { status: S }\n>;\n\ninterface AIToolRunStepBase<S extends AIToolRunToolCallSummary['status']> {\n toolCall: AIToolRunSummaryAt<S>;\n title?: string;\n description?: string;\n context?: AIToolRunContext;\n technicalDetails?: AIToolRunTechnicalDetails;\n}\n\nexport type AIToolRunStep =\n | (AIToolRunStepBase<'pending'> & {\n progress?: never;\n sourceIds?: never;\n currentSourceId?: never;\n durationMs?: never;\n })\n | (AIToolRunStepBase<'running'> & {\n progress?: AIToolRunProgress;\n sourceIds?: readonly string[];\n currentSourceId?: string;\n durationMs?: number;\n })\n | (AIToolRunStepBase<'success'> & {\n durationMs?: number;\n sourceIds?: readonly string[];\n progress?: never;\n currentSourceId?: never;\n })\n | (AIToolRunStepBase<'error'> & {\n sourceIds?: readonly string[];\n progress?: never;\n currentSourceId?: never;\n durationMs?: number;\n });\n\nexport type AIToolRunActionKind =\n | 'start'\n | 'pause'\n | 'resume'\n | 'retry'\n | 'dismiss'\n | 'custom';\n\ninterface AIToolRunActionBase {\n id: string;\n disabled?: boolean;\n loading?: boolean;\n}\n\nexport type AIToolRunAction =\n | (AIToolRunActionBase & {\n kind: Exclude<AIToolRunActionKind, 'custom'>;\n label?: string;\n })\n | (AIToolRunActionBase & {\n kind: 'custom';\n label: string;\n });\n\ninterface AIToolRunSnapshotBase {\n runId: string;\n durationMs?: number;\n header: {\n title: string;\n description?: string;\n metadata?: readonly { label: string; value: string }[];\n };\n steps: readonly AIToolRunStep[];\n sources?: readonly AIToolRunSource[];\n actions?: readonly AIToolRunAction[];\n}\n\nexport type AIToolRunSnapshot =\n | (AIToolRunSnapshotBase & {\n status: 'ready' | 'completed';\n progress?: never;\n activeStepId?: never;\n error?: never;\n })\n | (AIToolRunSnapshotBase & {\n status: 'running' | 'paused';\n progress?: AIToolRunProgress;\n activeStepId?: string;\n error?: never;\n })\n | (AIToolRunSnapshotBase & {\n status: 'error';\n progress?: AIToolRunProgress;\n activeStepId?: never;\n error: { message: string };\n });\n\nexport interface AIToolRunActionEvent {\n runId: string;\n actionId: string;\n kind: AIToolRunActionKind;\n}\n\ntype ValidationIssue = {\n path: string;\n message: string;\n};\n\nexport type AIToolRunValidationResult =\n | { valid: true; value: AIToolRunSnapshot }\n | { valid: false; issues: readonly ValidationIssue[] };\n\nconst ROOT_KEYS = new Set([\n 'runId',\n 'status',\n 'header',\n 'steps',\n 'sources',\n 'actions',\n 'progress',\n 'activeStepId',\n 'error',\n 'durationMs',\n]);\nconst HEADER_KEYS = new Set(['title', 'description', 'metadata']);\nconst METADATA_KEYS = new Set(['label', 'value']);\nconst PROGRESS_KEYS = new Set(['value', 'label', 'meta']);\nconst ROOT_ERROR_KEYS = new Set(['message']);\nconst SOURCE_KEYS = new Set([\n 'id',\n 'url',\n 'title',\n 'description',\n 'favicon',\n 'siteName',\n 'kind',\n]);\nconst ACTION_KEYS = new Set(['id', 'kind', 'label', 'disabled', 'loading']);\nconst STEP_KEYS = new Set([\n 'toolCall',\n 'title',\n 'description',\n 'progress',\n 'sourceIds',\n 'currentSourceId',\n 'durationMs',\n 'context',\n 'technicalDetails',\n]);\nconst TOOL_CALL_KEYS = new Set(['toolCallId', 'toolName', 'status', 'error']);\nconst CONTEXT_KEYS = new Set(['id', 'label']);\nconst TECHNICAL_DETAILS_KEYS = new Set(['label', 'toolCalls']);\nconst TECHNICAL_TOOL_CALL_KEYS = new Set([\n 'toolCallId',\n 'toolName',\n 'args',\n 'result',\n 'status',\n 'error',\n]);\nconst REFERENCE_SOURCE_KEYS = new Set(['id', 'kind', 'title', 'description']);\n\nconst TOOL_STATUSES = {\n error: true,\n pending: true,\n running: true,\n success: true,\n} as const satisfies Record<AIToolRunToolCallSummary['status'], true>;\n\nconst RUN_STATUSES = {\n completed: true,\n error: true,\n paused: true,\n ready: true,\n running: true,\n} as const satisfies Record<AIToolRunStatus, true>;\n\nconst ACTION_KINDS = {\n custom: true,\n dismiss: true,\n pause: true,\n resume: true,\n retry: true,\n start: true,\n} as const satisfies Record<AIToolRunActionKind, true>;\n\nconst ACTIONS_BY_STATUS = {\n ready: ['start', 'dismiss', 'custom'],\n running: ['pause', 'dismiss', 'custom'],\n paused: ['resume', 'dismiss', 'custom'],\n completed: ['dismiss', 'custom'],\n error: ['retry', 'dismiss', 'custom'],\n} as const satisfies Record<AIToolRunStatus, readonly AIToolRunActionKind[]>;\n\nconst STEP_KEYS_BY_STATUS = {\n pending: new Set([\n 'toolCall',\n 'title',\n 'description',\n 'context',\n 'technicalDetails',\n ]),\n running: new Set([\n 'toolCall',\n 'title',\n 'description',\n 'context',\n 'technicalDetails',\n 'progress',\n 'sourceIds',\n 'currentSourceId',\n 'durationMs',\n ]),\n success: new Set([\n 'toolCall',\n 'title',\n 'description',\n 'context',\n 'technicalDetails',\n 'durationMs',\n 'sourceIds',\n ]),\n error: new Set([\n 'toolCall',\n 'title',\n 'description',\n 'context',\n 'technicalDetails',\n 'sourceIds',\n 'durationMs',\n ]),\n} as const satisfies Record<\n AIToolRunToolCallSummary['status'],\n ReadonlySet<string>\n>;\n\nconst TOOL_CALL_KEYS_BY_STATUS = {\n pending: new Set(['toolCallId', 'toolName', 'status']),\n running: new Set(['toolCallId', 'toolName', 'status']),\n success: new Set(['toolCallId', 'toolName', 'status']),\n error: new Set(['toolCallId', 'toolName', 'status', 'error']),\n} as const satisfies Record<\n AIToolRunToolCallSummary['status'],\n ReadonlySet<string>\n>;\n\nconst MAX_JSON_DEPTH = 100;\nconst MAX_JSON_NODES = 10_000;\nconst MAX_VALIDATION_ISSUES = 100;\nconst INSPECTION_FAILURE_MESSAGE = 'Value could not be inspected safely';\nconst INVALID_FIELD = Symbol('invalid-shape-field');\n\ntype InvalidField = typeof INVALID_FIELD;\n\ntype ContainerKind = 'array' | 'record' | 'other' | 'uninspectable';\n\ntype JsonWalkFrame =\n | { kind: 'visit'; value: unknown; path: string; depth: number }\n | { kind: 'leave'; value: object };\n\ninterface ArrayItem {\n index: number;\n value: unknown;\n}\n\ninterface ValidatedToolCall {\n toolCallId: string;\n status: AIToolRunToolCallSummary['status'];\n}\n\ninterface ValidatedStep {\n toolCall: ValidatedToolCall;\n sourceIds?: readonly string[];\n currentSourceId?: string;\n}\n\ninterface ValidatedAction {\n id: string;\n kind: AIToolRunActionKind;\n}\n\nfunction addIssue(\n issues: ValidationIssue[],\n path: string,\n message: string,\n): void {\n if (issues.length < MAX_VALIDATION_ISSUES) {\n issues.push({ path, message });\n }\n}\n\nfunction hasIssuesSince(\n issues: readonly ValidationIssue[],\n issueCount: number,\n): boolean {\n return issues.length > issueCount || issues.length >= MAX_VALIDATION_ISSUES;\n}\n\nfunction addInspectionIssue(issues: ValidationIssue[], path: string): void {\n addIssue(issues, path, INSPECTION_FAILURE_MESSAGE);\n}\n\nfunction getContainerKind(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): ContainerKind {\n if (value === null || typeof value !== 'object') return 'other';\n\n try {\n const prototype = Reflect.getPrototypeOf(value);\n if (Array.isArray(value)) {\n return prototype === Array.prototype ? 'array' : 'other';\n }\n return prototype === Object.prototype || prototype === null\n ? 'record'\n : 'other';\n } catch {\n addInspectionIssue(issues, path);\n return 'uninspectable';\n }\n}\n\nfunction getOwnKeys(\n value: object,\n path: string,\n issues: ValidationIssue[],\n): readonly PropertyKey[] | undefined {\n try {\n return Reflect.ownKeys(value);\n } catch {\n addInspectionIssue(issues, path);\n return undefined;\n }\n}\n\nfunction getOwnPropertyDescriptor(\n value: object,\n key: PropertyKey,\n path: string,\n issues: ValidationIssue[],\n): PropertyDescriptor | null | undefined {\n try {\n return Reflect.getOwnPropertyDescriptor(value, key);\n } catch {\n addInspectionIssue(issues, path);\n return null;\n }\n}\n\nfunction readEnumerableDataDescriptor(\n _value: object,\n _key: PropertyKey,\n descriptor: PropertyDescriptor,\n path: string,\n issues: ValidationIssue[],\n): { valid: true; value: unknown } | { valid: false } {\n if (!descriptor.enumerable || !Object.hasOwn(descriptor, 'value')) {\n addIssue(issues, path, 'Value must be an own enumerable data property');\n return { valid: false };\n }\n\n return { valid: true, value: descriptor.value };\n}\n\ninterface ReflectedPropertyDescriptor {\n descriptor: PropertyDescriptor;\n isOwn: boolean;\n}\n\ninterface DescriptorPropertyInspection extends ReflectedPropertyDescriptor {\n kind: 'descriptor';\n}\n\ntype PropertyInspection =\n | DescriptorPropertyInspection\n | { kind: 'absent' }\n | { kind: 'synthetic' };\n\nfunction findReflectedPropertyDescriptor(\n value: object,\n key: PropertyKey,\n path: string,\n issues: ValidationIssue[],\n): ReflectedPropertyDescriptor | null | undefined {\n const visited = new Set<object>();\n let current: object | null = value;\n let isOwn = true;\n\n while (current !== null) {\n if (visited.has(current)) {\n addInspectionIssue(issues, path);\n return null;\n }\n visited.add(current);\n\n const descriptor = getOwnPropertyDescriptor(current, key, path, issues);\n if (descriptor === null) return null;\n if (descriptor !== undefined) {\n if (isOwn) {\n const ownKeys = getOwnKeys(value, path, issues);\n if (!ownKeys) return null;\n if (!ownKeys.includes(key)) {\n addIssue(\n issues,\n path,\n 'Own property must be exposed by Reflect.ownKeys',\n );\n return null;\n }\n }\n return { descriptor, isOwn };\n }\n\n try {\n current = Reflect.getPrototypeOf(current);\n } catch {\n addInspectionIssue(issues, path);\n return null;\n }\n isOwn = false;\n }\n\n return undefined;\n}\n\nfunction inspectProperty(\n value: object,\n key: PropertyKey,\n path: string,\n issues: ValidationIssue[],\n): PropertyInspection | undefined {\n const descriptor = findReflectedPropertyDescriptor(value, key, path, issues);\n if (descriptor === null) return undefined;\n if (descriptor !== undefined) return { kind: 'descriptor', ...descriptor };\n\n let present: boolean;\n try {\n present = Reflect.has(value, key);\n } catch {\n addInspectionIssue(issues, path);\n return undefined;\n }\n if (present) return { kind: 'synthetic' };\n\n let visibleValue: unknown;\n try {\n visibleValue = Reflect.get(value, key);\n } catch {\n addInspectionIssue(issues, path);\n return undefined;\n }\n\n return present || visibleValue !== undefined\n ? { kind: 'synthetic' }\n : { kind: 'absent' };\n}\n\nfunction readShapeField(\n value: Record<string, unknown>,\n key: string,\n path: string,\n issues: ValidationIssue[],\n): unknown | InvalidField {\n const inspection = inspectProperty(value, key, path, issues);\n if (!inspection) return INVALID_FIELD;\n\n if (inspection.kind === 'absent') {\n return undefined;\n }\n\n if (inspection.kind === 'synthetic' || !inspection.isOwn) {\n addIssue(issues, path, 'Value must be an own enumerable data property');\n return INVALID_FIELD;\n }\n\n const field = readEnumerableDataDescriptor(\n value,\n key,\n inspection.descriptor,\n path,\n issues,\n );\n return field.valid ? field.value : INVALID_FIELD;\n}\n\nfunction readRequiredField(\n value: Record<string, unknown>,\n key: string,\n path: string,\n issues: ValidationIssue[],\n): unknown | InvalidField {\n return readShapeField(value, key, path, issues);\n}\n\nfunction readOptionalField(\n value: Record<string, unknown>,\n key: string,\n path: string,\n issues: ValidationIssue[],\n): unknown | InvalidField {\n return readShapeField(value, key, path, issues);\n}\n\nfunction isInvalidField(value: unknown): value is InvalidField {\n return value === INVALID_FIELD;\n}\n\nfunction getOwnEnumerableDataKeys(\n value: Record<string, unknown>,\n path: string,\n issues: ValidationIssue[],\n): readonly string[] | undefined {\n const keys = getOwnKeys(value, path, issues);\n if (!keys) return undefined;\n if (keys.length > MAX_JSON_NODES) {\n addIssue(issues, path, 'Value exceeds the maximum JSON node limit');\n return undefined;\n }\n\n const stringKeys: string[] = [];\n for (const key of keys) {\n const keyPath = typeof key === 'string' ? `${path}.${key}` : path;\n const descriptor = getOwnPropertyDescriptor(value, key, keyPath, issues);\n if (descriptor === null) return undefined;\n if (descriptor === undefined) {\n addInspectionIssue(issues, keyPath);\n return undefined;\n }\n if (typeof key !== 'string') {\n addIssue(issues, path, 'Symbol keys are not JSON-safe');\n continue;\n }\n if (\n !readEnumerableDataDescriptor(value, key, descriptor, keyPath, issues)\n .valid\n ) {\n continue;\n }\n stringKeys.push(key);\n }\n\n return stringKeys;\n}\n\nfunction isArrayIndexKey(key: string): number | undefined {\n const index = Number(key);\n if (\n !Number.isInteger(index) ||\n index < 0 ||\n index >= 2 ** 32 - 1 ||\n String(index) !== key\n ) {\n return undefined;\n }\n return index;\n}\n\nfunction readArrayLength(\n _value: readonly unknown[],\n descriptor: PropertyDescriptor,\n path: string,\n issues: ValidationIssue[],\n): number | undefined {\n if (\n descriptor.enumerable ||\n !Object.hasOwn(descriptor, 'value') ||\n typeof descriptor.value !== 'number' ||\n !Number.isInteger(descriptor.value) ||\n descriptor.value < 0 ||\n descriptor.value > 2 ** 32 - 1\n ) {\n addIssue(issues, path, 'Array length must be a valid data property');\n return undefined;\n }\n\n return descriptor.value;\n}\n\nfunction readArrayItems(\n value: readonly unknown[],\n path: string,\n issues: ValidationIssue[],\n): readonly ArrayItem[] | undefined {\n const issueCount = issues.length;\n const keys = getOwnKeys(value, path, issues);\n if (!keys) return undefined;\n if (keys.length > MAX_JSON_NODES + 1) {\n addIssue(issues, path, 'Value exceeds the maximum JSON node limit');\n return undefined;\n }\n\n let length: number | undefined;\n const items = new Map<number, unknown>();\n\n for (const key of keys) {\n const keyPath = typeof key === 'string' ? `${path}.${key}` : path;\n const descriptor = getOwnPropertyDescriptor(value, key, keyPath, issues);\n if (descriptor === null) return undefined;\n if (descriptor === undefined) {\n addInspectionIssue(issues, keyPath);\n return undefined;\n }\n if (typeof key !== 'string') {\n addIssue(issues, path, 'Symbol keys are not JSON-safe');\n continue;\n }\n if (key === 'length') {\n length = readArrayLength(value, descriptor, path, issues);\n continue;\n }\n\n const index = isArrayIndexKey(key);\n if (index === undefined) {\n addIssue(issues, keyPath, 'Arrays must not contain custom properties');\n continue;\n }\n\n const item = readEnumerableDataDescriptor(\n value,\n key,\n descriptor,\n `${path}[${index}]`,\n issues,\n );\n if (item.valid) {\n items.set(index, item.value);\n }\n }\n\n if (length === undefined) {\n if (!hasIssuesSince(issues, issueCount)) {\n addInspectionIssue(issues, path);\n }\n return undefined;\n }\n if (length > MAX_JSON_NODES) {\n addIssue(issues, path, 'Array length exceeds the maximum JSON node limit');\n return undefined;\n }\n\n const orderedItems = [...items.entries()].sort(\n ([left], [right]) => left - right,\n );\n let expectedIndex = 0;\n for (const [index] of orderedItems) {\n if (index !== expectedIndex) {\n addIssue(\n issues,\n `${path}[${expectedIndex}]`,\n 'Array holes are not JSON-safe',\n );\n return undefined;\n }\n expectedIndex += 1;\n }\n if (expectedIndex !== length) {\n addIssue(\n issues,\n `${path}[${expectedIndex}]`,\n 'Array holes are not JSON-safe',\n );\n return undefined;\n }\n if (hasIssuesSince(issues, issueCount)) return undefined;\n\n return orderedItems.map(([index, item]) => ({ index, value: item }));\n}\n\nfunction readObjectChildren(\n value: Record<string, unknown>,\n path: string,\n issues: ValidationIssue[],\n): readonly { path: string; value: unknown }[] | undefined {\n const issueCount = issues.length;\n const keys = getOwnKeys(value, path, issues);\n if (!keys) return undefined;\n if (keys.length > MAX_JSON_NODES) {\n addIssue(issues, path, 'Value exceeds the maximum JSON node limit');\n return undefined;\n }\n\n const children: Array<{ path: string; value: unknown }> = [];\n for (const key of keys) {\n const keyPath = typeof key === 'string' ? `${path}.${key}` : path;\n const descriptor = getOwnPropertyDescriptor(value, key, keyPath, issues);\n if (descriptor === null) return undefined;\n if (descriptor === undefined) {\n addInspectionIssue(issues, keyPath);\n return undefined;\n }\n if (typeof key !== 'string') {\n addIssue(issues, path, 'Symbol keys are not JSON-safe');\n continue;\n }\n\n const child = readEnumerableDataDescriptor(\n value,\n key,\n descriptor,\n keyPath,\n issues,\n );\n if (child.valid) {\n children.push({ path: keyPath, value: child.value });\n }\n }\n\n return hasIssuesSince(issues, issueCount) ? undefined : children;\n}\n\nfunction rejectUnknownKeys(\n value: Record<string, unknown>,\n allowed: ReadonlySet<string>,\n path: string,\n issues: ValidationIssue[],\n): void {\n const keys = getOwnEnumerableDataKeys(value, path, issues);\n if (!keys) return;\n for (const key of keys) {\n if (!allowed.has(key)) {\n addIssue(issues, `${path}.${key}`, `Unknown key \"${key}\"`);\n }\n }\n}\n\nfunction rejectDisallowedKeys(\n value: Record<string, unknown>,\n known: ReadonlySet<string>,\n allowed: ReadonlySet<string>,\n path: string,\n issues: ValidationIssue[],\n): void {\n for (const key of known) {\n if (!allowed.has(key)) {\n const inspection = inspectProperty(value, key, `${path}.${key}`, issues);\n if (!inspection) return;\n if (inspection.kind === 'absent') continue;\n addIssue(\n issues,\n `${path}.${key}`,\n 'Field is not allowed for this status',\n );\n }\n }\n}\n\nfunction rejectPresentKeys(\n value: Record<string, unknown>,\n keys: readonly string[],\n path: string,\n issues: ValidationIssue[],\n): void {\n for (const key of keys) {\n const inspection = inspectProperty(value, key, `${path}.${key}`, issues);\n if (!inspection) return;\n if (inspection.kind === 'absent') continue;\n addIssue(issues, `${path}.${key}`, 'Field is not allowed for this status');\n }\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction hasSafeToJSON(\n value: object,\n path: string,\n issues: ValidationIssue[],\n): boolean {\n const descriptor = findReflectedPropertyDescriptor(\n value,\n 'toJSON',\n path,\n issues,\n );\n if (descriptor === null) return false;\n if (descriptor !== undefined) {\n addIssue(issues, path, 'Value must not define toJSON');\n return false;\n }\n\n return true;\n}\n\nfunction validateJsonSafe(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): void {\n const ancestors = new Set<object>();\n const stack: JsonWalkFrame[] = [{ kind: 'visit', value, path, depth: 0 }];\n let nodeCount = 0;\n\n while (stack.length > 0 && issues.length < MAX_VALIDATION_ISSUES) {\n const frame = stack.pop();\n if (!frame) break;\n if (frame.kind === 'leave') {\n ancestors.delete(frame.value);\n continue;\n }\n\n if (frame.depth > MAX_JSON_DEPTH) {\n addIssue(\n issues,\n frame.path,\n 'Value exceeds the maximum JSON depth limit',\n );\n continue;\n }\n nodeCount += 1;\n if (nodeCount > MAX_JSON_NODES) {\n addIssue(issues, frame.path, 'Value exceeds the maximum JSON node limit');\n break;\n }\n\n const currentValue = frame.value;\n if (\n currentValue === undefined ||\n typeof currentValue === 'function' ||\n typeof currentValue === 'symbol' ||\n typeof currentValue === 'bigint'\n ) {\n addIssue(issues, frame.path, 'Value must be JSON-safe');\n continue;\n }\n if (typeof currentValue === 'number' && !isFiniteNumber(currentValue)) {\n addIssue(issues, frame.path, 'Number must be finite');\n continue;\n }\n if (currentValue === null || typeof currentValue !== 'object') continue;\n if (ancestors.has(currentValue)) {\n addIssue(issues, frame.path, 'Value must not contain cycles');\n continue;\n }\n\n const containerKind = getContainerKind(currentValue, frame.path, issues);\n if (containerKind === 'uninspectable') continue;\n if (containerKind === 'other') {\n addIssue(\n issues,\n frame.path,\n 'Value must contain only plain objects and arrays',\n );\n continue;\n }\n if (!hasSafeToJSON(currentValue, frame.path, issues)) continue;\n\n ancestors.add(currentValue);\n stack.push({ kind: 'leave', value: currentValue });\n if (containerKind === 'array') {\n const children = readArrayItems(\n currentValue as readonly unknown[],\n frame.path,\n issues,\n );\n if (!children) continue;\n for (let index = children.length - 1; index >= 0; index -= 1) {\n const child = children[index];\n stack.push({\n kind: 'visit',\n value: child.value,\n path: `${frame.path}[${child.index}]`,\n depth: frame.depth + 1,\n });\n }\n continue;\n }\n\n const children = readObjectChildren(\n currentValue as Record<string, unknown>,\n frame.path,\n issues,\n );\n if (!children) continue;\n for (let index = children.length - 1; index >= 0; index -= 1) {\n const child = children[index];\n stack.push({\n kind: 'visit',\n value: child.value,\n path: child.path,\n depth: frame.depth + 1,\n });\n }\n }\n}\n\nconst INVALID_JSON_SNAPSHOT = Symbol('invalid-json-snapshot');\n\ntype InvalidJsonSnapshot = typeof INVALID_JSON_SNAPSHOT;\n\nfunction captureJsonSnapshot(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): unknown | InvalidJsonSnapshot {\n const ancestors = new Set<object>();\n const snapshots = new Map<object, object>();\n let nodeCount = 0;\n\n function capture(\n currentValue: unknown,\n currentPath: string,\n depth: number,\n ): unknown | InvalidJsonSnapshot {\n if (issues.length >= MAX_VALIDATION_ISSUES) {\n return INVALID_JSON_SNAPSHOT;\n }\n if (depth > MAX_JSON_DEPTH) {\n addIssue(\n issues,\n currentPath,\n 'Value exceeds the maximum JSON depth limit',\n );\n return INVALID_JSON_SNAPSHOT;\n }\n\n nodeCount += 1;\n if (nodeCount > MAX_JSON_NODES) {\n addIssue(\n issues,\n currentPath,\n 'Value exceeds the maximum JSON node limit',\n );\n return INVALID_JSON_SNAPSHOT;\n }\n\n if (\n currentValue === undefined ||\n typeof currentValue === 'function' ||\n typeof currentValue === 'symbol' ||\n typeof currentValue === 'bigint'\n ) {\n addIssue(issues, currentPath, 'Value must be JSON-safe');\n return INVALID_JSON_SNAPSHOT;\n }\n if (typeof currentValue === 'number' && !isFiniteNumber(currentValue)) {\n addIssue(issues, currentPath, 'Number must be finite');\n return INVALID_JSON_SNAPSHOT;\n }\n if (currentValue === null || typeof currentValue !== 'object') {\n return currentValue;\n }\n if (ancestors.has(currentValue)) {\n addIssue(issues, currentPath, 'Value must not contain cycles');\n return INVALID_JSON_SNAPSHOT;\n }\n\n const containerKind = getContainerKind(currentValue, currentPath, issues);\n if (containerKind === 'uninspectable') return INVALID_JSON_SNAPSHOT;\n if (containerKind === 'other') {\n addIssue(\n issues,\n currentPath,\n 'Value must contain only plain objects and arrays',\n );\n return INVALID_JSON_SNAPSHOT;\n }\n if (!hasSafeToJSON(currentValue, currentPath, issues)) {\n return INVALID_JSON_SNAPSHOT;\n }\n\n const existingSnapshot = snapshots.get(currentValue);\n if (existingSnapshot !== undefined) return existingSnapshot;\n\n ancestors.add(currentValue);\n try {\n if (containerKind === 'array') {\n const items = readArrayItems(\n currentValue as readonly unknown[],\n currentPath,\n issues,\n );\n if (!items) return INVALID_JSON_SNAPSHOT;\n\n const snapshot: unknown[] = new Array(items.length);\n snapshots.set(currentValue, snapshot);\n for (const item of items) {\n const capturedItem = capture(\n item.value,\n `${currentPath}[${item.index}]`,\n depth + 1,\n );\n if (capturedItem === INVALID_JSON_SNAPSHOT) {\n return INVALID_JSON_SNAPSHOT;\n }\n snapshot[item.index] = capturedItem;\n }\n return snapshot;\n }\n\n const children = readObjectChildren(\n currentValue as Record<string, unknown>,\n currentPath,\n issues,\n );\n if (!children) return INVALID_JSON_SNAPSHOT;\n\n const snapshot = Object.create(null) as Record<string, unknown>;\n snapshots.set(currentValue, snapshot);\n for (const child of children) {\n const key = child.path.slice(currentPath.length + 1);\n const capturedChild = capture(child.value, child.path, depth + 1);\n if (capturedChild === INVALID_JSON_SNAPSHOT) {\n return INVALID_JSON_SNAPSHOT;\n }\n Object.defineProperty(snapshot, key, {\n configurable: true,\n enumerable: true,\n value: capturedChild,\n writable: true,\n });\n }\n return snapshot;\n } finally {\n ancestors.delete(currentValue);\n }\n }\n\n return capture(value, path, 0);\n}\n\nfunction requireRecord(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): Record<string, unknown> | undefined {\n if (isInvalidField(value)) return undefined;\n const containerKind = getContainerKind(value, path, issues);\n if (containerKind !== 'record') {\n if (containerKind !== 'uninspectable') {\n addIssue(issues, path, 'Value must be a plain object');\n }\n return undefined;\n }\n return value as Record<string, unknown>;\n}\n\nfunction requireString(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): string | undefined {\n if (isInvalidField(value)) return undefined;\n if (typeof value !== 'string') {\n addIssue(issues, path, 'Value must be a string');\n return undefined;\n }\n return value;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): string | undefined {\n const stringValue = requireString(value, path, issues);\n if (stringValue !== undefined && stringValue.length === 0) {\n addIssue(issues, path, 'Value must not be empty');\n return undefined;\n }\n return stringValue;\n}\n\nfunction requireNonWhitespaceString(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): string | undefined {\n const stringValue = requireString(value, path, issues);\n if (stringValue !== undefined && stringValue.trim().length === 0) {\n addIssue(issues, path, 'Value must be non-whitespace');\n return undefined;\n }\n return stringValue;\n}\n\nfunction requireBoolean(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): boolean | undefined {\n if (isInvalidField(value)) return undefined;\n if (typeof value !== 'boolean') {\n addIssue(issues, path, 'Value must be a boolean');\n return undefined;\n }\n return value;\n}\n\nfunction requireNumber(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): number | undefined {\n if (isInvalidField(value)) return undefined;\n if (typeof value !== 'number') {\n addIssue(issues, path, 'Value must be a number');\n return undefined;\n }\n return value;\n}\n\nfunction requireArray(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): readonly unknown[] | undefined {\n if (isInvalidField(value)) return undefined;\n try {\n if (Array.isArray(value)) return value;\n } catch {\n addInspectionIssue(issues, path);\n return undefined;\n }\n\n addIssue(issues, path, 'Value must be an array');\n return undefined;\n}\n\nfunction requireRunStatus(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): AIToolRunStatus | undefined {\n if (isInvalidField(value)) return undefined;\n if (typeof value !== 'string' || !Object.hasOwn(RUN_STATUSES, value)) {\n addIssue(issues, path, 'Value must be a supported run status');\n return undefined;\n }\n return value as AIToolRunStatus;\n}\n\nfunction requireToolStatus(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): AIToolRunToolCallSummary['status'] | undefined {\n if (isInvalidField(value)) return undefined;\n if (typeof value !== 'string' || !Object.hasOwn(TOOL_STATUSES, value)) {\n addIssue(issues, path, 'Value is not allowed as a tool status');\n return undefined;\n }\n return value as AIToolRunToolCallSummary['status'];\n}\n\nfunction requireActionKind(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): AIToolRunActionKind | undefined {\n if (isInvalidField(value)) return undefined;\n if (typeof value !== 'string' || !Object.hasOwn(ACTION_KINDS, value)) {\n addIssue(issues, path, 'Value must be an allowed action kind');\n return undefined;\n }\n return value as AIToolRunActionKind;\n}\n\nfunction validateProgress(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): void {\n const progress = requireRecord(value, path, issues);\n if (!progress) return;\n\n rejectUnknownKeys(progress, PROGRESS_KEYS, path, issues);\n const progressValue = requireNumber(\n readRequiredField(progress, 'value', `${path}.value`, issues),\n `${path}.value`,\n issues,\n );\n if (\n progressValue !== undefined &&\n (progressValue < 0 || progressValue > 100)\n ) {\n addIssue(issues, `${path}.value`, 'Value must be between 0 and 100');\n }\n const label = readOptionalField(progress, 'label', `${path}.label`, issues);\n if (label !== undefined && !isInvalidField(label)) {\n requireNonWhitespaceString(label, `${path}.label`, issues);\n }\n const meta = readOptionalField(progress, 'meta', `${path}.meta`, issues);\n if (meta !== undefined && !isInvalidField(meta)) {\n requireString(meta, `${path}.meta`, issues);\n }\n}\n\nfunction validateStringArray(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): readonly string[] | undefined {\n const issueCount = issues.length;\n const values = requireArray(value, path, issues);\n if (!values) return undefined;\n const items = readArrayItems(values, path, issues);\n if (!items) return undefined;\n\n const strings: string[] = [];\n for (const item of items) {\n const stringValue = requireString(\n item.value,\n `${path}[${item.index}]`,\n issues,\n );\n if (stringValue !== undefined) {\n strings.push(stringValue);\n }\n }\n return hasIssuesSince(issues, issueCount) ? undefined : strings;\n}\n\nfunction validateToolCall(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): ValidatedToolCall | undefined {\n const issueCount = issues.length;\n const toolCall = requireRecord(value, path, issues);\n if (!toolCall) return undefined;\n\n rejectUnknownKeys(toolCall, TOOL_CALL_KEYS, path, issues);\n const toolCallId = requireNonEmptyString(\n readRequiredField(toolCall, 'toolCallId', `${path}.toolCallId`, issues),\n `${path}.toolCallId`,\n issues,\n );\n requireNonWhitespaceString(\n readRequiredField(toolCall, 'toolName', `${path}.toolName`, issues),\n `${path}.toolName`,\n issues,\n );\n const status = requireToolStatus(\n readRequiredField(toolCall, 'status', `${path}.status`, issues),\n `${path}.status`,\n issues,\n );\n if (!status) return undefined;\n\n rejectDisallowedKeys(\n toolCall,\n TOOL_CALL_KEYS,\n TOOL_CALL_KEYS_BY_STATUS[status],\n path,\n issues,\n );\n if (status === 'error') {\n const error = readRequiredField(toolCall, 'error', `${path}.error`, issues);\n if (error === undefined) {\n addIssue(\n issues,\n `${path}.error`,\n 'Value is required for error tool calls',\n );\n } else if (!isInvalidField(error)) {\n requireNonWhitespaceString(error, `${path}.error`, issues);\n }\n }\n\n if (hasIssuesSince(issues, issueCount) || !toolCallId) return undefined;\n return { toolCallId, status };\n}\n\nfunction validateContext(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): void {\n const context = requireRecord(value, path, issues);\n if (!context) return;\n\n rejectUnknownKeys(context, CONTEXT_KEYS, path, issues);\n requireNonWhitespaceString(\n readRequiredField(context, 'id', `${path}.id`, issues),\n `${path}.id`,\n issues,\n );\n requireNonWhitespaceString(\n readRequiredField(context, 'label', `${path}.label`, issues),\n `${path}.label`,\n issues,\n );\n}\n\nfunction validateTechnicalToolCall(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): string | undefined {\n const issueCount = issues.length;\n const toolCall = requireRecord(value, path, issues);\n if (!toolCall) return undefined;\n\n rejectUnknownKeys(toolCall, TECHNICAL_TOOL_CALL_KEYS, path, issues);\n const toolCallId = requireNonEmptyString(\n readRequiredField(toolCall, 'toolCallId', `${path}.toolCallId`, issues),\n `${path}.toolCallId`,\n issues,\n );\n requireNonWhitespaceString(\n readRequiredField(toolCall, 'toolName', `${path}.toolName`, issues),\n `${path}.toolName`,\n issues,\n );\n const statusField = readOptionalField(\n toolCall,\n 'status',\n `${path}.status`,\n issues,\n );\n const status =\n statusField === undefined || isInvalidField(statusField)\n ? undefined\n : requireToolStatus(statusField, `${path}.status`, issues);\n const args = readOptionalField(toolCall, 'args', `${path}.args`, issues);\n if (args !== undefined && !isInvalidField(args)) {\n requireRecord(args, `${path}.args`, issues);\n }\n readOptionalField(toolCall, 'result', `${path}.result`, issues);\n const error = readOptionalField(toolCall, 'error', `${path}.error`, issues);\n if (status === 'error') {\n if (error === undefined) {\n addIssue(\n issues,\n `${path}.error`,\n 'Value is required for error tool calls',\n );\n } else if (!isInvalidField(error)) {\n requireNonWhitespaceString(error, `${path}.error`, issues);\n }\n } else if (error !== undefined) {\n addIssue(\n issues,\n `${path}.error`,\n 'Field is allowed for error tool calls only',\n );\n }\n\n return hasIssuesSince(issues, issueCount) ? undefined : toolCallId;\n}\n\nfunction validateTechnicalDetails(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): void {\n const details = requireRecord(value, path, issues);\n if (!details) return;\n\n rejectUnknownKeys(details, TECHNICAL_DETAILS_KEYS, path, issues);\n const label = readOptionalField(details, 'label', `${path}.label`, issues);\n if (label !== undefined && !isInvalidField(label)) {\n requireNonWhitespaceString(label, `${path}.label`, issues);\n }\n const toolCalls = requireArray(\n readRequiredField(details, 'toolCalls', `${path}.toolCalls`, issues),\n `${path}.toolCalls`,\n issues,\n );\n if (!toolCalls) return;\n const items = readArrayItems(toolCalls, `${path}.toolCalls`, issues);\n if (!items) return;\n\n const ids = new Set<string>();\n for (const item of items) {\n const itemPath = `${path}.toolCalls[${item.index}]`;\n const id = validateTechnicalToolCall(item.value, itemPath, issues);\n if (!id) continue;\n if (ids.has(id)) {\n addIssue(issues, `${itemPath}.toolCallId`, 'duplicate tool-call ID');\n } else {\n ids.add(id);\n }\n }\n}\n\nfunction validateDuration(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): void {\n const durationMs = requireNumber(value, path, issues);\n if (durationMs !== undefined && durationMs < 0) {\n addIssue(issues, path, 'Value must be non-negative');\n }\n}\n\nfunction validateStep(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): ValidatedStep | undefined {\n const issueCount = issues.length;\n const step = requireRecord(value, path, issues);\n if (!step) return undefined;\n\n rejectUnknownKeys(step, STEP_KEYS, path, issues);\n const title = readOptionalField(step, 'title', `${path}.title`, issues);\n if (title !== undefined && !isInvalidField(title)) {\n requireString(title, `${path}.title`, issues);\n }\n const description = readOptionalField(\n step,\n 'description',\n `${path}.description`,\n issues,\n );\n if (description !== undefined && !isInvalidField(description)) {\n requireString(description, `${path}.description`, issues);\n }\n const context = readOptionalField(step, 'context', `${path}.context`, issues);\n if (context !== undefined && !isInvalidField(context)) {\n validateContext(context, `${path}.context`, issues);\n }\n const technicalDetails = readOptionalField(\n step,\n 'technicalDetails',\n `${path}.technicalDetails`,\n issues,\n );\n if (technicalDetails !== undefined && !isInvalidField(technicalDetails)) {\n validateTechnicalDetails(\n technicalDetails,\n `${path}.technicalDetails`,\n issues,\n );\n }\n\n const toolCall = validateToolCall(\n readRequiredField(step, 'toolCall', `${path}.toolCall`, issues),\n `${path}.toolCall`,\n issues,\n );\n if (!toolCall) return undefined;\n const { status } = toolCall;\n\n rejectDisallowedKeys(\n step,\n STEP_KEYS,\n STEP_KEYS_BY_STATUS[status],\n path,\n issues,\n );\n const progress = readOptionalField(\n step,\n 'progress',\n `${path}.progress`,\n issues,\n );\n if (progress !== undefined && !isInvalidField(progress)) {\n validateProgress(progress, `${path}.progress`, issues);\n }\n const sourceIdsField = readOptionalField(\n step,\n 'sourceIds',\n `${path}.sourceIds`,\n issues,\n );\n const sourceIds =\n sourceIdsField === undefined || isInvalidField(sourceIdsField)\n ? undefined\n : validateStringArray(sourceIdsField, `${path}.sourceIds`, issues);\n\n const currentSourceIdField = readOptionalField(\n step,\n 'currentSourceId',\n `${path}.currentSourceId`,\n issues,\n );\n const currentSourceId =\n currentSourceIdField === undefined || isInvalidField(currentSourceIdField)\n ? undefined\n : requireString(currentSourceIdField, `${path}.currentSourceId`, issues);\n\n const durationMsField = readOptionalField(\n step,\n 'durationMs',\n `${path}.durationMs`,\n issues,\n );\n if (durationMsField !== undefined && !isInvalidField(durationMsField)) {\n validateDuration(durationMsField, `${path}.durationMs`, issues);\n }\n\n if (hasIssuesSince(issues, issueCount)) return undefined;\n return {\n toolCall,\n ...(sourceIds === undefined ? {} : { sourceIds }),\n ...(currentSourceId === undefined ? {} : { currentSourceId }),\n };\n}\n\nfunction validateSource(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): string | undefined {\n const issueCount = issues.length;\n const source = requireRecord(value, path, issues);\n if (!source) return undefined;\n\n rejectUnknownKeys(source, SOURCE_KEYS, path, issues);\n const id = requireNonEmptyString(\n readRequiredField(source, 'id', `${path}.id`, issues),\n `${path}.id`,\n issues,\n );\n\n const kindField = readOptionalField(source, 'kind', `${path}.kind`, issues);\n const kind =\n kindField === undefined || isInvalidField(kindField)\n ? undefined\n : requireString(kindField, `${path}.kind`, issues);\n\n if (kind !== undefined && kind !== 'link' && kind !== 'reference') {\n addIssue(issues, `${path}.kind`, 'Value must be \"link\" or \"reference\"');\n }\n\n if (kind === 'reference') {\n rejectDisallowedKeys(\n source,\n SOURCE_KEYS,\n REFERENCE_SOURCE_KEYS,\n path,\n issues,\n );\n requireNonWhitespaceString(\n readRequiredField(source, 'title', `${path}.title`, issues),\n `${path}.title`,\n issues,\n );\n const description = readOptionalField(\n source,\n 'description',\n `${path}.description`,\n issues,\n );\n if (description !== undefined && !isInvalidField(description)) {\n requireString(description, `${path}.description`, issues);\n }\n return hasIssuesSince(issues, issueCount) || !id ? undefined : id;\n }\n\n requireNonWhitespaceString(\n readRequiredField(source, 'url', `${path}.url`, issues),\n `${path}.url`,\n issues,\n );\n for (const key of ['title', 'description', 'favicon', 'siteName'] as const) {\n const field = readOptionalField(source, key, `${path}.${key}`, issues);\n if (field !== undefined && !isInvalidField(field)) {\n requireString(field, `${path}.${key}`, issues);\n }\n }\n\n return hasIssuesSince(issues, issueCount) || !id ? undefined : id;\n}\n\nfunction validateSources(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): Set<string> {\n const sourceIds = new Set<string>();\n const sources = requireArray(value, path, issues);\n if (!sources) return sourceIds;\n\n const sourceItems = readArrayItems(sources, path, issues);\n if (!sourceItems) return sourceIds;\n\n for (const item of sourceItems) {\n const sourcePath = `${path}[${item.index}]`;\n const sourceId = validateSource(item.value, sourcePath, issues);\n if (!sourceId) continue;\n if (sourceIds.has(sourceId)) {\n addIssue(issues, `${sourcePath}.id`, 'duplicate source ID');\n continue;\n }\n sourceIds.add(sourceId);\n }\n return sourceIds;\n}\n\nfunction validateAction(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): ValidatedAction | undefined {\n const issueCount = issues.length;\n const action = requireRecord(value, path, issues);\n if (!action) return undefined;\n\n rejectUnknownKeys(action, ACTION_KEYS, path, issues);\n const id = requireNonEmptyString(\n readRequiredField(action, 'id', `${path}.id`, issues),\n `${path}.id`,\n issues,\n );\n const kind = requireActionKind(\n readRequiredField(action, 'kind', `${path}.kind`, issues),\n `${path}.kind`,\n issues,\n );\n if (!kind) return undefined;\n\n const label =\n kind === 'custom'\n ? readRequiredField(action, 'label', `${path}.label`, issues)\n : readOptionalField(action, 'label', `${path}.label`, issues);\n if (kind === 'custom' && label === undefined) {\n addIssue(issues, `${path}.label`, 'Value is required for custom actions');\n } else if (label !== undefined && !isInvalidField(label)) {\n requireNonWhitespaceString(label, `${path}.label`, issues);\n }\n const disabled = readOptionalField(\n action,\n 'disabled',\n `${path}.disabled`,\n issues,\n );\n if (disabled !== undefined && !isInvalidField(disabled)) {\n requireBoolean(disabled, `${path}.disabled`, issues);\n }\n const loading = readOptionalField(\n action,\n 'loading',\n `${path}.loading`,\n issues,\n );\n if (loading !== undefined && !isInvalidField(loading)) {\n requireBoolean(loading, `${path}.loading`, issues);\n }\n\n return hasIssuesSince(issues, issueCount) || !id ? undefined : { id, kind };\n}\n\nfunction validateActions(\n value: unknown,\n path: string,\n status: AIToolRunStatus | undefined,\n issues: ValidationIssue[],\n): void {\n const actions = requireArray(value, path, issues);\n if (!actions) return;\n\n const actionItems = readArrayItems(actions, path, issues);\n if (!actionItems) return;\n\n const actionIds = new Set<string>();\n for (const item of actionItems) {\n const actionPath = `${path}[${item.index}]`;\n const action = validateAction(item.value, actionPath, issues);\n if (!action) continue;\n if (actionIds.has(action.id)) {\n addIssue(issues, `${actionPath}.id`, 'duplicate action ID');\n } else {\n actionIds.add(action.id);\n }\n if (\n status &&\n !(ACTIONS_BY_STATUS[status] as readonly AIToolRunActionKind[]).includes(\n action.kind,\n )\n ) {\n addIssue(\n issues,\n `${actionPath}.kind`,\n `Action kind \"${action.kind}\" is not allowed for ${status} runs`,\n );\n }\n }\n}\n\nfunction validateLifecycle(\n status: AIToolRunStatus,\n steps: readonly ValidatedStep[],\n issues: ValidationIssue[],\n): void {\n const statuses = steps.map((step) => step.toolCall.status);\n switch (status) {\n case 'ready':\n if (statuses.some((stepStatus) => stepStatus !== 'pending')) {\n addIssue(issues, '$.steps', 'Ready runs allow pending steps only');\n }\n return;\n case 'running':\n case 'paused':\n if (\n statuses.some(\n (stepStatus) =>\n stepStatus !== 'pending' &&\n stepStatus !== 'running' &&\n stepStatus !== 'success',\n ) ||\n !statuses.includes('running')\n ) {\n addIssue(\n issues,\n '$.steps',\n `${status} runs require at least one running step and allow pending, running, or success only`,\n );\n }\n return;\n case 'completed':\n if (\n steps.length === 0 ||\n statuses.some((stepStatus) => stepStatus !== 'success')\n ) {\n addIssue(\n issues,\n '$.steps',\n 'Completed runs require a non-empty all-success step list',\n );\n }\n return;\n case 'error':\n if (\n statuses.some(\n (stepStatus) =>\n stepStatus !== 'pending' &&\n stepStatus !== 'success' &&\n stepStatus !== 'error',\n )\n ) {\n addIssue(\n issues,\n '$.steps',\n 'Error runs allow pending, success, or error steps only',\n );\n }\n return;\n default:\n assertNever(status);\n }\n}\n\nfunction validateSourceReferences(\n steps: readonly ValidatedStep[],\n sourceIds: ReadonlySet<string>,\n issues: ValidationIssue[],\n): void {\n for (const [stepIndex, step] of steps.entries()) {\n const sourceIdPath = `$.steps[${stepIndex}].sourceIds`;\n const stepSourceIds = step.sourceIds;\n if (stepSourceIds) {\n for (const [sourceIndex, sourceId] of stepSourceIds.entries()) {\n if (!sourceIds.has(sourceId)) {\n addIssue(\n issues,\n `${sourceIdPath}[${sourceIndex}]`,\n 'Unknown source reference',\n );\n }\n }\n }\n\n const currentSourceId = step.currentSourceId;\n if (currentSourceId === undefined) continue;\n const currentSourcePath = `$.steps[${stepIndex}].currentSourceId`;\n if (!sourceIds.has(currentSourceId)) {\n addIssue(issues, currentSourcePath, 'Unknown current source reference');\n } else if (!stepSourceIds?.includes(currentSourceId)) {\n addIssue(\n issues,\n currentSourcePath,\n 'Current source ID must be included in sourceIds',\n );\n }\n }\n}\n\nfunction validateActiveStepReference(\n status: AIToolRunStatus | undefined,\n activeStepId: string | undefined,\n steps: readonly ValidatedStep[],\n issues: ValidationIssue[],\n): void {\n if (\n (status !== 'running' && status !== 'paused') ||\n activeStepId === undefined\n ) {\n return;\n }\n\n if (\n !steps.some(\n (step) =>\n step.toolCall.status === 'running' &&\n step.toolCall.toolCallId === activeStepId,\n )\n ) {\n addIssue(\n issues,\n '$.activeStepId',\n 'Active step ID must reference a running step',\n );\n }\n}\n\nfunction validateMetadata(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): void {\n const metadata = requireArray(value, path, issues);\n if (!metadata) return;\n\n const metadataItems = readArrayItems(metadata, path, issues);\n if (!metadataItems) return;\n\n for (const item of metadataItems) {\n const itemPath = `${path}[${item.index}]`;\n const record = requireRecord(item.value, itemPath, issues);\n if (!record) continue;\n rejectUnknownKeys(record, METADATA_KEYS, itemPath, issues);\n requireNonWhitespaceString(\n readRequiredField(record, 'label', `${itemPath}.label`, issues),\n `${itemPath}.label`,\n issues,\n );\n requireString(\n readRequiredField(record, 'value', `${itemPath}.value`, issues),\n `${itemPath}.value`,\n issues,\n );\n }\n}\n\nfunction validateHeader(\n value: unknown,\n path: string,\n issues: ValidationIssue[],\n): void {\n const header = requireRecord(value, path, issues);\n if (!header) return;\n\n rejectUnknownKeys(header, HEADER_KEYS, path, issues);\n requireNonWhitespaceString(\n readRequiredField(header, 'title', `${path}.title`, issues),\n `${path}.title`,\n issues,\n );\n const description = readOptionalField(\n header,\n 'description',\n `${path}.description`,\n issues,\n );\n if (description !== undefined && !isInvalidField(description)) {\n requireString(description, `${path}.description`, issues);\n }\n const metadata = readOptionalField(\n header,\n 'metadata',\n `${path}.metadata`,\n issues,\n );\n if (metadata !== undefined && !isInvalidField(metadata)) {\n validateMetadata(metadata, `${path}.metadata`, issues);\n }\n}\n\nfunction validateStateFields(\n status: AIToolRunStatus,\n snapshot: Record<string, unknown>,\n issues: ValidationIssue[],\n): string | undefined {\n switch (status) {\n case 'ready':\n case 'completed':\n rejectPresentKeys(\n snapshot,\n ['progress', 'activeStepId', 'error'],\n '$',\n issues,\n );\n return undefined;\n case 'running':\n case 'paused': {\n rejectPresentKeys(snapshot, ['error'], '$', issues);\n const progress = readOptionalField(\n snapshot,\n 'progress',\n '$.progress',\n issues,\n );\n if (progress !== undefined && !isInvalidField(progress)) {\n validateProgress(progress, '$.progress', issues);\n }\n const activeStepId = readOptionalField(\n snapshot,\n 'activeStepId',\n '$.activeStepId',\n issues,\n );\n return activeStepId === undefined || isInvalidField(activeStepId)\n ? undefined\n : requireString(activeStepId, '$.activeStepId', issues);\n }\n case 'error': {\n rejectPresentKeys(snapshot, ['activeStepId'], '$', issues);\n const progress = readOptionalField(\n snapshot,\n 'progress',\n '$.progress',\n issues,\n );\n if (progress !== undefined && !isInvalidField(progress)) {\n validateProgress(progress, '$.progress', issues);\n }\n const error = requireRecord(\n readRequiredField(snapshot, 'error', '$.error', issues),\n '$.error',\n issues,\n );\n if (!error) return undefined;\n rejectUnknownKeys(error, ROOT_ERROR_KEYS, '$.error', issues);\n requireNonWhitespaceString(\n readRequiredField(error, 'message', '$.error.message', issues),\n '$.error.message',\n issues,\n );\n return undefined;\n }\n default:\n assertNever(status);\n }\n}\n\nexport function validateAIToolRunSnapshot(\n value: unknown,\n): AIToolRunValidationResult {\n const issues: ValidationIssue[] = [];\n\n try {\n const capturedValue = captureJsonSnapshot(value, '$', issues);\n if (issues.length > 0) {\n return { valid: false, issues };\n }\n if (capturedValue === INVALID_JSON_SNAPSHOT) {\n return {\n valid: false,\n issues: [{ path: '$', message: INSPECTION_FAILURE_MESSAGE }],\n };\n }\n\n validateJsonSafe(capturedValue, '$', issues);\n if (issues.length > 0) {\n return { valid: false, issues };\n }\n\n const snapshot = requireRecord(capturedValue, '$', issues);\n if (!snapshot) {\n return { valid: false, issues };\n }\n\n rejectUnknownKeys(snapshot, ROOT_KEYS, '$', issues);\n const status = requireRunStatus(\n readRequiredField(snapshot, 'status', '$.status', issues),\n '$.status',\n issues,\n );\n const activeStepId = status\n ? validateStateFields(status, snapshot, issues)\n : undefined;\n\n requireNonEmptyString(\n readRequiredField(snapshot, 'runId', '$.runId', issues),\n '$.runId',\n issues,\n );\n validateHeader(\n readRequiredField(snapshot, 'header', '$.header', issues),\n '$.header',\n issues,\n );\n const durationMs = readOptionalField(\n snapshot,\n 'durationMs',\n '$.durationMs',\n issues,\n );\n if (durationMs !== undefined && !isInvalidField(durationMs)) {\n validateDuration(durationMs, '$.durationMs', issues);\n }\n\n const steps = requireArray(\n readRequiredField(snapshot, 'steps', '$.steps', issues),\n '$.steps',\n issues,\n );\n const validatedSteps: ValidatedStep[] = [];\n let stepsAreValid = false;\n if (steps) {\n const stepItems = readArrayItems(steps, '$.steps', issues);\n if (stepItems) {\n const toolCallIds = new Set<string>();\n for (const item of stepItems) {\n const validatedStep = validateStep(\n item.value,\n `$.steps[${item.index}]`,\n issues,\n );\n if (!validatedStep) continue;\n if (toolCallIds.has(validatedStep.toolCall.toolCallId)) {\n addIssue(\n issues,\n `$.steps[${item.index}].toolCall.toolCallId`,\n 'duplicate tool-call ID',\n );\n } else {\n toolCallIds.add(validatedStep.toolCall.toolCallId);\n }\n validatedSteps.push(validatedStep);\n }\n stepsAreValid = validatedSteps.length === stepItems.length;\n if (status && stepsAreValid) {\n validateLifecycle(status, validatedSteps, issues);\n }\n }\n }\n\n const sources = readOptionalField(snapshot, 'sources', '$.sources', issues);\n const sourceIds =\n sources === undefined || isInvalidField(sources)\n ? new Set<string>()\n : validateSources(sources, '$.sources', issues);\n if (stepsAreValid) {\n validateSourceReferences(validatedSteps, sourceIds, issues);\n validateActiveStepReference(status, activeStepId, validatedSteps, issues);\n }\n\n const actions = readOptionalField(snapshot, 'actions', '$.actions', issues);\n if (actions !== undefined && !isInvalidField(actions)) {\n validateActions(actions, '$.actions', status, issues);\n }\n\n if (issues.length > 0) {\n return { valid: false, issues };\n }\n return { valid: true, value: capturedValue as AIToolRunSnapshot };\n } catch {\n return {\n valid: false,\n issues: [{ path: '$', message: INSPECTION_FAILURE_MESSAGE }],\n };\n }\n}\n","'use client';\n\nimport {\n AlertCircle,\n Check,\n ChevronDown,\n ChevronRight,\n CirclePause,\n Clock,\n Wrench,\n} from 'lucide-react';\nimport * as React from 'react';\nimport { Button } from '@/components/atoms/buttons/Button';\nimport { Progress } from '@/components/atoms/display/Progress';\nimport { Card } from '@/components/atoms/layout/Card';\nimport { formatAIDuration } from '@/components/organisms/ai/_shared/format-ai-duration';\nimport {\n WorkflowStepRenderer,\n type WorkflowStepStatus,\n type WorkflowStepViewModel,\n} from '@/components/organisms/ai/_shared/workflow-step-renderer';\nimport { AISource } from '@/components/organisms/ai/AISource';\nimport { AIToolCallList } from '@/components/organisms/ai/AIToolCall';\nimport { assertNever, cn } from '@/lib/utils';\nimport {\n type AIToolRunAction,\n type AIToolRunActionEvent,\n type AIToolRunActionKind,\n type AIToolRunProgress,\n type AIToolRunSnapshot,\n type AIToolRunSource,\n type AIToolRunStep,\n type AIToolRunTechnicalDetails,\n validateAIToolRunSnapshot,\n} from './validation';\n\nexport interface AIToolRunProps\n extends Omit<\n React.ComponentPropsWithoutRef<'section'>,\n 'children' | 'dangerouslySetInnerHTML'\n > {\n run: AIToolRunSnapshot;\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n expandedStepIds?: readonly string[];\n defaultExpandedStepIds?: readonly string[];\n onExpandedStepIdsChange?: (ids: readonly string[]) => void;\n onAction?: (event: AIToolRunActionEvent) => void;\n}\n\ninterface AIToolRunRuntimeBoundaryInput\n extends Omit<\n AIToolRunProps,\n | 'run'\n | 'headingLevel'\n | 'open'\n | 'defaultOpen'\n | 'expandedStepIds'\n | 'defaultExpandedStepIds'\n > {\n run: unknown;\n dangerouslySetInnerHTML?: unknown;\n headingLevel?: unknown;\n open?: unknown;\n defaultOpen?: unknown;\n expandedStepIds?: unknown;\n defaultExpandedStepIds?: unknown;\n}\n\ninterface AIToolRunViewOptions {\n headingLevel?: AIToolRunProps['headingLevel'];\n open?: boolean;\n defaultOpen?: boolean;\n expandedStepIds?: readonly string[];\n defaultExpandedStepIds?: readonly string[];\n}\n\ntype AIToolRunViewValidationResult =\n | { valid: true; value: AIToolRunViewOptions }\n | { valid: false; issues: readonly string[] };\n\nconst MAX_RUNTIME_EXPANDED_STEP_IDS = 10_000;\nconst INVALID_RUNTIME_STRING_ARRAY = Symbol('invalid-runtime-string-array');\nconst ARRAY_PROTOTYPE_MEMBER_KEYS = Reflect.ownKeys(Array.prototype).filter(\n (key) => key !== 'length',\n);\n\nfunction cloneRuntimeStringArray(\n value: unknown,\n): string[] | typeof INVALID_RUNTIME_STRING_ARRAY {\n try {\n if (!Array.isArray(value)) {\n return INVALID_RUNTIME_STRING_ARRAY;\n }\n\n const lengthDescriptor = Reflect.getOwnPropertyDescriptor(value, 'length');\n if (\n lengthDescriptor === undefined ||\n lengthDescriptor.enumerable ||\n !Object.hasOwn(lengthDescriptor, 'value') ||\n typeof lengthDescriptor.value !== 'number' ||\n !Number.isInteger(lengthDescriptor.value) ||\n lengthDescriptor.value < 0 ||\n lengthDescriptor.value > MAX_RUNTIME_EXPANDED_STEP_IDS ||\n !Object.is(Reflect.get(value, 'length'), lengthDescriptor.value)\n ) {\n return INVALID_RUNTIME_STRING_ARRAY;\n }\n\n for (const key of ARRAY_PROTOTYPE_MEMBER_KEYS) {\n if (Reflect.getOwnPropertyDescriptor(value, key) !== undefined) {\n return INVALID_RUNTIME_STRING_ARRAY;\n }\n }\n\n const copy: string[] = [];\n for (let index = 0; index < lengthDescriptor.value; index += 1) {\n const key = String(index);\n const descriptor = Reflect.getOwnPropertyDescriptor(value, key);\n if (\n descriptor === undefined ||\n descriptor.enumerable !== true ||\n !Object.hasOwn(descriptor, 'value') ||\n typeof descriptor.value !== 'string' ||\n !Object.is(Reflect.get(value, key), descriptor.value)\n ) {\n return INVALID_RUNTIME_STRING_ARRAY;\n }\n copy.push(descriptor.value);\n }\n return copy;\n } catch {\n return INVALID_RUNTIME_STRING_ARRAY;\n }\n}\n\nfunction validateRuntimeViewProps({\n headingLevel,\n open,\n defaultOpen,\n expandedStepIds,\n defaultExpandedStepIds,\n}: Pick<\n AIToolRunRuntimeBoundaryInput,\n | 'headingLevel'\n | 'open'\n | 'defaultOpen'\n | 'expandedStepIds'\n | 'defaultExpandedStepIds'\n>): AIToolRunViewValidationResult {\n const issues: string[] = [];\n let validatedExpandedStepIds: string[] | undefined;\n let validatedDefaultExpandedStepIds: string[] | undefined;\n\n if (\n headingLevel !== undefined &&\n (typeof headingLevel !== 'number' ||\n !Number.isInteger(headingLevel) ||\n headingLevel < 2 ||\n headingLevel > 6)\n ) {\n issues.push('headingLevel must be an integer from 2 through 6');\n }\n if (open !== undefined && typeof open !== 'boolean') {\n issues.push('open must be a boolean');\n }\n if (defaultOpen !== undefined && typeof defaultOpen !== 'boolean') {\n issues.push('defaultOpen must be a boolean');\n }\n if (expandedStepIds !== undefined) {\n const cloned = cloneRuntimeStringArray(expandedStepIds);\n if (cloned === INVALID_RUNTIME_STRING_ARRAY) {\n issues.push('expandedStepIds must be an array of strings');\n } else {\n validatedExpandedStepIds = cloned;\n }\n }\n if (defaultExpandedStepIds !== undefined) {\n const cloned = cloneRuntimeStringArray(defaultExpandedStepIds);\n if (cloned === INVALID_RUNTIME_STRING_ARRAY) {\n issues.push('defaultExpandedStepIds must be an array of strings');\n } else {\n validatedDefaultExpandedStepIds = cloned;\n }\n }\n\n if (issues.length > 0) return { valid: false, issues };\n\n return {\n valid: true,\n value: {\n ...(headingLevel === undefined\n ? {}\n : { headingLevel: headingLevel as AIToolRunProps['headingLevel'] }),\n ...(open === undefined ? {} : { open: open as boolean }),\n ...(defaultOpen === undefined\n ? {}\n : { defaultOpen: defaultOpen as boolean }),\n ...(expandedStepIds === undefined\n ? {}\n : { expandedStepIds: validatedExpandedStepIds }),\n ...(defaultExpandedStepIds === undefined\n ? {}\n : {\n defaultExpandedStepIds: validatedDefaultExpandedStepIds,\n }),\n },\n };\n}\n\nconst InvalidAIToolRun = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<'section'>\n>(({ className, ...sectionProps }, ref) => (\n <section\n {...sectionProps}\n ref={ref}\n data-slot=\"ai-tool-run\"\n role=\"alert\"\n aria-label=\"Tool run\"\n className={cn('w-full min-w-0', className)}\n >\n Unable to display tool run.\n </section>\n));\n\nInvalidAIToolRun.displayName = 'InvalidAIToolRun';\n\nconst RUN_STATUS_LABELS = {\n ready: 'Ready',\n running: 'Running',\n paused: 'Paused',\n completed: 'Completed',\n error: 'Failed',\n} as const satisfies Record<AIToolRunSnapshot['status'], string>;\n\nconst STANDARD_ACTION_LABELS = {\n start: 'Start',\n pause: 'Pause',\n resume: 'Resume',\n retry: 'Retry',\n dismiss: 'Dismiss',\n} as const satisfies Record<Exclude<AIToolRunActionKind, 'custom'>, string>;\n\nconst PAUSED_PROGRESS_CLASS_NAME =\n '[&_[data-slot=progress-indicator]]:!transition-none [&_[data-slot=progress-indicator]]:!animate-none';\n\nfunction RunStatusIcon({ status }: { status: AIToolRunSnapshot['status'] }) {\n switch (status) {\n case 'ready':\n return (\n <Wrench aria-hidden=\"true\" className=\"size-4 text-muted-foreground\" />\n );\n case 'running':\n return (\n <Clock\n aria-hidden=\"true\"\n className=\"size-4 text-primary animate-pulse motion-reduce:animate-none\"\n />\n );\n case 'paused':\n return <CirclePause aria-hidden=\"true\" className=\"size-4 text-warning\" />;\n case 'completed':\n return <Check aria-hidden=\"true\" className=\"size-4 text-success\" />;\n case 'error':\n return (\n <AlertCircle aria-hidden=\"true\" className=\"size-4 text-destructive\" />\n );\n default:\n return assertNever(status);\n }\n}\n\nRunStatusIcon.displayName = 'RunStatusIcon';\n\nfunction getActionLabel(action: AIToolRunAction): string {\n if (action.kind === 'custom') return action.label;\n return action.label ?? STANDARD_ACTION_LABELS[action.kind];\n}\n\nfunction getPoliteAnnouncement(run: AIToolRunSnapshot): string {\n if (run.status === 'error') return '';\n\n const activeStep =\n run.activeStepId === undefined\n ? undefined\n : run.steps.find((step) => step.toolCall.toolCallId === run.activeStepId);\n const statusLabel = RUN_STATUS_LABELS[run.status];\n\n return activeStep\n ? `${statusLabel}. Current step: ${activeStep.title ?? activeStep.toolCall.toolName}.`\n : `${statusLabel}.`;\n}\n\nfunction getWorkflowStepStatus(\n runStatus: AIToolRunSnapshot['status'],\n step: AIToolRunStep,\n): WorkflowStepStatus {\n const toolStatus = step.toolCall.status;\n switch (toolStatus) {\n case 'pending':\n return 'pending';\n case 'running':\n return runStatus === 'paused' ? 'suspended' : 'running';\n case 'success':\n return 'completed';\n case 'error':\n return 'error';\n default:\n return assertNever(toolStatus);\n }\n}\n\nfunction AIToolRunStepContent({\n progress,\n sources,\n title,\n paused,\n technicalDetails,\n}: {\n progress?: AIToolRunProgress;\n sources: readonly AIToolRunSource[];\n title: string;\n paused: boolean;\n technicalDetails?: AIToolRunTechnicalDetails;\n}) {\n const failedToolCallIds =\n technicalDetails?.toolCalls.flatMap((toolCall) =>\n toolCall.status === 'error' ? [toolCall.toolCallId] : [],\n ) ?? [];\n\n return (\n <div className=\"grid min-w-0 gap-3\">\n {progress && (\n <Progress\n value={progress.value}\n label={progress.label}\n subLabel={progress.meta}\n className={paused ? PAUSED_PROGRESS_CLASS_NAME : undefined}\n />\n )}\n {sources.length > 0 && (\n <ul aria-label={`Sources for ${title}`} className=\"grid min-w-0 gap-2\">\n {sources.map((item, index) => (\n <li\n key={`${item.id}-${index}`}\n className=\"flex min-w-0 items-center gap-2\"\n >\n {item.kind === 'reference' ? (\n <span\n data-slot=\"ai-tool-run-reference\"\n className=\"min-w-0 truncate text-sm text-secondary-foreground\"\n title={item.description}\n >\n {item.title}\n </span>\n ) : (\n <AISource\n source={item}\n variant=\"minimal\"\n showTooltip={false}\n className=\"min-w-0 max-w-none\"\n />\n )}\n </li>\n ))}\n </ul>\n )}\n {technicalDetails && technicalDetails.toolCalls.length > 0 && (\n <div className=\"grid min-w-0 gap-2\">\n {technicalDetails.label && (\n <p className=\"text-xs font-medium text-secondary-foreground\">\n {technicalDetails.label}\n </p>\n )}\n <AIToolCallList\n toolCalls={technicalDetails.toolCalls}\n defaultOpenToolCallIds={failedToolCallIds}\n />\n </div>\n )}\n </div>\n );\n}\n\nAIToolRunStepContent.displayName = 'AIToolRunStepContent';\n\nfunction toWorkflowStep(\n runStatus: AIToolRunSnapshot['status'],\n step: AIToolRunStep,\n sourcesById: ReadonlyMap<string, AIToolRunSource>,\n): WorkflowStepViewModel {\n const title = step.title ?? step.toolCall.toolName;\n const stepSources = (step.sourceIds ?? []).flatMap((sourceId) => {\n const source = sourcesById.get(sourceId);\n return source === undefined ? [] : [source];\n });\n const hasContent =\n step.progress !== undefined ||\n stepSources.length > 0 ||\n step.technicalDetails !== undefined;\n\n return {\n id: step.toolCall.toolCallId,\n title,\n description: step.description,\n contextLabel: step.context?.label,\n status: getWorkflowStepStatus(runStatus, step),\n content: hasContent ? (\n <AIToolRunStepContent\n progress={step.progress}\n sources={stepSources}\n title={title}\n paused={runStatus === 'paused'}\n technicalDetails={step.technicalDetails}\n />\n ) : undefined,\n durationMs: step.durationMs,\n error: step.toolCall.status === 'error' ? step.toolCall.error : undefined,\n };\n}\n\nfunction useAIToolRunOpenState({\n open,\n defaultOpen,\n onOpenChange,\n}: Pick<AIToolRunProps, 'open' | 'defaultOpen' | 'onOpenChange'>) {\n const isControlled = open !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(\n defaultOpen ?? true,\n );\n const lastControlledOpenRef = React.useRef(open ?? uncontrolledOpen);\n const wasControlledRef = React.useRef(isControlled);\n\n React.useLayoutEffect(() => {\n if (open !== undefined) {\n lastControlledOpenRef.current = open;\n }\n }, [open]);\n\n React.useLayoutEffect(() => {\n const wasControlled = wasControlledRef.current;\n wasControlledRef.current = isControlled;\n\n if (isControlled || !wasControlled) {\n return;\n }\n\n setUncontrolledOpen((currentOpen) =>\n currentOpen === lastControlledOpenRef.current\n ? currentOpen\n : lastControlledOpenRef.current,\n );\n }, [isControlled]);\n\n const setOpen = React.useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n return [isControlled ? open : uncontrolledOpen, setOpen] as const;\n}\n\nconst AIToolRunPresentation = React.forwardRef<HTMLElement, AIToolRunProps>(\n (\n {\n run,\n headingLevel = 2,\n open,\n defaultOpen,\n onOpenChange,\n expandedStepIds,\n defaultExpandedStepIds,\n onExpandedStepIdsChange,\n onAction,\n className,\n ...sectionProps\n },\n ref,\n ) => {\n const headingId = React.useId();\n const detailsId = React.useId();\n const Heading = `h${headingLevel}` as 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n const [isOpen, setIsOpen] = useAIToolRunOpenState({\n open,\n defaultOpen,\n onOpenChange,\n });\n const sourcesById = React.useMemo(\n () => new Map((run.sources ?? []).map((source) => [source.id, source])),\n [run.sources],\n );\n const workflowSteps = React.useMemo(\n () =>\n run.steps.map((step) => toWorkflowStep(run.status, step, sourcesById)),\n [run.status, run.steps, sourcesById],\n );\n const initialExpandedStepIds = React.useMemo(() => {\n const requested = new Set(defaultExpandedStepIds);\n for (const step of run.steps) {\n if (step.toolCall.status === 'error') {\n requested.add(step.toolCall.toolCallId);\n }\n }\n return run.steps.flatMap((step) =>\n requested.has(step.toolCall.toolCallId)\n ? [step.toolCall.toolCallId]\n : [],\n );\n }, [defaultExpandedStepIds, run.steps]);\n const rootError = run.status === 'error' ? run.error.message : undefined;\n const politeAnnouncement = getPoliteAnnouncement(run);\n const { 'aria-busy': _ariaBusy, ...nativeSectionProps } = sectionProps;\n\n return (\n <section\n {...nativeSectionProps}\n ref={ref}\n data-slot=\"ai-tool-run\"\n aria-labelledby={headingId}\n className={cn('relative w-full min-w-0', className)}\n >\n <Card\n aria-busy={run.status === 'running' ? true : undefined}\n className=\"rounded-2xl\"\n >\n <Card.Header>\n <div className=\"grid min-w-0 gap-1\">\n <div className=\"flex min-w-0 items-center gap-2 text-xs font-medium text-secondary-foreground\">\n <RunStatusIcon status={run.status} />\n <span>Status: {RUN_STATUS_LABELS[run.status]}</span>\n {run.durationMs !== undefined && (\n <span>{formatAIDuration(run.durationMs)}</span>\n )}\n </div>\n <Heading\n id={headingId}\n className=\"min-w-0 truncate text-base font-semibold text-foreground\"\n >\n {run.header.title}\n </Heading>\n {run.header.description && (\n <p className=\"line-clamp-2 text-sm text-secondary-foreground\">\n {run.header.description}\n </p>\n )}\n {run.header.metadata && run.header.metadata.length > 0 && (\n <dl className=\"flex flex-wrap gap-x-3 gap-y-1 text-xs text-secondary-foreground\">\n {run.header.metadata.map((item, index) => (\n <div\n key={`${item.label}-${index}`}\n className=\"flex min-w-0 items-center gap-1\"\n >\n <dt className=\"text-muted-foreground\">{item.label}:</dt>\n <dd className=\"min-w-0 truncate\">{item.value}</dd>\n </div>\n ))}\n </dl>\n )}\n {!isOpen && run.progress && (\n <Progress\n value={run.progress.value}\n label={run.progress.label}\n subLabel={run.progress.meta}\n className={\n run.status === 'paused'\n ? PAUSED_PROGRESS_CLASS_NAME\n : undefined\n }\n />\n )}\n </div>\n <Card.Action>\n <Button\n appearance=\"ghost\"\n variant=\"secondary\"\n size=\"icon-xl\"\n iconOnly\n aria-label={isOpen ? 'Collapse tool run' : 'Expand tool run'}\n aria-expanded={isOpen}\n aria-controls={detailsId}\n onClick={() => setIsOpen(!isOpen)}\n >\n {isOpen ? (\n <ChevronDown aria-hidden=\"true\" />\n ) : (\n <ChevronRight aria-hidden=\"true\" className=\"rtl:rotate-180\" />\n )}\n </Button>\n </Card.Action>\n </Card.Header>\n <Card.Content\n id={detailsId}\n hidden={!isOpen}\n className=\"grid min-w-0 gap-4\"\n >\n {run.progress && (\n <Progress\n value={run.progress.value}\n label={run.progress.label}\n subLabel={run.progress.meta}\n className={\n run.status === 'paused'\n ? PAUSED_PROGRESS_CLASS_NAME\n : undefined\n }\n />\n )}\n {rootError && (\n <div className=\"flex min-w-0 items-start gap-2 rounded-lg border border-destructive/50 bg-destructive/10 p-3\">\n <AlertCircle\n aria-hidden=\"true\"\n className=\"mt-0.5 size-4 shrink-0 text-destructive\"\n />\n <p className=\"min-w-0 text-sm text-destructive\">{rootError}</p>\n </div>\n )}\n <WorkflowStepRenderer\n key={run.runId}\n appearance=\"timeline\"\n steps={workflowSteps}\n activeStepId={run.activeStepId}\n expandedStepIds={expandedStepIds}\n defaultExpandedStepIds={initialExpandedStepIds}\n onExpandedStepIdsChange={onExpandedStepIdsChange}\n renderItems={isOpen}\n />\n </Card.Content>\n {run.actions && run.actions.length > 0 && (\n <Card.Footer className=\"flex flex-wrap gap-2\">\n {run.actions.map((action) => (\n <Button\n key={action.id}\n appearance=\"outline\"\n variant=\"secondary\"\n disabled={action.disabled}\n loading={action.loading}\n aria-label={getActionLabel(action)}\n className=\"min-w-0 w-full max-w-full min-[480px]:w-auto h-auto min-h-9 whitespace-normal break-words [overflow-wrap:anywhere] [&>span]:min-w-0\"\n onClick={() => {\n if (action.disabled || action.loading) return;\n onAction?.({\n runId: run.runId,\n actionId: action.id,\n kind: action.kind,\n });\n }}\n >\n {getActionLabel(action)}\n </Button>\n ))}\n </Card.Footer>\n )}\n </Card>\n {rootError ? (\n <div\n role=\"alert\"\n aria-live=\"assertive\"\n className=\"sr-only left-0 top-0\"\n >\n {rootError}\n </div>\n ) : (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"sr-only left-0 top-0\"\n >\n {politeAnnouncement}\n </div>\n )}\n </section>\n );\n },\n);\n\nAIToolRunPresentation.displayName = 'AIToolRunPresentation';\n\nexport const AIToolRunRuntimeBoundary = React.forwardRef<\n HTMLElement,\n AIToolRunRuntimeBoundaryInput\n>((props, ref) => {\n const {\n run,\n headingLevel,\n open,\n defaultOpen,\n expandedStepIds,\n defaultExpandedStepIds,\n dangerouslySetInnerHTML: unsafeHtml,\n onOpenChange,\n onExpandedStepIdsChange,\n onAction,\n ...sectionProps\n } = props;\n void unsafeHtml;\n const snapshotResult = validateAIToolRunSnapshot(run);\n const viewResult = validateRuntimeViewProps({\n headingLevel,\n open,\n defaultOpen,\n expandedStepIds,\n defaultExpandedStepIds,\n });\n\n if (!snapshotResult.valid || !viewResult.valid) {\n return <InvalidAIToolRun {...sectionProps} ref={ref} />;\n }\n\n return (\n <AIToolRunPresentation\n {...sectionProps}\n {...viewResult.value}\n onOpenChange={onOpenChange}\n onExpandedStepIdsChange={onExpandedStepIdsChange}\n onAction={onAction}\n ref={ref}\n run={snapshotResult.value}\n />\n );\n});\n\n/**\n * Displays one validated AI tool run with lifecycle, progress, sources,\n * disclosure, and action intents.\n *\n * @llms Validated AI tool-run timeline with lifecycle, progress, sources, disclosure, and actions\n */\nexport const AIToolRun = React.forwardRef<HTMLElement, AIToolRunProps>(\n (props, ref) => <AIToolRunRuntimeBoundary {...props} ref={ref} />,\n);\n\nAIToolRunRuntimeBoundary.displayName = 'AIToolRunRuntimeBoundary';\nAIToolRun.displayName = 'AIToolRun';\n","/**\n * Web Component wrapper for AIToolRun (hand-crafted transport adapter).\n * Custom element: <hf-ai-tool-run>\n *\n * @generated by scripts/generate-wc-components.ts\n * DO NOT EDIT THE GENERATED src/wc COPY\n */\nimport React from 'react';\nimport { AIToolRunRuntimeBoundary } from '../components/organisms/ai/AIToolRun/AIToolRun';\nimport type { AIToolRunActionEvent } from '../components/organisms/ai/AIToolRun/validation';\nimport {\n BaseCompoundWC,\n camelToKebab,\n dispatchEvent,\n installPropAccessors,\n type PropDefs,\n registerWC,\n} from './_shared';\n\nconst PROP_DEFS: PropDefs = {\n run: 'json',\n headingLevel: 'number',\n open: 'boolean',\n defaultOpen: 'boolean',\n expandedStepIds: 'json',\n defaultExpandedStepIds: 'json',\n};\n\nconst INVALID_TRANSPORT_VALUE = Object.freeze({\n invalidAIToolRunTransportValue: true,\n});\n\nclass AIToolRunWC extends BaseCompoundWC {\n get propDefs() {\n return PROP_DEFS;\n }\n\n static get observedAttributes() {\n return Object.keys(PROP_DEFS).map(camelToKebab);\n }\n\n private _hasTransportValue(name: keyof typeof PROP_DEFS): boolean {\n return (\n Object.hasOwn(this._props, name) || this.hasAttribute(camelToKebab(name))\n );\n }\n\n private _readTransportValue(\n props: Record<string, unknown>,\n name: keyof typeof PROP_DEFS,\n fallback?: unknown,\n ): unknown {\n if (!this._hasTransportValue(name)) return fallback;\n return props[name] === undefined ? INVALID_TRANSPORT_VALUE : props[name];\n }\n\n protected _renderReact(): React.ReactElement {\n const props = this._readAllProps();\n const hasOpen = this._hasTransportValue('open');\n const hasExpandedStepIds = this._hasTransportValue('expandedStepIds');\n\n return React.createElement(AIToolRunRuntimeBoundary, {\n run: this._readTransportValue(props, 'run'),\n headingLevel: this._readTransportValue(props, 'headingLevel', 2),\n defaultOpen: this._readTransportValue(props, 'defaultOpen', true),\n defaultExpandedStepIds: this._readTransportValue(\n props,\n 'defaultExpandedStepIds',\n [],\n ),\n ...(hasOpen ? { open: this._readTransportValue(props, 'open') } : {}),\n ...(hasExpandedStepIds\n ? {\n expandedStepIds: this._readTransportValue(props, 'expandedStepIds'),\n }\n : {}),\n onAction: (event: AIToolRunActionEvent) =>\n dispatchEvent(this, 'action', event),\n onOpenChange: (open: boolean) => dispatchEvent(this, 'open-change', open),\n onExpandedStepIdsChange: (ids: readonly string[]) =>\n dispatchEvent(this, 'expanded-step-ids-change', [...ids]),\n });\n }\n}\n\ninstallPropAccessors(AIToolRunWC, PROP_DEFS);\nregisterWC('hf-ai-tool-run', AIToolRunWC);\n\nexport { AIToolRunWC };\nexport default AIToolRunWC;\n"],"x_google_ignoreList":[0],"mappings":"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"}