veryfront 0.1.1074 → 0.1.1076

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/esm/cli/templates/manifest.js +1 -1
  2. package/esm/deno.js +1 -1
  3. package/esm/src/agent/react/index.d.ts +3 -3
  4. package/esm/src/agent/react/index.d.ts.map +1 -1
  5. package/esm/src/agent/react/index.js +1 -1
  6. package/esm/src/agent/react/use-agent-metadata.d.ts +18 -1
  7. package/esm/src/agent/react/use-agent-metadata.d.ts.map +1 -1
  8. package/esm/src/agent/react/use-agent-metadata.js +19 -0
  9. package/esm/src/agent/react/use-chat/index.d.ts +1 -1
  10. package/esm/src/agent/react/use-chat/index.d.ts.map +1 -1
  11. package/esm/src/agent/react/use-chat/types.d.ts +16 -0
  12. package/esm/src/agent/react/use-chat/types.d.ts.map +1 -1
  13. package/esm/src/agent/react/use-chat/use-chat.d.ts.map +1 -1
  14. package/esm/src/agent/react/use-chat/use-chat.js +36 -3
  15. package/esm/src/react/components/chat/agent-picker.d.ts +4 -4
  16. package/esm/src/react/components/chat/agent-picker.d.ts.map +1 -1
  17. package/esm/src/react/components/chat/agent-picker.js +3 -5
  18. package/esm/src/react/components/chat/chat/app-mode-chat.d.ts.map +1 -1
  19. package/esm/src/react/components/chat/chat/app-mode-chat.js +16 -31
  20. package/esm/src/react/components/chat/chat/chat-props.d.ts +11 -4
  21. package/esm/src/react/components/chat/chat/chat-props.d.ts.map +1 -1
  22. package/esm/src/react/components/chat/chat/components/sidebar.d.ts +10 -16
  23. package/esm/src/react/components/chat/chat/components/sidebar.d.ts.map +1 -1
  24. package/esm/src/react/components/chat/chat/components/sidebar.js +16 -10
  25. package/esm/src/react/components/chat/chat/composition/chat-composer.d.ts +20 -19
  26. package/esm/src/react/components/chat/chat/composition/chat-composer.d.ts.map +1 -1
  27. package/esm/src/react/components/chat/chat/composition/chat-composer.js +16 -46
  28. package/esm/src/react/components/chat/chat/composition/chat-empty.d.ts +12 -3
  29. package/esm/src/react/components/chat/chat/composition/chat-empty.d.ts.map +1 -1
  30. package/esm/src/react/components/chat/chat/composition/chat-empty.js +12 -2
  31. package/esm/src/react/components/chat/chat/composition/chat-message-list.d.ts.map +1 -1
  32. package/esm/src/react/components/chat/chat/composition/chat-message-list.js +5 -1
  33. package/esm/src/react/components/chat/chat/composition/chat-root.d.ts +7 -3
  34. package/esm/src/react/components/chat/chat/composition/chat-root.d.ts.map +1 -1
  35. package/esm/src/react/components/chat/chat/composition/chat-root.js +5 -1
  36. package/esm/src/react/components/chat/chat/composition/message-sources.d.ts +35 -0
  37. package/esm/src/react/components/chat/chat/composition/message-sources.d.ts.map +1 -0
  38. package/esm/src/react/components/chat/chat/composition/message-sources.js +31 -0
  39. package/esm/src/react/components/chat/chat/composition/message.d.ts +8 -10
  40. package/esm/src/react/components/chat/chat/composition/message.d.ts.map +1 -1
  41. package/esm/src/react/components/chat/chat/composition/message.js +10 -17
  42. package/esm/src/react/components/chat/chat/composition/use-composer-value.d.ts +53 -0
  43. package/esm/src/react/components/chat/chat/composition/use-composer-value.d.ts.map +1 -0
  44. package/esm/src/react/components/chat/chat/composition/use-composer-value.js +78 -0
  45. package/esm/src/react/components/chat/chat/contexts/chat-context.d.ts +10 -2
  46. package/esm/src/react/components/chat/chat/contexts/chat-context.d.ts.map +1 -1
  47. package/esm/src/react/components/chat/chat/controlled-chat.d.ts +1 -1
  48. package/esm/src/react/components/chat/chat/controlled-chat.d.ts.map +1 -1
  49. package/esm/src/react/components/chat/chat/controlled-chat.js +5 -7
  50. package/esm/src/react/components/chat/chat/hooks/use-conversation-chat.d.ts.map +1 -1
  51. package/esm/src/react/components/chat/chat/hooks/use-conversation-chat.js +8 -5
  52. package/esm/src/react/components/chat/chat/hooks/use-conversation.d.ts.map +1 -1
  53. package/esm/src/react/components/chat/chat/hooks/use-conversation.js +3 -1
  54. package/esm/src/react/components/chat/chat/hooks/use-conversations.d.ts +5 -0
  55. package/esm/src/react/components/chat/chat/hooks/use-conversations.d.ts.map +1 -1
  56. package/esm/src/react/components/chat/chat/hooks/use-conversations.js +2 -0
  57. package/esm/src/react/components/chat/chat-agent-picker.d.ts +6 -1
  58. package/esm/src/react/components/chat/chat-agent-picker.d.ts.map +1 -1
  59. package/esm/src/react/components/chat/chat-agent-picker.js +7 -2
  60. package/esm/src/react/components/chat/model-selector.d.ts +2 -0
  61. package/esm/src/react/components/chat/model-selector.d.ts.map +1 -1
  62. package/esm/src/react/components/chat/model-selector.js +7 -6
  63. package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
  64. package/esm/src/server/handlers/dev/framework-candidates.generated.js +198 -74
  65. package/esm/src/utils/version-constant.d.ts +1 -1
  66. package/esm/src/utils/version-constant.js +1 -1
  67. package/package.json +5 -5
