@wingmanjs/react 0.1.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.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/dist/components/chat-input.d.ts +9 -0
  3. package/dist/components/chat-input.d.ts.map +1 -0
  4. package/dist/components/chat-input.js +36 -0
  5. package/dist/components/chat-input.js.map +1 -0
  6. package/dist/components/chat-message.d.ts +10 -0
  7. package/dist/components/chat-message.d.ts.map +1 -0
  8. package/dist/components/chat-message.js +9 -0
  9. package/dist/components/chat-message.js.map +1 -0
  10. package/dist/components/debug-panel.d.ts +20 -0
  11. package/dist/components/debug-panel.d.ts.map +1 -0
  12. package/dist/components/debug-panel.js +29 -0
  13. package/dist/components/debug-panel.js.map +1 -0
  14. package/dist/components/markdown-renderer.d.ts +9 -0
  15. package/dist/components/markdown-renderer.d.ts.map +1 -0
  16. package/dist/components/markdown-renderer.js +9 -0
  17. package/dist/components/markdown-renderer.js.map +1 -0
  18. package/dist/components/mode-switcher.d.ts +18 -0
  19. package/dist/components/mode-switcher.d.ts.map +1 -0
  20. package/dist/components/mode-switcher.js +38 -0
  21. package/dist/components/mode-switcher.js.map +1 -0
  22. package/dist/components/model-picker.d.ts +19 -0
  23. package/dist/components/model-picker.d.ts.map +1 -0
  24. package/dist/components/model-picker.js +50 -0
  25. package/dist/components/model-picker.js.map +1 -0
  26. package/dist/components/thinking-block.d.ts +10 -0
  27. package/dist/components/thinking-block.d.ts.map +1 -0
  28. package/dist/components/thinking-block.js +12 -0
  29. package/dist/components/thinking-block.js.map +1 -0
  30. package/dist/components/token-usage.d.ts +12 -0
  31. package/dist/components/token-usage.d.ts.map +1 -0
  32. package/dist/components/token-usage.js +14 -0
  33. package/dist/components/token-usage.js.map +1 -0
  34. package/dist/components/tool-status.d.ts +12 -0
  35. package/dist/components/tool-status.d.ts.map +1 -0
  36. package/dist/components/tool-status.js +20 -0
  37. package/dist/components/tool-status.js.map +1 -0
  38. package/dist/components/welcome-screen.d.ts +12 -0
  39. package/dist/components/welcome-screen.d.ts.map +1 -0
  40. package/dist/components/welcome-screen.js +5 -0
  41. package/dist/components/welcome-screen.js.map +1 -0
  42. package/dist/index.d.ts +32 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +28 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/providers/chat-provider.d.ts +102 -0
  47. package/dist/providers/chat-provider.d.ts.map +1 -0
  48. package/dist/providers/chat-provider.js +388 -0
  49. package/dist/providers/chat-provider.js.map +1 -0
  50. package/dist/providers/theme-provider.d.ts +72 -0
  51. package/dist/providers/theme-provider.d.ts.map +1 -0
  52. package/dist/providers/theme-provider.js +87 -0
  53. package/dist/providers/theme-provider.js.map +1 -0
  54. package/package.json +57 -0
  55. package/src/styles/wingman.css +686 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Eric Hansen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,9 @@
