@nadicodeai/ui 0.21.0 → 0.22.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/AGENTS.md +2 -3
- package/README.md +14 -21
- package/dist/agents.d.ts +10 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +9 -0
- package/dist/components/badge.d.ts +1 -1
- package/dist/components/button.d.ts +1 -1
- package/dist/components/use-case-bento.d.ts +2 -4
- package/dist/components/use-case-bento.d.ts.map +1 -1
- package/dist/components/use-case-bento.js +2 -3
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +0 -1
- package/dist/index.d.ts +0 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -16
- package/dist/internal/assistant-ui/attachment.d.ts +5 -0
- package/dist/internal/assistant-ui/attachment.d.ts.map +1 -0
- package/dist/internal/assistant-ui/attachment.js +93 -0
- package/dist/internal/assistant-ui/follow-up-suggestions.d.ts +3 -0
- package/dist/internal/assistant-ui/follow-up-suggestions.d.ts.map +1 -0
- package/dist/internal/assistant-ui/follow-up-suggestions.js +8 -0
- package/dist/internal/assistant-ui/markdown-text.d.ts +2 -0
- package/dist/internal/assistant-ui/markdown-text.d.ts.map +1 -0
- package/dist/internal/assistant-ui/markdown-text.js +54 -0
- package/dist/internal/assistant-ui/reasoning.d.ts +31 -0
- package/dist/internal/assistant-ui/reasoning.d.ts.map +1 -0
- package/dist/internal/assistant-ui/reasoning.js +118 -0
- package/dist/internal/assistant-ui/thread.d.ts +26 -0
- package/dist/internal/assistant-ui/thread.d.ts.map +1 -0
- package/dist/internal/assistant-ui/thread.js +118 -0
- package/dist/internal/assistant-ui/tool-fallback.d.ts +10 -0
- package/dist/internal/assistant-ui/tool-fallback.d.ts.map +1 -0
- package/dist/internal/assistant-ui/tool-fallback.js +163 -0
- package/dist/internal/assistant-ui/tool-group.d.ts +18 -0
- package/dist/internal/assistant-ui/tool-group.d.ts.map +1 -0
- package/dist/internal/assistant-ui/tool-group.js +44 -0
- package/dist/internal/assistant-ui/tooltip-icon-button.d.ts +8 -0
- package/dist/internal/assistant-ui/tooltip-icon-button.d.ts.map +1 -0
- package/dist/internal/assistant-ui/tooltip-icon-button.js +10 -0
- package/dist/styles/globals.css +3 -209
- package/docs/agents/nadicodeai-ui.md +4 -6
- package/docs/component-classification.md +1 -1
- package/docs/consuming-cross-repo.md +9 -3
- package/docs/contract.md +6 -6
- package/docs/migration/base-ui-migration.md +0 -11
- package/docs/product-compositions.md +1 -1
- package/llms.txt +5 -6
- package/package.json +10 -28
- package/skills/nadicodeai-ui/SKILL.md +5 -7
- package/dist/ai-elements.d.ts +0 -49
- package/dist/ai-elements.d.ts.map +0 -1
- package/dist/ai-elements.js +0 -48
- package/dist/components/agent-avatar.d.ts +0 -7
- package/dist/components/agent-avatar.d.ts.map +0 -1
- package/dist/components/agent-avatar.js +0 -6
- package/dist/components/agent-chat.d.ts +0 -20
- package/dist/components/agent-chat.d.ts.map +0 -1
- package/dist/components/agent-chat.js +0 -10
- package/dist/components/agent-composer.d.ts +0 -56
- package/dist/components/agent-composer.d.ts.map +0 -1
- package/dist/components/agent-composer.js +0 -56
- package/dist/components/agent-message.d.ts +0 -117
- package/dist/components/agent-message.d.ts.map +0 -1
- package/dist/components/agent-message.js +0 -99
- package/dist/components/agent-thread.d.ts +0 -26
- package/dist/components/agent-thread.d.ts.map +0 -1
- package/dist/components/agent-thread.js +0 -63
- package/dist/components/agent-tool-approval.d.ts +0 -27
- package/dist/components/agent-tool-approval.d.ts.map +0 -1
- package/dist/components/agent-tool-approval.js +0 -43
- package/dist/components/ai-elements/agent.d.ts +0 -27
- package/dist/components/ai-elements/agent.d.ts.map +0 -1
- package/dist/components/ai-elements/agent.js +0 -25
- package/dist/components/ai-elements/artifact.d.ts +0 -24
- package/dist/components/ai-elements/artifact.d.ts.map +0 -1
- package/dist/components/ai-elements/artifact.js +0 -20
- package/dist/components/ai-elements/attachments.d.ts +0 -55
- package/dist/components/ai-elements/attachments.d.ts.map +0 -1
- package/dist/components/ai-elements/attachments.js +0 -125
- package/dist/components/ai-elements/audio-player.d.ts +0 -30
- package/dist/components/ai-elements/audio-player.d.ts.map +0 -1
- package/dist/components/ai-elements/audio-player.js +0 -41
- package/dist/components/ai-elements/canvas.d.ts +0 -8
- package/dist/components/ai-elements/canvas.d.ts.map +0 -1
- package/dist/components/ai-elements/canvas.js +0 -5
- package/dist/components/ai-elements/chain-of-thought.d.ts +0 -30
- package/dist/components/ai-elements/chain-of-thought.d.ts.map +0 -1
- package/dist/components/ai-elements/chain-of-thought.js +0 -49
- package/dist/components/ai-elements/checkpoint.d.ts +0 -12
- package/dist/components/ai-elements/checkpoint.d.ts.map +0 -1
- package/dist/components/ai-elements/checkpoint.js +0 -10
- package/dist/components/ai-elements/code-block.d.ts +0 -53
- package/dist/components/ai-elements/code-block.d.ts.map +0 -1
- package/dist/components/ai-elements/code-block.js +0 -239
- package/dist/components/ai-elements/commit.d.ts +0 -65
- package/dist/components/ai-elements/commit.d.ts.map +0 -1
- package/dist/components/ai-elements/commit.js +0 -83
- package/dist/components/ai-elements/confirmation.d.ts +0 -50
- package/dist/components/ai-elements/confirmation.d.ts.map +0 -1
- package/dist/components/ai-elements/confirmation.js +0 -57
- package/dist/components/ai-elements/connection.d.ts +0 -6
- package/dist/components/ai-elements/connection.d.ts.map +0 -1
- package/dist/components/ai-elements/connection.js +0 -10
- package/dist/components/ai-elements/context.d.ts +0 -33
- package/dist/components/ai-elements/context.d.ts.map +0 -1
- package/dist/components/ai-elements/context.js +0 -147
- package/dist/components/ai-elements/controls.d.ts +0 -5
- package/dist/components/ai-elements/controls.d.ts.map +0 -1
- package/dist/components/ai-elements/controls.js +0 -5
- package/dist/components/ai-elements/conversation.d.ts +0 -24
- package/dist/components/ai-elements/conversation.d.ts.map +0 -1
- package/dist/components/ai-elements/conversation.js +0 -41
- package/dist/components/ai-elements/edge.d.ts +0 -6
- package/dist/components/ai-elements/edge.d.ts.map +0 -1
- package/dist/components/ai-elements/edge.js +0 -88
- package/dist/components/ai-elements/environment-variables.d.ts +0 -39
- package/dist/components/ai-elements/environment-variables.d.ts.map +0 -1
- package/dist/components/ai-elements/environment-variables.js +0 -60
- package/dist/components/ai-elements/file-tree.d.ts +0 -27
- package/dist/components/ai-elements/file-tree.d.ts.map +0 -1
- package/dist/components/ai-elements/file-tree.js +0 -73
- package/dist/components/ai-elements/image.d.ts +0 -7
- package/dist/components/ai-elements/image.d.ts.map +0 -1
- package/dist/components/ai-elements/image.js +0 -3
- package/dist/components/ai-elements/inline-citation.d.ts +0 -39
- package/dist/components/ai-elements/inline-citation.d.ts.map +0 -1
- package/dist/components/ai-elements/inline-citation.js +0 -86
- package/dist/components/ai-elements/jsx-preview.d.ts +0 -30
- package/dist/components/ai-elements/jsx-preview.d.ts.map +0 -1
- package/dist/components/ai-elements/jsx-preview.js +0 -159
- package/dist/components/ai-elements/message.d.ts +0 -38
- package/dist/components/ai-elements/message.d.ts.map +0 -1
- package/dist/components/ai-elements/message.js +0 -91
- package/dist/components/ai-elements/mic-selector.d.ts +0 -46
- package/dist/components/ai-elements/mic-selector.d.ts.map +0 -1
- package/dist/components/ai-elements/mic-selector.js +0 -180
- package/dist/components/ai-elements/model-selector.d.ts +0 -36
- package/dist/components/ai-elements/model-selector.d.ts.map +0 -1
- package/dist/components/ai-elements/model-selector.js +0 -18
- package/dist/components/ai-elements/node.d.ts +0 -22
- package/dist/components/ai-elements/node.d.ts.map +0 -1
- package/dist/components/ai-elements/node.js +0 -12
- package/dist/components/ai-elements/open-in-chat.d.ts +0 -27
- package/dist/components/ai-elements/open-in-chat.d.ts.map +0 -1
- package/dist/components/ai-elements/open-in-chat.js +0 -81
- package/dist/components/ai-elements/package-info.d.ts +0 -30
- package/dist/components/ai-elements/package-info.d.ts.map +0 -1
- package/dist/components/ai-elements/package-info.js +0 -50
- package/dist/components/ai-elements/panel.d.ts +0 -6
- package/dist/components/ai-elements/panel.d.ts.map +0 -1
- package/dist/components/ai-elements/panel.js +0 -5
- package/dist/components/ai-elements/persona.d.ts +0 -49
- package/dist/components/ai-elements/persona.d.ts.map +0 -1
- package/dist/components/ai-elements/persona.js +0 -175
- package/dist/components/ai-elements/plan.d.ts +0 -27
- package/dist/components/ai-elements/plan.d.ts.map +0 -1
- package/dist/components/ai-elements/plan.js +0 -34
- package/dist/components/ai-elements/prompt-input.d.ts +0 -149
- package/dist/components/ai-elements/prompt-input.d.ts.map +0 -1
- package/dist/components/ai-elements/prompt-input.js +0 -704
- package/dist/components/ai-elements/queue.d.ts +0 -62
- package/dist/components/ai-elements/queue.d.ts.map +0 -1
- package/dist/components/ai-elements/queue.js +0 -24
- package/dist/components/ai-elements/reasoning.d.ts +0 -27
- package/dist/components/ai-elements/reasoning.d.ts.map +0 -1
- package/dist/components/ai-elements/reasoning.js +0 -92
- package/dist/components/ai-elements/sandbox.d.ts +0 -25
- package/dist/components/ai-elements/sandbox.d.ts.map +0 -1
- package/dist/components/ai-elements/sandbox.js +0 -15
- package/dist/components/ai-elements/schema-display.d.ts +0 -56
- package/dist/components/ai-elements/schema-display.d.ts.map +0 -1
- package/dist/components/ai-elements/schema-display.js +0 -90
- package/dist/components/ai-elements/shimmer.d.ts +0 -10
- package/dist/components/ai-elements/shimmer.d.ts.map +0 -1
- package/dist/components/ai-elements/shimmer.js +0 -11
- package/dist/components/ai-elements/snippet.d.ts +0 -19
- package/dist/components/ai-elements/snippet.d.ts.map +0 -1
- package/dist/components/ai-elements/snippet.js +0 -32
- package/dist/components/ai-elements/sources.d.ts +0 -13
- package/dist/components/ai-elements/sources.d.ts.map +0 -1
- package/dist/components/ai-elements/sources.js +0 -9
- package/dist/components/ai-elements/speech-input.d.ts +0 -55
- package/dist/components/ai-elements/speech-input.d.ts.map +0 -1
- package/dist/components/ai-elements/speech-input.js +0 -187
- package/dist/components/ai-elements/stack-trace.d.ts +0 -38
- package/dist/components/ai-elements/stack-trace.d.ts.map +0 -1
- package/dist/components/ai-elements/stack-trace.js +0 -181
- package/dist/components/ai-elements/suggestion.d.ts +0 -11
- package/dist/components/ai-elements/suggestion.d.ts.map +0 -1
- package/dist/components/ai-elements/suggestion.js +0 -13
- package/dist/components/ai-elements/task.d.ts +0 -15
- package/dist/components/ai-elements/task.d.ts.map +0 -1
- package/dist/components/ai-elements/task.js +0 -10
- package/dist/components/ai-elements/terminal.d.ts +0 -28
- package/dist/components/ai-elements/terminal.d.ts.map +0 -1
- package/dist/components/ai-elements/terminal.js +0 -55
- package/dist/components/ai-elements/test-results.d.ts +0 -59
- package/dist/components/ai-elements/test-results.d.ts.map +0 -1
- package/dist/components/ai-elements/test-results.js +0 -98
- package/dist/components/ai-elements/tool.d.ts +0 -32
- package/dist/components/ai-elements/tool.d.ts.map +0 -1
- package/dist/components/ai-elements/tool.js +0 -49
- package/dist/components/ai-elements/toolbar.d.ts +0 -6
- package/dist/components/ai-elements/toolbar.d.ts.map +0 -1
- package/dist/components/ai-elements/toolbar.js +0 -5
- package/dist/components/ai-elements/transcription.d.ts +0 -17
- package/dist/components/ai-elements/transcription.d.ts.map +0 -1
- package/dist/components/ai-elements/transcription.js +0 -36
- package/dist/components/ai-elements/voice-selector.d.ts +0 -65
- package/dist/components/ai-elements/voice-selector.d.ts.map +0 -1
- package/dist/components/ai-elements/voice-selector.js +0 -224
- package/dist/components/ai-elements/web-preview.d.ts +0 -35
- package/dist/components/ai-elements/web-preview.d.ts.map +0 -1
- package/dist/components/ai-elements/web-preview.js +0 -66
- package/dist/components/artifact-panel.d.ts +0 -130
- package/dist/components/artifact-panel.d.ts.map +0 -1
- package/dist/components/artifact-panel.js +0 -180
- package/dist/components/attachment.d.ts +0 -24
- package/dist/components/attachment.d.ts.map +0 -1
- package/dist/components/attachment.js +0 -68
- package/dist/components/bubble.d.ts +0 -17
- package/dist/components/bubble.d.ts.map +0 -1
- package/dist/components/bubble.js +0 -59
- package/dist/components/demo-surface.d.ts +0 -34
- package/dist/components/demo-surface.d.ts.map +0 -1
- package/dist/components/demo-surface.js +0 -21
- package/dist/components/files-preview.d.ts +0 -36
- package/dist/components/files-preview.d.ts.map +0 -1
- package/dist/components/files-preview.js +0 -85
- package/dist/components/marker.d.ts +0 -11
- package/dist/components/marker.d.ts.map +0 -1
- package/dist/components/marker.js +0 -34
- package/dist/components/message-scroller.d.ts +0 -17
- package/dist/components/message-scroller.d.ts.map +0 -1
- package/dist/components/message-scroller.js +0 -29
- package/dist/components/message.d.ts +0 -11
- package/dist/components/message.d.ts.map +0 -1
- package/dist/components/message.js +0 -21
- package/dist/components/state-notice.d.ts +0 -13
- package/dist/components/state-notice.d.ts.map +0 -1
- package/dist/components/state-notice.js +0 -8
- package/dist/components/watch-it-work-band.d.ts +0 -12
- package/dist/components/watch-it-work-band.d.ts.map +0 -1
- package/dist/components/watch-it-work-band.js +0 -8
- package/dist/hooks/use-controllable-state.d.ts +0 -9
- package/dist/hooks/use-controllable-state.d.ts.map +0 -1
- package/dist/hooks/use-controllable-state.js +0 -23
- package/dist/lib/agent-attachment.d.ts +0 -11
- package/dist/lib/agent-attachment.d.ts.map +0 -1
- package/dist/lib/agent-attachment.js +0 -19
- package/dist/lib/agent-contracts.d.ts +0 -132
- package/dist/lib/agent-contracts.d.ts.map +0 -1
- package/dist/lib/agent-contracts.js +0 -6
- package/dist/lib/agent-state.d.ts +0 -22
- package/dist/lib/agent-state.d.ts.map +0 -1
- package/dist/lib/agent-state.js +0 -96
- package/dist/lib/agent-work-state.d.ts +0 -36
- package/dist/lib/agent-work-state.d.ts.map +0 -1
- package/dist/lib/agent-work-state.js +0 -36
- package/dist/lib/message-scroller-primitive/components.d.ts +0 -17
- package/dist/lib/message-scroller-primitive/components.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/components.js +0 -204
- package/dist/lib/message-scroller-primitive/geometry.d.ts +0 -51
- package/dist/lib/message-scroller-primitive/geometry.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/geometry.js +0 -199
- package/dist/lib/message-scroller-primitive/index.d.ts +0 -12
- package/dist/lib/message-scroller-primitive/index.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/index.js +0 -12
- package/dist/lib/message-scroller-primitive/stores.d.ts +0 -6
- package/dist/lib/message-scroller-primitive/stores.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/stores.js +0 -53
- package/dist/lib/message-scroller-primitive/types.d.ts +0 -88
- package/dist/lib/message-scroller-primitive/types.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/types.js +0 -40
- package/dist/lib/message-scroller-primitive/use-message-scroller-commands.d.ts +0 -19
- package/dist/lib/message-scroller-primitive/use-message-scroller-commands.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/use-message-scroller-commands.js +0 -188
- package/dist/lib/message-scroller-primitive/use-message-scroller-controller.d.ts +0 -7
- package/dist/lib/message-scroller-primitive/use-message-scroller-controller.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/use-message-scroller-controller.js +0 -506
- package/dist/lib/message-scroller-primitive/use-message-scroller-refs.d.ts +0 -49
- package/dist/lib/message-scroller-primitive/use-message-scroller-refs.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/use-message-scroller-refs.js +0 -90
- package/dist/lib/message-scroller-primitive/use-render.d.ts +0 -22
- package/dist/lib/message-scroller-primitive/use-render.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/use-render.js +0 -113
- package/dist/lib/message-scroller-primitive/utils.d.ts +0 -4
- package/dist/lib/message-scroller-primitive/utils.d.ts.map +0 -1
- package/dist/lib/message-scroller-primitive/utils.js +0 -9
- package/docs/agent-work-surfaces.md +0 -132
- package/docs/migration/ai-elements-vendoring.md +0 -29
- package/docs/terminal-tui-semantics.md +0 -172
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-avatar.d.ts","sourceRoot":"","sources":["../../src/components/agent-avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;AAE3E,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,MAAM,EACN,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAAE,qBAW/D;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "../lib/utils.js";
|
|
3
|
-
function AgentAvatar({ className, accent, children, ...props }) {
|
|
4
|
-
return (_jsx("span", { "data-slot": "agent-avatar", "data-accent": accent, className: cn("nc-agent-avatar", className), ...props, children: children }));
|
|
5
|
-
}
|
|
6
|
-
export { AgentAvatar };
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { type AgentComposerProps } from "./agent-composer";
|
|
3
|
-
import { type AgentThreadStateCopy } from "./agent-thread";
|
|
4
|
-
import { type AgentMessageModel, type AgentToolApprovalDecisionHandler, type AgentWorkState } from "./agent-message";
|
|
5
|
-
declare function AgentChat({ messages, state, stateCopy, emptyState, composer, composerProps, toolActions, retryAction, onToolApprovalChoice, maxMessages, header, className, threadClassName, ...props }: React.ComponentProps<"section"> & {
|
|
6
|
-
messages: AgentMessageModel[];
|
|
7
|
-
state?: AgentWorkState;
|
|
8
|
-
stateCopy?: Partial<Record<Exclude<AgentWorkState, "idle">, AgentThreadStateCopy>>;
|
|
9
|
-
emptyState?: AgentThreadStateCopy;
|
|
10
|
-
composer?: React.ReactNode;
|
|
11
|
-
composerProps?: AgentComposerProps;
|
|
12
|
-
toolActions?: Record<string, React.ReactNode>;
|
|
13
|
-
retryAction?: React.ReactNode;
|
|
14
|
-
onToolApprovalChoice?: AgentToolApprovalDecisionHandler;
|
|
15
|
-
maxMessages?: number;
|
|
16
|
-
header?: React.ReactNode;
|
|
17
|
-
threadClassName?: string;
|
|
18
|
-
}): React.JSX.Element;
|
|
19
|
-
export { AgentChat };
|
|
20
|
-
//# sourceMappingURL=agent-chat.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/components/agent-chat.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAe,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gCAAgC,EACrC,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AAGpC,iBAAS,SAAS,CAAC,EACjB,QAAQ,EACR,KAAc,EACd,SAAS,EACT,UAAU,EACV,QAAQ,EACR,aAAa,EACb,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,MAAM,EACN,SAAS,EACT,eAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG;IACnC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC;IACnF,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,oBAAoB,CAAC,EAAE,gCAAgC,CAAC;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,qBA6BA;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { AgentComposer } from "./agent-composer.js";
|
|
4
|
-
import { AgentThread } from "./agent-thread.js";
|
|
5
|
-
import { cn } from "../lib/utils.js";
|
|
6
|
-
function AgentChat({ messages, state = "idle", stateCopy, emptyState, composer, composerProps, toolActions, retryAction, onToolApprovalChoice, maxMessages, header, className, threadClassName, ...props }) {
|
|
7
|
-
return (_jsxs("section", { "data-slot": "agent-chat", "data-agent-state": state, className: cn("flex min-h-0 flex-col gap-4 rounded-lg border bg-card p-3", className), ...props, children: [header && _jsx("div", { "data-slot": "agent-chat-header", children: header }), _jsx(AgentThread, { messages: messages, state: state, stateCopy: stateCopy, emptyState: emptyState, toolActions: toolActions, retryAction: retryAction, onToolApprovalChoice: onToolApprovalChoice, maxMessages: maxMessages, className: cn("flex-1", threadClassName) }), composer ??
|
|
8
|
-
(composerProps ? (_jsx(AgentComposer, { ...composerProps, state: state === "streaming" ? "streaming" : composerProps.state })) : null)] }));
|
|
9
|
-
}
|
|
10
|
-
export { AgentChat };
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { PromptInput } from "./ai-elements/prompt-input";
|
|
3
|
-
import { type AgentRedactionRule } from "./artifact-panel";
|
|
4
|
-
import { type AgentAttachmentModel } from "./agent-message";
|
|
5
|
-
export type AgentComposerState = "idle" | "disabled" | "submitting" | "streaming" | "error";
|
|
6
|
-
export type AgentQueueStatus = "queued" | "running" | "blocked" | "complete" | "interrupted";
|
|
7
|
-
export type AgentQueueItemModel = {
|
|
8
|
-
id: string;
|
|
9
|
-
title: string;
|
|
10
|
-
description?: string;
|
|
11
|
-
status?: AgentQueueStatus;
|
|
12
|
-
attachments?: AgentAttachmentModel[];
|
|
13
|
-
redaction?: AgentRedactionRule;
|
|
14
|
-
};
|
|
15
|
-
export type AgentQueueModel = {
|
|
16
|
-
title?: string;
|
|
17
|
-
description?: string;
|
|
18
|
-
items: AgentQueueItemModel[];
|
|
19
|
-
};
|
|
20
|
-
export type AgentComposerSubmit = {
|
|
21
|
-
value: string;
|
|
22
|
-
attachments: AgentAttachmentModel[];
|
|
23
|
-
queue?: AgentQueueModel;
|
|
24
|
-
};
|
|
25
|
-
export type AgentComposerProps = Omit<React.ComponentProps<typeof PromptInput>, "children" | "onSubmit"> & {
|
|
26
|
-
value?: string;
|
|
27
|
-
defaultValue?: string;
|
|
28
|
-
placeholder?: string;
|
|
29
|
-
attachments?: AgentAttachmentModel[];
|
|
30
|
-
queue?: AgentQueueModel;
|
|
31
|
-
state?: AgentComposerState;
|
|
32
|
-
disabled?: boolean;
|
|
33
|
-
slashMenu?: React.ReactNode;
|
|
34
|
-
mentionMenu?: React.ReactNode;
|
|
35
|
-
tools?: React.ReactNode;
|
|
36
|
-
submitLabel?: string;
|
|
37
|
-
stopLabel?: string;
|
|
38
|
-
onValueChange?: (value: string) => void;
|
|
39
|
-
onSubmit?: (payload: AgentComposerSubmit, event: React.FormEvent<HTMLFormElement>) => void | Promise<void>;
|
|
40
|
-
onStop?: () => void;
|
|
41
|
-
onRemoveAttachment?: (attachment: AgentAttachmentModel) => void;
|
|
42
|
-
queueActions?: Record<string, React.ReactNode>;
|
|
43
|
-
footer?: React.ReactNode;
|
|
44
|
-
};
|
|
45
|
-
declare function AgentComposerAttachments({ attachments, onRemoveAttachment, }: {
|
|
46
|
-
attachments?: AgentAttachmentModel[];
|
|
47
|
-
onRemoveAttachment?: (attachment: AgentAttachmentModel) => void;
|
|
48
|
-
}): React.JSX.Element | null;
|
|
49
|
-
declare function AgentQueuePanel({ queue, actions, className, }: {
|
|
50
|
-
queue: AgentQueueModel;
|
|
51
|
-
actions?: Record<string, React.ReactNode>;
|
|
52
|
-
className?: string;
|
|
53
|
-
}): React.JSX.Element | null;
|
|
54
|
-
declare function AgentComposer({ value, defaultValue, placeholder, attachments, queue, state, disabled, slashMenu, mentionMenu, tools, submitLabel, stopLabel, onValueChange, onSubmit, onStop, onRemoveAttachment, queueActions, footer, className, ...props }: AgentComposerProps): React.JSX.Element;
|
|
55
|
-
export { AgentComposer, AgentComposerAttachments, AgentQueuePanel };
|
|
56
|
-
//# sourceMappingURL=agent-composer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-composer.d.ts","sourceRoot":"","sources":["../../src/components/agent-composer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { AtSignIcon, SlashIcon } from "lucide-react";
|
|
4
|
-
import { Attachment, AttachmentInfo, AttachmentPreview, AttachmentRemove, Attachments, } from "./ai-elements/attachments.js";
|
|
5
|
-
import { PromptInput, PromptInputBody, PromptInputFooter, PromptInputHeader, PromptInputSubmit, PromptInputTextarea, PromptInputTools, } from "./ai-elements/prompt-input.js";
|
|
6
|
-
import { Queue, QueueItem, QueueItemContent, QueueItemDescription, QueueItemIndicator, QueueList, QueueSection, QueueSectionContent, QueueSectionLabel, QueueSectionTrigger, } from "./ai-elements/queue.js";
|
|
7
|
-
import { getAgentRedactionText } from "./artifact-panel.js";
|
|
8
|
-
import { Badge } from "./badge.js";
|
|
9
|
-
import { Button } from "./button.js";
|
|
10
|
-
import { agentAttachmentToData } from "../lib/agent-attachment.js";
|
|
11
|
-
import { cn } from "../lib/utils.js";
|
|
12
|
-
const queueStatusLabels = {
|
|
13
|
-
blocked: "Blocked",
|
|
14
|
-
complete: "Complete",
|
|
15
|
-
interrupted: "Interrupted",
|
|
16
|
-
queued: "Queued",
|
|
17
|
-
running: "Running",
|
|
18
|
-
};
|
|
19
|
-
function composerStateToChatStatus(state) {
|
|
20
|
-
if (state === "streaming") {
|
|
21
|
-
return "streaming";
|
|
22
|
-
}
|
|
23
|
-
if (state === "submitting") {
|
|
24
|
-
return "submitted";
|
|
25
|
-
}
|
|
26
|
-
if (state === "error") {
|
|
27
|
-
return "error";
|
|
28
|
-
}
|
|
29
|
-
return "ready";
|
|
30
|
-
}
|
|
31
|
-
function AgentComposerAttachments({ attachments, onRemoveAttachment, }) {
|
|
32
|
-
if (!attachments?.length) {
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
return (_jsx(Attachments, { "data-slot": "agent-composer-attachments", variant: "list", className: "w-full", children: attachments.map((attachment) => (_jsxs(Attachment, { data: agentAttachmentToData(attachment), onRemove: onRemoveAttachment ? () => onRemoveAttachment(attachment) : undefined, children: [_jsx(AttachmentPreview, {}), _jsx(AttachmentInfo, { showMediaType: true }), attachment.sizeLabel && (_jsx("span", { className: "text-xs text-muted-foreground", children: attachment.sizeLabel })), attachment.redaction && (_jsx("span", { className: "sr-only", children: getAgentRedactionText(attachment.redaction) })), _jsx(AttachmentRemove, {})] }, attachment.id))) }));
|
|
36
|
-
}
|
|
37
|
-
function AgentQueuePanel({ queue, actions, className, }) {
|
|
38
|
-
if (!queue.items.length) {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
return (_jsx(Queue, { "data-slot": "agent-queue", className: className, children: _jsxs(QueueSection, { defaultOpen: true, children: [_jsx(QueueSectionTrigger, { children: _jsx(QueueSectionLabel, { count: queue.items.length, label: queue.title ?? "queued tasks" }) }), _jsxs(QueueSectionContent, { children: [queue.description && (_jsx("p", { className: "px-3 pt-2 text-sm text-muted-foreground", children: queue.description })), _jsx(QueueList, { children: queue.items.map((item) => {
|
|
42
|
-
const status = item.status ?? "queued";
|
|
43
|
-
const completed = status === "complete";
|
|
44
|
-
return (_jsxs(QueueItem, { "data-queue-status": status, className: "gap-2", children: [_jsxs("div", { className: "flex items-start gap-2", children: [_jsx(QueueItemIndicator, { completed: completed }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(QueueItemContent, { completed: completed, children: item.redaction ? getAgentRedactionText(item.redaction) : item.title }), item.description && (_jsx(QueueItemDescription, { completed: completed, children: item.description }))] }), _jsx(Badge, { variant: "outline", children: queueStatusLabels[status] }), actions?.[item.id]] }), _jsx(AgentComposerAttachments, { attachments: item.attachments })] }, item.id));
|
|
45
|
-
}) })] })] }) }));
|
|
46
|
-
}
|
|
47
|
-
function AgentComposer({ value, defaultValue, placeholder = "Ask Nadia to work on this...", attachments = [], queue, state = "idle", disabled = false, slashMenu, mentionMenu, tools, submitLabel = "Submit", stopLabel = "Stop", onValueChange, onSubmit, onStop, onRemoveAttachment, queueActions, footer, className, ...props }) {
|
|
48
|
-
const isDisabled = disabled || state === "disabled" || state === "submitting";
|
|
49
|
-
const isStreaming = state === "streaming";
|
|
50
|
-
return (_jsxs("div", { "data-slot": "agent-composer-shell", "data-composer-state": state, "data-disabled": isDisabled ? true : undefined, className: "grid gap-3", children: [queue && _jsx(AgentQueuePanel, { queue: queue, actions: queueActions }), _jsxs(PromptInput, { "data-slot": "agent-composer", className: cn("rounded-lg border bg-popover text-popover-foreground", className), onSubmit: (message, event) => onSubmit?.({
|
|
51
|
-
attachments,
|
|
52
|
-
queue,
|
|
53
|
-
value: message.text,
|
|
54
|
-
}, event), ...props, children: [(attachments.length > 0 || slashMenu || mentionMenu) && (_jsxs(PromptInputHeader, { children: [_jsx(AgentComposerAttachments, { attachments: attachments, onRemoveAttachment: onRemoveAttachment }), slashMenu && _jsx("div", { "data-slot": "agent-composer-slash-menu", children: slashMenu }), mentionMenu && _jsx("div", { "data-slot": "agent-composer-mention-menu", children: mentionMenu })] })), _jsx(PromptInputBody, { children: _jsx(PromptInputTextarea, { value: value, defaultValue: defaultValue, placeholder: placeholder, disabled: isDisabled || isStreaming, onChange: (event) => onValueChange?.(event.currentTarget.value) }) }), _jsxs(PromptInputFooter, { children: [_jsxs(PromptInputTools, { children: [tools, !slashMenu && (_jsxs(Button, { "aria-label": "Slash commands", title: "Slash commands", type: "button", variant: "ghost", size: "icon-sm", disabled: isDisabled, children: [_jsx(SlashIcon, { className: "size-4", "data-icon": true }), _jsx("span", { className: "sr-only", children: "Slash commands" })] })), !mentionMenu && (_jsxs(Button, { "aria-label": "Mention context", title: "Mention context", type: "button", variant: "ghost", size: "icon-sm", disabled: isDisabled, children: [_jsx(AtSignIcon, { className: "size-4", "data-icon": true }), _jsx("span", { className: "sr-only", children: "Mention context" })] }))] }), _jsx(PromptInputSubmit, { "aria-label": isStreaming ? stopLabel : submitLabel, status: composerStateToChatStatus(state), onStop: onStop, disabled: isStreaming ? !onStop : isDisabled })] })] }), footer && _jsx("div", { "data-slot": "agent-composer-footer", children: footer })] }));
|
|
55
|
-
}
|
|
56
|
-
export { AgentComposer, AgentComposerAttachments, AgentQueuePanel };
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { type AgentArtifactModel, type AgentRedactionRule } from "./artifact-panel";
|
|
3
|
-
import { type AgentApprovalChoice, type AgentToolApprovalRequest } from "./agent-tool-approval";
|
|
4
|
-
import { type AgentWorkState } from "../lib/agent-work-state";
|
|
5
|
-
export type AgentMessageRole = "user" | "assistant" | "system";
|
|
6
|
-
export type { AgentWorkState };
|
|
7
|
-
export type AgentMessageSourceKind = "human" | "agent" | "system" | "tool" | "runtime";
|
|
8
|
-
export type AgentMessageSourceMetadata = {
|
|
9
|
-
kind: AgentMessageSourceKind;
|
|
10
|
-
label?: string;
|
|
11
|
-
model?: string;
|
|
12
|
-
sessionId?: string;
|
|
13
|
-
timestamp?: string;
|
|
14
|
-
};
|
|
15
|
-
export type AgentSourceReference = {
|
|
16
|
-
id: string;
|
|
17
|
-
title: string;
|
|
18
|
-
url?: string;
|
|
19
|
-
excerpt?: string;
|
|
20
|
-
kind?: "document" | "web" | "file" | "system";
|
|
21
|
-
redaction?: AgentRedactionRule;
|
|
22
|
-
};
|
|
23
|
-
export type AgentReasoningSummary = {
|
|
24
|
-
id: string;
|
|
25
|
-
title?: string;
|
|
26
|
-
summary?: string;
|
|
27
|
-
status?: "available" | "streaming" | "redacted";
|
|
28
|
-
durationSeconds?: number;
|
|
29
|
-
redaction?: AgentRedactionRule;
|
|
30
|
-
};
|
|
31
|
-
export type AgentToolCallStatus = "pending" | "running" | "success" | "error" | "denied" | "approval-requested" | "approval-responded";
|
|
32
|
-
export type AgentToolCallModel = {
|
|
33
|
-
id: string;
|
|
34
|
-
name: string;
|
|
35
|
-
title?: string;
|
|
36
|
-
status: AgentToolCallStatus;
|
|
37
|
-
input?: unknown;
|
|
38
|
-
output?: unknown;
|
|
39
|
-
error?: string;
|
|
40
|
-
trace?: string;
|
|
41
|
-
approval?: AgentToolApprovalRequest;
|
|
42
|
-
redaction?: AgentRedactionRule;
|
|
43
|
-
};
|
|
44
|
-
export type AgentToolApprovalDecisionHandler = (choice: AgentApprovalChoice, request: AgentToolApprovalRequest, toolCall: AgentToolCallModel) => void;
|
|
45
|
-
export type AgentAttachmentModel = {
|
|
46
|
-
id: string;
|
|
47
|
-
type: "file" | "image" | "audio" | "video" | "source";
|
|
48
|
-
name: string;
|
|
49
|
-
mediaType?: string;
|
|
50
|
-
url?: string;
|
|
51
|
-
sizeLabel?: string;
|
|
52
|
-
redaction?: AgentRedactionRule;
|
|
53
|
-
};
|
|
54
|
-
export type AgentMessageTextPart = {
|
|
55
|
-
type: "text";
|
|
56
|
-
text: string;
|
|
57
|
-
redaction?: AgentRedactionRule;
|
|
58
|
-
};
|
|
59
|
-
export type AgentMessageReasoningPart = {
|
|
60
|
-
type: "reasoning";
|
|
61
|
-
reasoning: AgentReasoningSummary;
|
|
62
|
-
};
|
|
63
|
-
export type AgentMessageToolPart = {
|
|
64
|
-
type: "tool";
|
|
65
|
-
toolCall: AgentToolCallModel;
|
|
66
|
-
};
|
|
67
|
-
export type AgentMessageSourcePart = {
|
|
68
|
-
type: "source";
|
|
69
|
-
source: AgentSourceReference;
|
|
70
|
-
};
|
|
71
|
-
export type AgentMessageArtifactPart = {
|
|
72
|
-
type: "artifact";
|
|
73
|
-
artifact: AgentArtifactModel;
|
|
74
|
-
};
|
|
75
|
-
export type AgentMessageStatePart = {
|
|
76
|
-
type: "state";
|
|
77
|
-
state: Exclude<AgentWorkState, "empty" | "idle">;
|
|
78
|
-
title?: string;
|
|
79
|
-
description?: string;
|
|
80
|
-
};
|
|
81
|
-
export type AgentMessagePart = AgentMessageTextPart | AgentMessageReasoningPart | AgentMessageToolPart | AgentMessageSourcePart | AgentMessageArtifactPart | AgentMessageStatePart;
|
|
82
|
-
export type AgentMessageModel = {
|
|
83
|
-
id: string;
|
|
84
|
-
role: AgentMessageRole;
|
|
85
|
-
content?: string;
|
|
86
|
-
metadata?: AgentMessageSourceMetadata;
|
|
87
|
-
state?: Exclude<AgentWorkState, "empty">;
|
|
88
|
-
parts?: AgentMessagePart[];
|
|
89
|
-
attachments?: AgentAttachmentModel[];
|
|
90
|
-
sources?: AgentSourceReference[];
|
|
91
|
-
redaction?: AgentRedactionRule;
|
|
92
|
-
};
|
|
93
|
-
declare function AgentMessageStateNotice({ state, title, description, actions, }: {
|
|
94
|
-
state: Exclude<AgentWorkState, "empty" | "idle">;
|
|
95
|
-
title?: React.ReactNode;
|
|
96
|
-
description?: React.ReactNode;
|
|
97
|
-
actions?: React.ReactNode;
|
|
98
|
-
}): React.JSX.Element;
|
|
99
|
-
declare function AgentAttachmentsList({ attachments }: {
|
|
100
|
-
attachments?: AgentAttachmentModel[];
|
|
101
|
-
}): React.JSX.Element | null;
|
|
102
|
-
declare function AgentSourcesList({ sources }: {
|
|
103
|
-
sources?: AgentSourceReference[];
|
|
104
|
-
}): React.JSX.Element | null;
|
|
105
|
-
declare function AgentToolCall({ toolCall, actions, onApprovalChoice, }: {
|
|
106
|
-
toolCall: AgentToolCallModel;
|
|
107
|
-
actions?: React.ReactNode;
|
|
108
|
-
onApprovalChoice?: AgentToolApprovalDecisionHandler;
|
|
109
|
-
}): React.JSX.Element;
|
|
110
|
-
declare function AgentMessage({ message, toolActions, retryAction, onToolApprovalChoice, className, ...props }: Omit<React.ComponentProps<"article">, "children"> & {
|
|
111
|
-
message: AgentMessageModel;
|
|
112
|
-
toolActions?: Record<string, React.ReactNode>;
|
|
113
|
-
retryAction?: React.ReactNode;
|
|
114
|
-
onToolApprovalChoice?: AgentToolApprovalDecisionHandler;
|
|
115
|
-
}): React.JSX.Element;
|
|
116
|
-
export { AgentAttachmentsList, AgentMessage, AgentMessageStateNotice, AgentSourcesList, AgentToolCall, };
|
|
117
|
-
//# sourceMappingURL=agent-message.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-message.d.ts","sourceRoot":"","sources":["../../src/components/agent-message.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAqB/B,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;AAI1C,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGhF,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE/D,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,SAAS,GACT,SAAS,GACT,OAAO,GACP,QAAQ,GACR,oBAAoB,GACpB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG,CAC7C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE,kBAAkB,KACzB,IAAI,CAAC;AAEV,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,oBAAoB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,oBAAoB,GACpB,yBAAyB,GACzB,oBAAoB,GACpB,sBAAsB,GACtB,wBAAwB,GACxB,qBAAqB,CAAC;AAE1B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACrC,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC;AA6BF,iBAAS,uBAAuB,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,WAAW,EACX,OAAO,GACR,EAAE;IACD,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,qBAYA;AAED,iBAAS,oBAAoB,CAAC,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAA;CAAE,4BAkBtF;AAED,iBAAS,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAA;CAAE,4BAmB1E;AA2BD,iBAAS,aAAa,CAAC,EACrB,QAAQ,EACR,OAAO,EACP,gBAAgB,GACjB,EAAE;IACD,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,gBAAgB,CAAC,EAAE,gCAAgC,CAAC;CACrD,qBAgDA;AAqFD,iBAAS,YAAY,CAAC,EACpB,OAAO,EACP,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,GAAG;IACrD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,oBAAoB,CAAC,EAAE,gCAAgC,CAAC;CACzD,qBAqDA;AAED,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,GACd,CAAC"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { BotIcon, InfoIcon, UserIcon } from "lucide-react";
|
|
4
|
-
import { Attachment, AttachmentInfo, AttachmentPreview, Attachments, } from "./ai-elements/attachments.js";
|
|
5
|
-
import { Message, MessageResponse } from "./ai-elements/message.js";
|
|
6
|
-
import { Reasoning, ReasoningContent, ReasoningTrigger } from "./ai-elements/reasoning.js";
|
|
7
|
-
import { Source, Sources, SourcesContent, SourcesTrigger } from "./ai-elements/sources.js";
|
|
8
|
-
import { ToolContent, ToolHeader, ToolInput, ToolOutput, } from "./ai-elements/tool.js";
|
|
9
|
-
import { Collapsible } from "./collapsible.js";
|
|
10
|
-
import { ArtifactPanel, RedactedNotice, StackTraceDisclosure, getAgentRedactionText, } from "./artifact-panel.js";
|
|
11
|
-
import { AgentToolApproval, } from "./agent-tool-approval.js";
|
|
12
|
-
import { Badge } from "./badge.js";
|
|
13
|
-
import { StateNotice } from "./state-notice.js";
|
|
14
|
-
import { agentAttachmentToData } from "../lib/agent-attachment.js";
|
|
15
|
-
import { statePresentation } from "../lib/agent-work-state.js";
|
|
16
|
-
import { cn } from "../lib/utils.js";
|
|
17
|
-
const roleIcons = {
|
|
18
|
-
assistant: BotIcon,
|
|
19
|
-
system: InfoIcon,
|
|
20
|
-
user: UserIcon,
|
|
21
|
-
};
|
|
22
|
-
const stateMeta = {
|
|
23
|
-
empty: { label: "Empty" },
|
|
24
|
-
fatal: { label: "Fatal" },
|
|
25
|
-
idle: { label: "Idle" },
|
|
26
|
-
interrupted: { label: "Interrupted" },
|
|
27
|
-
"permission-denied": { label: "Permission denied" },
|
|
28
|
-
queued: { label: "Queued" },
|
|
29
|
-
retryable: { label: "Retryable" },
|
|
30
|
-
streaming: { label: "Streaming" },
|
|
31
|
-
};
|
|
32
|
-
const toolStatusToAiState = {
|
|
33
|
-
"approval-requested": "approval-requested",
|
|
34
|
-
"approval-responded": "approval-responded",
|
|
35
|
-
denied: "output-denied",
|
|
36
|
-
error: "output-error",
|
|
37
|
-
pending: "input-streaming",
|
|
38
|
-
running: "input-available",
|
|
39
|
-
success: "output-available",
|
|
40
|
-
};
|
|
41
|
-
function AgentMessageStateNotice({ state, title, description, actions, }) {
|
|
42
|
-
return (_jsx(StateNotice, { "data-slot": "agent-message-state", state: state, icon: statePresentation(state).icon, title: title ?? stateMeta[state].label, description: description, actions: actions, className: "rounded-md px-3 py-2" }));
|
|
43
|
-
}
|
|
44
|
-
function AgentAttachmentsList({ attachments }) {
|
|
45
|
-
if (!attachments?.length) {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
return (_jsx(Attachments, { "data-slot": "agent-message-attachments", variant: "inline", className: "max-w-full", children: attachments.map((attachment) => (_jsxs(Attachment, { data: agentAttachmentToData(attachment), children: [_jsx(AttachmentPreview, {}), _jsx(AttachmentInfo, { showMediaType: true }), attachment.redaction && (_jsx("span", { className: "sr-only", children: getAgentRedactionText(attachment.redaction) }))] }, attachment.id))) }));
|
|
49
|
-
}
|
|
50
|
-
function AgentSourcesList({ sources }) {
|
|
51
|
-
if (!sources?.length) {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
return (_jsxs(Sources, { "data-slot": "agent-message-sources", children: [_jsx(SourcesTrigger, { count: sources.length }), _jsx(SourcesContent, { keepMounted: true, children: sources.map((source) => (_jsx(Source, { href: source.url ?? "#", title: source.redaction ? getAgentRedactionText(source.redaction) : source.title }, source.id))) })] }));
|
|
55
|
-
}
|
|
56
|
-
function AgentReasoningBlock({ reasoning }) {
|
|
57
|
-
return (_jsxs(Reasoning, { "data-slot": "agent-reasoning-summary", "data-reasoning-status": reasoning.status, isStreaming: reasoning.status === "streaming", defaultOpen: reasoning.status === "streaming", duration: reasoning.durationSeconds, children: [_jsx(ReasoningTrigger, { getThinkingMessage: (isStreaming) => reasoning.title ?? (isStreaming ? "Preparing reasoning summary" : "Reasoning summary") }), reasoning.redaction ? (_jsx("div", { className: "mt-3", children: _jsx(RedactedNotice, { redaction: reasoning.redaction }) })) : (_jsx(ReasoningContent, { children: reasoning.summary ?? "No reasoning summary supplied." }))] }));
|
|
58
|
-
}
|
|
59
|
-
function AgentToolCall({ toolCall, actions, onApprovalChoice, }) {
|
|
60
|
-
const state = toolStatusToAiState[toolCall.status];
|
|
61
|
-
return (_jsxs(Collapsible, { "data-slot": "agent-tool-call", "data-tool-status": toolCall.status, className: "group not-prose w-full rounded-md border", defaultOpen: true, children: [_jsx(ToolHeader, { className: "nc-tool-call-trace", type: `tool-${toolCall.name}`, state: state, title: toolCall.title ?? toolCall.name }), _jsxs(ToolContent, { children: [toolCall.approval && (_jsx(AgentToolApproval, { request: toolCall.approval, disabled: !onApprovalChoice, onChoice: onApprovalChoice
|
|
62
|
-
? (choice, request) => onApprovalChoice(choice, request, toolCall)
|
|
63
|
-
: undefined })), toolCall.redaction ? (_jsx(RedactedNotice, { redaction: toolCall.redaction })) : (_jsxs(_Fragment, { children: [toolCall.input !== undefined && (_jsx(ToolInput, { input: toolCall.input })), (toolCall.output !== undefined || toolCall.error) && (_jsx(ToolOutput, { output: toolCall.output, errorText: toolCall.error }))] })), !toolCall.redaction && toolCall.trace && _jsx(StackTraceDisclosure, { trace: toolCall.trace }), actions] })] }));
|
|
64
|
-
}
|
|
65
|
-
function AgentMessagePartView({ part, role, toolActions, onToolApprovalChoice, }) {
|
|
66
|
-
if (part.type === "text") {
|
|
67
|
-
if (part.redaction) {
|
|
68
|
-
return _jsx(RedactedNotice, { redaction: part.redaction });
|
|
69
|
-
}
|
|
70
|
-
if (role === "system") {
|
|
71
|
-
return _jsx(MessageResponse, { children: part.text });
|
|
72
|
-
}
|
|
73
|
-
return (_jsx("div", { "data-slot": "agent-message-bubble", className: role === "user" ? "nc-chat-bubble-user" : "nc-chat-bubble-agent", children: _jsx(MessageResponse, { children: part.text }) }));
|
|
74
|
-
}
|
|
75
|
-
if (part.type === "reasoning") {
|
|
76
|
-
return _jsx(AgentReasoningBlock, { reasoning: part.reasoning });
|
|
77
|
-
}
|
|
78
|
-
if (part.type === "tool") {
|
|
79
|
-
return (_jsx(AgentToolCall, { toolCall: part.toolCall, actions: toolActions?.[part.toolCall.id], onApprovalChoice: onToolApprovalChoice }));
|
|
80
|
-
}
|
|
81
|
-
if (part.type === "source") {
|
|
82
|
-
return _jsx(AgentSourcesList, { sources: [part.source] });
|
|
83
|
-
}
|
|
84
|
-
if (part.type === "artifact") {
|
|
85
|
-
return _jsx(ArtifactPanel, { artifact: part.artifact });
|
|
86
|
-
}
|
|
87
|
-
return (_jsx(AgentMessageStateNotice, { state: part.state, title: part.title, description: part.description }));
|
|
88
|
-
}
|
|
89
|
-
function AgentMessageMeta({ role, metadata, state, }) {
|
|
90
|
-
const Icon = roleIcons[role];
|
|
91
|
-
const label = metadata?.label ?? role;
|
|
92
|
-
return (_jsxs("div", { "data-slot": "agent-message-meta", className: "flex flex-wrap items-center gap-2 text-xs text-muted-foreground", children: [_jsx(Icon, { className: "size-3.5" }), _jsx("span", { className: "font-medium capitalize", children: label }), metadata?.model && _jsx(Badge, { variant: "outline", children: metadata.model }), metadata?.timestamp && _jsx("span", { children: metadata.timestamp }), state && state !== "idle" && _jsx(Badge, { variant: "secondary", children: stateMeta[state].label })] }));
|
|
93
|
-
}
|
|
94
|
-
function AgentMessage({ message, toolActions, retryAction, onToolApprovalChoice, className, ...props }) {
|
|
95
|
-
const parts = message.parts ?? (message.content ? [{ text: message.content, type: "text" }] : []);
|
|
96
|
-
const aiRole = message.role === "user" ? "user" : "assistant";
|
|
97
|
-
return (_jsx("article", { "data-slot": "agent-message", "data-message-role": message.role, "data-agent-state": message.state, className: className, ...props, children: _jsxs(Message, { from: aiRole, className: cn("max-w-full", message.role === "system" && "mx-auto border-y bg-muted/20 px-4 py-3"), children: [_jsx(AgentMessageMeta, { role: message.role, metadata: message.metadata, state: message.state }), _jsxs("div", { "data-slot": "agent-message-content", className: cn("flex w-full min-w-0 flex-col gap-2 text-sm", message.role === "system" && "text-muted-foreground"), children: [_jsx(AgentAttachmentsList, { attachments: message.attachments }), message.redaction ? (_jsx(RedactedNotice, { redaction: message.redaction })) : (parts.map((part, index) => (_jsx(AgentMessagePartView, { part: part, role: message.role, toolActions: toolActions, onToolApprovalChoice: onToolApprovalChoice }, `${message.id}-${part.type}-${index}`)))), _jsx(AgentSourcesList, { sources: message.sources }), message.state && message.state !== "idle" && message.state !== "streaming" && (_jsx(AgentMessageStateNotice, { state: message.state, actions: message.state === "retryable" ? retryAction : undefined }))] })] }) }));
|
|
98
|
-
}
|
|
99
|
-
export { AgentAttachmentsList, AgentMessage, AgentMessageStateNotice, AgentSourcesList, AgentToolCall, };
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { Conversation } from "./ai-elements/conversation";
|
|
3
|
-
import { type AgentMessageModel, type AgentToolApprovalDecisionHandler, type AgentWorkState } from "./agent-message";
|
|
4
|
-
export type AgentThreadStateCopy = {
|
|
5
|
-
title?: React.ReactNode;
|
|
6
|
-
description?: React.ReactNode;
|
|
7
|
-
actions?: React.ReactNode;
|
|
8
|
-
};
|
|
9
|
-
declare function AgentThreadStateBanner({ state, title, description, actions, }: AgentThreadStateCopy & {
|
|
10
|
-
state: Exclude<AgentWorkState, "idle" | "empty">;
|
|
11
|
-
}): React.JSX.Element;
|
|
12
|
-
declare function AgentThreadEmptyState({ title, description, actions }: AgentThreadStateCopy): React.JSX.Element;
|
|
13
|
-
declare function AgentThread({ messages, state, stateCopy, emptyState, toolActions, retryAction, onToolApprovalChoice, maxMessages, className, contentClassName, children, ...props }: Omit<React.ComponentProps<typeof Conversation>, "children"> & {
|
|
14
|
-
messages: AgentMessageModel[];
|
|
15
|
-
state?: AgentWorkState;
|
|
16
|
-
stateCopy?: Partial<Record<Exclude<AgentWorkState, "idle">, AgentThreadStateCopy>>;
|
|
17
|
-
emptyState?: AgentThreadStateCopy;
|
|
18
|
-
toolActions?: Record<string, React.ReactNode>;
|
|
19
|
-
retryAction?: React.ReactNode;
|
|
20
|
-
onToolApprovalChoice?: AgentToolApprovalDecisionHandler;
|
|
21
|
-
maxMessages?: number;
|
|
22
|
-
contentClassName?: string;
|
|
23
|
-
children?: React.ReactNode;
|
|
24
|
-
}): React.JSX.Element;
|
|
25
|
-
export { AgentThread, AgentThreadEmptyState, AgentThreadStateBanner };
|
|
26
|
-
//# sourceMappingURL=agent-thread.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-thread.d.ts","sourceRoot":"","sources":["../../src/components/agent-thread.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAuB,MAAM,uCAAuC,CAAC;AAC1F,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,gCAAgC,EACrC,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AAMpC,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAyCF,iBAAS,sBAAsB,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,WAAW,EACX,OAAO,GACR,EAAE,oBAAoB,GAAG;IACxB,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CAClD,qBAcA;AAED,iBAAS,qBAAqB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,oBAAoB,qBAYnF;AAaD,iBAAS,WAAW,CAAC,EACnB,QAAQ,EACR,KAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,WAA2C,EAC3C,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,EAAE,UAAU,CAAC,GAAG;IAC/D,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC;IACnF,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,oBAAoB,CAAC,EAAE,gCAAgC,CAAC;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,qBA+CA;AAED,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Conversation, ConversationContent } from "./ai-elements/conversation.js";
|
|
4
|
-
import { AgentMessage, } from "./agent-message.js";
|
|
5
|
-
import { FeedbackState } from "./feedback-state.js";
|
|
6
|
-
import { StateNotice } from "./state-notice.js";
|
|
7
|
-
import { statePresentation } from "../lib/agent-work-state.js";
|
|
8
|
-
import { cn } from "../lib/utils.js";
|
|
9
|
-
const threadStateDefaults = {
|
|
10
|
-
empty: {
|
|
11
|
-
description: "Start with a prompt or queue an agent task.",
|
|
12
|
-
title: "No agent messages",
|
|
13
|
-
},
|
|
14
|
-
fatal: {
|
|
15
|
-
description: "The consuming app should show its recovery action here.",
|
|
16
|
-
title: "Unable to continue",
|
|
17
|
-
},
|
|
18
|
-
interrupted: {
|
|
19
|
-
description: "The current run stopped before the agent finished.",
|
|
20
|
-
title: "Run interrupted",
|
|
21
|
-
},
|
|
22
|
-
"permission-denied": {
|
|
23
|
-
description: "This session cannot access the requested action or content.",
|
|
24
|
-
title: "Permission denied",
|
|
25
|
-
},
|
|
26
|
-
queued: {
|
|
27
|
-
description: "The next agent step is waiting for capacity or approval.",
|
|
28
|
-
title: "Queued",
|
|
29
|
-
},
|
|
30
|
-
retryable: {
|
|
31
|
-
description: "The run can be attempted again by the consuming app.",
|
|
32
|
-
title: "Retry available",
|
|
33
|
-
},
|
|
34
|
-
streaming: {
|
|
35
|
-
description: "The assistant is preparing a response.",
|
|
36
|
-
title: "Streaming",
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
const defaultMaxAgentThreadMessages = 50;
|
|
40
|
-
function AgentThreadStateBanner({ state, title, description, actions, }) {
|
|
41
|
-
const fallback = threadStateDefaults[state];
|
|
42
|
-
return (_jsx(StateNotice, { "data-slot": "agent-thread-state", state: state, icon: statePresentation(state).icon, title: title ?? fallback.title, description: description ?? fallback.description, actions: actions, className: "rounded-lg px-4 py-3" }));
|
|
43
|
-
}
|
|
44
|
-
function AgentThreadEmptyState({ title, description, actions }) {
|
|
45
|
-
return (_jsx(FeedbackState, { "data-slot": "agent-thread-empty-state", status: "empty", title: title ?? threadStateDefaults.empty.title, description: description ?? threadStateDefaults.empty.description, actions: actions, compact: true, className: "min-h-56 rounded-lg bg-muted/20" }));
|
|
46
|
-
}
|
|
47
|
-
function AgentThreadOverflowSummary({ omittedMessages }) {
|
|
48
|
-
return (_jsxs("div", { "data-slot": "agent-thread-overflow-summary", className: "rounded-md border bg-muted/30 px-3 py-2 text-muted-foreground text-xs", children: [omittedMessages, " earlier messages not shown."] }));
|
|
49
|
-
}
|
|
50
|
-
function AgentThread({ messages, state = "idle", stateCopy, emptyState, toolActions, retryAction, onToolApprovalChoice, maxMessages = defaultMaxAgentThreadMessages, className, contentClassName, children, ...props }) {
|
|
51
|
-
const maxVisibleMessages = Number.isFinite(maxMessages)
|
|
52
|
-
? Math.max(0, Math.floor(maxMessages))
|
|
53
|
-
: defaultMaxAgentThreadMessages;
|
|
54
|
-
const visibleMessages = maxVisibleMessages > 0 ? messages.slice(-maxVisibleMessages) : [];
|
|
55
|
-
const omittedMessages = messages.length - visibleMessages.length;
|
|
56
|
-
const hasMessages = messages.length > 0;
|
|
57
|
-
const nonIdleState = state === "idle" ? undefined : state;
|
|
58
|
-
const stateForRender = nonIdleState && nonIdleState !== "empty" ? nonIdleState : undefined;
|
|
59
|
-
const stateProps = nonIdleState ? stateCopy?.[nonIdleState] : undefined;
|
|
60
|
-
const stateActions = stateForRender === "retryable" ? (retryAction ?? stateProps?.actions) : stateProps?.actions;
|
|
61
|
-
return (_jsx(Conversation, { "data-slot": "agent-thread", "data-agent-state": state, className: cn("nc-chat-thread min-h-0", className), ...props, children: _jsxs(ConversationContent, { className: cn("nc-chat-thread-body", contentClassName), children: [stateForRender && (_jsx(AgentThreadStateBanner, { state: stateForRender, actions: stateActions, title: stateProps?.title, description: stateProps?.description })), omittedMessages > 0 && _jsx(AgentThreadOverflowSummary, { omittedMessages: omittedMessages }), !hasMessages ? (_jsx(AgentThreadEmptyState, { ...(stateProps ?? emptyState ?? {}) })) : (visibleMessages.map((message) => (_jsx(AgentMessage, { message: message, toolActions: toolActions, retryAction: retryAction, onToolApprovalChoice: onToolApprovalChoice }, message.id)))), children] }) }));
|
|
62
|
-
}
|
|
63
|
-
export { AgentThread, AgentThreadEmptyState, AgentThreadStateBanner };
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import type { Card } from "./card";
|
|
3
|
-
import type { AgentApprovalChoice } from "../lib/agent-contracts";
|
|
4
|
-
export type { AgentApprovalAlias, AgentApprovalChoice } from "../lib/agent-contracts";
|
|
5
|
-
export { agentApprovalAliases } from "../lib/agent-contracts";
|
|
6
|
-
export type AgentApprovalRisk = "low" | "review" | "elevated" | "blocked";
|
|
7
|
-
export type AgentToolApprovalRequest = {
|
|
8
|
-
id: string;
|
|
9
|
-
toolName: string;
|
|
10
|
-
title?: string;
|
|
11
|
-
description?: string;
|
|
12
|
-
scope?: string;
|
|
13
|
-
risk?: AgentApprovalRisk;
|
|
14
|
-
choices?: AgentApprovalChoice[];
|
|
15
|
-
};
|
|
16
|
-
declare function AgentToolApproval({ request, title, description, choices, choiceLabels, onChoice, disabled, footer, size, className, ...props }: Omit<React.ComponentProps<typeof Card>, "children" | "title"> & {
|
|
17
|
-
request: AgentToolApprovalRequest;
|
|
18
|
-
title?: React.ReactNode;
|
|
19
|
-
description?: React.ReactNode;
|
|
20
|
-
choices?: AgentApprovalChoice[];
|
|
21
|
-
choiceLabels?: Partial<Record<AgentApprovalChoice, React.ReactNode>>;
|
|
22
|
-
onChoice?: (choice: AgentApprovalChoice, request: AgentToolApprovalRequest) => void;
|
|
23
|
-
disabled?: boolean;
|
|
24
|
-
footer?: React.ReactNode;
|
|
25
|
-
}): React.JSX.Element;
|
|
26
|
-
export { AgentToolApproval };
|
|
27
|
-
//# sourceMappingURL=agent-tool-approval.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-tool-approval.d.ts","sourceRoot":"","sources":["../../src/components/agent-tool-approval.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAIjE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE1E,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACjC,CAAC;AAgCF,iBAAS,iBAAiB,CAAC,EACzB,OAAO,EACP,KAAK,EACL,WAAW,EACX,OAAiE,EACjE,YAAY,EACZ,QAAQ,EACR,QAAgB,EAChB,MAAM,EACN,IAAI,EACJ,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG;IACjE,OAAO,EAAE,wBAAwB,CAAC;IAClC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACrE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACpF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B,qBAgDA;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { BanIcon, CheckIcon, ClockIcon, ShieldCheckIcon } from "lucide-react";
|
|
4
|
-
import { agentApprovalAliases } from "../lib/agent-contracts.js";
|
|
5
|
-
import { cn } from "../lib/utils.js";
|
|
6
|
-
export { agentApprovalAliases } from "../lib/agent-contracts.js";
|
|
7
|
-
const approvalChoiceDefaults = {
|
|
8
|
-
always: {
|
|
9
|
-
icon: ShieldCheckIcon,
|
|
10
|
-
label: "Always allow",
|
|
11
|
-
variant: "secondary",
|
|
12
|
-
},
|
|
13
|
-
deny: {
|
|
14
|
-
icon: BanIcon,
|
|
15
|
-
label: "Deny",
|
|
16
|
-
variant: "destructive",
|
|
17
|
-
},
|
|
18
|
-
run: {
|
|
19
|
-
icon: CheckIcon,
|
|
20
|
-
label: "Run once",
|
|
21
|
-
variant: "default",
|
|
22
|
-
},
|
|
23
|
-
session: {
|
|
24
|
-
icon: ClockIcon,
|
|
25
|
-
label: "Allow this session",
|
|
26
|
-
variant: "outline",
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
const approvalRiskLabels = {
|
|
30
|
-
blocked: "Blocked",
|
|
31
|
-
elevated: "Elevated",
|
|
32
|
-
low: "Low risk",
|
|
33
|
-
review: "Review",
|
|
34
|
-
};
|
|
35
|
-
function AgentToolApproval({ request, title, description, choices = request.choices ?? ["run", "deny", "session", "always"], choiceLabels, onChoice, disabled = false, footer, size, className, ...props }) {
|
|
36
|
-
return (_jsxs("div", { "data-slot": "agent-tool-approval", "data-tool-name": request.toolName, "data-risk": request.risk, "data-size": size, className: cn("nc-approval-gate", className), ...props, children: [_jsx("span", { className: "nc-approval-gate-label", children: request.risk
|
|
37
|
-
? `${approvalRiskLabels[request.risk]} · ${request.toolName}`
|
|
38
|
-
: request.toolName }), _jsx("span", { className: "nc-approval-gate-title", children: title ?? request.title ?? "Approval required" }), (description ?? request.description) && (_jsx("span", { className: "nc-approval-gate-copy", children: description ?? request.description })), request.scope && (_jsx("span", { "data-slot": "agent-tool-approval-scope", className: "nc-approval-gate-copy", children: request.scope })), _jsx("div", { "data-slot": "agent-tool-approval-choices", className: "nc-approval-gate-actions", children: choices.map((choice) => {
|
|
39
|
-
const defaults = approvalChoiceDefaults[choice];
|
|
40
|
-
return (_jsx("button", { type: "button", disabled: disabled, "data-approval-choice": choice, "data-approval-alias": agentApprovalAliases[choice], "data-variant": defaults.variant, onClick: () => onChoice?.(choice, request), children: choiceLabels?.[choice] ?? defaults.label }, choice));
|
|
41
|
-
}) }), footer] }));
|
|
42
|
-
}
|
|
43
|
-
export { AgentToolApproval };
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { Accordion, AccordionItem } from "../accordion";
|
|
2
|
-
import type { Tool } from "ai";
|
|
3
|
-
import type { ComponentProps } from "react";
|
|
4
|
-
export type AgentProps = ComponentProps<"div">;
|
|
5
|
-
export declare const Agent: import("react").MemoExoticComponent<({ className, ...props }: AgentProps) => import("react").JSX.Element>;
|
|
6
|
-
export type AgentHeaderProps = ComponentProps<"div"> & {
|
|
7
|
-
name: string;
|
|
8
|
-
model?: string;
|
|
9
|
-
};
|
|
10
|
-
export declare const AgentHeader: import("react").MemoExoticComponent<({ className, name, model, ...props }: AgentHeaderProps) => import("react").JSX.Element>;
|
|
11
|
-
export type AgentContentProps = ComponentProps<"div">;
|
|
12
|
-
export declare const AgentContent: import("react").MemoExoticComponent<({ className, ...props }: AgentContentProps) => import("react").JSX.Element>;
|
|
13
|
-
export type AgentInstructionsProps = ComponentProps<"div"> & {
|
|
14
|
-
children: string;
|
|
15
|
-
};
|
|
16
|
-
export declare const AgentInstructions: import("react").MemoExoticComponent<({ className, children, ...props }: AgentInstructionsProps) => import("react").JSX.Element>;
|
|
17
|
-
export type AgentToolsProps = ComponentProps<typeof Accordion>;
|
|
18
|
-
export declare const AgentTools: import("react").MemoExoticComponent<({ className, ...props }: AgentToolsProps) => import("react").JSX.Element>;
|
|
19
|
-
export type AgentToolProps = ComponentProps<typeof AccordionItem> & {
|
|
20
|
-
tool: Tool;
|
|
21
|
-
};
|
|
22
|
-
export declare const AgentTool: import("react").MemoExoticComponent<({ className, tool, value, ...props }: AgentToolProps) => import("react").JSX.Element>;
|
|
23
|
-
export type AgentOutputProps = ComponentProps<"div"> & {
|
|
24
|
-
schema: string;
|
|
25
|
-
};
|
|
26
|
-
export declare const AgentOutput: import("react").MemoExoticComponent<({ className, schema, ...props }: AgentOutputProps) => import("react").JSX.Element>;
|
|
27
|
-
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/components/ai-elements/agent.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EAET,aAAa,EAEd,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAK5C,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAE/C,eAAO,MAAM,KAAK,gEAAkC,UAAU,iCAE5D,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,WAAW,6EAA+C,gBAAgB,iCAYrF,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAEtD,eAAO,MAAM,YAAY,gEAAkC,iBAAiB,iCAE1E,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IAC3D,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,iBAAiB,0EACQ,sBAAsB,iCAQ3D,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC;AAE/D,eAAO,MAAM,UAAU,gEAAkC,eAAe,iCAKtE,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,aAAa,CAAC,GAAG;IAClE,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,eAAO,MAAM,SAAS,6EAA+C,cAAc,iCAejF,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IACrD,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,WAAW,wEAA0C,gBAAgB,iCAOhF,CAAC"}
|