@@ -51,7 +51,7 @@ export default {
51
51
  "app/api/ag-ui/route.ts": "import { createAgUiHandler } from \"veryfront/agent\";\nimport { store } from \"../../../store.ts\";\n\nexport const POST = createAgUiHandler(\"rag\", {\n beforeStream: async ({ lastUserText }) => {\n const query = lastUserText.trim();\n if (!query) return;\n\n try {\n const results = await store.search(query, { topK: 5 });\n if (results.length === 0) return;\n\n const contextBlock = results\n .map(\n (result) =>\n `[${result.title}] (score: ${\n result.score.toFixed(2)\n })\\n${result.text}`,\n )\n .join(\"\\n\\n---\\n\\n\");\n\n return {\n prepend: [\n {\n role: \"system\",\n parts: [\n {\n type: \"text\",\n text:\n `Here are relevant documents retrieved for your question:\\n\\n${contextBlock}\\n\\n` +\n \"Use these documents to answer. Cite the document title when referencing information.\",\n },\n ],\n },\n ],\n };\n } catch (e) {\n console.error(\"[RAG] Retrieval failed:\", e);\n return;\n }\n },\n});\n",
52
52
  "app/api/ingest/route.ts": "import { store } from \"../../../store.ts\";\n\nexport async function POST() {\n await store.indexContentDir();\n return Response.json({ ok: true });\n}\n",
53
53
  "app/api/uploads/route.ts": "import { createUploadHandler } from \"veryfront/embedding\";\nimport { store } from \"../../../store.ts\";\n\nexport const { POST, GET, DELETE } = createUploadHandler(store, {\n auth: { type: \"none\", allowUnauthenticated: true },\n});\n",
54
- "app/layout.tsx": "'use client'\n\nimport \"../globals.css\";\nimport {\n AppShell,\n ChatSidebar,\n ChatThemeScope,\n ConversationsProvider,\n Tabs,\n TabsItem,\n} from \"veryfront/chat\";\nimport { Head } from \"veryfront/head\";\nimport { useRouter } from \"veryfront/router\";\n\nexport default function RootLayout({ children }: { children: React.ReactNode }): React.ReactNode {\n const router = useRouter();\n const activeTab = router.pathname.startsWith(\"/uploads\") ? \"uploads\" : \"chat\";\n\n return (\n <>\n <Head><title>Docs Agent</title></Head>\n <ChatThemeScope className=\"flex flex-col h-screen\">\n <ConversationsProvider storageKey=\"rag-conversations\">\n <AppShell className=\"flex-1 min-h-0\">\n <AppShell.Sidebar side=\"left\" className=\"border-r border-[var(--outline-border)]\">\n <AppShell.SidebarContent className=\"p-0\">\n <ChatSidebar fill />\n </AppShell.SidebarContent>\n </AppShell.Sidebar>\n <AppShell.Main>\n <AppShell.Header border className=\"h-16 gap-3 px-3\">\n <AppShell.Trigger side=\"left\" />\n <div className=\"flex flex-1 justify-center\">\n <Tabs\n value={activeTab}\n onValueChange={(value) => router.push(value === \"uploads\" ? \"/uploads\" : \"/\")}\n >\n <TabsItem value=\"chat\">Chat</TabsItem>\n <TabsItem value=\"uploads\">Uploads</TabsItem>\n </Tabs>\n </div>\n </AppShell.Header>\n <AppShell.Content className=\"flex flex-col min-h-0 pt-3\">\n {children}\n </AppShell.Content>\n </AppShell.Main>\n </AppShell>\n </ConversationsProvider>\n </ChatThemeScope>\n </>\n );\n}\n",
54
+ "app/layout.tsx": "'use client'\n\nimport \"../globals.css\";\nimport {\n AppShell,\n ChatSidebar,\n ChatThemeScope,\n ConversationsProvider,\n Tabs,\n TabsItem,\n} from \"veryfront/chat\";\nimport { Head } from \"veryfront/head\";\nimport { useRouter } from \"veryfront/router\";\n\nexport default function RootLayout({ children }: { children: React.ReactNode }): React.ReactNode {\n const router = useRouter();\n const activeTab = router.pathname.startsWith(\"/uploads\") ? \"uploads\" : \"chat\";\n\n return (\n <>\n <Head><title>Docs Agent</title></Head>\n <ChatThemeScope className=\"flex flex-col h-screen\">\n <ConversationsProvider storageKey=\"rag-conversations\">\n <AppShell className=\"flex-1 min-h-0\">\n <AppShell.Sidebar side=\"left\" className=\"border-r border-[var(--outline-border)]\">\n <AppShell.SidebarContent className=\"p-0\">\n <ChatSidebar.Root>\n <ChatSidebar.NewButton />\n <ChatSidebar.List />\n </ChatSidebar.Root>\n </AppShell.SidebarContent>\n </AppShell.Sidebar>\n <AppShell.Main>\n <AppShell.Header border className=\"h-16 gap-3 px-3\">\n <AppShell.Trigger side=\"left\" />\n <div className=\"flex flex-1 justify-center\">\n <Tabs\n value={activeTab}\n onValueChange={(value) => router.push(value === \"uploads\" ? \"/uploads\" : \"/\")}\n >\n <TabsItem value=\"chat\">Chat</TabsItem>\n <TabsItem value=\"uploads\">Uploads</TabsItem>\n </Tabs>\n </div>\n </AppShell.Header>\n <AppShell.Content className=\"flex flex-col min-h-0 pt-3\">\n {children}\n </AppShell.Content>\n </AppShell.Main>\n </AppShell>\n </ConversationsProvider>\n </ChatThemeScope>\n </>\n );\n}\n",
55
55
  "app/page.tsx": "'use client'\n\nimport { Chat } from 'veryfront/chat'\n\nconst ACCEPT = '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.csv,.txt,.md,.mdx,.html,.rtf,.epub,.json,.xml'\n\nexport default function DocsChat() {\n return (\n <Chat\n agentId=\"rag\"\n api=\"/api/ag-ui\"\n uploadApi=\"/api/uploads\"\n attachAccept={ACCEPT}\n className=\"flex-1 min-h-0\"\n placeholder=\"Ask anything about your documents...\"\n />\n )\n}\n",
56
56
  "app/uploads/page.tsx": "'use client'\n\nimport { AttachmentsPanel, useUploadsRegistry } from 'veryfront/chat'\n\nconst UPLOAD_API = '/api/uploads'\nconst ACCEPT = '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.csv,.txt,.md,.mdx,.html,.rtf,.epub,.json,.xml'\n\nexport default function UploadsPage(): React.JSX.Element {\n const uploads = useUploadsRegistry({ url: UPLOAD_API, storageKey: 'rag-uploads' })\n\n return (\n <AttachmentsPanel\n uploads={uploads.items}\n loading={uploads.isLoading}\n onAttach={uploads.upload}\n onRemoveUpload={uploads.remove}\n attachAccept={ACCEPT}\n className=\"flex-1 min-h-0\"\n />\n )\n}\n",
57
57
  "content/architecture.md": "# Architecture\n\nAcme Platform uses a modular, event-driven architecture.\n\n## Core Components\n\n### API Gateway\nRoutes incoming requests to the appropriate microservice. Handles authentication, rate limiting, and request validation.\n\n### Event Bus\nAsynchronous message broker connecting all services. Supports pub/sub and point-to-point messaging patterns.\n\n### Data Layer\nMulti-tenant data storage with automatic sharding. Supports PostgreSQL for relational data and Redis for caching.\n\n## Request Flow\n\n1. Client sends request to API Gateway\n2. Gateway validates authentication token\n3. Request is routed to the target service\n4. Service processes request and publishes events\n5. Response is returned through the gateway\n\n## Scaling\n\nEach component scales independently. The API Gateway uses horizontal scaling with load balancing. Services auto-scale based on queue depth and CPU utilization.\n\n## Security\n\n- All inter-service communication uses mTLS\n- API tokens are rotated every 24 hours\n- Data at rest is encrypted with AES-256\n- Audit logs are retained for 90 days\n",
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.1074",
3
+ "version": "0.1.1076",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "minimumDependencyAge": {
@@ -4,11 +4,11 @@
4
4
  * @module agent/react
5
5
  */
6
6
  export { useChat } from "./use-chat/index.js";
7
- export type { BranchInfo, ChatDynamicToolPart, ChatFilePart, ChatFinishReason, ChatMessage, ChatMessagePart, ChatReasoningPart, ChatStepPart, ChatStreamEvent, ChatTextPart, ChatToolPart, ChatToolResultPart, ChatToolState, InferenceMode, OnToolCallArg, ToolOutput, UseChatOptions, UseChatResult, } from "./use-chat/index.js";
7
+ export type { BranchInfo, ChatDynamicToolPart, ChatFilePart, ChatFinishReason, ChatMessage, ChatMessagePart, ChatReasoningPart, ChatStatus, ChatStepPart, ChatStreamEvent, ChatTextPart, ChatToolPart, ChatToolResultPart, ChatToolState, InferenceMode, OnToolCallArg, ToolOutput, UseChatOptions, UseChatResult, } from "./use-chat/index.js";
8
8
  export { useAgent } from "./use-agent.js";
9
9
  export type { UseAgentOptions, UseAgentResult } from "./use-agent.js";
10
- export { getAgentPromptSuggestions, normalizeAgentMetadata, normalizeAgentMetadataResponse, useAgentMetadata, } from "./use-agent-metadata.js";
11
- export type { AgentMetadata, AgentMetadataPromptSuggestion, AgentMetadataSuggestion, AgentMetadataSuggestions, AgentMetadataTaskSuggestion, UseAgentMetadataResult, } from "./use-agent-metadata.js";
10
+ export { getAgentPromptSuggestionItems, getAgentPromptSuggestions, normalizeAgentMetadata, normalizeAgentMetadataResponse, useAgentMetadata, } from "./use-agent-metadata.js";
11
+ export type { AgentMetadata, AgentMetadataPromptSuggestion, AgentMetadataSuggestion, AgentMetadataSuggestions, AgentMetadataTaskSuggestion, PromptSuggestion, UseAgentMetadataResult, } from "./use-agent-metadata.js";
12
12
  export { normalizeAgentsListResponse, useAgents } from "./use-agents.js";
13
13
  export type { UseAgentsOptions, UseAgentsResult } from "./use-agents.js";
14
14
  export { useCompletion } from "./use-completion.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/react/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,YAAY,EACV,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,8BAA8B,EAC9B,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,aAAa,EACb,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,2BAA2B,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAErF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/react/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,YAAY,EACV,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,sBAAsB,EACtB,8BAA8B,EAC9B,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,aAAa,EACb,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,2BAA2B,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAErF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  export { useChat } from "./use-chat/index.js";
7
7
  export { useAgent } from "./use-agent.js";
8
- export { getAgentPromptSuggestions, normalizeAgentMetadata, normalizeAgentMetadataResponse, useAgentMetadata, } from "./use-agent-metadata.js";
8
+ export { getAgentPromptSuggestionItems, getAgentPromptSuggestions, normalizeAgentMetadata, normalizeAgentMetadataResponse, useAgentMetadata, } from "./use-agent-metadata.js";
9
9
  export { normalizeAgentsListResponse, useAgents } from "./use-agents.js";
10
10
  export { useCompletion } from "./use-completion.js";
11
11
  export { useStreaming } from "./use-streaming.js";
@@ -1,7 +1,7 @@
1
1
  /** Source-defined prompt suggestion shown by chat surfaces. */
2
2
  export type AgentMetadataPromptSuggestion = {
3
3
  type: "prompt";
4
- title: string;
4
+ title?: string;
5
5
  prompt: string;
6
6
  } | {
7
7
  id: string;
@@ -42,6 +42,23 @@ export declare function normalizeAgentMetadata(value: unknown): AgentMetadata;
42
42
  export declare function normalizeAgentMetadataResponse(value: unknown): AgentMetadata;
43
43
  /** Return prompt text suggestions that the current Chat component can render. */
44
44
  export declare function getAgentPromptSuggestions(agent: AgentMetadata | null): string[];
45
+ /**
46
+ * A prompt suggestion normalized for rendering: the short `label` shown on the
47
+ * chip and the full `prompt` sent when it is clicked.
48
+ */
49
+ export interface PromptSuggestion {
50
+ /** Short chip label — the agent's `title`, falling back to the prompt. */
51
+ label: string;
52
+ /** Full text sent to the agent when the chip is clicked. */
53
+ prompt: string;
54
+ }
55
+ /**
56
+ * Normalize an agent's prompt suggestions to `{ label, prompt }[]`, ready to
57
+ * render — the chip shows the short `title` while the click sends the full
58
+ * `prompt`. Saves consumers from flat-mapping `agent.suggestions.suggestions`
59
+ * and reconciling the `title`/`prompt` fields themselves.
60
+ */
61
+ export declare function getAgentPromptSuggestionItems(agent: AgentMetadata | null): PromptSuggestion[];
45
62
  /** React hook for browser-safe source-defined agent metadata. */
46
63
  export declare function useAgentMetadata(agentId: string | null | undefined): UseAgentMetadataResult;
47
64
  //# sourceMappingURL=use-agent-metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-agent-metadata.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/react/use-agent-metadata.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAC/D,MAAM,MAAM,6BAA6B,GACrC;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GACC;IACA,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEJ,6DAA6D;AAC7D,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,uCAAuC;AACvC,MAAM,MAAM,uBAAuB,GAAG,6BAA6B,GAAG,2BAA2B,CAAC;AAElG,oDAAoD;AACpD,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,uBAAuB,EAAE,CAAC;CACxC;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC;AAED,6CAA6C;AAC7C,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AA2ED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAYpE;AAED,wDAAwD;AACxD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAK5E;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,EAAE,CAK/E;AAED,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,sBAAsB,CAkD3F"}
1
+ {"version":3,"file":"use-agent-metadata.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/react/use-agent-metadata.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAC/D,MAAM,MAAM,6BAA6B,GACrC;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACC;IACA,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEJ,6DAA6D;AAC7D,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,uCAAuC;AACvC,MAAM,MAAM,uBAAuB,GAAG,6BAA6B,GAAG,2BAA2B,CAAC;AAElG,oDAAoD;AACpD,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,uBAAuB,EAAE,CAAC;CACxC;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC;AAED,6CAA6C;AAC7C,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AA2ED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAYpE;AAED,wDAAwD;AACxD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAK5E;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,EAAE,CAK/E;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,aAAa,GAAG,IAAI,GAC1B,gBAAgB,EAAE,CAWpB;AAED,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,sBAAsB,CAkD3F"}
@@ -93,6 +93,25 @@ export function getAgentPromptSuggestions(agent) {
93
93
  return [suggestion.prompt];
94
94
  }) ?? [];
95
95
  }
96
+ /**
97
+ * Normalize an agent's prompt suggestions to `{ label, prompt }[]`, ready to
98
+ * render — the chip shows the short `title` while the click sends the full
99
+ * `prompt`. Saves consumers from flat-mapping `agent.suggestions.suggestions`
100
+ * and reconciling the `title`/`prompt` fields themselves.
101
+ */
102
+ export function getAgentPromptSuggestionItems(agent) {
103
+ const list = agent?.suggestions?.suggestions;
104
+ if (!Array.isArray(list))
105
+ return [];
106
+ return list.flatMap((suggestion) => {
107
+ if (suggestion.type !== "prompt" || !("prompt" in suggestion) || !suggestion.prompt) {
108
+ return [];
109
+ }
110
+ const title = suggestion.title;
111
+ const label = typeof title === "string" && title.length > 0 ? title : suggestion.prompt;
112
+ return [{ label, prompt: suggestion.prompt }];
113
+ });
114
+ }
96
115
  /** React hook for browser-safe source-defined agent metadata. */
97
116
  export function useAgentMetadata(agentId) {
98
117
  const [agent, setAgent] = useState(null);
@@ -5,6 +5,6 @@
5
5
  * Build any interface you want.
6
6
  */
7
7
  export { useChat } from "./use-chat.js";
8
- export type { BranchInfo, ChatDynamicToolPart, ChatFilePart, ChatMessage, ChatMessagePart, ChatReasoningPart, ChatStepPart, ChatTextPart, ChatToolPart, ChatToolResultPart, ChatToolState, InferenceMode, OnToolCallArg, ToolOutput, UseChatOptions, UseChatResult, } from "./types.js";
8
+ export type { BranchInfo, ChatDynamicToolPart, ChatFilePart, ChatMessage, ChatMessagePart, ChatReasoningPart, ChatStatus, ChatStepPart, ChatTextPart, ChatToolPart, ChatToolResultPart, ChatToolState, InferenceMode, OnToolCallArg, ToolOutput, UseChatOptions, UseChatResult, } from "./types.js";
9
9
  export type { ChatFinishReason, ChatStreamEvent, } from "./stream-protocol.js";
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/react/use-chat/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,YAAY,EACV,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,gBAAgB,EAChB,eAAe,GAChB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/react/use-chat/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,YAAY,EACV,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,gBAAgB,EAChB,eAAe,GAChB,MAAM,sBAAsB,CAAC"}
@@ -43,10 +43,26 @@ export interface BranchInfo {
43
43
  total: number;
44
44
  }
45
45
  /** Result returned from use chat. */
46
+ /**
47
+ * Streaming lifecycle of a chat turn.
48
+ * - `submitted`: request sent, awaiting the first streamed token
49
+ * - `streaming`: assistant tokens are arriving
50
+ * - `ready`: idle — no turn in flight
51
+ * - `error`: the last turn failed
52
+ *
53
+ * Parity with the Vercel AI SDK `status` field. Prefer this over `isLoading`
54
+ * (which stays as a convenience alias for `submitted | streaming`).
55
+ */
56
+ export type ChatStatus = "submitted" | "streaming" | "ready" | "error";
46
57
  export interface UseChatResult {
47
58
  messages: ChatMessage[];
48
59
  input: string;
60
+ /** @deprecated Use `status`. Equivalent to `status === "submitted" || status === "streaming"`. */
49
61
  isLoading: boolean;
62
+ /** Streaming lifecycle of the current turn (AI-SDK parity). */
63
+ status: ChatStatus;
64
+ /** Id of the assistant message currently streaming, or `null` when idle. */
65
+ streamingMessageId: string | null;
50
66
  error: Error | null;
51
67
  /** Current model override (undefined = use agent default) */
52
68
  model: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/react/use-chat/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/react/use-chat/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-chat.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/react/use-chat/use-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,eAAe,EAGf,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,KAAK,oBAAoB,GAAG,OAAO,2BAA2B,CAAC;AAE/D,wDAAwD;AACxD,UAAU,MAAM;IACd,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,sEAAsE;AACtE,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnF;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,MAAM,CAIR;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,YAAY,EAAE,GACrB,eAAe,EAAE,CAEnB;AAMD,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAA;CAAE,GAAG,IAAI,CAQjD;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,GACrC,oBAAoB,CAGtB;AAOD,UAAU,uBAAwB,SAAQ,aAAa;IACrD,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CAInE;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,cAAmB,GAC3B,uBAAuB,CAEzB"}
1
+ {"version":3,"file":"use-chat.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/react/use-chat/use-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,eAAe,EAIf,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,KAAK,oBAAoB,GAAG,OAAO,2BAA2B,CAAC;AAE/D,wDAAwD;AACxD,UAAU,MAAM;IACd,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,sEAAsE;AACtE,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnF;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,MAAM,CAIR;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,YAAY,EAAE,GACrB,eAAe,EAAE,CAEnB;AAMD,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAA;CAAE,GAAG,IAAI,CAQjD;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,GACrC,oBAAoB,CAGtB;AAOD,UAAU,uBAAwB,SAAQ,aAAa;IACrD,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CAInE;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,cAAmB,GAC3B,uBAAuB,CAEzB"}
@@ -68,6 +68,8 @@ function useChatState(options) {
68
68
  messagesRef.current = messages;
69
69
  const [input, setInput] = useState("");
70
70
  const [isLoading, setIsLoading] = useState(false);
71
+ const [status, setStatus] = useState("ready");
72
+ const [streamingMessageId, setStreamingMessageId] = useState(null);
71
73
  const [error, setError] = useState(null);
72
74
  const [data, setData] = useState(null);
73
75
  const [model, setModel] = useState(options.model);
@@ -128,7 +130,10 @@ function useChatState(options) {
128
130
  const base = message.baseMessages ?? messagesRef.current;
129
131
  setMessages([...base, userMessage]);
130
132
  setIsLoading(true);
133
+ setStatus("submitted");
134
+ setStreamingMessageId(null);
131
135
  setError(null);
136
+ let didError = false;
132
137
  try {
133
138
  const allMessages = [...base, userMessage];
134
139
  const abortController = new AbortController();
@@ -171,9 +176,18 @@ function useChatState(options) {
171
176
  options.onResponse?.(response);
172
177
  if (!response.body)
173
178
  return;
174
- const streamingMessageId = generateClientId("msg");
179
+ const fallbackStreamingId = generateClientId("msg");
175
180
  let hasAddedStreamingMessage = false;
176
- const currentMessageIdRef = { current: streamingMessageId };
181
+ const currentMessageIdRef = { current: fallbackStreamingId };
182
+ // Promote the turn to `streaming` and publish the id of the message
183
+ // currently receiving tokens. Idempotent — repeated identical values
184
+ // bail out of re-render, so calling per chunk is cheap.
185
+ const markStreaming = () => {
186
+ if (!isLatestRequest(requestIdRef.current, requestId))
187
+ return;
188
+ setStatus("streaming");
189
+ setStreamingMessageId(currentMessageIdRef.current);
190
+ };
177
191
  // Mutable local — updated by onData before onMessage/onUpdate use it.
178
192
  let serverModel = model;
179
193
  setActiveModel((current) => isLatestRequest(requestIdRef.current, requestId) ? undefined : current);
@@ -186,6 +200,13 @@ function useChatState(options) {
186
200
  ...assistantMessage,
187
201
  metadata: { ...assistantMessage.metadata, model: serverModel },
188
202
  };
203
+ // A response delivered as a single complete message (no incremental
204
+ // `onUpdate`) still passes through `streaming` for one commit so
205
+ // consumers see a consistent lifecycle.
206
+ if (!hasAddedStreamingMessage) {
207
+ currentMessageIdRef.current = withMeta.id;
208
+ markStreaming();
209
+ }
189
210
  setMessages((prev) => {
190
211
  if (!isLatestRequest(requestIdRef.current, requestId))
191
212
  return prev;
@@ -224,7 +245,7 @@ function useChatState(options) {
224
245
  onUpdate: (parts, messageId, messageMetadata) => {
225
246
  if (!isLatestRequest(requestIdRef.current, requestId))
226
247
  return;
227
- const id = messageId ?? streamingMessageId;
248
+ const id = messageId ?? fallbackStreamingId;
228
249
  const metadata = { ...messageMetadata, model: serverModel };
229
250
  if (messageId && messageId !== currentMessageIdRef.current) {
230
251
  const oldId = currentMessageIdRef.current;
@@ -235,6 +256,7 @@ function useChatState(options) {
235
256
  ? { ...m, id, parts, metadata: { ...m.metadata, ...metadata } }
236
257
  : m)
237
258
  : prev);
259
+ markStreaming();
238
260
  return;
239
261
  }
240
262
  }
@@ -253,6 +275,7 @@ function useChatState(options) {
253
275
  },
254
276
  ]
255
277
  : prev);
278
+ markStreaming();
256
279
  return;
257
280
  }
258
281
  setMessages((prev) => isLatestRequest(requestIdRef.current, requestId)
@@ -260,6 +283,7 @@ function useChatState(options) {
260
283
  ? { ...m, parts, metadata: { ...m.metadata, ...metadata } }
261
284
  : m)
262
285
  : prev);
286
+ markStreaming();
263
287
  },
264
288
  onToolCall: options.onToolCall
265
289
  ? (arg) => isLatestRequest(requestIdRef.current, requestId)
@@ -274,6 +298,7 @@ function useChatState(options) {
274
298
  if (!isLatestRequest(requestIdRef.current, requestId))
275
299
  return;
276
300
  const nextError = ensureError(error);
301
+ didError = true;
277
302
  setError(nextError);
278
303
  options.onError?.(nextError);
279
304
  }
@@ -281,6 +306,8 @@ function useChatState(options) {
281
306
  // Only the latest request can clear loading/abort state.
282
307
  if (isLatestRequest(requestIdRef.current, requestId)) {
283
308
  setIsLoading(false);
309
+ setStatus(didError ? "error" : "ready");
310
+ setStreamingMessageId(null);
284
311
  abortControllerRef.current = null;
285
312
  }
286
313
  }
@@ -312,6 +339,8 @@ function useChatState(options) {
312
339
  // request id also fences callbacks and state updaters queued by that chunk.
313
340
  invalidateActiveRequest();
314
341
  setIsLoading(false);
342
+ setStatus("ready");
343
+ setStreamingMessageId(null);
315
344
  }, [invalidateActiveRequest]);
316
345
  /**
317
346
  * Reset state that belongs to one conversation while preserving the hook
@@ -327,6 +356,8 @@ function useChatState(options) {
327
356
  setMessages(nextMessages);
328
357
  setInput("");
329
358
  setIsLoading(false);
359
+ setStatus("ready");
360
+ setStreamingMessageId(null);
330
361
  setError(null);
331
362
  setData(null);
332
363
  setModel(options.model);
@@ -447,6 +478,8 @@ function useChatState(options) {
447
478
  messages,
448
479
  input,
449
480
  isLoading,
481
+ status,
482
+ streamingMessageId,
450
483
  error,
451
484
  model,
452
485
  activeModel,
@@ -7,9 +7,7 @@
7
7
  * branch is dropped (Studio-only deps) — the overlay always portals via our
8
8
  * `Floating` (through `PopoverContent`) so it never clips in the iframe.
9
9
  *
10
- * Semantic Studio classes remapped to veryfront's `[var(--token)]` vocabulary;
11
- * icons inherit the Command row's sizing. Composes the private ui
12
- * primitives (Popover, Command, Avatar) — no radix / cva / `@/` imports.
10
+ * Semantic Studio classes use Veryfront tokens and private UI primitives.
13
11
  *
14
12
  * @module react/components/chat/agent-picker
15
13
  */
@@ -24,7 +22,9 @@ export interface AgentOption {
24
22
  id: string;
25
23
  /** Display name (also the search keyword). */
26
24
  name: string;
27
- /** Avatar image URL; initials are shown when absent. */
25
+ /** Avatar image URL (matches `AgentMetadata.avatarUrl`); initials shown when absent/null. */
26
+ avatarUrl?: string | null;
27
+ /** @deprecated Use `avatarUrl`. */
28
28
  avatarSrc?: string;
29
29
  /** Dims the row and blocks selection. */
30
30
  disabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-picker.d.ts","sourceRoot":"","sources":["../../../../../src/src/react/components/chat/agent-picker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-picker.d.ts","sourceRoot":"","sources":["../../../../../src/src/react/components/chat/agent-picker.tsx"],"names":[],"mappings":"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"}
@@ -7,9 +7,7 @@
7
7
  * branch is dropped (Studio-only deps) — the overlay always portals via our
8
8
  * `Floating` (through `PopoverContent`) so it never clips in the iframe.
9
9
  *
10
- * Semantic Studio classes remapped to veryfront's `[var(--token)]` vocabulary;
11
- * icons inherit the Command row's sizing. Composes the private ui
12
- * primitives (Popover, Command, Avatar) — no radix / cva / `@/` imports.
10
+ * Semantic Studio classes use Veryfront tokens and private UI primitives.
13
11
  *
14
12
  * @module react/components/chat/agent-picker
15
13
  */
@@ -57,7 +55,7 @@ function AgentPickerTrigger({ inputStyle = false, invalid = false, icon, childre
57
55
  const selected = sections ? findAgent(value, sections.agents, sections.sections) : undefined;
58
56
  const triggerLabel = selected?.name ?? "Select agent";
59
57
  const content = children ?? (React.createElement(React.Fragment, null,
60
- selected && (React.createElement(Avatar, { name: selected.name, avatarSrc: selected.avatarSrc, tone: "muted", "aria-hidden": "true", className: "size-5! bg-[var(--background)]" })),
58
+ selected && (React.createElement(Avatar, { name: selected.name, avatarSrc: selected.avatarUrl ?? selected.avatarSrc, tone: "muted", "aria-hidden": "true", className: "size-5! bg-[var(--background)]" })),
61
59
  React.createElement("span", { className: "min-w-0 truncate" }, triggerLabel),
62
60
  inputStyle
63
61
  ? (icon ?? React.createElement(ChevronDownIcon, { className: "ml-auto size-3.5 opacity-50" }))
@@ -95,7 +93,7 @@ function AgentPickerItem({ agent, selected, icon, className }) {
95
93
  const { value, onSelect } = useAgentPicker();
96
94
  const isSelected = selected ?? agent.id === value;
97
95
  return (React.createElement(CommandItem, { value: agent.name, disabled: agent.disabled, onSelect: () => onSelect(agent.id), className: className },
98
- React.createElement(Avatar, { name: agent.name, avatarSrc: agent.avatarSrc, tone: "muted", "aria-hidden": "true", className: "size-5! bg-[var(--background)]" }),
96
+ React.createElement(Avatar, { name: agent.name, avatarSrc: agent.avatarUrl ?? agent.avatarSrc, tone: "muted", "aria-hidden": "true", className: "size-5! bg-[var(--background)]" }),
99
97
  React.createElement("span", { className: "min-w-0 flex-1 truncate" }, agent.name),
100
98
  isSelected &&
101
99
  (icon ?? React.createElement(CheckIcon, { className: "ml-auto opacity-70" }))));
@@ -1 +1 @@
1
- {"version":3,"file":"app-mode-chat.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/chat/app-mode-chat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA0KjD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAY1E;yBAZe,qBAAqB"}
1
+ {"version":3,"file":"app-mode-chat.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/chat/app-mode-chat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAiJjD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAY1E;yBAZe,qBAAqB"}
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { useAgentMetadata } from "../../../../agent/react/use-agent-metadata.js";
2
+ import { getAgentPromptSuggestionItems, useAgentMetadata, } from "../../../../agent/react/use-agent-metadata.js";
3
3
  import { AgentAvatar } from "./composition/agent-avatar.js";
4
4
  import { ChatMessagesSkeleton } from "./components/chat-messages-skeleton.js";
5
5
  import { useUpload } from "./hooks/use-upload.js";
@@ -7,25 +7,11 @@ import { useConversationsContextOptional } from "./contexts/conversations-contex
7
7
  import { useConversationChat } from "./hooks/use-conversation-chat.js";
8
8
  import { ControlledChat } from "./controlled-chat.js";
9
9
  import { attachmentsToFileParts, hasPendingAttachments } from "./chat-attachments.js";
10
- /**
11
- * Map agent-metadata suggestions to `{ label, prompt }`. The chip shows the
12
- * short `title` ("Triage login issue") while the click sends the full `prompt`
13
- * ("Triage a customer who cannot sign in after a release.") — so the empty
14
- * state stays scannable without truncating what the agent actually receives.
15
- */
16
- function agentSuggestionItems(suggestions) {
17
- const list = suggestions?.suggestions;
18
- if (!Array.isArray(list))
19
- return [];
20
- return list.flatMap((s) => {
21
- if (s.type !== "prompt" || !("prompt" in s) || !s.prompt)
22
- return [];
23
- const title = s.title;
24
- const label = typeof title === "string" && title.length > 0 ? title : s.prompt;
25
- return [{ label, prompt: s.prompt }];
26
- });
27
- }
28
- function UncontrolledChat({ agentId, api = "/api/ag-ui", initialMessages, onError, onUpdate, agent: userAgent, suggestions: suggestionsProp, onSuggestionClick, emptyState,
10
+ // ---------------------------------------------------------------------------
11
+ // UncontrolledChat "app mode": self-drives useChat + useAgentMetadata so the
12
+ // consumer writes only `<Chat agentId="…" api="…" />`.
13
+ // ---------------------------------------------------------------------------
14
+ function UncontrolledChat({ agentId, api = "/api/ag-ui", initialMessages, onError, onUpdate, agent: userAgent, suggestions: suggestionsProp, onSuggestionClick, onSuggestionSelect, emptyState,
29
15
  // Attachments: default-wired through `useUpload` unless the caller
30
16
  // controls them. With no `uploadApi`, files inline as base64 `data:` URLs
31
17
  // (guest mode — zero backend). Set `uploadApi` to POST to a durable
@@ -64,9 +50,9 @@ uploadApi, onAttach: userOnAttach, onDrop: userOnDrop, attachments: userAttachme
64
50
  };
65
51
  }, [emptyState, agent]);
66
52
  // Chips show the short `title`; the click sends the full `prompt`.
67
- const suggestionItems = React.useMemo(() => agentSuggestionItems(agent?.suggestions), [agent]);
53
+ const suggestionItems = React.useMemo(() => getAgentPromptSuggestionItems(agent), [agent]);
68
54
  const derivedSuggestions = suggestionsProp ??
69
- (suggestionItems.length > 0 ? suggestionItems.map((s) => s.label) : undefined);
55
+ (suggestionItems.length > 0 ? suggestionItems : undefined);
70
56
  const resolvedAgent = agent || userAgent
71
57
  ? {
72
58
  ...(agent
@@ -79,10 +65,9 @@ uploadApi, onAttach: userOnAttach, onDrop: userOnDrop, attachments: userAttachme
79
65
  ...userAgent,
80
66
  }
81
67
  : undefined;
82
- const handleSuggestion = onSuggestionClick ??
83
- ((label) => {
84
- const item = suggestionItems.find((s) => s.label === label);
85
- void chat.sendMessage({ text: item?.prompt ?? label });
68
+ const handleSuggestionSelect = onSuggestionSelect ??
69
+ (onSuggestionClick ? undefined : (suggestion) => {
70
+ void chat.sendMessage({ text: suggestion.prompt });
86
71
  });
87
72
  // Batteries-included attachments: unless the caller controls them, files
88
73
  // uploaded via the `+` menu / drag land here, ride along on submit as
@@ -110,7 +95,7 @@ uploadApi, onAttach: userOnAttach, onDrop: userOnDrop, attachments: userAttachme
110
95
  upload.clear();
111
96
  void chat.sendMessage({ text, files });
112
97
  }, [chat, upload]);
113
- return (React.createElement(ControlledChat, { ...rest, ref: ref, chat: chat, submit: manageAttachments ? submitWithAttachments : chat.handleSubmit, emptyState: derivedEmptyState, agent: resolvedAgent, initializing: agentInitializing, suggestions: derivedSuggestions, onSuggestionClick: handleSuggestion, onAttach: manageAttachments ? upload.upload : userOnAttach, onDrop: manageAttachments ? upload.upload : userOnDrop, attachments: manageAttachments ? upload.attachments : userAttachments, onRemoveAttachment: manageAttachments ? upload.remove : userOnRemoveAttachment }));
98
+ return (React.createElement(ControlledChat, { ...rest, ref: ref, chat: chat, submit: manageAttachments ? submitWithAttachments : chat.handleSubmit, emptyState: derivedEmptyState, agent: resolvedAgent, initializing: agentInitializing, suggestions: derivedSuggestions, onSuggestionClick: onSuggestionClick, onSuggestionSelect: handleSuggestionSelect, onAttach: manageAttachments ? upload.upload : userOnAttach, onDrop: manageAttachments ? upload.upload : userOnDrop, attachments: manageAttachments ? upload.attachments : userAttachments, onRemoveAttachment: manageAttachments ? upload.remove : userOnRemoveAttachment }));
114
99
  }
115
100
  UncontrolledChat.displayName = "UncontrolledChat";
116
101
  /**
@@ -122,15 +107,15 @@ UncontrolledChat.displayName = "UncontrolledChat";
122
107
  */
123
108
  export function ConversationBoundChat(props) {
124
109
  const conversations = useConversationsContextOptional();
125
- if (!conversations || conversations.activeId == null) {
110
+ if (!conversations || conversations.activeConversationId == null) {
126
111
  return React.createElement(UncontrolledChat, { ref: props.ref, ...props });
127
112
  }
128
- const { active, activeId } = conversations;
113
+ const { activeConversation, activeConversationId } = conversations;
129
114
  // Wait for the active thread's messages before mounting, so `useChat` seeds
130
115
  // from the right thread rather than a still-loading one.
131
- if (active?.id !== activeId) {
116
+ if (activeConversation?.id !== activeConversationId) {
132
117
  return React.createElement(React.Fragment, null, props.skeleton ?? React.createElement(ChatMessagesSkeleton, null));
133
118
  }
134
- return React.createElement(UncontrolledChat, { key: activeId, ref: props.ref, ...props });
119
+ return React.createElement(UncontrolledChat, { key: activeConversationId, ref: props.ref, ...props });
135
120
  }
136
121
  ConversationBoundChat.displayName = "ConversationBoundChat";
@@ -1,5 +1,5 @@
1
1
  import type * as React from "react";
2
- import type { ChatMessage, UseChatResult } from "../../../../agent/react/index.js";
2
+ import type { ChatMessage, PromptSuggestion, UseChatResult } from "../../../../agent/react/index.js";
3
3
  import type { ChatTheme } from "../theme.js";
4
4
  import type { ModelOption } from "../model-selector.js";
5
5
  import type { Source } from "./components/sources.js";
@@ -56,9 +56,16 @@ export interface ChatProps {
56
56
  className?: string;
57
57
  theme?: Partial<ChatTheme>;
58
58
  renderMessage?: (message: ChatMessage) => React.ReactNode;
59
- /** Prompt suggestions for an empty thread. Also fillable via `agent.suggestions`. */
60
- suggestions?: string[];
61
- onSuggestionClick?: (suggestion: string) => void;
59
+ /**
60
+ * Prompt suggestions for an empty thread. Also fillable via
61
+ * `agent.suggestions`. Strings become `{ label, prompt }`; pass
62
+ * `PromptSuggestion` objects for a short label + longer prompt.
63
+ */
64
+ suggestions?: Array<string | PromptSuggestion>;
65
+ /** @deprecated Use `onSuggestionSelect` for the full suggestion object. */
66
+ onSuggestionClick?: (prompt: string) => void;
67
+ /** Receives the selected `{ label, prompt }` object. */
68
+ onSuggestionSelect?: (suggestion: PromptSuggestion) => void;
62
69
  /**
63
70
  * Opt-in idle hero for an empty thread (icon + title + optional blurb, plus
64
71
  * `suggestions`). When omitted, an empty thread renders as a blank canvas +
@@ -1 +1 @@
1
- {"version":3,"file":"chat-props.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/chat/chat-props.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-props.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/chat/chat-props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAMxE;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,uDAAuD;IACvD,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,8BAA8B;AAC9B,MAAM,WAAW,SAAS;IAMxB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC;IAChC,oDAAoD;IACpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAC;IAGhD;;;;OAIG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IAErB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,KAAK,CAAC,SAAS,CAAC;IAC1D;;;;OAIG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;IAC/C,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5D;;;;;OAKG;IACH,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;;OAIG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD;;;;OAIG;IACH;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IAClE,+DAA+D;IAC/D,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B,uCAAuC;IACvC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACjC"}
@@ -2,11 +2,9 @@
2
2
  * ChatSidebar — a conversation rail, available as a one-shot preset or as a
3
3
  * composable compound (mirroring `Chat` / `Message`).
4
4
  *
5
- * Conversation-native: it lists {@link ConversationSummary} rows and, inside a
6
- * {@link ConversationsProvider}, needs **no props at all** it reads the list,
7
- * the active id, and select/new/delete/rename straight from context. Pass props
8
- * to override any of them (controlled), or drop to the compound parts for a
9
- * custom layout.
5
+ * Conversation-native: inside a {@link ConversationsProvider} it needs **no
6
+ * props** the list, active id, and select/new/delete/rename come from context.
7
+ * Pass props to override (controlled), or use the compound parts for a custom layout.
10
8
  *
11
9
  * @example Zero-config inside a provider
12
10
  * ```tsx
@@ -67,20 +65,11 @@ interface ChatSidebarControlProps {
67
65
  }
68
66
  /** Props accepted by {@link ChatSidebarRoot}. */
69
67
  export interface ChatSidebarRootProps extends ChatSidebarControlProps {
70
- /** Override any of the sidebar icons. */
71
- /**
72
- * Show the loading skeleton instead of the list — e.g. while conversations
73
- * are being fetched. When omitted, the auto {@link ChatSidebarList} shows a
74
- * skeleton on its own until the client mounts.
75
- */
68
+ /** Show the loading skeleton while conversations are being fetched. */
76
69
  loading?: boolean;
77
70
  /** When `false`, the rail renders nothing. Default `true`. */
78
71
  isOpen?: boolean;
79
- /**
80
- * Fill the parent instead of owning a fixed width + mobile overlay chrome.
81
- * Set when embedding inside a layout container (e.g. `AppShell.Sidebar`) that
82
- * already provides width and the off-canvas overlay. Default `false`.
83
- */
72
+ /** @deprecated The root fills its parent by default. */
84
73
  fill?: boolean;
85
74
  className?: string;
86
75
  children: React.ReactNode;
@@ -211,6 +200,11 @@ export declare namespace ChatSidebarList {
211
200
  export interface ChatSidebarProps extends Omit<ChatSidebarRootProps, "children"> {
212
201
  }
213
202
  /** The one-shot preset — composes Root + NewButton + auto List. */
203
+ /**
204
+ * Fixed-width rail chrome (240px `w-60`, off-canvas overlay on small screens)
205
+ * for the standalone `<ChatSidebar>` preset. `ChatSidebar.Root` is width-agnostic.
206
+ */
207
+ export declare const STANDALONE_SIDEBAR_CHROME = "w-60 shrink-0 max-sm:absolute max-sm:z-20 max-sm:shadow-xl max-sm:bg-[var(--background)]";
214
208
  declare function ChatSidebarBase(props: ChatSidebarProps): React.ReactElement | null;
215
209
  declare namespace ChatSidebarBase {
216
210
  var displayName: string;