1
+ /**
2
+ * ChatInput — Message input with send button and keyboard submit.
3
+ */
4
+ export interface ChatInputProps {
5
+ placeholder?: string;
6
+ className?: string;
7
+ }
8
+ export declare function ChatInput({ placeholder, className, }: ChatInputProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=chat-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-input.d.ts","sourceRoot":"","sources":["../../src/components/chat-input.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EACxB,WAA+B,EAC/B,SAAc,GACf,EAAE,cAAc,2CAuEhB"}
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ChatInput — Message input with send button and keyboard submit.
4
+ */
5
+ import { useState, useRef, useCallback } from 'react';
6
+ import { useChat } from '../providers/chat-provider.js';
7
+ export function ChatInput({ placeholder = 'Ask anything...', className = '', }) {
8
+ const [value, setValue] = useState('');
9
+ const textareaRef = useRef(null);
10
+ const { sendMessage, state } = useChat();
11
+ const handleSubmit = useCallback(() => {
12
+ if (!value.trim() || state.isStreaming)
13
+ return;
14
+ sendMessage(value.trim());
15
+ setValue('');
16
+ // Reset textarea height
17
+ if (textareaRef.current) {
18
+ textareaRef.current.style.height = 'auto';
19
+ }
20
+ }, [value, sendMessage, state.isStreaming]);
21
+ const handleKeyDown = useCallback((e) => {
22
+ if (e.key === 'Enter' && !e.shiftKey) {
23
+ e.preventDefault();
24
+ handleSubmit();
25
+ }
26
+ }, [handleSubmit]);
27
+ const handleInput = useCallback(() => {
28
+ const textarea = textareaRef.current;
29
+ if (textarea) {
30
+ textarea.style.height = 'auto';
31
+ textarea.style.height = `${Math.min(textarea.scrollHeight, 200)}px`;
32
+ }
33
+ }, []);
34
+ return (_jsx("div", { className: `wingman-chat-input ${className}`, children: _jsxs("div", { className: "wingman-chat-input-container", children: [_jsx("textarea", { ref: textareaRef, value: value, onChange: (e) => setValue(e.target.value), onKeyDown: handleKeyDown, onInput: handleInput, placeholder: placeholder, rows: 1, disabled: state.isStreaming, className: "wingman-chat-input-textarea" }), _jsx("button", { onClick: handleSubmit, disabled: !value.trim() || state.isStreaming, type: "button", className: "wingman-chat-input-button", "aria-label": "Send message", children: _jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("line", { x1: "22", y1: "2", x2: "11", y2: "13" }), _jsx("polygon", { points: "22 2 15 22 11 13 2 9 22 2" })] }) })] }) }));
35
+ }
36
+ //# sourceMappingURL=chat-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-input.js","sourceRoot":"","sources":["../../src/components/chat-input.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * ChatMessage — Renders a single user or assistant message bubble.
3
+ */
4
+ import type { ChatMessage as ChatMessageType } from '@wingmanjs/core';
5
+ export interface ChatMessageProps {
6
+ message: ChatMessageType;
7
+ className?: string;
8
+ }
9
+ export declare function ChatMessage({ message, className }: ChatMessageProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=chat-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message.d.ts","sourceRoot":"","sources":["../../src/components/chat-message.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKtE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,SAAc,EAAE,EAAE,gBAAgB,2CAyCxE"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ToolStatus } from './tool-status.js';
3
+ import { ThinkingBlock } from './thinking-block.js';
4
+ import { MarkdownRenderer } from './markdown-renderer.js';
5
+ export function ChatMessage({ message, className = '' }) {
6
+ const isUser = message.role === 'user';
7
+ return (_jsxs("div", { className: `wingman-message wingman-message-${message.role} ${className}`, "data-role": message.role, children: [message.reasoning && (_jsx(ThinkingBlock, { content: message.reasoning })), message.tools && message.tools.length > 0 && (_jsx("div", { className: "wingman-message-tools", children: message.tools.map((tool) => (_jsx(ToolStatus, { tool: tool }, tool.toolCallId))) })), _jsx("div", { className: "wingman-message-content", children: isUser ? (_jsx("p", { children: message.content })) : (_jsx(MarkdownRenderer, { content: message.content })) }), message.usage && (_jsxs("div", { className: "wingman-message-usage", children: [_jsxs("span", { children: [message.usage.inputTokens.toLocaleString(), " in"] }), _jsx("span", { children: " / " }), _jsxs("span", { children: [message.usage.outputTokens.toLocaleString(), " out"] })] }))] }));
8
+ }
9
+ //# sourceMappingURL=chat-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message.js","sourceRoot":"","sources":["../../src/components/chat-message.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAO1D,MAAM,UAAU,WAAW,CAAC,EAAE,OAAO,EAAE,SAAS,GAAG,EAAE,EAAoB;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;IAEvC,OAAO,CACL,eACE,SAAS,EAAE,mCAAmC,OAAO,CAAC,IAAI,IAAI,SAAS,EAAE,eAC9D,OAAO,CAAC,IAAI,aAGtB,OAAO,CAAC,SAAS,IAAI,CACpB,KAAC,aAAa,IAAC,OAAO,EAAE,OAAO,CAAC,SAAS,GAAI,CAC9C,EAGA,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAC5C,cAAK,SAAS,EAAC,uBAAuB,YACnC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC3B,KAAC,UAAU,IAAuB,IAAI,EAAE,IAAI,IAA3B,IAAI,CAAC,UAAU,CAAgB,CACjD,CAAC,GACE,CACP,EAGD,cAAK,SAAS,EAAC,yBAAyB,YACrC,MAAM,CAAC,CAAC,CAAC,CACR,sBAAI,OAAO,CAAC,OAAO,GAAK,CACzB,CAAC,CAAC,CAAC,CACF,KAAC,gBAAgB,IAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAI,CAC/C,GACG,EAGL,OAAO,CAAC,KAAK,IAAI,CAChB,eAAK,SAAS,EAAC,uBAAuB,aACpC,2BAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,EAC5D,iCAAgB,EAChB,2BAAO,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,YAAY,IAC1D,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * DebugPanel — Collapsible panel showing raw SSE events.
3
+ *
4
+ * Opt-in component for development debugging. Records all events
5
+ * dispatched through the SSE handler and displays them as JSON.
6
+ */
7
+ export interface DebugEvent {
8
+ timestamp: number;
9
+ event: string;
10
+ data: Record<string, unknown>;
11
+ }
12
+ export interface DebugPanelProps {
13
+ /** Array of debug events to display. */
14
+ events: DebugEvent[];
15
+ /** Maximum events to keep in view (oldest are hidden). Default: 200. */
16
+ maxEvents?: number;
17
+ className?: string;
18
+ }
19
+ export declare function DebugPanel({ events, maxEvents, className }: DebugPanelProps): import("react/jsx-runtime").JSX.Element;
20
+ //# sourceMappingURL=debug-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-panel.d.ts","sourceRoot":"","sources":["../../src/components/debug-panel.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,SAAe,EAAE,SAAc,EAAE,EAAE,eAAe,2CAgEtF"}
@@ -0,0 +1,29 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * DebugPanel — Collapsible panel showing raw SSE events.
4
+ *
5
+ * Opt-in component for development debugging. Records all events
6
+ * dispatched through the SSE handler and displays them as JSON.
7
+ */
8
+ import { useState, useCallback, useRef, useEffect } from 'react';
9
+ export function DebugPanel({ events, maxEvents = 200, className = '' }) {
10
+ const [isOpen, setIsOpen] = useState(false);
11
+ const [filter, setFilter] = useState('');
12
+ const scrollRef = useRef(null);
13
+ const visibleEvents = events.slice(-maxEvents);
14
+ const filtered = filter
15
+ ? visibleEvents.filter((e) => e.event.includes(filter))
16
+ : visibleEvents;
17
+ // Auto-scroll to bottom when new events arrive
18
+ useEffect(() => {
19
+ if (isOpen && scrollRef.current) {
20
+ scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
21
+ }
22
+ }, [filtered.length, isOpen]);
23
+ const handleClear = useCallback(() => {
24
+ // Events array is owned by parent — this just collapses the panel
25
+ setIsOpen(false);
26
+ }, []);
27
+ return (_jsxs("div", { className: `wingman-debug-panel ${isOpen ? 'wingman-debug-panel-open' : ''} ${className}`, children: [_jsxs("button", { type: "button", className: "wingman-debug-panel-toggle", onClick: () => setIsOpen(!isOpen), "aria-expanded": isOpen, children: ["\uD83D\uDC1B Debug (", events.length, " events)"] }), isOpen && (_jsxs("div", { className: "wingman-debug-panel-content", children: [_jsxs("div", { className: "wingman-debug-panel-toolbar", children: [_jsx("input", { type: "text", className: "wingman-debug-panel-filter", placeholder: "Filter events\u2026", value: filter, onChange: (e) => setFilter(e.target.value), "aria-label": "Filter debug events" }), _jsx("button", { type: "button", onClick: handleClear, className: "wingman-debug-panel-close", children: "Close" })] }), _jsx("div", { className: "wingman-debug-panel-events", ref: scrollRef, children: filtered.map((e, i) => (_jsxs("div", { className: "wingman-debug-panel-event", children: [_jsx("span", { className: "wingman-debug-panel-time", children: new Date(e.timestamp).toLocaleTimeString() }), _jsx("span", { className: "wingman-debug-panel-event-name", children: e.event }), _jsx("pre", { className: "wingman-debug-panel-data", children: JSON.stringify(e.data, null, 2) })] }, i))) })] }))] }));
28
+ }
29
+ //# sourceMappingURL=debug-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-panel.js","sourceRoot":"","sources":["../../src/components/debug-panel.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAgBxE,MAAM,UAAU,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,GAAG,GAAG,EAAE,SAAS,GAAG,EAAE,EAAmB;IACrF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE/C,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM;QACrB,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC,CAAC,aAAa,CAAC;IAElB,+CAA+C;IAC/C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YAChC,SAAS,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC;QAC/D,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAE9B,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,kEAAkE;QAClE,SAAS,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,eAAK,SAAS,EAAE,uBAAuB,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,IAAI,SAAS,EAAE,aAC5F,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,mBAClB,MAAM,qCAEV,MAAM,CAAC,MAAM,gBACjB,EACR,MAAM,IAAI,CACT,eAAK,SAAS,EAAC,6BAA6B,aAC1C,eAAK,SAAS,EAAC,6BAA6B,aAC1C,gBACE,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,4BAA4B,EACtC,WAAW,EAAC,qBAAgB,EAC5B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,gBAC/B,qBAAqB,GAChC,EACF,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAC,2BAA2B,sBAExE,IACL,EACN,cAAK,SAAS,EAAC,4BAA4B,EAAC,GAAG,EAAE,SAAS,YACvD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,eAAa,SAAS,EAAC,2BAA2B,aAChD,eAAM,SAAS,EAAC,0BAA0B,YACvC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,GACtC,EACP,eAAM,SAAS,EAAC,gCAAgC,YAAE,CAAC,CAAC,KAAK,GAAQ,EACjE,cAAK,SAAS,EAAC,0BAA0B,YACtC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAC5B,KAPE,CAAC,CAQL,CACP,CAAC,GACE,IACF,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MarkdownRenderer — Renders markdown content with GFM support.
3
+ */
4
+ export interface MarkdownRendererProps {
5
+ content: string;
6
+ className?: string;
7
+ }
8
+ export declare function MarkdownRenderer({ content, className }: MarkdownRendererProps): import("react/jsx-runtime").JSX.Element | null;
9
+ //# sourceMappingURL=markdown-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-renderer.d.ts","sourceRoot":"","sources":["../../src/components/markdown-renderer.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,SAAc,EAAE,EAAE,qBAAqB,kDAUlF"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import ReactMarkdown from 'react-markdown';
3
+ import remarkGfm from 'remark-gfm';
4
+ export function MarkdownRenderer({ content, className = '' }) {
5
+ if (!content)
6
+ return null;
7
+ return (_jsx("div", { className: `wingman-markdown ${className}`, children: _jsx(ReactMarkdown, { remarkPlugins: [remarkGfm], children: content }) }));
8
+ }
9
+ //# sourceMappingURL=markdown-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-renderer.js","sourceRoot":"","sources":["../../src/components/markdown-renderer.tsx"],"names":[],"mappings":";AAKA,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,SAAS,MAAM,YAAY,CAAC;AAOnC,MAAM,UAAU,gBAAgB,CAAC,EAAE,OAAO,EAAE,SAAS,GAAG,EAAE,EAAyB;IACjF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,CACL,cAAK,SAAS,EAAE,oBAAoB,SAAS,EAAE,YAC7C,KAAC,aAAa,IAAC,aAAa,EAAE,CAAC,SAAS,CAAC,YACtC,OAAO,GACM,GACZ,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * ModeSwitcher — Toggle between agent modes.
3
+ *
4
+ * Modes: interactive (default), plan, autopilot.
5
+ */
6
+ export interface ModeSwitcherProps {
7
+ /** Currently active mode. */
8
+ currentMode: string | null;
9
+ /** Current session ID (required to switch mode). */
10
+ sessionId: string | null;
11
+ /** Base URL for the Wingman API. Default: '' (same origin). */
12
+ apiUrl?: string;
13
+ /** Called after a successful mode switch. */
14
+ onModeChange?: (mode: string) => void;
15
+ className?: string;
16
+ }
17
+ export declare function ModeSwitcher({ currentMode, sessionId, apiUrl, onModeChange, className, }: ModeSwitcherProps): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=mode-switcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-switcher.d.ts","sourceRoot":"","sources":["../../src/components/mode-switcher.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oDAAoD;IACpD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,SAAS,EACT,MAAW,EACX,YAAY,EACZ,SAAc,GACf,EAAE,iBAAiB,2CA8CnB"}
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ModeSwitcher — Toggle between agent modes.
4
+ *
5
+ * Modes: interactive (default), plan, autopilot.
6
+ */
7
+ import { useState } from 'react';
8
+ const MODES = [
9
+ { id: 'interactive', label: 'Interactive', icon: '💬' },
10
+ { id: 'plan', label: 'Plan', icon: '📋' },
11
+ { id: 'autopilot', label: 'Autopilot', icon: '🤖' },
12
+ ];
13
+ export function ModeSwitcher({ currentMode, sessionId, apiUrl = '', onModeChange, className = '', }) {
14
+ const [loading, setLoading] = useState(false);
15
+ const handleSwitch = async (mode) => {
16
+ if (!sessionId || mode === currentMode || loading)
17
+ return;
18
+ setLoading(true);
19
+ try {
20
+ const res = await fetch(`${apiUrl}/api/session/${sessionId}/mode`, {
21
+ method: 'POST',
22
+ headers: { 'Content-Type': 'application/json' },
23
+ body: JSON.stringify({ mode }),
24
+ });
25
+ if (res.ok) {
26
+ onModeChange?.(mode);
27
+ }
28
+ }
29
+ catch {
30
+ /* silently fail */
31
+ }
32
+ finally {
33
+ setLoading(false);
34
+ }
35
+ };
36
+ return (_jsxs("fieldset", { className: `wingman-mode-switcher ${className}`, "aria-label": "Agent mode", children: [_jsx("legend", { className: "wingman-mode-switcher-legend", children: "Mode" }), MODES.map((m) => (_jsxs("label", { className: `wingman-mode-switcher-option ${currentMode === m.id ? 'wingman-mode-switcher-active' : ''}`, children: [_jsx("input", { type: "radio", name: "wingman-mode", value: m.id, checked: currentMode === m.id, onChange: () => handleSwitch(m.id), disabled: loading || !sessionId, className: "wingman-mode-switcher-radio" }), _jsx("span", { className: "wingman-mode-switcher-icon", children: m.icon }), _jsx("span", { className: "wingman-mode-switcher-label", children: m.label })] }, m.id)))] }));
37
+ }
38
+ //# sourceMappingURL=mode-switcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-switcher.js","sourceRoot":"","sources":["../../src/components/mode-switcher.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAcxC,MAAM,KAAK,GAAG;IACZ,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;IACvD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;IACzC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;CAC3C,CAAC;AAEX,MAAM,UAAU,YAAY,CAAC,EAC3B,WAAW,EACX,SAAS,EACT,MAAM,GAAG,EAAE,EACX,YAAY,EACZ,SAAS,GAAG,EAAE,GACI;IAClB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;QAC1C,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,WAAW,IAAI,OAAO;YAAE,OAAO;QAE1D,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,gBAAgB,SAAS,OAAO,EAAE;gBACjE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;aAC/B,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mBAAmB;QACrB,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,oBAAU,SAAS,EAAE,yBAAyB,SAAS,EAAE,gBAAa,YAAY,aAChF,iBAAQ,SAAS,EAAC,8BAA8B,qBAAc,EAC7D,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,iBAEE,SAAS,EAAE,gCAAgC,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,EAAE,aAEvG,gBACE,IAAI,EAAC,OAAO,EACZ,IAAI,EAAC,cAAc,EACnB,KAAK,EAAE,CAAC,CAAC,EAAE,EACX,OAAO,EAAE,WAAW,KAAK,CAAC,CAAC,EAAE,EAC7B,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAClC,QAAQ,EAAE,OAAO,IAAI,CAAC,SAAS,EAC/B,SAAS,EAAC,6BAA6B,GACvC,EACF,eAAM,SAAS,EAAC,4BAA4B,YAAE,CAAC,CAAC,IAAI,GAAQ,EAC5D,eAAM,SAAS,EAAC,6BAA6B,YAAE,CAAC,CAAC,KAAK,GAAQ,KAbzD,CAAC,CAAC,EAAE,CAcH,CACT,CAAC,IACO,CACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ModelPicker — Dropdown for switching the active model.
3
+ *
4
+ * Fetches available models from /api/models and fires a POST
5
+ * to /api/session/:id/model on selection.
6
+ */
7
+ export interface ModelPickerProps {
8
+ /** Currently active model ID. */
9
+ currentModel: string | null;
10
+ /** Current session ID (required to switch model). */
11
+ sessionId: string | null;
12
+ /** Base URL for the Wingman API. Default: '' (same origin). */
13
+ apiUrl?: string;
14
+ /** Called after a successful model switch. */
15
+ onModelChange?: (model: string) => void;
16
+ className?: string;
17
+ }
18
+ export declare function ModelPicker({ currentModel, sessionId, apiUrl, onModelChange, className, }: ModelPickerProps): import("react/jsx-runtime").JSX.Element | null;
19
+ //# sourceMappingURL=model-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-picker.d.ts","sourceRoot":"","sources":["../../src/components/model-picker.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qDAAqD;IACrD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,wBAAgB,WAAW,CAAC,EAC1B,YAAY,EACZ,SAAS,EACT,MAAW,EACX,aAAa,EACb,SAAc,GACf,EAAE,gBAAgB,kDA0DlB"}
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ModelPicker — Dropdown for switching the active model.
4
+ *
5
+ * Fetches available models from /api/models and fires a POST
6
+ * to /api/session/:id/model on selection.
7
+ */
8
+ import { useEffect, useState } from 'react';
9
+ export function ModelPicker({ currentModel, sessionId, apiUrl = '', onModelChange, className = '', }) {
10
+ const [models, setModels] = useState([]);
11
+ const [loading, setLoading] = useState(false);
12
+ useEffect(() => {
13
+ let cancelled = false;
14
+ fetch(`${apiUrl}/api/models`)
15
+ .then((r) => r.json())
16
+ .then((data) => {
17
+ if (!cancelled && Array.isArray(data.models)) {
18
+ setModels(data.models);
19
+ }
20
+ })
21
+ .catch(() => { });
22
+ return () => { cancelled = true; };
23
+ }, [apiUrl]);
24
+ const handleChange = async (e) => {
25
+ const model = e.target.value;
26
+ if (!sessionId || !model || model === currentModel)
27
+ return;
28
+ setLoading(true);
29
+ try {
30
+ const res = await fetch(`${apiUrl}/api/session/${sessionId}/model`, {
31
+ method: 'POST',
32
+ headers: { 'Content-Type': 'application/json' },
33
+ body: JSON.stringify({ model }),
34
+ });
35
+ if (res.ok) {
36
+ onModelChange?.(model);
37
+ }
38
+ }
39
+ catch {
40
+ /* silently fail */
41
+ }
42
+ finally {
43
+ setLoading(false);
44
+ }
45
+ };
46
+ if (models.length === 0)
47
+ return null;
48
+ return (_jsx("div", { className: `wingman-model-picker ${className}`, children: _jsxs("select", { className: "wingman-model-picker-select", value: currentModel ?? '', onChange: handleChange, disabled: loading || !sessionId, "aria-label": "Select model", children: [!currentModel && _jsx("option", { value: "", children: "Select model\u2026" }), models.map((m) => (_jsx("option", { value: m.id, children: m.name }, m.id)))] }) }));
49
+ }
50
+ //# sourceMappingURL=model-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../../src/components/model-picker.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAmBnD,MAAM,UAAU,WAAW,CAAC,EAC1B,YAAY,EACZ,SAAS,EACT,MAAM,GAAG,EAAE,EACX,aAAa,EACb,SAAS,GAAG,EAAE,GACG;IACjB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC,CAAC;IACxD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,CAAC,GAAG,MAAM,aAAa,CAAC;aAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACrB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7C,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,GAAiD,CAAC,CAAC,CAAC;QAClE,OAAO,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,YAAY,GAAG,KAAK,EAAE,CAAuC,EAAE,EAAE;QACrE,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,YAAY;YAAE,OAAO;QAE3D,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,gBAAgB,SAAS,QAAQ,EAAE;gBAClE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;aAChC,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mBAAmB;QACrB,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,CACL,cAAK,SAAS,EAAE,wBAAwB,SAAS,EAAE,YACjD,kBACE,SAAS,EAAC,6BAA6B,EACvC,KAAK,EAAE,YAAY,IAAI,EAAE,EACzB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,OAAO,IAAI,CAAC,SAAS,gBACpB,cAAc,aAExB,CAAC,YAAY,IAAI,iBAAQ,KAAK,EAAC,EAAE,mCAAuB,EACxD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,iBAAmB,KAAK,EAAE,CAAC,CAAC,EAAE,YAC3B,CAAC,CAAC,IAAI,IADI,CAAC,CAAC,EAAE,CAER,CACV,CAAC,IACK,GACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * ThinkingBlock — Collapsible reasoning/thinking content.
3
+ */
4
+ export interface ThinkingBlockProps {
5
+ content: string;
6
+ defaultOpen?: boolean;
7
+ className?: string;
8
+ }
9
+ export declare function ThinkingBlock({ content, defaultOpen, className, }: ThinkingBlockProps): import("react/jsx-runtime").JSX.Element | null;
10
+ //# sourceMappingURL=thinking-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking-block.d.ts","sourceRoot":"","sources":["../../src/components/thinking-block.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,WAAmB,EACnB,SAAc,GACf,EAAE,kBAAkB,kDAyBpB"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ThinkingBlock — Collapsible reasoning/thinking content.
4
+ */
5
+ import { useState } from 'react';
6
+ export function ThinkingBlock({ content, defaultOpen = false, className = '', }) {
7
+ const [isOpen, setIsOpen] = useState(defaultOpen);
8
+ if (!content)
9
+ return null;
10
+ return (_jsxs("div", { className: `wingman-thinking ${className}`, children: [_jsxs("button", { className: "wingman-thinking-toggle", type: "button", onClick: () => setIsOpen(!isOpen), "aria-expanded": isOpen, children: [_jsx("span", { className: "wingman-thinking-icon", children: isOpen ? '▾' : '▸' }), _jsx("span", { className: "wingman-thinking-label", children: "Thinking" })] }), isOpen && (_jsx("div", { className: "wingman-thinking-content", children: _jsx("pre", { children: content }) }))] }));
11
+ }
12
+ //# sourceMappingURL=thinking-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking-block.js","sourceRoot":"","sources":["../../src/components/thinking-block.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAQxC,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,WAAW,GAAG,KAAK,EACnB,SAAS,GAAG,EAAE,GACK;IACnB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAElD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,CACL,eAAK,SAAS,EAAE,oBAAoB,SAAS,EAAE,aAC7C,kBACE,SAAS,EAAC,yBAAyB,EACnC,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,mBAClB,MAAM,aAErB,eAAM,SAAS,EAAC,uBAAuB,YACpC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GACd,EACP,eAAM,SAAS,EAAC,wBAAwB,yBAAgB,IACjD,EACR,MAAM,IAAI,CACT,cAAK,SAAS,EAAC,0BAA0B,YACvC,wBAAM,OAAO,GAAO,GAChB,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * TokenUsage — Display input/output/cache token counts.
3
+ *
4
+ * Reads usage data from ChatProvider state.
5
+ */
6
+ import type { UsageData } from '@wingmanjs/core';
7
+ export interface TokenUsageProps {
8
+ usage: UsageData | null;
9
+ className?: string;
10
+ }
11
+ export declare function TokenUsage({ usage, className }: TokenUsageProps): import("react/jsx-runtime").JSX.Element | null;
12
+ //# sourceMappingURL=token-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-usage.d.ts","sourceRoot":"","sources":["../../src/components/token-usage.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,SAAc,EAAE,EAAE,eAAe,kDAkBpE"}
@@ -0,0 +1,14 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ function formatTokenCount(n) {
3
+ if (n >= 1_000_000)
4
+ return `${(n / 1_000_000).toFixed(1)}M`;
5
+ if (n >= 1_000)
6
+ return `${(n / 1_000).toFixed(1)}K`;
7
+ return String(n);
8
+ }
9
+ export function TokenUsage({ usage, className = '' }) {
10
+ if (!usage)
11
+ return null;
12
+ return (_jsxs("div", { className: `wingman-token-usage ${className}`, children: [_jsxs("span", { className: "wingman-token-usage-item", title: "Input tokens", children: ["\u2191 ", formatTokenCount(usage.inputTokens)] }), _jsxs("span", { className: "wingman-token-usage-item", title: "Output tokens", children: ["\u2193 ", formatTokenCount(usage.outputTokens)] }), usage.cacheReadTokens != null && usage.cacheReadTokens > 0 && (_jsxs("span", { className: "wingman-token-usage-item", title: "Cache read tokens", children: ["\u26A1 ", formatTokenCount(usage.cacheReadTokens)] }))] }));
13
+ }
14
+ //# sourceMappingURL=token-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-usage.js","sourceRoot":"","sources":["../../src/components/token-usage.tsx"],"names":[],"mappings":";AAcA,SAAS,gBAAgB,CAAC,CAAS;IACjC,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,GAAG,EAAE,EAAmB;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,OAAO,CACL,eAAK,SAAS,EAAE,uBAAuB,SAAS,EAAE,aAChD,gBAAM,SAAS,EAAC,0BAA0B,EAAC,KAAK,EAAC,cAAc,wBAC1D,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,IACjC,EACP,gBAAM,SAAS,EAAC,0BAA0B,EAAC,KAAK,EAAC,eAAe,wBAC3D,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,IAClC,EACN,KAAK,CAAC,eAAe,IAAI,IAAI,IAAI,KAAK,CAAC,eAAe,GAAG,CAAC,IAAI,CAC7D,gBAAM,SAAS,EAAC,0BAA0B,EAAC,KAAK,EAAC,mBAAmB,wBAC/D,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC,IACrC,CACR,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * ToolStatus — Inline tool execution status display.
3
+ *
4
+ * Shows a spinner while running → checkmark on completion.
5
+ */
6
+ import type { ToolExecution } from '@wingmanjs/core';
7
+ export interface ToolStatusProps {
8
+ tool: ToolExecution;
9
+ className?: string;
10
+ }
11
+ export declare function ToolStatus({ tool, className }: ToolStatusProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=tool-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-status.d.ts","sourceRoot":"","sources":["../../src/components/tool-status.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,SAAc,EAAE,EAAE,eAAe,2CAiCnE"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** Format a tool name for display (snake_case → Title Case). */
3
+ function formatToolName(name) {
4
+ return name
5
+ .replace(/_/g, ' ')
6
+ .replace(/\b\w/g, (c) => c.toUpperCase());
7
+ }
8
+ /** Calculate duration in seconds. */
9
+ function getDuration(tool) {
10
+ if (!tool.completedAt)
11
+ return null;
12
+ const ms = tool.completedAt - tool.startedAt;
13
+ return `${(ms / 1000).toFixed(1)}s`;
14
+ }
15
+ export function ToolStatus({ tool, className = '' }) {
16
+ const isRunning = tool.status === 'running';
17
+ const duration = getDuration(tool);
18
+ return (_jsxs("div", { className: `wingman-tool-status wingman-tool-status-${tool.status} ${className}`, "data-status": tool.status, children: [_jsx("span", { className: "wingman-tool-status-icon", children: isRunning ? (_jsx("span", { className: "wingman-spinner", "aria-label": "Running", children: "\u27F3" })) : tool.status === 'error' ? (_jsx("span", { "aria-label": "Error", children: "\u2717" })) : (_jsx("span", { "aria-label": "Complete", children: "\u2713" })) }), _jsx("span", { className: "wingman-tool-status-name", children: formatToolName(tool.toolName) }), tool.result && !isRunning && (_jsxs("span", { className: "wingman-tool-status-result", children: ["\u00B7 ", tool.result.slice(0, 100)] })), duration && (_jsxs("span", { className: "wingman-tool-status-duration", children: ["(", duration, ")"] }))] }));
19
+ }
20
+ //# sourceMappingURL=tool-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-status.js","sourceRoot":"","sources":["../../src/components/tool-status.tsx"],"names":[],"mappings":";AAcA,gEAAgE;AAChE,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,qCAAqC;AACrC,SAAS,WAAW,CAAC,IAAmB;IACtC,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;IAC7C,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE,EAAmB;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAEnC,OAAO,CACL,eACE,SAAS,EAAE,2CAA2C,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,iBACnE,IAAI,CAAC,MAAM,aAExB,eAAM,SAAS,EAAC,0BAA0B,YACvC,SAAS,CAAC,CAAC,CAAC,CACX,eAAM,SAAS,EAAC,iBAAiB,gBAAY,SAAS,uBAAS,CAChE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAC5B,6BAAiB,OAAO,uBAAS,CAClC,CAAC,CAAC,CAAC,CACF,6BAAiB,UAAU,uBAAS,CACrC,GACI,EACP,eAAM,SAAS,EAAC,0BAA0B,YACvC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,GACzB,EACN,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAC5B,gBAAM,SAAS,EAAC,4BAA4B,wBACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IACvB,CACR,EACA,QAAQ,IAAI,CACX,gBAAM,SAAS,EAAC,8BAA8B,kBAC1C,QAAQ,SACL,CACR,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * WelcomeScreen — Default empty-state greeting.
3
+ */
4
+ export interface WelcomeScreenProps {
5
+ title?: string;
6
+ message?: string;
7
+ suggestions?: string[];
8
+ onSuggestionClick?: (suggestion: string) => void;
9
+ className?: string;
10
+ }
11
+ export declare function WelcomeScreen({ title, message, suggestions, onSuggestionClick, className, }: WelcomeScreenProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=welcome-screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome-screen.d.ts","sourceRoot":"","sources":["../../src/components/welcome-screen.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAiB,EACjB,OAA2B,EAC3B,WAAgB,EAChB,iBAAiB,EACjB,SAAc,GACf,EAAE,kBAAkB,2CAoCpB"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function WelcomeScreen({ title = 'Wingman', message = 'How can I help?', suggestions = [], onSuggestionClick, className = '', }) {
3
+ return (_jsxs("div", { className: `wingman-welcome ${className}`, children: [_jsx("div", { className: "wingman-welcome-icon", children: _jsx("svg", { width: "48", height: "48", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" }) }) }), _jsx("h1", { className: "wingman-welcome-title", children: title }), _jsx("p", { className: "wingman-welcome-message", children: message }), suggestions.length > 0 && (_jsx("div", { className: "wingman-welcome-suggestions", children: suggestions.map((suggestion, i) => (_jsx("button", { type: "button", className: "wingman-welcome-suggestion", onClick: () => onSuggestionClick?.(suggestion), children: suggestion }, i))) }))] }));
4
+ }
5
+ //# sourceMappingURL=welcome-screen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome-screen.js","sourceRoot":"","sources":["../../src/components/welcome-screen.tsx"],"names":[],"mappings":";AAcA,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,GAAG,SAAS,EACjB,OAAO,GAAG,iBAAiB,EAC3B,WAAW,GAAG,EAAE,EAChB,iBAAiB,EACjB,SAAS,GAAG,EAAE,GACK;IACnB,OAAO,CACL,eAAK,SAAS,EAAE,mBAAmB,SAAS,EAAE,aAC5C,cAAK,SAAS,EAAC,sBAAsB,YAEnC,cACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,YAEtB,eAAM,CAAC,EAAC,+DAA+D,GAAG,GACtE,GACF,EACN,aAAI,SAAS,EAAC,uBAAuB,YAAE,KAAK,GAAM,EAClD,YAAG,SAAS,EAAC,yBAAyB,YAAE,OAAO,GAAK,EACnD,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACzB,cAAK,SAAS,EAAC,6BAA6B,YACzC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,CAClC,iBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,YAE7C,UAAU,IALN,CAAC,CAMC,CACV,CAAC,GACE,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @wingman/react — Public API surface.
3
+ *
4
+ * React hooks and components for building chat UIs
5
+ * on top of the GitHub Copilot SDK via Wingman.
6
+ */
7
+ export { ChatProvider, useChat } from './providers/chat-provider.js';
8
+ export type { ChatProviderProps, ChatState, ChatContextValue } from './providers/chat-provider.js';
9
+ export { ThemeProvider, useTheme } from './providers/theme-provider.js';
10
+ export type { ThemeProviderProps, ThemeContextValue, WingmanTheme, WingmanThemeColors, } from './providers/theme-provider.js';
11
+ export { ChatMessage } from './components/chat-message.js';
12
+ export type { ChatMessageProps } from './components/chat-message.js';
13
+ export { ChatInput } from './components/chat-input.js';
14
+ export type { ChatInputProps } from './components/chat-input.js';
15
+ export { ToolStatus } from './components/tool-status.js';
16
+ export type { ToolStatusProps } from './components/tool-status.js';
17
+ export { ThinkingBlock } from './components/thinking-block.js';
18
+ export type { ThinkingBlockProps } from './components/thinking-block.js';
19
+ export { MarkdownRenderer } from './components/markdown-renderer.js';
20
+ export type { MarkdownRendererProps } from './components/markdown-renderer.js';
21
+ export { WelcomeScreen } from './components/welcome-screen.js';
22
+ export type { WelcomeScreenProps } from './components/welcome-screen.js';
23
+ export { TokenUsage } from './components/token-usage.js';
24
+ export type { TokenUsageProps } from './components/token-usage.js';
25
+ export { ModelPicker } from './components/model-picker.js';
26
+ export type { ModelPickerProps } from './components/model-picker.js';
27
+ export { ModeSwitcher } from './components/mode-switcher.js';
28
+ export type { ModeSwitcherProps } from './components/mode-switcher.js';
29
+ export { DebugPanel } from './components/debug-panel.js';
30
+ export type { DebugPanelProps, DebugEvent } from './components/debug-panel.js';
31
+ export declare const VERSION = "0.1.0";
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACrE,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEnG,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACxE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,YAAY,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAQ/E,eAAO,MAAM,OAAO,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @wingman/react — Public API surface.
3
+ *
4
+ * React hooks and components for building chat UIs
5
+ * on top of the GitHub Copilot SDK via Wingman.
6
+ */
7
+ // Provider + hooks
8
+ export { ChatProvider, useChat } from './providers/chat-provider.js';
9
+ export { ThemeProvider, useTheme } from './providers/theme-provider.js';
10
+ // Components
11
+ export { ChatMessage } from './components/chat-message.js';
12
+ export { ChatInput } from './components/chat-input.js';
13
+ export { ToolStatus } from './components/tool-status.js';
14
+ export { ThinkingBlock } from './components/thinking-block.js';
15
+ export { MarkdownRenderer } from './components/markdown-renderer.js';
16
+ export { WelcomeScreen } from './components/welcome-screen.js';
17
+ // Phase 2 components
18
+ export { TokenUsage } from './components/token-usage.js';
19
+ export { ModelPicker } from './components/model-picker.js';
20
+ export { ModeSwitcher } from './components/mode-switcher.js';
21
+ export { DebugPanel } from './components/debug-panel.js';
22
+ // Phase 3+ components (placeholders)
23
+ // export { ContextHealth } from './components/context-health.js';
24
+ // export { QuotaBar } from './components/quota-bar.js';
25
+ // export { MCPStatus } from './components/mcp-status.js';
26
+ // export { PermissionDialog } from './components/permission-dialog.js';
27
+ export const VERSION = '0.1.0';
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAQxE,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG3D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAG/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAG/D,qBAAqB;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzD,qCAAqC;AACrC,kEAAkE;AAClE,wDAAwD;AACxD,0DAA0D;AAC1D,wEAAwE;AAExE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}