@pantheon-systems/p1-ai-chat 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.
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { ChatMessage as ChatMessageType } from './types.js';
3
+ interface Props {
4
+ message: ChatMessageType;
5
+ }
6
+ export declare function ChatMessage({ message }: Props): React.ReactElement;
7
+ export {};
8
+ //# sourceMappingURL=ChatMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatMessage.d.ts","sourceRoot":"","sources":["../src/ChatMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjE,UAAU,KAAK;IACb,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,YAAY,CA2GlE"}
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import ReactMarkdown from 'react-markdown';
3
+ import { Badge, Icon, UtilityButton } from '@pantheon-systems/pds-toolkit-react';
4
+ export function ChatMessage({ message }) {
5
+ const isUser = message.role === 'user';
6
+ return (_jsxs("div", { style: {
7
+ display: 'flex',
8
+ flexDirection: 'column',
9
+ alignItems: isUser ? 'flex-end' : 'flex-start',
10
+ gap: 4,
11
+ marginBottom: 12,
12
+ }, children: [!isUser && (message.content || message.isStreaming) && (_jsx(Badge, { color: "discovery", label: _jsxs(_Fragment, { children: [_jsx(Icon, { iconName: "sparkles", iconSize: "xs", verticalAlign: "-0.1em" }), ' ', "AI"] }), size: "xs" })), message.toolCalls && message.toolCalls.length > 0 && (_jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 3, width: '100%' }, children: message.toolCalls.map((tc, i) => (_jsx(Badge, { color: tc.status === 'running' ? 'sky' : 'gaia', label: _jsxs(_Fragment, { children: [_jsx(Icon, { iconName: tc.status === 'running' ? 'circleNotch' : 'circleCheck', iconSize: "xs", verticalAlign: "-0.1em" }), ' ', tc.name] }), size: "xs" }, i))) })), !isUser && message.isStreaming && !message.content && (_jsx(UtilityButton, { label: "Thinking\u2026", iconName: "sparkles", isWorking: true })), message.content && (_jsx("div", { style: {
13
+ maxWidth: '90%',
14
+ padding: '8px 12px',
15
+ borderRadius: isUser ? '12px 12px 4px 12px' : '12px 12px 12px 4px',
16
+ backgroundColor: isUser ? 'var(--pds-color-bg-reverse)' : 'var(--pds-color-bg-default-secondary)',
17
+ color: isUser ? 'var(--pds-color-fg-reverse)' : 'var(--pds-color-fg-default)',
18
+ fontSize: 13,
19
+ lineHeight: 1.5,
20
+ wordBreak: 'break-word',
21
+ }, children: isUser ? (message.content) : (_jsx("div", { style: { marginBottom: -8 }, children: _jsx(ReactMarkdown, { components: {
22
+ p: ({ children }) => _jsx("p", { style: { margin: '0 0 8px 0', lineHeight: 1.6 }, children: children }),
23
+ pre: ({ children }) => _jsx("pre", { style: { background: 'var(--pds-color-bg-default-secondary)', padding: '8px', borderRadius: 4, overflow: 'auto', fontSize: 12, margin: '0 0 8px 0' }, children: children }),
24
+ code: ({ children, className }) => className
25
+ ? _jsx("code", { className: className, children: children })
26
+ : _jsx("code", { style: { background: 'var(--pds-color-bg-default-secondary)', padding: '1px 4px', borderRadius: 3, fontSize: 12, fontFamily: 'monospace' }, children: children }),
27
+ ul: ({ children }) => _jsx("ul", { style: { margin: '0 0 8px 0', paddingLeft: 20 }, children: children }),
28
+ ol: ({ children }) => _jsx("ol", { style: { margin: '0 0 8px 0', paddingLeft: 20 }, children: children }),
29
+ li: ({ children }) => _jsx("li", { style: { marginBottom: 2 }, children: children }),
30
+ h1: ({ children }) => _jsx("h1", { style: { fontSize: 16, fontWeight: 600, margin: '0 0 8px 0' }, children: children }),
31
+ h2: ({ children }) => _jsx("h2", { style: { fontSize: 15, fontWeight: 600, margin: '0 0 8px 0' }, children: children }),
32
+ h3: ({ children }) => _jsx("h3", { style: { fontSize: 14, fontWeight: 600, margin: '0 0 8px 0' }, children: children }),
33
+ strong: ({ children }) => _jsx("strong", { style: { fontWeight: 600 }, children: children }),
34
+ blockquote: ({ children }) => _jsx("blockquote", { style: { borderLeft: '3px solid var(--pds-color-border-separator)', paddingLeft: 8, margin: '0 0 8px 0', color: 'var(--pds-color-fg-default-secondary)' }, children: children }),
35
+ }, children: message.content }) })) })), message.error && (_jsx(Badge, { color: "critical", label: `Error: ${message.error}`, size: "s" }))] }));
36
+ }
37
+ //# sourceMappingURL=ChatMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatMessage.js","sourceRoot":"","sources":["../src/ChatMessage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { AIChatPluginOptions } from './types.js';
3
+ interface Props {
4
+ options: AIChatPluginOptions;
5
+ }
6
+ export declare function ChatPanel({ options }: Props): React.ReactElement;
7
+ export {};
8
+ //# sourceMappingURL=ChatPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../src/ChatPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAK9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,UAAU,KAAK;IACb,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,YAAY,CA2JhE"}
@@ -0,0 +1,78 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef, useEffect, useCallback } from 'react';
3
+ import { Button, Icon, Textarea, UtilityButton } from '@pantheon-systems/pds-toolkit-react';
4
+ import { useP1Puck, useP1Auth } from '@pantheon-systems/puck-css';
5
+ import { useAgentChat } from './useAgentChat.js';
6
+ import { ChatMessage } from './ChatMessage.js';
7
+ export function ChatPanel({ options }) {
8
+ const scrollRef = useRef(null);
9
+ const textareaRef = useRef(null);
10
+ const css = useP1Puck();
11
+ const { token } = useP1Auth();
12
+ // Stable refs so getAgentId/getContext don't change on every render
13
+ const cssRef = useRef(css);
14
+ cssRef.current = css;
15
+ const tokenRef = useRef(token);
16
+ tokenRef.current = token;
17
+ const defaultGetAgentId = useCallback(() => {
18
+ const { userId, siteId, branchId, currentDocument } = cssRef.current;
19
+ const docSlug = (currentDocument?.path ?? '').replace(/^\//, '').replace(/\//g, '-') || 'root';
20
+ return `${userId}-${siteId}-${branchId}-${docSlug}`;
21
+ }, []);
22
+ const getContext = useCallback(() => ({
23
+ siteId: cssRef.current.siteId,
24
+ branchId: cssRef.current.branchId,
25
+ documentPath: cssRef.current.currentDocument?.path ?? '',
26
+ documentId: cssRef.current.currentDocument?.id ?? '',
27
+ token: tokenRef.current ?? '',
28
+ }), []);
29
+ const { messages, input, setInput, submit, isLoading, clearMessages } = useAgentChat({
30
+ agentUrl: options.agentUrl,
31
+ getAgentId: options.getAgentId ?? defaultGetAgentId,
32
+ getContext,
33
+ });
34
+ // Auto-scroll to bottom on new messages
35
+ useEffect(() => {
36
+ if (scrollRef.current) {
37
+ scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
38
+ }
39
+ }, [messages]);
40
+ // Refocus the input after loading completes
41
+ useEffect(() => {
42
+ if (!isLoading) {
43
+ textareaRef.current?.focus();
44
+ }
45
+ }, [isLoading]);
46
+ const handleKeyDown = (e) => {
47
+ if (e.key === 'Enter' && !e.shiftKey) {
48
+ e.preventDefault();
49
+ void submit();
50
+ }
51
+ };
52
+ return (_jsxs("div", { style: {
53
+ display: 'flex',
54
+ flexDirection: 'column',
55
+ height: '100%',
56
+ }, children: [_jsxs("div", { style: {
57
+ padding: '12px 16px',
58
+ borderBottom: '1px solid var(--pds-color-border-separator)',
59
+ display: 'flex',
60
+ alignItems: 'center',
61
+ justifyContent: 'space-between',
62
+ flexShrink: 0,
63
+ }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [_jsx(Icon, { iconName: "sparkles", iconSize: "m" }), _jsxs("div", { children: [_jsx("div", { style: { fontSize: 14, fontWeight: 600, color: 'var(--pds-color-fg-default)' }, children: "AI Page Builder" }), _jsx("div", { style: { fontSize: 11, color: 'var(--pds-color-fg-default-secondary)', marginTop: 2 }, children: "Describe what you want to build or change" })] })] }), messages.length > 0 && (_jsx(UtilityButton, { label: "Clear", iconName: "trash", isCritical: true, onClick: clearMessages }))] }), _jsxs("div", { ref: scrollRef, style: {
64
+ flex: 1,
65
+ overflowY: 'auto',
66
+ padding: '16px',
67
+ }, children: [messages.length === 0 && (_jsxs("div", { style: {
68
+ textAlign: 'center',
69
+ color: 'var(--pds-color-fg-default-secondary)',
70
+ fontSize: 13,
71
+ paddingTop: 32,
72
+ }, children: [_jsx("div", { style: { marginBottom: 8, display: 'flex', justifyContent: 'center' }, children: _jsx(Icon, { iconName: "sparkles", iconSize: "xl" }) }), "Try: \"Build me a page about the world's fastest helicopters\""] })), messages.map(msg => (_jsx(ChatMessage, { message: msg }, msg.id)))] }), _jsxs("div", { style: {
73
+ padding: '12px 16px',
74
+ borderTop: '1px solid var(--pds-color-border-separator)',
75
+ flexShrink: 0,
76
+ }, children: [_jsx(Textarea, { id: "ai-chat-input", label: "Message", showLabel: false, placeholder: "Describe what you want to build or change\u2026", value: input, onChange: e => setInput(e.target.value), textareaProps: { onKeyDown: handleKeyDown }, disabled: isLoading, rows: 2, isResizable: false, ref: textareaRef }), _jsx("div", { style: { display: 'flex', justifyContent: 'flex-end', marginTop: 8 }, children: _jsx(Button, { label: "Send", variant: "secondary", size: "s", displayType: "icon-end", iconName: "paperPlane", onClick: () => void submit(), disabled: !input.trim(), isWorking: isLoading, tooltipText: isLoading ? 'Sending…' : undefined }) }), _jsx("div", { style: { fontSize: 11, color: 'var(--pds-color-fg-default-secondary)', marginTop: 6 }, children: "Enter to send \u00B7 Shift+Enter for newline" })] })] }));
77
+ }
78
+ //# sourceMappingURL=ChatPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatPanel.js","sourceRoot":"","sources":["../src/ChatPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import type { AIChatPluginOptions } from './types.js';
3
+ export type { AIChatPluginOptions, ChatMessage, ChatContext, ToolCallStatus } from './types.js';
4
+ export interface PuckPlugin {
5
+ name: string;
6
+ label?: string;
7
+ icon?: React.ReactNode;
8
+ render: () => React.ReactElement;
9
+ mobilePanelHeight?: 'toggle' | 'full';
10
+ }
11
+ export declare function createAIChatPlugin(options: AIChatPluginOptions): PuckPlugin;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGhG,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,MAAM,EAAE,MAAM,KAAK,CAAC,YAAY,CAAC;IACjC,iBAAiB,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CACvC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,UAAU,CAQ3E"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { ChatPanel } from './ChatPanel.js';
3
+ export function createAIChatPlugin(options) {
4
+ return {
5
+ name: 'ai-chat',
6
+ label: 'AI Builder',
7
+ icon: React.createElement('span', { style: { fontSize: 16 } }, '✨'),
8
+ render: () => React.createElement(ChatPanel, { options }),
9
+ mobilePanelHeight: 'toggle',
10
+ };
11
+ }
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAc3C,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,OAAO;QACL,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;QACnE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC;QACzD,iBAAiB,EAAE,QAAQ;KAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,45 @@
1
+ export interface ChatContext {
2
+ siteId: string;
3
+ branchId: string;
4
+ documentPath: string;
5
+ documentId?: string;
6
+ token: string;
7
+ }
8
+ export interface ChatMessage {
9
+ id: string;
10
+ role: 'user' | 'assistant';
11
+ content: string;
12
+ toolCalls?: ToolCallStatus[];
13
+ error?: string;
14
+ isStreaming?: boolean;
15
+ }
16
+ export interface ToolCallStatus {
17
+ name: string;
18
+ input?: unknown;
19
+ result?: unknown;
20
+ status: 'running' | 'done' | 'error';
21
+ }
22
+ export interface AIChatPluginOptions {
23
+ /** Base URL of the ChatAgent Cloudflare Worker, e.g. "https://p1-chatbot-agent.workers.dev" */
24
+ agentUrl: string;
25
+ /** Returns the Durable Object key. Defaults to `${userId}-${siteId}`. Override to change history scoping. */
26
+ getAgentId?: () => string;
27
+ }
28
+ export type ServerMessage = {
29
+ type: 'token';
30
+ content: string;
31
+ } | {
32
+ type: 'done';
33
+ } | {
34
+ type: 'error';
35
+ error: string;
36
+ } | {
37
+ type: 'tool_start';
38
+ toolName: string;
39
+ toolInput?: unknown;
40
+ } | {
41
+ type: 'tool_end';
42
+ toolName: string;
43
+ toolResult?: unknown;
44
+ };
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,+FAA+F;IAC/F,QAAQ,EAAE,MAAM,CAAC;IACjB,6GAA6G;IAC7G,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;CAC3B;AAGD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import type { ChatMessage, ChatContext } from './types.js';
2
+ export interface UseAgentChatOptions {
3
+ agentUrl: string;
4
+ getAgentId: () => string;
5
+ getContext: () => ChatContext;
6
+ }
7
+ export interface UseAgentChatReturn {
8
+ messages: ChatMessage[];
9
+ input: string;
10
+ setInput: (value: string) => void;
11
+ submit: () => void;
12
+ isLoading: boolean;
13
+ clearMessages: () => void;
14
+ }
15
+ export declare function useAgentChat({ agentUrl, getAgentId, getContext }: UseAgentChatOptions): UseAgentChatReturn;
16
+ //# sourceMappingURL=useAgentChat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAgentChat.d.ts","sourceRoot":"","sources":["../src/useAgentChat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAiC,WAAW,EAAE,MAAM,YAAY,CAAC;AAM1F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,mBAAmB,GAAG,kBAAkB,CAyK1G"}
@@ -0,0 +1,154 @@
1
+ import { useState, useRef, useCallback, useEffect } from 'react';
2
+ function makeId() {
3
+ return Math.random().toString(36).slice(2, 9);
4
+ }
5
+ export function useAgentChat({ agentUrl, getAgentId, getContext }) {
6
+ const [messages, setMessages] = useState([]);
7
+ const [input, setInput] = useState('');
8
+ const [isLoading, setIsLoading] = useState(false);
9
+ const wsRef = useRef(null);
10
+ const currentAssistantIdRef = useRef(null);
11
+ const initialClearSentRef = useRef(false);
12
+ const getOrCreateWs = useCallback(() => {
13
+ return new Promise((resolve, reject) => {
14
+ if (wsRef.current?.readyState === WebSocket.OPEN) {
15
+ resolve(wsRef.current);
16
+ return;
17
+ }
18
+ const agentId = encodeURIComponent(getAgentId());
19
+ const wsUrl = `${agentUrl.replace(/^http/, 'ws').replace(/\/$/, '')}/agents/chat-agent/${agentId}`;
20
+ const ws = new WebSocket(wsUrl);
21
+ wsRef.current = ws;
22
+ ws.onopen = () => {
23
+ // Clear the DO's persisted history on the first connection after mount
24
+ // so each page load starts with a clean slate.
25
+ if (!initialClearSentRef.current) {
26
+ initialClearSentRef.current = true;
27
+ ws.send(JSON.stringify({ type: 'clear' }));
28
+ }
29
+ resolve(ws);
30
+ };
31
+ ws.onerror = () => reject(new Error('WebSocket connection failed'));
32
+ ws.onclose = () => {
33
+ wsRef.current = null;
34
+ // If a response was in-flight when the connection dropped, surface the error
35
+ const id = currentAssistantIdRef.current;
36
+ if (id) {
37
+ setMessages(prev => prev.map(m => m.id === id ? { ...m, error: 'Connection lost', isStreaming: false } : m));
38
+ currentAssistantIdRef.current = null;
39
+ setIsLoading(false);
40
+ }
41
+ };
42
+ ws.onmessage = (event) => {
43
+ let msg;
44
+ try {
45
+ msg = JSON.parse(event.data);
46
+ }
47
+ catch {
48
+ return;
49
+ }
50
+ switch (msg.type) {
51
+ case 'token':
52
+ setMessages(prev => {
53
+ const id = currentAssistantIdRef.current;
54
+ if (!id)
55
+ return prev;
56
+ return prev.map(m => m.id === id
57
+ ? { ...m, content: m.content + msg.content, isStreaming: true }
58
+ : m);
59
+ });
60
+ break;
61
+ case 'done':
62
+ setMessages(prev => {
63
+ const id = currentAssistantIdRef.current;
64
+ if (!id)
65
+ return prev;
66
+ return prev.map(m => m.id === id ? { ...m, isStreaming: false } : m);
67
+ });
68
+ currentAssistantIdRef.current = null;
69
+ setIsLoading(false);
70
+ break;
71
+ case 'error':
72
+ setMessages(prev => {
73
+ const id = currentAssistantIdRef.current;
74
+ if (!id)
75
+ return prev;
76
+ return prev.map(m => m.id === id ? { ...m, error: msg.error, isStreaming: false } : m);
77
+ });
78
+ currentAssistantIdRef.current = null;
79
+ setIsLoading(false);
80
+ break;
81
+ case 'tool_start':
82
+ setMessages(prev => {
83
+ const id = currentAssistantIdRef.current;
84
+ if (!id)
85
+ return prev;
86
+ return prev.map(m => {
87
+ if (m.id !== id)
88
+ return m;
89
+ const toolCall = { name: msg.toolName, input: msg.toolInput, status: 'running' };
90
+ return { ...m, toolCalls: [...(m.toolCalls ?? []), toolCall] };
91
+ });
92
+ });
93
+ break;
94
+ case 'tool_end':
95
+ setMessages(prev => {
96
+ const id = currentAssistantIdRef.current;
97
+ if (!id)
98
+ return prev;
99
+ return prev.map(m => {
100
+ if (m.id !== id)
101
+ return m;
102
+ const toolCalls = (m.toolCalls ?? []).map(tc => tc.name === msg.toolName && tc.status === 'running'
103
+ ? { ...tc, result: msg.toolResult, status: 'done' }
104
+ : tc);
105
+ return { ...m, toolCalls };
106
+ });
107
+ });
108
+ break;
109
+ }
110
+ };
111
+ });
112
+ }, [agentUrl, getAgentId]);
113
+ const submit = useCallback(async () => {
114
+ const text = input.trim();
115
+ if (!text || isLoading)
116
+ return;
117
+ setInput('');
118
+ setIsLoading(true);
119
+ // Add user message
120
+ const userMsg = { id: makeId(), role: 'user', content: text };
121
+ setMessages(prev => [...prev, userMsg]);
122
+ // Add placeholder assistant message
123
+ const assistantId = makeId();
124
+ currentAssistantIdRef.current = assistantId;
125
+ setMessages(prev => [...prev, { id: assistantId, role: 'assistant', content: '', isStreaming: true }]);
126
+ try {
127
+ const ws = await getOrCreateWs();
128
+ ws.send(JSON.stringify({
129
+ type: 'chat',
130
+ message: text,
131
+ context: getContext(),
132
+ }));
133
+ }
134
+ catch {
135
+ setMessages(prev => prev.map(m => m.id === assistantId ? { ...m, error: 'Connection failed', isStreaming: false } : m));
136
+ currentAssistantIdRef.current = null;
137
+ setIsLoading(false);
138
+ }
139
+ }, [input, isLoading, getContext, getOrCreateWs]);
140
+ // Clean up WebSocket on unmount
141
+ useEffect(() => {
142
+ return () => {
143
+ wsRef.current?.close();
144
+ };
145
+ }, []);
146
+ const clearMessages = useCallback(() => {
147
+ setMessages([]);
148
+ if (wsRef.current?.readyState === WebSocket.OPEN) {
149
+ wsRef.current.send(JSON.stringify({ type: 'clear' }));
150
+ }
151
+ }, []);
152
+ return { messages, input, setInput, submit, isLoading, clearMessages };
153
+ }
154
+ //# sourceMappingURL=useAgentChat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAgentChat.js","sourceRoot":"","sources":["../src/useAgentChat.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@pantheon-systems/p1-ai-chat",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.js",
13
+ "default": "./dist/index.js",
14
+ "types": "./dist/index.d.ts"
15
+ }
16
+ },
17
+ "publishConfig": {
18
+ "access": "public",
19
+ "registry": "https://registry.npmjs.org/",
20
+ "provenance": false
21
+ },
22
+ "scripts": {
23
+ "build": "tsc",
24
+ "dev": "tsc --watch",
25
+ "type-check": "tsc --noEmit",
26
+ "prepublishOnly": "pnpm run build"
27
+ },
28
+ "dependencies": {
29
+ "react-markdown": "^10.1.0"
30
+ },
31
+ "peerDependencies": {
32
+ "@pantheon-systems/pds-toolkit-react": ">=2.0.0-alpha.0 <=2.0.0-alpha.12",
33
+ "@pantheon-systems/puck-css": ">=0.4.0",
34
+ "@puckeditor/core": "^0.21.0",
35
+ "react": "^18.0.0 || ^19.0.0"
36
+ },
37
+ "devDependencies": {
38
+ "@pantheon-systems/pds-toolkit-react": "2.0.0-alpha.12",
39
+ "@pantheon-systems/puck-css": "^0.4.4",
40
+ "@puckeditor/core": "^0.21.1",
41
+ "@types/react": "^18.0.0",
42
+ "react": "^18.0.0",
43
+ "typescript": "^5.7.3"
44
+ }
45
+ }