@braedonsaunders/appkit-ai 1.4.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/react.d.ts +32 -0
- package/react.d.ts.map +1 -1
- package/react.js +0 -0
- package/react.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@braedonsaunders/appkit-ai",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "App-agnostic bounded agent loop and streaming assistant interface, with provider policy supplied by the host app.",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"type": "module",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"zod": "^4.4.3"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"@braedonsaunders/appkit-ui": "^0.
|
|
32
|
+
"@braedonsaunders/appkit-ui": "^0.3.0",
|
|
33
33
|
"lucide-react": "^1.24.0",
|
|
34
34
|
"react": "^19.0.0",
|
|
35
35
|
"react-dom": "^19.0.0",
|
package/react.d.ts
CHANGED
|
@@ -11,6 +11,38 @@ declare function sameTranscript(left: AgentMessage[], right: AgentMessage[]): bo
|
|
|
11
11
|
* nothing outside this module should call it.
|
|
12
12
|
*/
|
|
13
13
|
export declare const __sameTranscriptForTests: typeof sameTranscript;
|
|
14
|
+
/**
|
|
15
|
+
* Adopt turns the PERSON has added while this panel is streaming its own.
|
|
16
|
+
*
|
|
17
|
+
* The reconciliation below stands down entirely during a stream, because the
|
|
18
|
+
* parts this panel is receiving are richer than anything the host has persisted
|
|
19
|
+
* and replacing them mid-answer loses detail. That is right about the assistant
|
|
20
|
+
* and wrong about the person: a reader can speak while a turn is in flight —
|
|
21
|
+
* steering it, or releasing a queued message into it — and the host appends that
|
|
22
|
+
* to the transcript immediately. Standing down meant their own words never
|
|
23
|
+
* appeared anywhere. They had sent a message, it was recorded, the agent was
|
|
24
|
+
* already acting on it, and the screen showed no trace of it at all.
|
|
25
|
+
*
|
|
26
|
+
* Only `user` messages the panel does not already have, and only ever inserted
|
|
27
|
+
* BEFORE a trailing in-flight assistant message — which is where they land once
|
|
28
|
+
* the run finishes and the whole transcript is adopted, so nothing jumps around
|
|
29
|
+
* when it does. Assistant messages are never taken from the host here, so this
|
|
30
|
+
* cannot duplicate or truncate the answer being streamed.
|
|
31
|
+
*/
|
|
32
|
+
declare function withHostUserTurns(current: AgentMessage[], host: AgentMessage[],
|
|
33
|
+
/**
|
|
34
|
+
* Host ids from the previous reconciliation.
|
|
35
|
+
*
|
|
36
|
+
* Needed to tell a turn the host has WITHDRAWN from one this panel owns. A host
|
|
37
|
+
* may show a message provisionally and then replace it — a queued message is
|
|
38
|
+
* rendered from the queue until it is delivered, at which point it becomes a
|
|
39
|
+
* real turn under a real id. Without this the panel would hold both and the
|
|
40
|
+
* same sentence would appear twice. Panel-owned turns (the optimistic message a
|
|
41
|
+
* submit adds under its own id) were never host ids, so they are never dropped.
|
|
42
|
+
*/
|
|
43
|
+
hostIdsBefore: ReadonlySet<string>): AgentMessage[];
|
|
44
|
+
/** Exported for the suite: the streaming case is the one that was broken. */
|
|
45
|
+
export declare const __withHostUserTurnsForTests: typeof withHostUserTurns;
|
|
14
46
|
export type AgentQueuedMessage = {
|
|
15
47
|
id: string;
|
|
16
48
|
text: string;
|
package/react.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA8B9B,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;IACrC,KAAK,EAAE,OAAO,EAAE,CAAA;CACjB,CAAA;
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA8B9B,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;IACrC,KAAK,EAAE,OAAO,EAAE,CAAA;CACjB,CAAA;AAmCD,iBAAS,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAc5E;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,uBAAiB,CAAA;AAEtD;;;;;;;;;;;;;;;;;GAiBG;AACH,iBAAS,iBAAiB,CACxB,OAAO,EAAE,YAAY,EAAE,EACvB,IAAI,EAAE,YAAY,EAAE;AACpB;;;;;;;;;GASG;AACH,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,GACjC,YAAY,EAAE,CAchB;AAED,6EAA6E;AAC7E,eAAO,MAAM,2BAA2B,0BAAoB,CAAA;AAE5D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,QAAQ,CAAA;IACxD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEvE;;;;;;;;;GASG;AACH,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEnG,uEAAuE;AACvE,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,kBAAkB,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,MAAM,EAAE,0BAA0B,CAAA;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAA;IACd,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAeD,iEAAiE;AACjE,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,gBAAgB,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,wBAAwB,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAgBD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,CAAA;AAElE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AA+BD,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,YAAY,EAAE,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAClC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,qEAAqE;IACrE,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC9B,8EAA8E;IAC9E,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,iEAAiE;IACjE,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;KAAE,CAAA;IACvE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjE,kFAAkF;IAClF,aAAa,CAAC,EAAE,kBAAkB,CAAA;IAClC,iFAAiF;IACjF,cAAc,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAC9C,mEAAmE;IACnE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC3D,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC7D,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC5D,8EAA8E;IAC9E,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC9D;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,wEAAwE;IACxE,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnF,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnE,mBAAmB,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACvD,uBAAuB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxH,qBAAqB,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAC3D,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC,CAAA;AAwDD,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,eAAoB,EACpB,WAAgB,EAChB,MAAM,EAAE,cAAc,EACtB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,eAAe,EACf,eAAe,EACf,aAAa,EACb,IAAI,EACJ,aAAsB,EACtB,cAAmB,EACnB,OAAO,EACP,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,OAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACrB,mBAA4B,EAC5B,UAAU,GACX,EAAE,eAAe,qBA2JjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,MAAM,EAAE,cAAc,EACtB,MAAM,EACN,QAAQ,EACR,OAAO,EACP,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAClC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC9C,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAChD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC/C,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAA;CAClD,qBAmBA;AA0CD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,KAAiC,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,qBA+B7F;AAiED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,wBAAwB,CAAA;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAC5C,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1G,CAAA;AAED,8DAA8D;AAC9D,wBAAgB,wBAAwB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,6BAA6B,qBAwEpH;AA2BD,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,sBAAsB,CAAA;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAA;IAC1C,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACvD,CAAA;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,2BAA2B,qBA0G1H;AAqCD,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,qBAE9D;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAoB,EAAE,WAAsB,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,qBAK/O"}
|
package/react.js
CHANGED
|
Binary file
|
package/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport {\n parseJsonEventStream,\n readUIMessageStream,\n uiMessageChunkSchema,\n type UIMessageChunk,\n} from 'ai'\nimport {\n AlertCircle,\n CheckCircle2,\n ChevronRight,\n Database,\n ExternalLink,\n Eye,\n EyeOff,\n KeyRound,\n ListPlus,\n Loader2,\n Pencil,\n RotateCcw,\n Send,\n ShieldCheck,\n Sparkles,\n Square,\n Trash2,\n} from 'lucide-react'\nimport Markdown from 'react-markdown'\nimport remarkGfm from 'remark-gfm'\nimport { Button, EmptyState, Input, UiLink, cn } from '@braedonsaunders/appkit-ui'\n\nexport type AgentMessage = {\n id: string\n role: 'user' | 'assistant' | 'system'\n parts: unknown[]\n}\n\n/**\n * Whether two transcripts say the same thing.\n *\n * A host maps its own records into `AgentMessage[]` on every render, so the array\n * is a new reference each time and reference equality would make reconciliation\n * fire forever. Deep equality is the other extreme: these carry whole tool\n * inputs and outputs. This is the middle — enough to notice a new message, a new\n * part, a call moving from running to returned, or prose growing, which is every\n * way a transcript moves forward.\n */\nfunction partSignature(part: unknown): string {\n if (part === null || typeof part !== 'object') return String(part)\n const shape = part as {\n type?: unknown\n state?: unknown\n status?: unknown\n toolCallId?: unknown\n text?: unknown\n }\n return [\n String(shape.type ?? ''),\n // A tool card completing, and a secret/approval request being decided.\n String(shape.state ?? ''),\n String(shape.status ?? ''),\n String(shape.toolCallId ?? ''),\n typeof shape.text === 'string' ? String(shape.text.length) : '',\n ].join('\u0000')\n}\n\nfunction sameTranscript(left: AgentMessage[], right: AgentMessage[]): boolean {\n if (left === right) return true\n if (left.length !== right.length) return false\n for (let index = 0; index < left.length; index += 1) {\n const before = left[index]\n const after = right[index]\n if (!before || !after) return false\n if (before.id !== after.id || before.role !== after.role) return false\n if (before.parts.length !== after.parts.length) return false\n for (let part = 0; part < before.parts.length; part += 1) {\n if (partSignature(before.parts[part]) !== partSignature(after.parts[part])) return false\n }\n }\n return true\n}\n\n/**\n * The comparison, reachable from the suite. It is the part with judgement in it\n * — what counts as \"the transcript moved\" — and the underscore says plainly that\n * nothing outside this module should call it.\n */\nexport const __sameTranscriptForTests = sameTranscript\n\nexport type AgentQueuedMessage = {\n id: string\n text: string\n position: number\n status: 'queued' | 'dispatching' | 'retrying' | 'failed'\n statusLabel?: string\n editable?: boolean\n removable?: boolean\n retryable?: boolean\n /**\n * Whether this one can be sent ahead of its turn. Defaults to true where the\n * host provides `onSendNow`; a host that knows it cannot — something already\n * running, or a failure in front that has to be dealt with first — says so.\n */\n sendable?: boolean\n}\n\nexport type AgentSecretRequestStatus = 'pending' | 'stored' | 'expired'\n\n/**\n * `failed` is deliberately distinct from `rejected`: the decision was made and\n * the action was attempted, and it is CARRYING IT OUT that did not work.\n *\n * Without it, a decided approval whose execution died has nowhere truthful to\n * sit. It stays `approved` — the card keeps saying the work will continue\n * automatically, indefinitely, while nothing is happening — and the reader is\n * left to conclude the agent simply forgot. A surface that cannot say \"this\n * did not happen\" will always eventually say something untrue.\n */\nexport type AgentApprovalRequestStatus = 'pending' | 'approved' | 'rejected' | 'expired' | 'failed'\n\n/** Transcript-safe metadata for an inline governed-action decision. */\nexport type AgentApprovalRequestPart = {\n type: 'approval-request'\n approvalId: string\n categoryLabel: string\n description: string\n details?: Array<{ label: string; value: string }>\n status: AgentApprovalRequestStatus\n decisionNote?: string\n /**\n * Why carrying the decision out failed, in the operator's words. Shown\n * verbatim beside a `failed` status — a failure the reader cannot see the\n * reason for is only marginally better than one they cannot see at all.\n */\n failureReason?: string\n}\n\nexport type AgentApprovalRequestLabels = {\n title: string\n note: string\n approve: string\n reject: string\n deciding: string\n approved: string\n rejected: string\n expired: string\n /** The decision itself could not be saved — the reader should press again. */\n failed: string\n /** The decision saved, and acting on it failed. Nothing to press again. */\n carryOutFailed: string\n}\n\nconst DEFAULT_APPROVAL_REQUEST_LABELS: AgentApprovalRequestLabels = {\n title: 'Approval needed',\n note: 'Add a note (optional)',\n approve: 'Approve',\n reject: 'Decline',\n deciding: 'Saving decision',\n approved: 'Approved. The agent will continue automatically.',\n rejected: 'Declined. The agent will receive your decision.',\n expired: 'This approval request has expired.',\n failed: 'The decision could not be saved. Please retry.',\n carryOutFailed: 'Approved, but the action could not be carried out. The agent has not continued.',\n}\n\n/** Transcript-safe metadata for an inline credential request. */\nexport type AgentSecretRequestPart = {\n type: 'secret-request'\n requestId: string\n providerLabel: string\n credentialLabel: string\n purpose: string\n helpUrl?: string\n status: AgentSecretRequestStatus\n}\n\nexport type AgentSecretRequestLabels = {\n show: string\n hide: string\n submit: string\n cancel: string\n help: string\n submitting: string\n stored: string\n expired: string\n required: string\n failed: string\n cancelFailed: string\n}\n\nconst DEFAULT_SECRET_REQUEST_LABELS: AgentSecretRequestLabels = {\n show: 'Show credential',\n hide: 'Hide credential',\n submit: 'Submit securely',\n cancel: 'Cancel',\n help: 'Open setup instructions',\n submitting: 'Submitting securely',\n stored: 'Credential stored securely.',\n expired: 'This credential request has expired.',\n required: 'Enter the credential before submitting.',\n failed: 'The credential could not be submitted. Enter it again and retry.',\n cancelFailed: 'The credential request could not be canceled. Please retry.',\n}\n\nexport type AgentDispatchState = 'idle' | 'running' | 'recovering'\n\nexport type AgentPanelLabels = {\n title: string\n welcomeTitle: string\n welcomeDescription: string\n disabledTitle: string\n disabledDescription: string\n placeholder: string\n send: string\n stop: string\n failed: string\n input: string\n result: string\n working: string\n step: string\n steps: string\n queue: string\n queueTitle: string\n queuePosition: string\n queued: string\n dispatching: string\n retrying: string\n queueFailed: string\n editQueued: string\n removeQueued: string\n retryQueued: string\n sendQueuedNow: string\n responding: string\n}\n\nconst DEFAULT_LABELS: AgentPanelLabels = {\n title: 'Assistant',\n welcomeTitle: 'How can I help?',\n welcomeDescription: 'Ask about your workspace or let the assistant use an approved tool.',\n disabledTitle: 'Connect an AI provider',\n disabledDescription: 'Connect an AI provider to enable agent conversations. No provider credentials are included in the demo.',\n placeholder: 'Ask the assistant…',\n send: 'Send',\n stop: 'Stop generating',\n failed: 'The assistant could not complete that turn. Please try again.',\n input: 'Input',\n result: 'Result',\n working: 'Working',\n step: 'step',\n steps: 'steps',\n queue: 'Add to queue',\n queueTitle: 'Up next',\n queuePosition: 'Position',\n queued: 'Queued',\n dispatching: 'Starting',\n retrying: 'Retrying',\n queueFailed: 'This queued message needs attention.',\n editQueued: 'Edit queued message',\n removeQueued: 'Remove queued message',\n retryQueued: 'Retry queued message',\n sendQueuedNow: 'Send now',\n responding: 'Assistant is responding',\n}\n\nexport type AgentPanelProps = {\n enabled: boolean\n initialMessages?: AgentMessage[]\n suggestions?: string[]\n labels?: Partial<AgentPanelLabels>\n headerActions?: React.ReactNode\n /** Application-owned identity rendered beside assistant messages. */\n assistantAvatar?: React.ReactNode\n /** Replaces the stock empty-state card while preserving the panel header and composer. */\n emptyContent?: React.ReactNode\n /** Application-owned draft UI rendered immediately above the composer row. */\n composerContent?: React.ReactNode\n /** Application-owned controls rendered before the text input. */\n composerActions?: React.ReactNode\n /**\n * Non-text content currently attached to the draft. `fallbackPrompt` makes\n * a file-only draft sendable; `parts` are included in the optimistic user\n * turn so the attachment does not disappear while the response streams.\n */\n composerDraft?: { fallbackPrompt?: string; parts?: readonly unknown[] }\n send?: (prompt: string, signal: AbortSignal) => Promise<Response>\n /** Durable dispatch state supplied by the application after reload or handoff. */\n dispatchState?: AgentDispatchState\n /** Application-owned queue, already ordered by its durable dispatch position. */\n queuedMessages?: readonly AgentQueuedMessage[]\n /** Persists a turn behind the active or previously queued work. */\n enqueue?: (prompt: string) => Promise<void>\n onEditQueuedMessage?: (message: AgentQueuedMessage) => void\n onRemoveQueuedMessage?: (message: AgentQueuedMessage) => void\n onRetryQueuedMessage?: (message: AgentQueuedMessage) => void\n /** Send a waiting message ahead of its turn. Absent, the queue only waits. */\n onSendQueuedMessageNow?: (message: AgentQueuedMessage) => void\n /**\n * A turn is in flight that this panel is NOT streaming — one running in a\n * worker, or the turn a reader has just reloaded into the middle of.\n *\n * The thinking indicator keyed off `streaming` alone, so work the host could\n * see but this panel was not producing had no sign of life in the transcript\n * at all. That left the host explaining in a banner beside the conversation\n * that something was happening elsewhere, which is not where anyone looks and\n * reads as an apology rather than progress. With this it reads as an ordinary\n * turn in progress, because that is exactly what it is.\n */\n working?: boolean\n /** Receives the transient input value after AppKit clears the field. */\n onSubmitSecretRequest?: (requestId: string, secret: string) => void | Promise<void>\n onCancelSecretRequest?: (requestId: string) => void | Promise<void>\n secretRequestLabels?: Partial<AgentSecretRequestLabels>\n onDecideApprovalRequest?: (approvalId: string, decision: 'approved' | 'rejected', note?: string) => void | Promise<void>\n approvalRequestLabels?: Partial<AgentApprovalRequestLabels>\n maxPromptCharacters?: number\n toolLabels?: Record<string, string>\n}\n\n/**\n * The streaming thread/composer. The app\n * owns persistence and the HTTP transport; appkit owns UI-message decoding,\n * cancellation, ordered part rendering, and tool cards.\n */\n/**\n * The composer owns the draft input, so typing only re-renders this subtree.\n * Before, the input lived in AgentPanel state: every keystroke re-rendered the\n * whole panel, including every transcript row. On a long thread that meant\n * re-rendering hundreds of markdown/tool-card subtrees per keystroke — typing\n * lag that grew with the conversation. Rows are memoed too, so while a turn\n * streams only the tail row re-renders.\n */\nconst AgentComposer = React.memo(function AgentComposer({\n composerContent,\n composerActions,\n composerDraft,\n queueMode,\n enqueueing,\n canSend,\n canEnqueue,\n streaming,\n stopLabel,\n sendLabel,\n queueLabel,\n placeholder,\n maxPromptCharacters,\n onSubmit,\n onAbort,\n}: {\n composerContent?: React.ReactNode\n composerActions?: React.ReactNode\n composerDraft?: { fallbackPrompt?: string; parts?: readonly unknown[] }\n queueMode: boolean\n enqueueing: boolean\n canSend: boolean\n canEnqueue: boolean\n streaming: boolean\n stopLabel: string\n sendLabel: string\n queueLabel: string\n placeholder: string\n maxPromptCharacters: number\n onSubmit: (raw: string) => void\n onAbort: () => void\n}) {\n const [input, setInput] = React.useState('')\n const fallback = composerDraft?.fallbackPrompt\n const sendable = Boolean(input.trim() || fallback?.trim())\n return (\n <div className=\"shrink-0 border-t border-border bg-surface px-4 py-3\"><div className=\"mx-auto w-full max-w-3xl\">{composerContent != null ? <div className=\"mb-2\">{composerContent}</div> : null}<div className=\"flex items-end gap-2 rounded-2xl border border-border-strong bg-surface p-2 shadow-sm focus-within:border-primary focus-within:ring-2 focus-within:ring-ring/20\">{composerActions}<textarea value={input} onChange={(event) => setInput(event.target.value)} onKeyDown={(event) => { if (event.key === 'Enter' && !event.shiftKey) { event.preventDefault(); onSubmit(input); setInput('') } }} maxLength={maxPromptCharacters} rows={1} placeholder={placeholder} className=\"h-10 max-h-40 flex-1 resize-none overflow-y-auto border-0 bg-transparent px-2 py-2 text-base leading-6 text-fg outline-none placeholder:text-fg-subtle sm:text-sm\" />{streaming ? <Button type=\"button\" variant=\"outline\" size=\"icon\" onClick={onAbort} aria-label={stopLabel}><Square size={16} /></Button> : null}<Button type=\"button\" size=\"icon\" onClick={() => { onSubmit(input); setInput('') }} disabled={!sendable || (queueMode ? !canEnqueue || enqueueing : !canSend)} aria-label={queueMode ? queueLabel : sendLabel}>{enqueueing ? <Loader2 size={16} className=\"animate-spin\" /> : queueMode ? <ListPlus size={16} /> : <Send size={16} />}</Button></div></div></div>\n )\n})\n\nexport function AgentPanel({\n enabled,\n initialMessages = [],\n suggestions = [],\n labels: labelOverrides,\n headerActions,\n assistantAvatar,\n emptyContent,\n composerContent,\n composerActions,\n composerDraft,\n send,\n dispatchState = 'idle',\n queuedMessages = [],\n enqueue,\n onEditQueuedMessage,\n onRemoveQueuedMessage,\n onRetryQueuedMessage,\n onSendQueuedMessageNow,\n working = false,\n onSubmitSecretRequest,\n onCancelSecretRequest,\n secretRequestLabels,\n onDecideApprovalRequest,\n approvalRequestLabels,\n maxPromptCharacters = 32_000,\n toolLabels,\n}: AgentPanelProps) {\n const labels = React.useMemo(() => ({ ...DEFAULT_LABELS, ...labelOverrides }), [labelOverrides])\n const [messages, setMessages] = React.useState(initialMessages)\n const [streaming, setStreaming] = React.useState(false)\n const [enqueueing, setEnqueueing] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n const abortRef = React.useRef<AbortController | null>(null)\n const messageViewportRef = React.useRef<HTMLDivElement>(null)\n\n /**\n * Take a newer transcript from the host while this panel is not the one\n * producing it.\n *\n * Seeding once was right while the only transcript was what had already been\n * recorded, because anything newer arrived through the stream. It is wrong for\n * a host that can also observe work in progress — a turn running in a worker,\n * or the turn a reader has just reloaded into the middle of. Without this, the\n * only way a host could show a tool call made a second ago was to remount the\n * panel, which throws away whatever the person was part-way through typing.\n *\n * Guarded on `streaming` and on there being no live request: while THIS panel\n * owns the turn its streamed parts are richer than anything the host has\n * persisted yet, and replacing them would lose detail mid-answer. The composer\n * keeps its draft across this by construction — the draft lives in the memoed\n * `AgentComposer`, which this does not touch.\n */\n React.useEffect(() => {\n if (streaming || abortRef.current !== null) return\n setMessages((current) => (sameTranscript(current, initialMessages) ? current : initialMessages))\n }, [initialMessages, streaming])\n\n const scrollToBottom = React.useCallback(() => {\n window.requestAnimationFrame(() => {\n const viewport = messageViewportRef.current\n if (viewport) viewport.scrollTop = viewport.scrollHeight\n })\n }, [])\n\n // An existing conversation opens where work most recently happened. Keep\n // this scoped to the panel's own viewport: scrollIntoView also moves every\n // scrolling ancestor and can make an otherwise app-height page jump.\n React.useLayoutEffect(() => {\n scrollToBottom()\n }, [scrollToBottom])\n\n const composerDraftParts = composerDraft?.parts\n const composerDraftFallback = composerDraft?.fallbackPrompt\n\n const submit = React.useCallback(async (raw: string) => {\n const prompt = raw.trim() || composerDraftFallback?.trim() || ''\n if (!enabled || !prompt || prompt.length > maxPromptCharacters) return\n const shouldEnqueue = dispatchState !== 'idle' || abortRef.current !== null || queuedMessages.length > 0\n if (shouldEnqueue) {\n if (!enqueue || enqueueing) return\n setEnqueueing(true)\n setError(null)\n try {\n await enqueue(prompt)\n } catch {\n setError(labels.queueFailed)\n } finally {\n setEnqueueing(false)\n }\n return\n }\n if (!send) return\n const controller = new AbortController()\n abortRef.current = controller\n const stamp = Date.now()\n setError(null)\n setMessages((current) => [...current, { id: `user-${stamp}`, role: 'user', parts: [{ type: 'text', text: prompt }, ...(composerDraftParts ?? [])] }, { id: `assistant-${stamp}`, role: 'assistant', parts: [] }])\n setStreaming(true)\n scrollToBottom()\n let producedParts = false\n try {\n const response = await send(prompt, controller.signal)\n if (!response.ok || !response.body) throw new Error('agent request failed')\n const chunks = parseJsonEventStream({ stream: response.body, schema: uiMessageChunkSchema }).pipeThrough(new TransformStream<{ success: boolean; value?: UIMessageChunk }, UIMessageChunk>({ transform(part, stream) { if (part.success && part.value) stream.enqueue(part.value) } }))\n let lastParts: unknown[] = []\n for await (const message of readUIMessageStream({ stream: chunks })) {\n lastParts = message.parts as unknown[]\n producedParts = lastParts.length > 0\n setMessages((current) => replaceLastAssistantParts(current, lastParts))\n scrollToBottom()\n }\n if (lastParts.length === 0 && !controller.signal.aborted) setError(labels.failed)\n } catch (reason) {\n if ((reason as Error).name !== 'AbortError') setError(labels.failed)\n } finally {\n if (!producedParts) {\n setMessages((current) => current.filter((message) => message.id !== `assistant-${stamp}`))\n }\n setStreaming(false)\n if (abortRef.current === controller) abortRef.current = null\n }\n }, [composerDraftFallback, composerDraftParts, dispatchState, enabled, enqueue, enqueueing, labels.failed, labels.queueFailed, maxPromptCharacters, queuedMessages.length, scrollToBottom, send])\n\n const queueMode = dispatchState !== 'idle' || streaming || queuedMessages.length > 0\n const abort = React.useCallback(() => abortRef.current?.abort(), [])\n // Stable identity so the memoed composer (and its textarea) is not\n // re-rendered by transcript updates such as streamed tokens.\n const submitToComposer = React.useCallback((value: string) => {\n void submit(value)\n }, [submit])\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col bg-bg-subtle\">\n <header className=\"flex h-12 shrink-0 items-center gap-2 border-b border-border bg-surface px-4\"><Sparkles size={16} className=\"text-primary\" /><span className=\"text-sm font-medium text-fg\">{labels.title}</span>{headerActions != null ? <div className=\"ml-auto flex items-center gap-2\">{headerActions}</div> : null}</header>\n <div ref={messageViewportRef} className=\"app-scroll min-h-0 flex-1 overflow-y-auto\">\n {messages.length === 0 && emptyContent != null ? (\n <div className=\"flex min-h-full flex-col\">{emptyContent}</div>\n ) : (\n <div className=\"mx-auto w-full max-w-3xl px-4 py-6\">\n {messages.length === 0 ? <AgentWelcome enabled={enabled} title={enabled ? labels.welcomeTitle : labels.disabledTitle} description={enabled ? labels.welcomeDescription : labels.disabledDescription} suggestions={suggestions} onPick={(value) => void submit(value)} /> : <div className=\"space-y-6\">{messages.map((message, index) => message.role === 'system' ? null : <MemoAgentMessageRow key={message.id} message={message} pending={(streaming || working) && index === messages.length - 1 && message.role === 'assistant'} labels={labels} toolLabels={toolLabels} assistantAvatar={assistantAvatar} onSubmitSecretRequest={onSubmitSecretRequest} onCancelSecretRequest={onCancelSecretRequest} secretRequestLabels={secretRequestLabels} onDecideApprovalRequest={onDecideApprovalRequest} approvalRequestLabels={approvalRequestLabels} />)}</div>}\n </div>\n )}\n {error ? <div role=\"alert\" className=\"mx-auto mb-5 w-[calc(100%-2rem)] max-w-3xl rounded-lg border border-danger/25 bg-danger-subtle px-3 py-2 text-sm text-danger\">{error}</div> : null}\n </div>\n {enabled ? (\n <>\n {queuedMessages.length > 0 ? <div className=\"shrink-0 border-t border-border bg-surface px-4 pt-2\"><div className=\"mx-auto w-full max-w-3xl\"><AgentMessageQueue messages={queuedMessages} labels={labels} onEdit={onEditQueuedMessage} onRemove={onRemoveQueuedMessage} onRetry={onRetryQueuedMessage} onSendNow={onSendQueuedMessageNow} /></div></div> : null}\n <AgentComposer\n composerActions={composerActions}\n composerDraft={composerDraft}\n queueMode={queueMode}\n enqueueing={enqueueing}\n canSend={send !== undefined}\n canEnqueue={enqueue !== undefined}\n streaming={streaming}\n stopLabel={labels.stop}\n sendLabel={labels.send}\n queueLabel={labels.queue}\n placeholder={labels.placeholder}\n maxPromptCharacters={maxPromptCharacters}\n onSubmit={submitToComposer}\n onAbort={abort}\n composerContent={composerContent}\n />\n </>\n ) : null}\n </div>\n )\n}\n\n/**\n * What is waiting to be said, in as little vertical space as it can honestly\n * take.\n *\n * This sits between the transcript and the composer, so every row it spends is a\n * row taken from the conversation being read. The standing title line went: the\n * `section` still carries it as an accessible name, and a numbered row whose own\n * status reads \"Queued\" does not also need a heading to say so. Everything else\n * is one notch tighter — which roughly halves the block for the common case of a\n * single waiting message.\n *\n * `onSendNow` is the way out of waiting. A queued message otherwise goes when the\n * conversation gets to it, and there was no way to say \"go now\" without deleting\n * it and typing it again.\n */\nexport function AgentMessageQueue({\n messages,\n labels: labelOverrides,\n onEdit,\n onRemove,\n onRetry,\n onSendNow,\n}: {\n messages: readonly AgentQueuedMessage[]\n labels?: Partial<AgentPanelLabels>\n onEdit?: (message: AgentQueuedMessage) => void\n onRemove?: (message: AgentQueuedMessage) => void\n onRetry?: (message: AgentQueuedMessage) => void\n onSendNow?: (message: AgentQueuedMessage) => void\n}) {\n const labels = { ...DEFAULT_LABELS, ...labelOverrides }\n return (\n <section className=\"mb-2 rounded-lg border border-border bg-bg-subtle p-1\" aria-label={labels.queueTitle}>\n <ol className=\"space-y-0.5\">\n {messages.map((message) => (\n <li key={message.id} className=\"flex min-w-0 items-center gap-1.5 rounded-md bg-surface px-1.5 py-0.5 shadow-xs\">\n <span className=\"flex size-5 shrink-0 items-center justify-center rounded bg-primary-subtle text-[0.6875rem] font-medium text-primary\" aria-label={`${labels.queuePosition} ${message.position}`}>{message.position}</span>\n <span className=\"min-w-0 flex-1 truncate text-sm text-fg\">{message.text}</span>\n <span className={cn('shrink-0 text-xs', message.status === 'failed' ? 'text-danger' : 'text-fg-muted')}>{message.statusLabel ?? queueStatusLabel(message.status, labels)}</span>\n {message.sendable !== false && onSendNow ? <Button type=\"button\" variant=\"ghost\" size=\"icon\" className=\"size-6\" onClick={() => onSendNow(message)} aria-label={labels.sendQueuedNow} title={labels.sendQueuedNow}><Send size={13} /></Button> : null}\n {message.retryable && onRetry ? <Button type=\"button\" variant=\"ghost\" size=\"icon\" className=\"size-6\" onClick={() => onRetry(message)} aria-label={labels.retryQueued}><RotateCcw size={13} /></Button> : null}\n {message.editable && onEdit ? <Button type=\"button\" variant=\"ghost\" size=\"icon\" className=\"size-6\" onClick={() => onEdit(message)} aria-label={labels.editQueued}><Pencil size={13} /></Button> : null}\n {message.removable && onRemove ? <Button type=\"button\" variant=\"ghost\" size=\"icon\" className=\"size-6\" onClick={() => onRemove(message)} aria-label={labels.removeQueued}><Trash2 size={13} /></Button> : null}\n </li>\n ))}\n </ol>\n </section>\n )\n}\n\nfunction queueStatusLabel(status: AgentQueuedMessage['status'], labels: AgentPanelLabels): string {\n if (status === 'dispatching') return labels.dispatching\n if (status === 'retrying') return labels.retrying\n if (status === 'failed') return labels.queueFailed\n return labels.queued\n}\n\nfunction replaceLastAssistantParts(messages: AgentMessage[], parts: unknown[]): AgentMessage[] {\n const copy = messages.slice()\n for (let index = copy.length - 1; index >= 0; index -= 1) {\n if (copy[index]?.role === 'assistant') { copy[index] = { ...copy[index]!, parts }; break }\n }\n return copy\n}\n\nfunction AgentWelcome({ enabled, title, description, suggestions, onPick }: { enabled: boolean; title: string; description: string; suggestions: string[]; onPick: (value: string) => void }) {\n return <div className=\"pt-10\"><EmptyState icon={<Sparkles />} title={title} description={description} />{enabled && suggestions.length ? <div className=\"mx-auto mt-6 grid max-w-2xl gap-2 sm:grid-cols-2\">{suggestions.map((suggestion) => <button key={suggestion} type=\"button\" onClick={() => onPick(suggestion)} className=\"rounded-xl border border-border bg-surface px-4 py-3 text-left text-sm text-fg-muted shadow-sm transition-colors hover:border-primary/40 hover:bg-primary-subtle hover:text-fg\">{suggestion}</button>)}</div> : null}</div>\n}\n\n/**\n * Memoed so transcript growth only re-renders the row whose parts changed.\n * `parts` is replaced (never mutated) on every update, so referential\n * comparison on the message object is a reliable change signal; handler\n * identity comes from the panel, which passes stable callbacks.\n */\nconst MemoAgentMessageRow = React.memo(function AgentMessageRow({ message, pending = false, labels, toolLabels, assistantAvatar, onSubmitSecretRequest, onCancelSecretRequest, secretRequestLabels, onDecideApprovalRequest, approvalRequestLabels }: { message: AgentMessage; pending?: boolean; labels: AgentPanelLabels; toolLabels?: Record<string, string>; assistantAvatar?: React.ReactNode; onSubmitSecretRequest?: AgentPanelProps['onSubmitSecretRequest']; onCancelSecretRequest?: AgentPanelProps['onCancelSecretRequest']; secretRequestLabels?: Partial<AgentSecretRequestLabels>; onDecideApprovalRequest?: AgentPanelProps['onDecideApprovalRequest']; approvalRequestLabels?: Partial<AgentApprovalRequestLabels> }) {\n if (message.role === 'user') {\n const text = (message.parts.find((part) => (part as { type?: string }).type === 'text') as { text?: string } | undefined)?.text\n const files = message.parts.filter(isAgentFilePart)\n return <div className=\"flex justify-end\"><div className=\"max-w-[85%] space-y-2 rounded-2xl rounded-br-md bg-primary px-4 py-2 text-sm whitespace-pre-wrap text-primary-fg\">{text ? <div>{text}</div> : null}{files.length > 0 ? <div className=\"flex flex-wrap justify-end gap-1.5\">{files.map((file, index) => file.url ? <a key={`${file.filename}-${index}`} href={file.url} className=\"rounded-md border border-primary-fg/25 bg-primary-fg/10 px-2 py-1 text-xs font-medium hover:bg-primary-fg/15\" download>{file.filename}</a> : <span key={`${file.filename}-${index}`} className=\"rounded-md border border-primary-fg/25 bg-primary-fg/10 px-2 py-1 text-xs font-medium\">{file.filename}</span>)}</div> : null}</div></div>\n }\n return <div className=\"flex gap-3\"><span className={cn('mt-0.5 flex size-7 shrink-0 items-center justify-center overflow-hidden rounded-full', assistantAvatar == null && 'bg-primary text-primary-fg shadow-sm')}>{assistantAvatar ?? <Sparkles size={16} />}</span><div className=\"min-w-0 flex-1 pt-0.5\">{message.parts.length === 0 && pending ? <AgentTypingIndicator label={labels.responding} /> : <AgentMessageParts parts={message.parts} labels={labels} toolLabels={toolLabels} onSubmitSecretRequest={onSubmitSecretRequest} onCancelSecretRequest={onCancelSecretRequest} secretRequestLabels={secretRequestLabels} onDecideApprovalRequest={onDecideApprovalRequest} approvalRequestLabels={approvalRequestLabels} />}{message.parts.length > 0 && pending ? <div className=\"mt-2\"><AgentTypingIndicator label={labels.responding} /></div> : null}</div></div>\n})\n\nconst TYPING_DOT_DELAYS = [\n '0ms',\n 'var(--duration-fast)',\n 'calc(var(--duration-fast) + var(--duration-fast))',\n] as const\n\n/**\n * A self-contained streaming cue that does not depend on the consuming app's\n * Tailwind content scan. The cadence uses AppKit motion tokens and becomes a\n * still, readable ellipsis when the user requests reduced motion.\n */\nexport function AgentTypingIndicator({ label = DEFAULT_LABELS.responding }: { label?: string }) {\n return (\n <div role=\"status\" aria-label={label} className=\"flex items-center gap-1 py-1.5\">\n <style>{`\n @keyframes appkit-agent-typing-dot {\n 0%, 36%, 100% { opacity: 0.55; transform: translateY(0); }\n 18% { opacity: 1; transform: translateY(-0.2rem); }\n }\n .appkit-agent-typing-dot {\n animation: appkit-agent-typing-dot calc(var(--duration-slow) + var(--duration-slow) + var(--duration-slow)) var(--ease-out) infinite;\n will-change: transform, opacity;\n }\n @media (prefers-reduced-motion: reduce) {\n .appkit-agent-typing-dot {\n animation: none;\n opacity: 0.7;\n transform: none;\n will-change: auto;\n }\n }\n `}</style>\n {TYPING_DOT_DELAYS.map((animationDelay) => (\n <span\n key={animationDelay}\n aria-hidden=\"true\"\n className=\"appkit-agent-typing-dot size-1.5 rounded-full bg-fg-subtle\"\n style={{ animationDelay }}\n />\n ))}\n </div>\n )\n}\n\nfunction isAgentFilePart(part: unknown): part is { type: 'file'; filename: string; url?: string } {\n if (!part || typeof part !== 'object') return false\n const candidate = part as { type?: unknown; filename?: unknown; url?: unknown }\n return candidate.type === 'file'\n && typeof candidate.filename === 'string'\n && candidate.filename.trim().length > 0\n && (candidate.url === undefined || typeof candidate.url === 'string')\n}\n\nfunction AgentMessageParts({ parts, labels, toolLabels, onSubmitSecretRequest, onCancelSecretRequest, secretRequestLabels, onDecideApprovalRequest, approvalRequestLabels }: { parts: unknown[]; labels: AgentPanelLabels; toolLabels?: Record<string, string>; onSubmitSecretRequest?: AgentPanelProps['onSubmitSecretRequest']; onCancelSecretRequest?: AgentPanelProps['onCancelSecretRequest']; secretRequestLabels?: Partial<AgentSecretRequestLabels>; onDecideApprovalRequest?: AgentPanelProps['onDecideApprovalRequest']; approvalRequestLabels?: Partial<AgentApprovalRequestLabels> }) {\n const rendered: React.ReactNode[] = []\n let tools: AgentToolPart[] = []\n let toolGroupStart = 0\n const flushTools = () => {\n if (tools.length === 0) return\n rendered.push(<AgentToolActivity key={`tools-${toolGroupStart}`} parts={tools} labels={labels} toolLabels={toolLabels} />)\n tools = []\n }\n parts.forEach((value, index) => {\n if (!value || typeof value !== 'object' || typeof (value as { type?: unknown }).type !== 'string') return\n const part = value as { type: string; [key: string]: unknown }\n if (isAgentToolPart(part)) {\n if (tools.length === 0) toolGroupStart = index\n tools.push(part)\n return\n }\n if (part.type === 'step-start' || part.type === 'reasoning') return\n flushTools()\n if (isAgentSecretRequestPart(part)) {\n rendered.push(<AgentSecretRequestCard key={`secret-${part.requestId}-${part.status}`} request={part} labels={secretRequestLabels} onSubmit={onSubmitSecretRequest} onCancel={onCancelSecretRequest} />)\n return\n }\n if (isAgentApprovalRequestPart(part)) {\n rendered.push(<AgentApprovalRequestCard key={`approval-${part.approvalId}-${part.status}`} request={part} labels={approvalRequestLabels} onDecide={onDecideApprovalRequest} />)\n return\n }\n if (part.type === 'text' && typeof part.text === 'string' && part.text.trim()) {\n rendered.push(<ChatMarkdown key={`text-${index}`}>{part.text}</ChatMarkdown>)\n }\n })\n flushTools()\n return <div className=\"space-y-2.5\">{rendered}</div>\n}\n\nfunction isAgentApprovalRequestPart(part: { type: string; [key: string]: unknown }): part is AgentApprovalRequestPart & { [key: string]: unknown } {\n return part.type === 'approval-request'\n && typeof part.approvalId === 'string'\n && part.approvalId.trim().length > 0\n && typeof part.categoryLabel === 'string'\n && part.categoryLabel.trim().length > 0\n && typeof part.description === 'string'\n && part.description.trim().length > 0\n && (part.details === undefined || (Array.isArray(part.details) && part.details.every((detail) => (\n detail !== null\n && typeof detail === 'object'\n && typeof (detail as { label?: unknown }).label === 'string'\n && typeof (detail as { value?: unknown }).value === 'string'\n ))))\n && (part.status === 'pending' || part.status === 'approved' || part.status === 'rejected' || part.status === 'expired' || part.status === 'failed')\n && (part.decisionNote === undefined || typeof part.decisionNote === 'string')\n && (part.failureReason === undefined || typeof part.failureReason === 'string')\n}\n\nexport type AgentApprovalRequestCardProps = {\n request: AgentApprovalRequestPart\n labels?: Partial<AgentApprovalRequestLabels>\n onDecide?: (approvalId: string, decision: 'approved' | 'rejected', note?: string) => void | Promise<void>\n}\n\n/** Inline, transcript-safe approval for a governed action. */\nexport function AgentApprovalRequestCard({ request, labels: labelOverrides, onDecide }: AgentApprovalRequestCardProps) {\n const labels = { ...DEFAULT_APPROVAL_REQUEST_LABELS, ...labelOverrides }\n const [deciding, setDeciding] = React.useState<'approved' | 'rejected' | null>(null)\n const [settledStatus, setSettledStatus] = React.useState<'approved' | 'rejected' | null>(null)\n const [error, setError] = React.useState<string | null>(null)\n const noteRef = React.useRef<HTMLInputElement>(null)\n const status = settledStatus ?? request.status\n\n const decide = React.useCallback(async (decision: 'approved' | 'rejected') => {\n if (!onDecide || deciding || status !== 'pending') return\n const note = noteRef.current?.value.trim() || undefined\n setError(null)\n setDeciding(decision)\n try {\n await onDecide(request.approvalId, decision, note)\n setSettledStatus(decision)\n if (noteRef.current) noteRef.current.value = ''\n } catch {\n setError(labels.failed)\n } finally {\n setDeciding(null)\n }\n }, [deciding, labels.failed, onDecide, request.approvalId, status])\n\n const statusText = status === 'approved'\n ? labels.approved\n : status === 'rejected'\n ? labels.rejected\n : status === 'expired'\n ? labels.expired\n : status === 'failed'\n ? labels.carryOutFailed\n : null\n\n // A carry-out failure is the one settled state the reader has to act on, so\n // it is the one that does not read as quiet grey afterthought text.\n const settledFailure = status === 'failed'\n\n return (\n <section className=\"rounded-xl border border-border bg-surface-raised p-3 shadow-sm\" aria-label={labels.title}>\n <div className=\"flex items-start gap-2.5\">\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-warning-subtle text-warning\"><ShieldCheck size={17} /></span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <p className=\"text-sm font-semibold text-fg\">{labels.title}</p>\n <span className=\"rounded-full bg-surface-muted px-2 py-0.5 text-[11px] font-medium text-fg-muted\">{request.categoryLabel}</span>\n </div>\n <p className=\"mt-1 text-sm leading-5 text-fg-muted\">{request.description}</p>\n {request.details?.length ? <dl className=\"mt-2 grid gap-1 rounded-lg bg-surface-muted p-2 text-xs\">{request.details.map((detail) => <div key={`${detail.label}:${detail.value}`} className=\"grid grid-cols-[minmax(5rem,auto)_1fr] gap-2\"><dt className=\"font-medium text-fg-muted\">{detail.label}</dt><dd className=\"min-w-0 break-words text-fg\">{detail.value}</dd></div>)}</dl> : null}\n {status === 'pending' ? (\n <div className=\"mt-3 space-y-2\">\n <Input ref={noteRef} placeholder={labels.note} aria-label={labels.note} disabled={!onDecide || deciding !== null} />\n <div className=\"flex flex-wrap gap-2\">\n <Button type=\"button\" size=\"sm\" onClick={() => void decide('approved')} disabled={!onDecide || deciding !== null}>{deciding === 'approved' ? <Loader2 className=\"size-4 animate-spin\" /> : null}{deciding === 'approved' ? labels.deciding : labels.approve}</Button>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={() => void decide('rejected')} disabled={!onDecide || deciding !== null}>{deciding === 'rejected' ? <Loader2 className=\"size-4 animate-spin\" /> : null}{deciding === 'rejected' ? labels.deciding : labels.reject}</Button>\n </div>\n </div>\n ) : settledFailure ? (\n <div role=\"alert\" className=\"mt-2 flex items-start gap-2 rounded-lg bg-danger-subtle p-2 text-xs text-danger\">\n <AlertCircle size={14} className=\"mt-px shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"font-medium\">{statusText}</p>\n {request.failureReason ? <p className=\"mt-0.5 break-words opacity-90\">{request.failureReason}</p> : null}\n {request.decisionNote ? <p className=\"mt-0.5 break-words opacity-90\">Note: {request.decisionNote}</p> : null}\n </div>\n </div>\n ) : <p className=\"mt-2 text-xs font-medium text-fg-muted\">{statusText}{request.decisionNote ? ` Note: ${request.decisionNote}` : ''}</p>}\n {error ? <p role=\"alert\" className=\"mt-2 text-xs text-danger\">{error}</p> : null}\n </div>\n </div>\n </section>\n )\n}\n\nfunction isAgentSecretRequestPart(part: { type: string; [key: string]: unknown }): part is AgentSecretRequestPart & { [key: string]: unknown } {\n return part.type === 'secret-request'\n && typeof part.requestId === 'string'\n && part.requestId.trim().length > 0\n && typeof part.providerLabel === 'string'\n && part.providerLabel.trim().length > 0\n && typeof part.credentialLabel === 'string'\n && part.credentialLabel.trim().length > 0\n && typeof part.purpose === 'string'\n && part.purpose.trim().length > 0\n && (part.helpUrl === undefined || typeof part.helpUrl === 'string')\n && (part.status === 'pending' || part.status === 'stored' || part.status === 'expired')\n}\n\nfunction safeSecretHelpUrl(value: string | undefined): string | undefined {\n if (!value) return undefined\n if (value.startsWith('/') && !value.startsWith('//')) return value\n try {\n const url = new URL(value)\n return url.protocol === 'https:' ? url.href : undefined\n } catch {\n return undefined\n }\n}\n\nexport type AgentSecretRequestCardProps = {\n request: AgentSecretRequestPart\n labels?: Partial<AgentSecretRequestLabels>\n onSubmit?: (requestId: string, secret: string) => void | Promise<void>\n onCancel?: (requestId: string) => void | Promise<void>\n}\n\n/**\n * Inline credential handoff for an assistant transcript. The password field is\n * uncontrolled: its value is read directly from the DOM, cleared before the\n * caller receives it, and never copied into React or transcript state.\n */\nexport function AgentSecretRequestCard({ request, labels: labelOverrides, onSubmit, onCancel }: AgentSecretRequestCardProps) {\n const labels = { ...DEFAULT_SECRET_REQUEST_LABELS, ...labelOverrides }\n const inputId = React.useId()\n const inputRef = React.useRef<HTMLInputElement>(null)\n const [revealed, setRevealed] = React.useState(false)\n const [submitting, setSubmitting] = React.useState(false)\n const [settledStatus, setSettledStatus] = React.useState<Exclude<AgentSecretRequestStatus, 'pending'> | null>(null)\n const [error, setError] = React.useState<string | null>(null)\n const requestIdentityRef = React.useRef(`${request.requestId}:${request.status}`)\n const status = settledStatus ?? request.status\n const helpUrl = safeSecretHelpUrl(request.helpUrl)\n\n const clearInput = React.useCallback(() => {\n if (inputRef.current) inputRef.current.value = ''\n }, [])\n\n React.useEffect(() => {\n const identity = `${request.requestId}:${request.status}`\n if (requestIdentityRef.current !== identity) {\n requestIdentityRef.current = identity\n clearInput()\n setRevealed(false)\n setSubmitting(false)\n setSettledStatus(null)\n setError(null)\n }\n }, [clearInput, request.requestId, request.status])\n\n React.useEffect(() => {\n return clearInput\n }, [clearInput])\n\n const submit = React.useCallback(async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n if (!onSubmit || submitting || status !== 'pending') return\n const secret = inputRef.current?.value ?? ''\n if (secret.length === 0) {\n setError(labels.required)\n inputRef.current?.focus()\n return\n }\n clearInput()\n setRevealed(false)\n setError(null)\n setSubmitting(true)\n try {\n await onSubmit(request.requestId, secret)\n setSettledStatus('stored')\n } catch {\n setError(labels.failed)\n inputRef.current?.focus()\n } finally {\n clearInput()\n setSubmitting(false)\n }\n }, [clearInput, labels.failed, labels.required, onSubmit, request.requestId, status, submitting])\n\n const cancel = React.useCallback(async () => {\n if (!onCancel || submitting || status !== 'pending') return\n clearInput()\n setRevealed(false)\n setError(null)\n setSubmitting(true)\n try {\n await onCancel(request.requestId)\n setSettledStatus('expired')\n } catch {\n setError(labels.cancelFailed)\n } finally {\n clearInput()\n setSubmitting(false)\n }\n }, [clearInput, labels.cancelFailed, onCancel, request.requestId, status, submitting])\n\n return (\n <section className=\"overflow-hidden rounded-xl border border-border bg-surface shadow-sm\" aria-labelledby={`${inputId}-title`}>\n <div className=\"flex items-start gap-3 p-3\">\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary-subtle text-primary\"><KeyRound size={16} /></span>\n <div className=\"min-w-0 flex-1\">\n <div id={`${inputId}-title`} className=\"text-sm font-semibold text-fg\">{request.providerLabel}</div>\n <div className=\"mt-0.5 text-xs font-medium text-fg-muted\">{request.credentialLabel}</div>\n <p className=\"mt-1.5 text-sm leading-relaxed text-fg-muted\">{request.purpose}</p>\n {helpUrl ? helpUrl.startsWith('/') ? <UiLink href={helpUrl} className=\"mt-2 inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline\">{labels.help}</UiLink> : <a href={helpUrl} target=\"_blank\" rel=\"noreferrer\" className=\"mt-2 inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline\">{labels.help}<ExternalLink size={12} aria-hidden=\"true\" /></a> : null}\n </div>\n </div>\n {status === 'pending' ? (\n <form onSubmit={(event) => void submit(event)} onKeyDown={(event) => { if (event.key === 'Escape') { event.preventDefault(); void cancel() } }} className=\"relative space-y-2.5 border-t border-border bg-bg-subtle p-3\">\n <label htmlFor={inputId} className=\"sr-only\">{request.credentialLabel}</label>\n <div className=\"relative\">\n <Input ref={inputRef} id={inputId} type={revealed ? 'text' : 'password'} autoComplete=\"new-password\" autoCapitalize=\"none\" spellCheck={false} disabled={submitting || !onSubmit} aria-invalid={error ? true : undefined} onKeyDown={(event) => { if (event.key === 'Enter') { event.preventDefault(); event.currentTarget.form?.requestSubmit() } }} className=\"pr-11 font-mono\" />\n <button type=\"button\" onClick={() => setRevealed((value) => !value)} disabled={submitting || !onSubmit} aria-label={revealed ? labels.hide : labels.show} aria-pressed={revealed} className=\"absolute inset-y-0 right-0 flex w-10 items-center justify-center rounded-r-md text-fg-muted transition-colors hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring/60 disabled:pointer-events-none disabled:opacity-50 motion-reduce:transition-none\">{revealed ? <EyeOff size={16} /> : <Eye size={16} />}</button>\n </div>\n {error ? <p role=\"alert\" className=\"text-xs text-danger\">{error}</p> : null}\n <div className=\"flex items-center justify-end gap-2 pt-1\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => void cancel()} disabled={submitting || !onCancel}>{labels.cancel}</Button>\n <Button type=\"submit\" size=\"sm\" disabled={submitting || !onSubmit}>{submitting ? <><Loader2 size={14} className=\"animate-spin motion-reduce:animate-none\" />{labels.submitting}</> : labels.submit}</Button>\n </div>\n </form>\n ) : (\n <div role=\"status\" className={cn('flex items-center gap-2 border-t border-border px-3 py-2.5 text-sm font-medium', status === 'stored' ? 'bg-success-subtle text-success' : 'bg-bg-subtle text-fg-muted')}>\n {status === 'stored' ? <CheckCircle2 size={16} /> : <AlertCircle size={16} />}\n {status === 'stored' ? labels.stored : labels.expired}\n </div>\n )}\n </section>\n )\n}\n\ntype AgentToolPart = { type: string; toolName?: unknown; state?: unknown; input?: unknown; output?: unknown }\n\nfunction isAgentToolPart(part: { type: string }): part is AgentToolPart {\n return part.type === 'dynamic-tool' || part.type.startsWith('tool-')\n}\n\nfunction agentToolName(part: AgentToolPart): string {\n return part.type === 'dynamic-tool' ? String(part.toolName ?? 'tool') : part.type.slice(5)\n}\n\nfunction agentToolRunning(part: AgentToolPart): boolean {\n const state = String(part.state ?? 'output-available')\n return state === 'input-streaming' || state === 'input-available'\n}\n\nfunction agentToolErrored(part: AgentToolPart): boolean {\n return String(part.state) === 'output-error' || (part.output as { ok?: boolean } | undefined)?.ok === false\n}\n\n/**\n * A multi-step run stays quiet in the transcript: the newest action and total\n * step count occupy one line, while the complete inputs/results remain one\n * click away. Applications keep their full durable audit trail separately.\n */\nfunction AgentToolActivity({ parts, labels, toolLabels }: { parts: AgentToolPart[]; labels: AgentPanelLabels; toolLabels?: Record<string, string> }) {\n const [open, setOpen] = React.useState(false)\n const latest = parts.at(-1)!\n const latestName = agentToolName(latest)\n const running = parts.some(agentToolRunning)\n const errored = parts.some(agentToolErrored)\n const count = parts.length\n const status = running ? labels.working : `${count} ${count === 1 ? labels.step : labels.steps}`\n return <div className=\"text-sm\"><button type=\"button\" onClick={() => setOpen((value) => !value)} aria-expanded={open} className=\"flex h-7 max-w-full items-center gap-1.5 rounded-md px-1.5 text-left text-xs text-fg-muted transition-colors hover:bg-surface-hover hover:text-fg\"><span className={cn('size-1.5 shrink-0 rounded-full', running ? 'animate-pulse bg-primary' : errored ? 'bg-danger' : 'bg-success')} /><span className=\"shrink-0 font-medium\">{status}</span><span aria-hidden className=\"text-fg-subtle\">·</span><span className=\"min-w-0 truncate\">{toolLabels?.[latestName] ?? latestName.replaceAll('_', ' ')}</span><ChevronRight size={12} className={cn('shrink-0 text-fg-subtle transition-transform', open && 'rotate-90')} /></button>{open ? <div className=\"mt-1.5 space-y-1.5 border-l border-border pl-2\">{parts.map((part, index) => { const name = agentToolName(part); return <AgentToolCard key={`${name}-${index}`} name={name} label={toolLabels?.[name]} state={String(part.state ?? 'output-available')} input={part.input} output={part.output} inputLabel={labels.input} resultLabel={labels.result} /> })}</div> : null}</div>\n}\n\nexport function ChatMarkdown({ children }: { children: string }) {\n return <div className=\"space-y-2 text-sm leading-relaxed text-fg\"><Markdown remarkPlugins={[remarkGfm]} components={{ p: ({ children: content }) => <p className=\"whitespace-pre-wrap\">{content}</p>, h1: ({ children: content }) => <h1 className=\"text-lg font-semibold\">{content}</h1>, h2: ({ children: content }) => <h2 className=\"text-base font-semibold\">{content}</h2>, ul: ({ children: content }) => <ul className=\"list-disc space-y-1 pl-5\">{content}</ul>, ol: ({ children: content }) => <ol className=\"list-decimal space-y-1 pl-5\">{content}</ol>, code: ({ children: content }) => <code className=\"rounded bg-bg-subtle px-1 py-0.5 font-mono text-[0.85em] text-primary\">{content}</code>, pre: ({ children: content }) => <pre className=\"overflow-auto rounded-lg bg-overlay p-3 text-sm whitespace-pre-wrap text-white\">{content}</pre>, table: ({ children: content }) => <div className=\"overflow-x-auto\"><table className=\"w-full border-collapse text-sm\">{content}</table></div>, th: ({ children: content }) => <th className=\"border-b border-border px-2 py-1 text-left\">{content}</th>, td: ({ children: content }) => <td className=\"border-b border-border-subtle px-2 py-1\">{content}</td>, a: ({ href, children: content }) => href?.startsWith('/') ? <UiLink href={href} className=\"font-medium text-primary underline-offset-2 hover:underline\">{content}</UiLink> : <a href={href} target=\"_blank\" rel=\"noreferrer\" className=\"font-medium text-primary underline-offset-2 hover:underline\">{content}</a> }}>{children}</Markdown></div>\n}\n\nexport function AgentToolCard({ name, label, state, input, output, inputLabel = 'Input', resultLabel = 'Result' }: { name: string; label?: string; state: string; input?: unknown; output?: unknown; inputLabel?: string; resultLabel?: string }) {\n const [open, setOpen] = React.useState(false)\n const running = state === 'input-streaming' || state === 'input-available'\n const errored = state === 'output-error' || (output as { ok?: boolean } | undefined)?.ok === false\n return <div className=\"overflow-hidden rounded-lg border border-border bg-bg-subtle text-sm\"><button type=\"button\" onClick={() => setOpen((value) => !value)} className=\"flex w-full items-center gap-2.5 px-3 py-2 text-left transition-colors hover:bg-surface-hover\"><span className={cn('flex size-6 shrink-0 items-center justify-center rounded-md', errored ? 'bg-danger-subtle text-danger' : 'bg-primary-subtle text-primary')}><Database size={14} /></span><span className=\"min-w-0 flex-1 truncate font-medium text-fg\">{label ?? name.replaceAll('_', ' ')}</span>{running ? <Loader2 size={14} className=\"animate-spin text-fg-subtle\" /> : errored ? <AlertCircle size={14} className=\"text-danger\" /> : <CheckCircle2 size={14} className=\"text-success\" />}<ChevronRight size={14} className={cn('text-fg-subtle transition-transform', open && 'rotate-90')} /></button>{open ? <div className=\"space-y-2 border-t border-border px-3 py-2\">{input !== undefined ? <AgentToolDetail label={inputLabel} value={input} /> : null}{output !== undefined ? <AgentToolDetail label={resultLabel} value={output} /> : null}</div> : null}</div>\n}\n\nfunction AgentToolDetail({ label, value }: { label: string; value: unknown }) {\n let text: string\n try { text = JSON.stringify(value, null, 2) } catch { text = String(value) }\n return <div><div className=\"mb-1 text-[11px] font-semibold tracking-wide text-fg-subtle uppercase\">{label}</div><pre className=\"max-h-60 overflow-auto rounded-md bg-surface p-2 text-xs leading-relaxed text-fg ring-1 ring-border\">{text}</pre></div>\n}\n"]}
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport {\n parseJsonEventStream,\n readUIMessageStream,\n uiMessageChunkSchema,\n type UIMessageChunk,\n} from 'ai'\nimport {\n AlertCircle,\n CheckCircle2,\n ChevronRight,\n Database,\n ExternalLink,\n Eye,\n EyeOff,\n KeyRound,\n ListPlus,\n Loader2,\n Pencil,\n RotateCcw,\n Send,\n ShieldCheck,\n Sparkles,\n Square,\n Trash2,\n} from 'lucide-react'\nimport Markdown from 'react-markdown'\nimport remarkGfm from 'remark-gfm'\nimport { Button, EmptyState, Input, UiLink, cn } from '@braedonsaunders/appkit-ui'\n\nexport type AgentMessage = {\n id: string\n role: 'user' | 'assistant' | 'system'\n parts: unknown[]\n}\n\n/**\n * Whether two transcripts say the same thing.\n *\n * A host maps its own records into `AgentMessage[]` on every render, so the array\n * is a new reference each time and reference equality would make reconciliation\n * fire forever. Deep equality is the other extreme: these carry whole tool\n * inputs and outputs. This is the middle — enough to notice a new message, a new\n * part, a call moving from running to returned, or prose growing, which is every\n * way a transcript moves forward.\n */\nfunction partSignature(part: unknown): string {\n if (part === null || typeof part !== 'object') return String(part)\n const shape = part as {\n type?: unknown\n state?: unknown\n status?: unknown\n toolCallId?: unknown\n text?: unknown\n }\n return [\n String(shape.type ?? ''),\n // A tool card completing, and a secret/approval request being decided.\n String(shape.state ?? ''),\n String(shape.status ?? ''),\n String(shape.toolCallId ?? ''),\n typeof shape.text === 'string' ? String(shape.text.length) : '',\n // A separator no value can carry: hosts mint their own ids and statuses,\n // and one holding a space could absorb a space separator, making two\n // different parts produce one signature — and a real change read as \"the\n // transcript did not move\".\n ].join('\\u0000')\n}\n\nfunction sameTranscript(left: AgentMessage[], right: AgentMessage[]): boolean {\n if (left === right) return true\n if (left.length !== right.length) return false\n for (let index = 0; index < left.length; index += 1) {\n const before = left[index]\n const after = right[index]\n if (!before || !after) return false\n if (before.id !== after.id || before.role !== after.role) return false\n if (before.parts.length !== after.parts.length) return false\n for (let part = 0; part < before.parts.length; part += 1) {\n if (partSignature(before.parts[part]) !== partSignature(after.parts[part])) return false\n }\n }\n return true\n}\n\n/**\n * The comparison, reachable from the suite. It is the part with judgement in it\n * — what counts as \"the transcript moved\" — and the underscore says plainly that\n * nothing outside this module should call it.\n */\nexport const __sameTranscriptForTests = sameTranscript\n\n/**\n * Adopt turns the PERSON has added while this panel is streaming its own.\n *\n * The reconciliation below stands down entirely during a stream, because the\n * parts this panel is receiving are richer than anything the host has persisted\n * and replacing them mid-answer loses detail. That is right about the assistant\n * and wrong about the person: a reader can speak while a turn is in flight —\n * steering it, or releasing a queued message into it — and the host appends that\n * to the transcript immediately. Standing down meant their own words never\n * appeared anywhere. They had sent a message, it was recorded, the agent was\n * already acting on it, and the screen showed no trace of it at all.\n *\n * Only `user` messages the panel does not already have, and only ever inserted\n * BEFORE a trailing in-flight assistant message — which is where they land once\n * the run finishes and the whole transcript is adopted, so nothing jumps around\n * when it does. Assistant messages are never taken from the host here, so this\n * cannot duplicate or truncate the answer being streamed.\n */\nfunction withHostUserTurns(\n current: AgentMessage[],\n host: AgentMessage[],\n /**\n * Host ids from the previous reconciliation.\n *\n * Needed to tell a turn the host has WITHDRAWN from one this panel owns. A host\n * may show a message provisionally and then replace it — a queued message is\n * rendered from the queue until it is delivered, at which point it becomes a\n * real turn under a real id. Without this the panel would hold both and the\n * same sentence would appear twice. Panel-owned turns (the optimistic message a\n * submit adds under its own id) were never host ids, so they are never dropped.\n */\n hostIdsBefore: ReadonlySet<string>,\n): AgentMessage[] {\n const hostIds = new Set(host.map((message) => message.id))\n const withdrawn = (id: string): boolean => hostIdsBefore.has(id) && !hostIds.has(id)\n const kept = current.some((message) => withdrawn(message.id))\n ? current.filter((message) => !withdrawn(message.id))\n : current\n const present = new Set(kept.map((message) => message.id))\n const added = host.filter((message) => message.role === 'user' && !present.has(message.id))\n if (added.length === 0) return kept\n const last = kept[kept.length - 1]\n if (last && last.role === 'assistant') {\n return [...kept.slice(0, -1), ...added, last]\n }\n return [...kept, ...added]\n}\n\n/** Exported for the suite: the streaming case is the one that was broken. */\nexport const __withHostUserTurnsForTests = withHostUserTurns\n\nexport type AgentQueuedMessage = {\n id: string\n text: string\n position: number\n status: 'queued' | 'dispatching' | 'retrying' | 'failed'\n statusLabel?: string\n editable?: boolean\n removable?: boolean\n retryable?: boolean\n /**\n * Whether this one can be sent ahead of its turn. Defaults to true where the\n * host provides `onSendNow`; a host that knows it cannot — something already\n * running, or a failure in front that has to be dealt with first — says so.\n */\n sendable?: boolean\n}\n\nexport type AgentSecretRequestStatus = 'pending' | 'stored' | 'expired'\n\n/**\n * `failed` is deliberately distinct from `rejected`: the decision was made and\n * the action was attempted, and it is CARRYING IT OUT that did not work.\n *\n * Without it, a decided approval whose execution died has nowhere truthful to\n * sit. It stays `approved` — the card keeps saying the work will continue\n * automatically, indefinitely, while nothing is happening — and the reader is\n * left to conclude the agent simply forgot. A surface that cannot say \"this\n * did not happen\" will always eventually say something untrue.\n */\nexport type AgentApprovalRequestStatus = 'pending' | 'approved' | 'rejected' | 'expired' | 'failed'\n\n/** Transcript-safe metadata for an inline governed-action decision. */\nexport type AgentApprovalRequestPart = {\n type: 'approval-request'\n approvalId: string\n categoryLabel: string\n description: string\n details?: Array<{ label: string; value: string }>\n status: AgentApprovalRequestStatus\n decisionNote?: string\n /**\n * Why carrying the decision out failed, in the operator's words. Shown\n * verbatim beside a `failed` status — a failure the reader cannot see the\n * reason for is only marginally better than one they cannot see at all.\n */\n failureReason?: string\n}\n\nexport type AgentApprovalRequestLabels = {\n title: string\n note: string\n approve: string\n reject: string\n deciding: string\n approved: string\n rejected: string\n expired: string\n /** The decision itself could not be saved — the reader should press again. */\n failed: string\n /** The decision saved, and acting on it failed. Nothing to press again. */\n carryOutFailed: string\n}\n\nconst DEFAULT_APPROVAL_REQUEST_LABELS: AgentApprovalRequestLabels = {\n title: 'Approval needed',\n note: 'Add a note (optional)',\n approve: 'Approve',\n reject: 'Decline',\n deciding: 'Saving decision',\n approved: 'Approved. The agent will continue automatically.',\n rejected: 'Declined. The agent will receive your decision.',\n expired: 'This approval request has expired.',\n failed: 'The decision could not be saved. Please retry.',\n carryOutFailed: 'Approved, but the action could not be carried out. The agent has not continued.',\n}\n\n/** Transcript-safe metadata for an inline credential request. */\nexport type AgentSecretRequestPart = {\n type: 'secret-request'\n requestId: string\n providerLabel: string\n credentialLabel: string\n purpose: string\n helpUrl?: string\n status: AgentSecretRequestStatus\n}\n\nexport type AgentSecretRequestLabels = {\n show: string\n hide: string\n submit: string\n cancel: string\n help: string\n submitting: string\n stored: string\n expired: string\n required: string\n failed: string\n cancelFailed: string\n}\n\nconst DEFAULT_SECRET_REQUEST_LABELS: AgentSecretRequestLabels = {\n show: 'Show credential',\n hide: 'Hide credential',\n submit: 'Submit securely',\n cancel: 'Cancel',\n help: 'Open setup instructions',\n submitting: 'Submitting securely',\n stored: 'Credential stored securely.',\n expired: 'This credential request has expired.',\n required: 'Enter the credential before submitting.',\n failed: 'The credential could not be submitted. Enter it again and retry.',\n cancelFailed: 'The credential request could not be canceled. Please retry.',\n}\n\nexport type AgentDispatchState = 'idle' | 'running' | 'recovering'\n\nexport type AgentPanelLabels = {\n title: string\n welcomeTitle: string\n welcomeDescription: string\n disabledTitle: string\n disabledDescription: string\n placeholder: string\n send: string\n stop: string\n failed: string\n input: string\n result: string\n working: string\n step: string\n steps: string\n queue: string\n queueTitle: string\n queuePosition: string\n queued: string\n dispatching: string\n retrying: string\n queueFailed: string\n editQueued: string\n removeQueued: string\n retryQueued: string\n sendQueuedNow: string\n responding: string\n}\n\nconst DEFAULT_LABELS: AgentPanelLabels = {\n title: 'Assistant',\n welcomeTitle: 'How can I help?',\n welcomeDescription: 'Ask about your workspace or let the assistant use an approved tool.',\n disabledTitle: 'Connect an AI provider',\n disabledDescription: 'Connect an AI provider to enable agent conversations. No provider credentials are included in the demo.',\n placeholder: 'Ask the assistant…',\n send: 'Send',\n stop: 'Stop generating',\n failed: 'The assistant could not complete that turn. Please try again.',\n input: 'Input',\n result: 'Result',\n working: 'Working',\n step: 'step',\n steps: 'steps',\n queue: 'Add to queue',\n queueTitle: 'Up next',\n queuePosition: 'Position',\n queued: 'Queued',\n dispatching: 'Starting',\n retrying: 'Retrying',\n queueFailed: 'This queued message needs attention.',\n editQueued: 'Edit queued message',\n removeQueued: 'Remove queued message',\n retryQueued: 'Retry queued message',\n sendQueuedNow: 'Send now',\n responding: 'Assistant is responding',\n}\n\nexport type AgentPanelProps = {\n enabled: boolean\n initialMessages?: AgentMessage[]\n suggestions?: string[]\n labels?: Partial<AgentPanelLabels>\n headerActions?: React.ReactNode\n /** Application-owned identity rendered beside assistant messages. */\n assistantAvatar?: React.ReactNode\n /** Replaces the stock empty-state card while preserving the panel header and composer. */\n emptyContent?: React.ReactNode\n /** Application-owned draft UI rendered immediately above the composer row. */\n composerContent?: React.ReactNode\n /** Application-owned controls rendered before the text input. */\n composerActions?: React.ReactNode\n /**\n * Non-text content currently attached to the draft. `fallbackPrompt` makes\n * a file-only draft sendable; `parts` are included in the optimistic user\n * turn so the attachment does not disappear while the response streams.\n */\n composerDraft?: { fallbackPrompt?: string; parts?: readonly unknown[] }\n send?: (prompt: string, signal: AbortSignal) => Promise<Response>\n /** Durable dispatch state supplied by the application after reload or handoff. */\n dispatchState?: AgentDispatchState\n /** Application-owned queue, already ordered by its durable dispatch position. */\n queuedMessages?: readonly AgentQueuedMessage[]\n /** Persists a turn behind the active or previously queued work. */\n enqueue?: (prompt: string) => Promise<void>\n onEditQueuedMessage?: (message: AgentQueuedMessage) => void\n onRemoveQueuedMessage?: (message: AgentQueuedMessage) => void\n onRetryQueuedMessage?: (message: AgentQueuedMessage) => void\n /** Send a waiting message ahead of its turn. Absent, the queue only waits. */\n onSendQueuedMessageNow?: (message: AgentQueuedMessage) => void\n /**\n * A turn is in flight that this panel is NOT streaming — one running in a\n * worker, or the turn a reader has just reloaded into the middle of.\n *\n * The thinking indicator keyed off `streaming` alone, so work the host could\n * see but this panel was not producing had no sign of life in the transcript\n * at all. That left the host explaining in a banner beside the conversation\n * that something was happening elsewhere, which is not where anyone looks and\n * reads as an apology rather than progress. With this it reads as an ordinary\n * turn in progress, because that is exactly what it is.\n */\n working?: boolean\n /** Receives the transient input value after AppKit clears the field. */\n onSubmitSecretRequest?: (requestId: string, secret: string) => void | Promise<void>\n onCancelSecretRequest?: (requestId: string) => void | Promise<void>\n secretRequestLabels?: Partial<AgentSecretRequestLabels>\n onDecideApprovalRequest?: (approvalId: string, decision: 'approved' | 'rejected', note?: string) => void | Promise<void>\n approvalRequestLabels?: Partial<AgentApprovalRequestLabels>\n maxPromptCharacters?: number\n toolLabels?: Record<string, string>\n}\n\n/**\n * The streaming thread/composer. The app\n * owns persistence and the HTTP transport; appkit owns UI-message decoding,\n * cancellation, ordered part rendering, and tool cards.\n */\n/**\n * The composer owns the draft input, so typing only re-renders this subtree.\n * Before, the input lived in AgentPanel state: every keystroke re-rendered the\n * whole panel, including every transcript row. On a long thread that meant\n * re-rendering hundreds of markdown/tool-card subtrees per keystroke — typing\n * lag that grew with the conversation. Rows are memoed too, so while a turn\n * streams only the tail row re-renders.\n */\nconst AgentComposer = React.memo(function AgentComposer({\n composerContent,\n composerActions,\n composerDraft,\n queueMode,\n enqueueing,\n canSend,\n canEnqueue,\n streaming,\n stopLabel,\n sendLabel,\n queueLabel,\n placeholder,\n maxPromptCharacters,\n onSubmit,\n onAbort,\n}: {\n composerContent?: React.ReactNode\n composerActions?: React.ReactNode\n composerDraft?: { fallbackPrompt?: string; parts?: readonly unknown[] }\n queueMode: boolean\n enqueueing: boolean\n canSend: boolean\n canEnqueue: boolean\n streaming: boolean\n stopLabel: string\n sendLabel: string\n queueLabel: string\n placeholder: string\n maxPromptCharacters: number\n onSubmit: (raw: string) => void\n onAbort: () => void\n}) {\n const [input, setInput] = React.useState('')\n const fallback = composerDraft?.fallbackPrompt\n const sendable = Boolean(input.trim() || fallback?.trim())\n return (\n <div className=\"shrink-0 border-t border-border bg-surface px-4 py-3\"><div className=\"mx-auto w-full max-w-3xl\">{composerContent != null ? <div className=\"mb-2\">{composerContent}</div> : null}<div className=\"flex items-end gap-2 rounded-2xl border border-border-strong bg-surface p-2 shadow-sm focus-within:border-primary focus-within:ring-2 focus-within:ring-ring/20\">{composerActions}<textarea value={input} onChange={(event) => setInput(event.target.value)} onKeyDown={(event) => { if (event.key === 'Enter' && !event.shiftKey) { event.preventDefault(); onSubmit(input); setInput('') } }} maxLength={maxPromptCharacters} rows={1} placeholder={placeholder} className=\"h-10 max-h-40 flex-1 resize-none overflow-y-auto border-0 bg-transparent px-2 py-2 text-base leading-6 text-fg outline-none placeholder:text-fg-subtle sm:text-sm\" />{streaming ? <Button type=\"button\" variant=\"outline\" size=\"icon\" onClick={onAbort} aria-label={stopLabel}><Square size={16} /></Button> : null}<Button type=\"button\" size=\"icon\" onClick={() => { onSubmit(input); setInput('') }} disabled={!sendable || (queueMode ? !canEnqueue || enqueueing : !canSend)} aria-label={queueMode ? queueLabel : sendLabel}>{enqueueing ? <Loader2 size={16} className=\"animate-spin\" /> : queueMode ? <ListPlus size={16} /> : <Send size={16} />}</Button></div></div></div>\n )\n})\n\nexport function AgentPanel({\n enabled,\n initialMessages = [],\n suggestions = [],\n labels: labelOverrides,\n headerActions,\n assistantAvatar,\n emptyContent,\n composerContent,\n composerActions,\n composerDraft,\n send,\n dispatchState = 'idle',\n queuedMessages = [],\n enqueue,\n onEditQueuedMessage,\n onRemoveQueuedMessage,\n onRetryQueuedMessage,\n onSendQueuedMessageNow,\n working = false,\n onSubmitSecretRequest,\n onCancelSecretRequest,\n secretRequestLabels,\n onDecideApprovalRequest,\n approvalRequestLabels,\n maxPromptCharacters = 32_000,\n toolLabels,\n}: AgentPanelProps) {\n const labels = React.useMemo(() => ({ ...DEFAULT_LABELS, ...labelOverrides }), [labelOverrides])\n const [messages, setMessages] = React.useState(initialMessages)\n const [streaming, setStreaming] = React.useState(false)\n const [enqueueing, setEnqueueing] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n const abortRef = React.useRef<AbortController | null>(null)\n const messageViewportRef = React.useRef<HTMLDivElement>(null)\n /** Ids the host supplied last time, so a withdrawn turn can be told from a panel-owned one. */\n const hostIdsRef = React.useRef<ReadonlySet<string>>(new Set(initialMessages.map((message) => message.id)))\n\n /**\n * Take a newer transcript from the host while this panel is not the one\n * producing it.\n *\n * Seeding once was right while the only transcript was what had already been\n * recorded, because anything newer arrived through the stream. It is wrong for\n * a host that can also observe work in progress — a turn running in a worker,\n * or the turn a reader has just reloaded into the middle of. Without this, the\n * only way a host could show a tool call made a second ago was to remount the\n * panel, which throws away whatever the person was part-way through typing.\n *\n * Guarded on `streaming` and on there being no live request: while THIS panel\n * owns the turn its streamed parts are richer than anything the host has\n * persisted yet, and replacing them would lose detail mid-answer. The composer\n * keeps its draft across this by construction — the draft lives in the memoed\n * `AgentComposer`, which this does not touch.\n */\n React.useEffect(() => {\n // Read and advance outside the updater: a state updater may run twice, and\n // this has to observe the previous host set exactly once per reconciliation.\n const hostIdsBefore = hostIdsRef.current\n hostIdsRef.current = new Set(initialMessages.map((message) => message.id))\n if (streaming || abortRef.current !== null) {\n // Not a full adoption, but not nothing either: the person's own turns are\n // additive and cannot conflict with the answer being streamed. See\n // `withHostUserTurns` — without this, a message steered into a running turn\n // was recorded, acted on, and invisible.\n setMessages((current) => withHostUserTurns(current, initialMessages, hostIdsBefore))\n return\n }\n setMessages((current) => (sameTranscript(current, initialMessages) ? current : initialMessages))\n }, [initialMessages, streaming])\n\n const scrollToBottom = React.useCallback(() => {\n window.requestAnimationFrame(() => {\n const viewport = messageViewportRef.current\n if (viewport) viewport.scrollTop = viewport.scrollHeight\n })\n }, [])\n\n // An existing conversation opens where work most recently happened. Keep\n // this scoped to the panel's own viewport: scrollIntoView also moves every\n // scrolling ancestor and can make an otherwise app-height page jump.\n React.useLayoutEffect(() => {\n scrollToBottom()\n }, [scrollToBottom])\n\n const composerDraftParts = composerDraft?.parts\n const composerDraftFallback = composerDraft?.fallbackPrompt\n\n const submit = React.useCallback(async (raw: string) => {\n const prompt = raw.trim() || composerDraftFallback?.trim() || ''\n if (!enabled || !prompt || prompt.length > maxPromptCharacters) return\n const shouldEnqueue = dispatchState !== 'idle' || abortRef.current !== null || queuedMessages.length > 0\n if (shouldEnqueue) {\n if (!enqueue || enqueueing) return\n setEnqueueing(true)\n setError(null)\n try {\n await enqueue(prompt)\n } catch {\n setError(labels.queueFailed)\n } finally {\n setEnqueueing(false)\n }\n return\n }\n if (!send) return\n const controller = new AbortController()\n abortRef.current = controller\n const stamp = Date.now()\n setError(null)\n setMessages((current) => [...current, { id: `user-${stamp}`, role: 'user', parts: [{ type: 'text', text: prompt }, ...(composerDraftParts ?? [])] }, { id: `assistant-${stamp}`, role: 'assistant', parts: [] }])\n setStreaming(true)\n scrollToBottom()\n let producedParts = false\n try {\n const response = await send(prompt, controller.signal)\n if (!response.ok || !response.body) throw new Error('agent request failed')\n const chunks = parseJsonEventStream({ stream: response.body, schema: uiMessageChunkSchema }).pipeThrough(new TransformStream<{ success: boolean; value?: UIMessageChunk }, UIMessageChunk>({ transform(part, stream) { if (part.success && part.value) stream.enqueue(part.value) } }))\n let lastParts: unknown[] = []\n for await (const message of readUIMessageStream({ stream: chunks })) {\n lastParts = message.parts as unknown[]\n producedParts = lastParts.length > 0\n setMessages((current) => replaceLastAssistantParts(current, lastParts))\n scrollToBottom()\n }\n if (lastParts.length === 0 && !controller.signal.aborted) setError(labels.failed)\n } catch (reason) {\n if ((reason as Error).name !== 'AbortError') setError(labels.failed)\n } finally {\n if (!producedParts) {\n setMessages((current) => current.filter((message) => message.id !== `assistant-${stamp}`))\n }\n setStreaming(false)\n if (abortRef.current === controller) abortRef.current = null\n }\n }, [composerDraftFallback, composerDraftParts, dispatchState, enabled, enqueue, enqueueing, labels.failed, labels.queueFailed, maxPromptCharacters, queuedMessages.length, scrollToBottom, send])\n\n const queueMode = dispatchState !== 'idle' || streaming || queuedMessages.length > 0\n const abort = React.useCallback(() => abortRef.current?.abort(), [])\n // Stable identity so the memoed composer (and its textarea) is not\n // re-rendered by transcript updates such as streamed tokens.\n const submitToComposer = React.useCallback((value: string) => {\n void submit(value)\n }, [submit])\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col bg-bg-subtle\">\n <header className=\"flex h-12 shrink-0 items-center gap-2 border-b border-border bg-surface px-4\"><Sparkles size={16} className=\"text-primary\" /><span className=\"text-sm font-medium text-fg\">{labels.title}</span>{headerActions != null ? <div className=\"ml-auto flex items-center gap-2\">{headerActions}</div> : null}</header>\n <div ref={messageViewportRef} className=\"app-scroll min-h-0 flex-1 overflow-y-auto\">\n {messages.length === 0 && emptyContent != null ? (\n <div className=\"flex min-h-full flex-col\">{emptyContent}</div>\n ) : (\n <div className=\"mx-auto w-full max-w-3xl px-4 py-6\">\n {messages.length === 0 ? <AgentWelcome enabled={enabled} title={enabled ? labels.welcomeTitle : labels.disabledTitle} description={enabled ? labels.welcomeDescription : labels.disabledDescription} suggestions={suggestions} onPick={(value) => void submit(value)} /> : <div className=\"space-y-6\">{messages.map((message, index) => message.role === 'system' ? null : <MemoAgentMessageRow key={message.id} message={message} pending={(streaming || working) && index === messages.length - 1 && message.role === 'assistant'} labels={labels} toolLabels={toolLabels} assistantAvatar={assistantAvatar} onSubmitSecretRequest={onSubmitSecretRequest} onCancelSecretRequest={onCancelSecretRequest} secretRequestLabels={secretRequestLabels} onDecideApprovalRequest={onDecideApprovalRequest} approvalRequestLabels={approvalRequestLabels} />)}</div>}\n </div>\n )}\n {error ? <div role=\"alert\" className=\"mx-auto mb-5 w-[calc(100%-2rem)] max-w-3xl rounded-lg border border-danger/25 bg-danger-subtle px-3 py-2 text-sm text-danger\">{error}</div> : null}\n </div>\n {enabled ? (\n <>\n {queuedMessages.length > 0 ? <div className=\"shrink-0 border-t border-border bg-surface px-4 pt-2\"><div className=\"mx-auto w-full max-w-3xl\"><AgentMessageQueue messages={queuedMessages} labels={labels} onEdit={onEditQueuedMessage} onRemove={onRemoveQueuedMessage} onRetry={onRetryQueuedMessage} onSendNow={onSendQueuedMessageNow} /></div></div> : null}\n <AgentComposer\n composerActions={composerActions}\n composerDraft={composerDraft}\n queueMode={queueMode}\n enqueueing={enqueueing}\n canSend={send !== undefined}\n canEnqueue={enqueue !== undefined}\n streaming={streaming}\n stopLabel={labels.stop}\n sendLabel={labels.send}\n queueLabel={labels.queue}\n placeholder={labels.placeholder}\n maxPromptCharacters={maxPromptCharacters}\n onSubmit={submitToComposer}\n onAbort={abort}\n composerContent={composerContent}\n />\n </>\n ) : null}\n </div>\n )\n}\n\n/**\n * What is waiting to be said, in as little vertical space as it can honestly\n * take.\n *\n * This sits between the transcript and the composer, so every row it spends is a\n * row taken from the conversation being read. The standing title line went: the\n * `section` still carries it as an accessible name, and a numbered row whose own\n * status reads \"Queued\" does not also need a heading to say so. Everything else\n * is one notch tighter — which roughly halves the block for the common case of a\n * single waiting message.\n *\n * `onSendNow` is the way out of waiting. A queued message otherwise goes when the\n * conversation gets to it, and there was no way to say \"go now\" without deleting\n * it and typing it again.\n */\nexport function AgentMessageQueue({\n messages,\n labels: labelOverrides,\n onEdit,\n onRemove,\n onRetry,\n onSendNow,\n}: {\n messages: readonly AgentQueuedMessage[]\n labels?: Partial<AgentPanelLabels>\n onEdit?: (message: AgentQueuedMessage) => void\n onRemove?: (message: AgentQueuedMessage) => void\n onRetry?: (message: AgentQueuedMessage) => void\n onSendNow?: (message: AgentQueuedMessage) => void\n}) {\n const labels = { ...DEFAULT_LABELS, ...labelOverrides }\n return (\n <section className=\"mb-2 rounded-lg border border-border bg-bg-subtle p-1\" aria-label={labels.queueTitle}>\n <ol className=\"space-y-0.5\">\n {messages.map((message) => (\n <li key={message.id} className=\"flex min-w-0 items-center gap-1.5 rounded-md bg-surface px-1.5 py-0.5 shadow-xs\">\n <span className=\"flex size-5 shrink-0 items-center justify-center rounded bg-primary-subtle text-[0.6875rem] font-medium text-primary\" aria-label={`${labels.queuePosition} ${message.position}`}>{message.position}</span>\n <span className=\"min-w-0 flex-1 truncate text-sm text-fg\">{message.text}</span>\n <span className={cn('shrink-0 text-xs', message.status === 'failed' ? 'text-danger' : 'text-fg-muted')}>{message.statusLabel ?? queueStatusLabel(message.status, labels)}</span>\n {message.sendable !== false && onSendNow ? <Button type=\"button\" variant=\"ghost\" size=\"icon\" className=\"size-6\" onClick={() => onSendNow(message)} aria-label={labels.sendQueuedNow} title={labels.sendQueuedNow}><Send size={13} /></Button> : null}\n {message.retryable && onRetry ? <Button type=\"button\" variant=\"ghost\" size=\"icon\" className=\"size-6\" onClick={() => onRetry(message)} aria-label={labels.retryQueued}><RotateCcw size={13} /></Button> : null}\n {message.editable && onEdit ? <Button type=\"button\" variant=\"ghost\" size=\"icon\" className=\"size-6\" onClick={() => onEdit(message)} aria-label={labels.editQueued}><Pencil size={13} /></Button> : null}\n {message.removable && onRemove ? <Button type=\"button\" variant=\"ghost\" size=\"icon\" className=\"size-6\" onClick={() => onRemove(message)} aria-label={labels.removeQueued}><Trash2 size={13} /></Button> : null}\n </li>\n ))}\n </ol>\n </section>\n )\n}\n\nfunction queueStatusLabel(status: AgentQueuedMessage['status'], labels: AgentPanelLabels): string {\n if (status === 'dispatching') return labels.dispatching\n if (status === 'retrying') return labels.retrying\n if (status === 'failed') return labels.queueFailed\n return labels.queued\n}\n\nfunction replaceLastAssistantParts(messages: AgentMessage[], parts: unknown[]): AgentMessage[] {\n const copy = messages.slice()\n for (let index = copy.length - 1; index >= 0; index -= 1) {\n if (copy[index]?.role === 'assistant') { copy[index] = { ...copy[index]!, parts }; break }\n }\n return copy\n}\n\nfunction AgentWelcome({ enabled, title, description, suggestions, onPick }: { enabled: boolean; title: string; description: string; suggestions: string[]; onPick: (value: string) => void }) {\n return <div className=\"pt-10\"><EmptyState icon={<Sparkles />} title={title} description={description} />{enabled && suggestions.length ? <div className=\"mx-auto mt-6 grid max-w-2xl gap-2 sm:grid-cols-2\">{suggestions.map((suggestion) => <button key={suggestion} type=\"button\" onClick={() => onPick(suggestion)} className=\"rounded-xl border border-border bg-surface px-4 py-3 text-left text-sm text-fg-muted shadow-sm transition-colors hover:border-primary/40 hover:bg-primary-subtle hover:text-fg\">{suggestion}</button>)}</div> : null}</div>\n}\n\n/**\n * Memoed so transcript growth only re-renders the row whose parts changed.\n * `parts` is replaced (never mutated) on every update, so referential\n * comparison on the message object is a reliable change signal; handler\n * identity comes from the panel, which passes stable callbacks.\n */\nconst MemoAgentMessageRow = React.memo(function AgentMessageRow({ message, pending = false, labels, toolLabels, assistantAvatar, onSubmitSecretRequest, onCancelSecretRequest, secretRequestLabels, onDecideApprovalRequest, approvalRequestLabels }: { message: AgentMessage; pending?: boolean; labels: AgentPanelLabels; toolLabels?: Record<string, string>; assistantAvatar?: React.ReactNode; onSubmitSecretRequest?: AgentPanelProps['onSubmitSecretRequest']; onCancelSecretRequest?: AgentPanelProps['onCancelSecretRequest']; secretRequestLabels?: Partial<AgentSecretRequestLabels>; onDecideApprovalRequest?: AgentPanelProps['onDecideApprovalRequest']; approvalRequestLabels?: Partial<AgentApprovalRequestLabels> }) {\n if (message.role === 'user') {\n const text = (message.parts.find((part) => (part as { type?: string }).type === 'text') as { text?: string } | undefined)?.text\n const files = message.parts.filter(isAgentFilePart)\n return <div className=\"flex justify-end\"><div className=\"max-w-[85%] space-y-2 rounded-2xl rounded-br-md bg-primary px-4 py-2 text-sm whitespace-pre-wrap text-primary-fg\">{text ? <div>{text}</div> : null}{files.length > 0 ? <div className=\"flex flex-wrap justify-end gap-1.5\">{files.map((file, index) => file.url ? <a key={`${file.filename}-${index}`} href={file.url} className=\"rounded-md border border-primary-fg/25 bg-primary-fg/10 px-2 py-1 text-xs font-medium hover:bg-primary-fg/15\" download>{file.filename}</a> : <span key={`${file.filename}-${index}`} className=\"rounded-md border border-primary-fg/25 bg-primary-fg/10 px-2 py-1 text-xs font-medium\">{file.filename}</span>)}</div> : null}</div></div>\n }\n return <div className=\"flex gap-3\"><span className={cn('mt-0.5 flex size-7 shrink-0 items-center justify-center overflow-hidden rounded-full', assistantAvatar == null && 'bg-primary text-primary-fg shadow-sm')}>{assistantAvatar ?? <Sparkles size={16} />}</span><div className=\"min-w-0 flex-1 pt-0.5\">{message.parts.length === 0 && pending ? <AgentTypingIndicator label={labels.responding} /> : <AgentMessageParts parts={message.parts} labels={labels} toolLabels={toolLabels} onSubmitSecretRequest={onSubmitSecretRequest} onCancelSecretRequest={onCancelSecretRequest} secretRequestLabels={secretRequestLabels} onDecideApprovalRequest={onDecideApprovalRequest} approvalRequestLabels={approvalRequestLabels} />}{message.parts.length > 0 && pending ? <div className=\"mt-2\"><AgentTypingIndicator label={labels.responding} /></div> : null}</div></div>\n})\n\nconst TYPING_DOT_DELAYS = [\n '0ms',\n 'var(--duration-fast)',\n 'calc(var(--duration-fast) + var(--duration-fast))',\n] as const\n\n/**\n * A self-contained streaming cue that does not depend on the consuming app's\n * Tailwind content scan. The cadence uses AppKit motion tokens and becomes a\n * still, readable ellipsis when the user requests reduced motion.\n */\nexport function AgentTypingIndicator({ label = DEFAULT_LABELS.responding }: { label?: string }) {\n return (\n <div role=\"status\" aria-label={label} className=\"flex items-center gap-1 py-1.5\">\n <style>{`\n @keyframes appkit-agent-typing-dot {\n 0%, 36%, 100% { opacity: 0.55; transform: translateY(0); }\n 18% { opacity: 1; transform: translateY(-0.2rem); }\n }\n .appkit-agent-typing-dot {\n animation: appkit-agent-typing-dot calc(var(--duration-slow) + var(--duration-slow) + var(--duration-slow)) var(--ease-out) infinite;\n will-change: transform, opacity;\n }\n @media (prefers-reduced-motion: reduce) {\n .appkit-agent-typing-dot {\n animation: none;\n opacity: 0.7;\n transform: none;\n will-change: auto;\n }\n }\n `}</style>\n {TYPING_DOT_DELAYS.map((animationDelay) => (\n <span\n key={animationDelay}\n aria-hidden=\"true\"\n className=\"appkit-agent-typing-dot size-1.5 rounded-full bg-fg-subtle\"\n style={{ animationDelay }}\n />\n ))}\n </div>\n )\n}\n\nfunction isAgentFilePart(part: unknown): part is { type: 'file'; filename: string; url?: string } {\n if (!part || typeof part !== 'object') return false\n const candidate = part as { type?: unknown; filename?: unknown; url?: unknown }\n return candidate.type === 'file'\n && typeof candidate.filename === 'string'\n && candidate.filename.trim().length > 0\n && (candidate.url === undefined || typeof candidate.url === 'string')\n}\n\nfunction AgentMessageParts({ parts, labels, toolLabels, onSubmitSecretRequest, onCancelSecretRequest, secretRequestLabels, onDecideApprovalRequest, approvalRequestLabels }: { parts: unknown[]; labels: AgentPanelLabels; toolLabels?: Record<string, string>; onSubmitSecretRequest?: AgentPanelProps['onSubmitSecretRequest']; onCancelSecretRequest?: AgentPanelProps['onCancelSecretRequest']; secretRequestLabels?: Partial<AgentSecretRequestLabels>; onDecideApprovalRequest?: AgentPanelProps['onDecideApprovalRequest']; approvalRequestLabels?: Partial<AgentApprovalRequestLabels> }) {\n const rendered: React.ReactNode[] = []\n let tools: AgentToolPart[] = []\n let toolGroupStart = 0\n const flushTools = () => {\n if (tools.length === 0) return\n rendered.push(<AgentToolActivity key={`tools-${toolGroupStart}`} parts={tools} labels={labels} toolLabels={toolLabels} />)\n tools = []\n }\n parts.forEach((value, index) => {\n if (!value || typeof value !== 'object' || typeof (value as { type?: unknown }).type !== 'string') return\n const part = value as { type: string; [key: string]: unknown }\n if (isAgentToolPart(part)) {\n if (tools.length === 0) toolGroupStart = index\n tools.push(part)\n return\n }\n if (part.type === 'step-start' || part.type === 'reasoning') return\n flushTools()\n if (isAgentSecretRequestPart(part)) {\n rendered.push(<AgentSecretRequestCard key={`secret-${part.requestId}-${part.status}`} request={part} labels={secretRequestLabels} onSubmit={onSubmitSecretRequest} onCancel={onCancelSecretRequest} />)\n return\n }\n if (isAgentApprovalRequestPart(part)) {\n rendered.push(<AgentApprovalRequestCard key={`approval-${part.approvalId}-${part.status}`} request={part} labels={approvalRequestLabels} onDecide={onDecideApprovalRequest} />)\n return\n }\n if (part.type === 'text' && typeof part.text === 'string' && part.text.trim()) {\n rendered.push(<ChatMarkdown key={`text-${index}`}>{part.text}</ChatMarkdown>)\n }\n })\n flushTools()\n return <div className=\"space-y-2.5\">{rendered}</div>\n}\n\nfunction isAgentApprovalRequestPart(part: { type: string; [key: string]: unknown }): part is AgentApprovalRequestPart & { [key: string]: unknown } {\n return part.type === 'approval-request'\n && typeof part.approvalId === 'string'\n && part.approvalId.trim().length > 0\n && typeof part.categoryLabel === 'string'\n && part.categoryLabel.trim().length > 0\n && typeof part.description === 'string'\n && part.description.trim().length > 0\n && (part.details === undefined || (Array.isArray(part.details) && part.details.every((detail) => (\n detail !== null\n && typeof detail === 'object'\n && typeof (detail as { label?: unknown }).label === 'string'\n && typeof (detail as { value?: unknown }).value === 'string'\n ))))\n && (part.status === 'pending' || part.status === 'approved' || part.status === 'rejected' || part.status === 'expired' || part.status === 'failed')\n && (part.decisionNote === undefined || typeof part.decisionNote === 'string')\n && (part.failureReason === undefined || typeof part.failureReason === 'string')\n}\n\nexport type AgentApprovalRequestCardProps = {\n request: AgentApprovalRequestPart\n labels?: Partial<AgentApprovalRequestLabels>\n onDecide?: (approvalId: string, decision: 'approved' | 'rejected', note?: string) => void | Promise<void>\n}\n\n/** Inline, transcript-safe approval for a governed action. */\nexport function AgentApprovalRequestCard({ request, labels: labelOverrides, onDecide }: AgentApprovalRequestCardProps) {\n const labels = { ...DEFAULT_APPROVAL_REQUEST_LABELS, ...labelOverrides }\n const [deciding, setDeciding] = React.useState<'approved' | 'rejected' | null>(null)\n const [settledStatus, setSettledStatus] = React.useState<'approved' | 'rejected' | null>(null)\n const [error, setError] = React.useState<string | null>(null)\n const noteRef = React.useRef<HTMLInputElement>(null)\n const status = settledStatus ?? request.status\n\n const decide = React.useCallback(async (decision: 'approved' | 'rejected') => {\n if (!onDecide || deciding || status !== 'pending') return\n const note = noteRef.current?.value.trim() || undefined\n setError(null)\n setDeciding(decision)\n try {\n await onDecide(request.approvalId, decision, note)\n setSettledStatus(decision)\n if (noteRef.current) noteRef.current.value = ''\n } catch {\n setError(labels.failed)\n } finally {\n setDeciding(null)\n }\n }, [deciding, labels.failed, onDecide, request.approvalId, status])\n\n const statusText = status === 'approved'\n ? labels.approved\n : status === 'rejected'\n ? labels.rejected\n : status === 'expired'\n ? labels.expired\n : status === 'failed'\n ? labels.carryOutFailed\n : null\n\n // A carry-out failure is the one settled state the reader has to act on, so\n // it is the one that does not read as quiet grey afterthought text.\n const settledFailure = status === 'failed'\n\n return (\n <section className=\"rounded-xl border border-border bg-surface-raised p-3 shadow-sm\" aria-label={labels.title}>\n <div className=\"flex items-start gap-2.5\">\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-warning-subtle text-warning\"><ShieldCheck size={17} /></span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <p className=\"text-sm font-semibold text-fg\">{labels.title}</p>\n <span className=\"rounded-full bg-surface-muted px-2 py-0.5 text-[11px] font-medium text-fg-muted\">{request.categoryLabel}</span>\n </div>\n <p className=\"mt-1 text-sm leading-5 text-fg-muted\">{request.description}</p>\n {request.details?.length ? <dl className=\"mt-2 grid gap-1 rounded-lg bg-surface-muted p-2 text-xs\">{request.details.map((detail) => <div key={`${detail.label}:${detail.value}`} className=\"grid grid-cols-[minmax(5rem,auto)_1fr] gap-2\"><dt className=\"font-medium text-fg-muted\">{detail.label}</dt><dd className=\"min-w-0 break-words text-fg\">{detail.value}</dd></div>)}</dl> : null}\n {status === 'pending' ? (\n <div className=\"mt-3 space-y-2\">\n <Input ref={noteRef} placeholder={labels.note} aria-label={labels.note} disabled={!onDecide || deciding !== null} />\n <div className=\"flex flex-wrap gap-2\">\n <Button type=\"button\" size=\"sm\" onClick={() => void decide('approved')} disabled={!onDecide || deciding !== null}>{deciding === 'approved' ? <Loader2 className=\"size-4 animate-spin\" /> : null}{deciding === 'approved' ? labels.deciding : labels.approve}</Button>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={() => void decide('rejected')} disabled={!onDecide || deciding !== null}>{deciding === 'rejected' ? <Loader2 className=\"size-4 animate-spin\" /> : null}{deciding === 'rejected' ? labels.deciding : labels.reject}</Button>\n </div>\n </div>\n ) : settledFailure ? (\n <div role=\"alert\" className=\"mt-2 flex items-start gap-2 rounded-lg bg-danger-subtle p-2 text-xs text-danger\">\n <AlertCircle size={14} className=\"mt-px shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"font-medium\">{statusText}</p>\n {request.failureReason ? <p className=\"mt-0.5 break-words opacity-90\">{request.failureReason}</p> : null}\n {request.decisionNote ? <p className=\"mt-0.5 break-words opacity-90\">Note: {request.decisionNote}</p> : null}\n </div>\n </div>\n ) : <p className=\"mt-2 text-xs font-medium text-fg-muted\">{statusText}{request.decisionNote ? ` Note: ${request.decisionNote}` : ''}</p>}\n {error ? <p role=\"alert\" className=\"mt-2 text-xs text-danger\">{error}</p> : null}\n </div>\n </div>\n </section>\n )\n}\n\nfunction isAgentSecretRequestPart(part: { type: string; [key: string]: unknown }): part is AgentSecretRequestPart & { [key: string]: unknown } {\n return part.type === 'secret-request'\n && typeof part.requestId === 'string'\n && part.requestId.trim().length > 0\n && typeof part.providerLabel === 'string'\n && part.providerLabel.trim().length > 0\n && typeof part.credentialLabel === 'string'\n && part.credentialLabel.trim().length > 0\n && typeof part.purpose === 'string'\n && part.purpose.trim().length > 0\n && (part.helpUrl === undefined || typeof part.helpUrl === 'string')\n && (part.status === 'pending' || part.status === 'stored' || part.status === 'expired')\n}\n\nfunction safeSecretHelpUrl(value: string | undefined): string | undefined {\n if (!value) return undefined\n if (value.startsWith('/') && !value.startsWith('//')) return value\n try {\n const url = new URL(value)\n return url.protocol === 'https:' ? url.href : undefined\n } catch {\n return undefined\n }\n}\n\nexport type AgentSecretRequestCardProps = {\n request: AgentSecretRequestPart\n labels?: Partial<AgentSecretRequestLabels>\n onSubmit?: (requestId: string, secret: string) => void | Promise<void>\n onCancel?: (requestId: string) => void | Promise<void>\n}\n\n/**\n * Inline credential handoff for an assistant transcript. The password field is\n * uncontrolled: its value is read directly from the DOM, cleared before the\n * caller receives it, and never copied into React or transcript state.\n */\nexport function AgentSecretRequestCard({ request, labels: labelOverrides, onSubmit, onCancel }: AgentSecretRequestCardProps) {\n const labels = { ...DEFAULT_SECRET_REQUEST_LABELS, ...labelOverrides }\n const inputId = React.useId()\n const inputRef = React.useRef<HTMLInputElement>(null)\n const [revealed, setRevealed] = React.useState(false)\n const [submitting, setSubmitting] = React.useState(false)\n const [settledStatus, setSettledStatus] = React.useState<Exclude<AgentSecretRequestStatus, 'pending'> | null>(null)\n const [error, setError] = React.useState<string | null>(null)\n const requestIdentityRef = React.useRef(`${request.requestId}:${request.status}`)\n const status = settledStatus ?? request.status\n const helpUrl = safeSecretHelpUrl(request.helpUrl)\n\n const clearInput = React.useCallback(() => {\n if (inputRef.current) inputRef.current.value = ''\n }, [])\n\n React.useEffect(() => {\n const identity = `${request.requestId}:${request.status}`\n if (requestIdentityRef.current !== identity) {\n requestIdentityRef.current = identity\n clearInput()\n setRevealed(false)\n setSubmitting(false)\n setSettledStatus(null)\n setError(null)\n }\n }, [clearInput, request.requestId, request.status])\n\n React.useEffect(() => {\n return clearInput\n }, [clearInput])\n\n const submit = React.useCallback(async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n if (!onSubmit || submitting || status !== 'pending') return\n const secret = inputRef.current?.value ?? ''\n if (secret.length === 0) {\n setError(labels.required)\n inputRef.current?.focus()\n return\n }\n clearInput()\n setRevealed(false)\n setError(null)\n setSubmitting(true)\n try {\n await onSubmit(request.requestId, secret)\n setSettledStatus('stored')\n } catch {\n setError(labels.failed)\n inputRef.current?.focus()\n } finally {\n clearInput()\n setSubmitting(false)\n }\n }, [clearInput, labels.failed, labels.required, onSubmit, request.requestId, status, submitting])\n\n const cancel = React.useCallback(async () => {\n if (!onCancel || submitting || status !== 'pending') return\n clearInput()\n setRevealed(false)\n setError(null)\n setSubmitting(true)\n try {\n await onCancel(request.requestId)\n setSettledStatus('expired')\n } catch {\n setError(labels.cancelFailed)\n } finally {\n clearInput()\n setSubmitting(false)\n }\n }, [clearInput, labels.cancelFailed, onCancel, request.requestId, status, submitting])\n\n return (\n <section className=\"overflow-hidden rounded-xl border border-border bg-surface shadow-sm\" aria-labelledby={`${inputId}-title`}>\n <div className=\"flex items-start gap-3 p-3\">\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary-subtle text-primary\"><KeyRound size={16} /></span>\n <div className=\"min-w-0 flex-1\">\n <div id={`${inputId}-title`} className=\"text-sm font-semibold text-fg\">{request.providerLabel}</div>\n <div className=\"mt-0.5 text-xs font-medium text-fg-muted\">{request.credentialLabel}</div>\n <p className=\"mt-1.5 text-sm leading-relaxed text-fg-muted\">{request.purpose}</p>\n {helpUrl ? helpUrl.startsWith('/') ? <UiLink href={helpUrl} className=\"mt-2 inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline\">{labels.help}</UiLink> : <a href={helpUrl} target=\"_blank\" rel=\"noreferrer\" className=\"mt-2 inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline\">{labels.help}<ExternalLink size={12} aria-hidden=\"true\" /></a> : null}\n </div>\n </div>\n {status === 'pending' ? (\n <form onSubmit={(event) => void submit(event)} onKeyDown={(event) => { if (event.key === 'Escape') { event.preventDefault(); void cancel() } }} className=\"relative space-y-2.5 border-t border-border bg-bg-subtle p-3\">\n <label htmlFor={inputId} className=\"sr-only\">{request.credentialLabel}</label>\n <div className=\"relative\">\n <Input ref={inputRef} id={inputId} type={revealed ? 'text' : 'password'} autoComplete=\"new-password\" autoCapitalize=\"none\" spellCheck={false} disabled={submitting || !onSubmit} aria-invalid={error ? true : undefined} onKeyDown={(event) => { if (event.key === 'Enter') { event.preventDefault(); event.currentTarget.form?.requestSubmit() } }} className=\"pr-11 font-mono\" />\n <button type=\"button\" onClick={() => setRevealed((value) => !value)} disabled={submitting || !onSubmit} aria-label={revealed ? labels.hide : labels.show} aria-pressed={revealed} className=\"absolute inset-y-0 right-0 flex w-10 items-center justify-center rounded-r-md text-fg-muted transition-colors hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring/60 disabled:pointer-events-none disabled:opacity-50 motion-reduce:transition-none\">{revealed ? <EyeOff size={16} /> : <Eye size={16} />}</button>\n </div>\n {error ? <p role=\"alert\" className=\"text-xs text-danger\">{error}</p> : null}\n <div className=\"flex items-center justify-end gap-2 pt-1\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => void cancel()} disabled={submitting || !onCancel}>{labels.cancel}</Button>\n <Button type=\"submit\" size=\"sm\" disabled={submitting || !onSubmit}>{submitting ? <><Loader2 size={14} className=\"animate-spin motion-reduce:animate-none\" />{labels.submitting}</> : labels.submit}</Button>\n </div>\n </form>\n ) : (\n <div role=\"status\" className={cn('flex items-center gap-2 border-t border-border px-3 py-2.5 text-sm font-medium', status === 'stored' ? 'bg-success-subtle text-success' : 'bg-bg-subtle text-fg-muted')}>\n {status === 'stored' ? <CheckCircle2 size={16} /> : <AlertCircle size={16} />}\n {status === 'stored' ? labels.stored : labels.expired}\n </div>\n )}\n </section>\n )\n}\n\ntype AgentToolPart = { type: string; toolName?: unknown; state?: unknown; input?: unknown; output?: unknown }\n\nfunction isAgentToolPart(part: { type: string }): part is AgentToolPart {\n return part.type === 'dynamic-tool' || part.type.startsWith('tool-')\n}\n\nfunction agentToolName(part: AgentToolPart): string {\n return part.type === 'dynamic-tool' ? String(part.toolName ?? 'tool') : part.type.slice(5)\n}\n\nfunction agentToolRunning(part: AgentToolPart): boolean {\n const state = String(part.state ?? 'output-available')\n return state === 'input-streaming' || state === 'input-available'\n}\n\nfunction agentToolErrored(part: AgentToolPart): boolean {\n return String(part.state) === 'output-error' || (part.output as { ok?: boolean } | undefined)?.ok === false\n}\n\n/**\n * A multi-step run stays quiet in the transcript: the newest action and total\n * step count occupy one line, while the complete inputs/results remain one\n * click away. Applications keep their full durable audit trail separately.\n */\nfunction AgentToolActivity({ parts, labels, toolLabels }: { parts: AgentToolPart[]; labels: AgentPanelLabels; toolLabels?: Record<string, string> }) {\n const [open, setOpen] = React.useState(false)\n const latest = parts.at(-1)!\n const latestName = agentToolName(latest)\n const running = parts.some(agentToolRunning)\n const errored = parts.some(agentToolErrored)\n const count = parts.length\n const status = running ? labels.working : `${count} ${count === 1 ? labels.step : labels.steps}`\n return <div className=\"text-sm\"><button type=\"button\" onClick={() => setOpen((value) => !value)} aria-expanded={open} className=\"flex h-7 max-w-full items-center gap-1.5 rounded-md px-1.5 text-left text-xs text-fg-muted transition-colors hover:bg-surface-hover hover:text-fg\"><span className={cn('size-1.5 shrink-0 rounded-full', running ? 'animate-pulse bg-primary' : errored ? 'bg-danger' : 'bg-success')} /><span className=\"shrink-0 font-medium\">{status}</span><span aria-hidden className=\"text-fg-subtle\">·</span><span className=\"min-w-0 truncate\">{toolLabels?.[latestName] ?? latestName.replaceAll('_', ' ')}</span><ChevronRight size={12} className={cn('shrink-0 text-fg-subtle transition-transform', open && 'rotate-90')} /></button>{open ? <div className=\"mt-1.5 space-y-1.5 border-l border-border pl-2\">{parts.map((part, index) => { const name = agentToolName(part); return <AgentToolCard key={`${name}-${index}`} name={name} label={toolLabels?.[name]} state={String(part.state ?? 'output-available')} input={part.input} output={part.output} inputLabel={labels.input} resultLabel={labels.result} /> })}</div> : null}</div>\n}\n\nexport function ChatMarkdown({ children }: { children: string }) {\n return <div className=\"space-y-2 text-sm leading-relaxed text-fg\"><Markdown remarkPlugins={[remarkGfm]} components={{ p: ({ children: content }) => <p className=\"whitespace-pre-wrap\">{content}</p>, h1: ({ children: content }) => <h1 className=\"text-lg font-semibold\">{content}</h1>, h2: ({ children: content }) => <h2 className=\"text-base font-semibold\">{content}</h2>, ul: ({ children: content }) => <ul className=\"list-disc space-y-1 pl-5\">{content}</ul>, ol: ({ children: content }) => <ol className=\"list-decimal space-y-1 pl-5\">{content}</ol>, code: ({ children: content }) => <code className=\"rounded bg-bg-subtle px-1 py-0.5 font-mono text-[0.85em] text-primary\">{content}</code>, pre: ({ children: content }) => <pre className=\"overflow-auto rounded-lg bg-overlay p-3 text-sm whitespace-pre-wrap text-white\">{content}</pre>, table: ({ children: content }) => <div className=\"overflow-x-auto\"><table className=\"w-full border-collapse text-sm\">{content}</table></div>, th: ({ children: content }) => <th className=\"border-b border-border px-2 py-1 text-left\">{content}</th>, td: ({ children: content }) => <td className=\"border-b border-border-subtle px-2 py-1\">{content}</td>, a: ({ href, children: content }) => href?.startsWith('/') ? <UiLink href={href} className=\"font-medium text-primary underline-offset-2 hover:underline\">{content}</UiLink> : <a href={href} target=\"_blank\" rel=\"noreferrer\" className=\"font-medium text-primary underline-offset-2 hover:underline\">{content}</a> }}>{children}</Markdown></div>\n}\n\nexport function AgentToolCard({ name, label, state, input, output, inputLabel = 'Input', resultLabel = 'Result' }: { name: string; label?: string; state: string; input?: unknown; output?: unknown; inputLabel?: string; resultLabel?: string }) {\n const [open, setOpen] = React.useState(false)\n const running = state === 'input-streaming' || state === 'input-available'\n const errored = state === 'output-error' || (output as { ok?: boolean } | undefined)?.ok === false\n return <div className=\"overflow-hidden rounded-lg border border-border bg-bg-subtle text-sm\"><button type=\"button\" onClick={() => setOpen((value) => !value)} className=\"flex w-full items-center gap-2.5 px-3 py-2 text-left transition-colors hover:bg-surface-hover\"><span className={cn('flex size-6 shrink-0 items-center justify-center rounded-md', errored ? 'bg-danger-subtle text-danger' : 'bg-primary-subtle text-primary')}><Database size={14} /></span><span className=\"min-w-0 flex-1 truncate font-medium text-fg\">{label ?? name.replaceAll('_', ' ')}</span>{running ? <Loader2 size={14} className=\"animate-spin text-fg-subtle\" /> : errored ? <AlertCircle size={14} className=\"text-danger\" /> : <CheckCircle2 size={14} className=\"text-success\" />}<ChevronRight size={14} className={cn('text-fg-subtle transition-transform', open && 'rotate-90')} /></button>{open ? <div className=\"space-y-2 border-t border-border px-3 py-2\">{input !== undefined ? <AgentToolDetail label={inputLabel} value={input} /> : null}{output !== undefined ? <AgentToolDetail label={resultLabel} value={output} /> : null}</div> : null}</div>\n}\n\nfunction AgentToolDetail({ label, value }: { label: string; value: unknown }) {\n let text: string\n try { text = JSON.stringify(value, null, 2) } catch { text = String(value) }\n return <div><div className=\"mb-1 text-[11px] font-semibold tracking-wide text-fg-subtle uppercase\">{label}</div><pre className=\"max-h-60 overflow-auto rounded-md bg-surface p-2 text-xs leading-relaxed text-fg ring-1 ring-border\">{text}</pre></div>\n}\n"]}
|