@seed-ship/mcp-ui-solid 5.1.0 → 5.2.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/CHANGELOG.md +54 -0
- package/README.md +64 -13
- package/dist/components/FeedbackInline.cjs +57 -0
- package/dist/components/FeedbackInline.cjs.map +1 -0
- package/dist/components/FeedbackInline.d.ts +71 -0
- package/dist/components/FeedbackInline.d.ts.map +1 -0
- package/dist/components/FeedbackInline.js +57 -0
- package/dist/components/FeedbackInline.js.map +1 -0
- package/dist/index.cjs +9 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -2
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/services/chat-bus.cjs +71 -0
- package/dist/services/chat-bus.cjs.map +1 -1
- package/dist/services/chat-bus.d.ts +31 -1
- package/dist/services/chat-bus.d.ts.map +1 -1
- package/dist/services/chat-bus.js +71 -0
- package/dist/services/chat-bus.js.map +1 -1
- package/dist/services/chat-prompt-controller.cjs +83 -0
- package/dist/services/chat-prompt-controller.cjs.map +1 -0
- package/dist/services/chat-prompt-controller.d.ts +93 -0
- package/dist/services/chat-prompt-controller.d.ts.map +1 -0
- package/dist/services/chat-prompt-controller.js +83 -0
- package/dist/services/chat-prompt-controller.js.map +1 -0
- package/dist/stores/scratchpad-store.cjs +105 -77
- package/dist/stores/scratchpad-store.cjs.map +1 -1
- package/dist/stores/scratchpad-store.d.ts +88 -19
- package/dist/stores/scratchpad-store.d.ts.map +1 -1
- package/dist/stores/scratchpad-store.js +105 -77
- package/dist/stores/scratchpad-store.js.map +1 -1
- package/dist/types/chat-bus.d.ts +39 -0
- package/dist/types/chat-bus.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/FeedbackInline.test.tsx +117 -0
- package/src/components/FeedbackInline.tsx +143 -0
- package/src/index.ts +23 -1
- package/src/services/chat-bus.test.ts +154 -2
- package/src/services/chat-bus.ts +115 -0
- package/src/services/chat-prompt-controller.test.ts +144 -0
- package/src/services/chat-prompt-controller.ts +214 -0
- package/src/stores/scratchpad-store.test.tsx +140 -0
- package/src/stores/scratchpad-store.tsx +244 -0
- package/src/types/chat-bus.ts +40 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/src/stores/scratchpad-store.ts +0 -126
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scratchpad-store.js","sources":["../../src/stores/scratchpad-store.ts"],"sourcesContent":["/**\n * Scratchpad Store — singleton reactive state for HITL scratchpad\n * v3.0.3: Eliminates ChatBus relay chain race condition\n *\n * @experimental\n *\n * Parser calls dispatchScratchpad() → store updates → ScratchpadPanel reads reactively.\n * Zero bus, zero relay, zero race condition.\n *\n * **Known limitation (v4.3.9):** This store is a module-level singleton, not\n * a context-scoped factory. Two `ScratchpadPanel` instances in the same app\n * will share the same state. Multi-panel scenarios (e.g. chat + admin dashboard\n * both showing scratchpads simultaneously) are unsupported. Host apps that need\n * isolated scratchpads should not reuse this store — wait for v4.4.0 which\n * will expose `createScratchpadStore()` factory for per-panel instances.\n */\n\nimport { createStore, produce } from 'solid-js/store'\nimport type { ScratchpadState, ScratchpadEvent, ScratchpadSection } from '../types/chat-bus'\n\nconst [scratchpadStore, setScratchpadStore] = createStore<{\n current: ScratchpadState | null\n pinned: boolean\n}>({ current: null, pinned: false })\n\n/**\n * Hook for the COMPONENT — reads the scratchpad state reactively.\n *\n * @example\n * const { state, pinned, close } = useScratchpadState()\n * <Show when={state()}>\n * <ScratchpadPanel state={state()!} pinned={pinned()} onClose={close} />\n * </Show>\n */\nexport function useScratchpadState() {\n return {\n state: () => scratchpadStore.current,\n pinned: () => scratchpadStore.pinned,\n close: () => setScratchpadStore({ current: null, pinned: false }),\n }\n}\n\n/**\n * Function for the PARSER/STORE — mutates the scratchpad state.\n * Called from the SSE callback, no bus needed.\n *\n * @example\n * // In your SSE parser callback — ONE LINE\n * onScratchpad: (data) => dispatchScratchpad(data as ScratchpadEvent)\n */\nexport function dispatchScratchpad(event: ScratchpadEvent): void {\n // DX1: lifecycle logging\n if (event.action === 'create') {\n console.info(\n `%c[MCP-UI] dispatchScratchpad%c create id=${event.id} sections=${event.sections?.length || 0} status=${event.status || 'loading'}${event.pinned ? ' pinned' : ''}`,\n 'color: #10b981; font-weight: bold', 'color: inherit'\n )\n setScratchpadStore({\n current: {\n id: event.id,\n title: event.title || '',\n sections: event.sections || [],\n filters: event.filters || {},\n preview: event.preview,\n agentMessages: event.agentMessages || [],\n status: event.status || 'loading',\n previewEndpoint: (event as any).previewEndpoint,\n previewDebounce: (event as any).previewDebounce,\n previewMethod: (event as any).previewMethod,\n previewHeaders: (event as any).previewHeaders,\n turn: (event as any).turn,\n totalTurns: (event as any).totalTurns,\n turnHistory: (event as any).turnHistory,\n },\n pinned: event.pinned || false,\n })\n } else if (event.action === 'update') {\n console.info(\n `%c[MCP-UI] dispatchScratchpad%c update id=${event.id} sectionMode=${event.sectionMode || 'replace'} sections=${event.sections?.length || 0} status=${event.status || '-'}`,\n 'color: #3b82f6; font-weight: bold', 'color: inherit'\n )\n setScratchpadStore(produce((s) => {\n if (!s.current || s.current.id !== event.id) {\n console.warn(`[MCP-UI] dispatchScratchpad: update for id=${event.id} but current is ${s.current?.id || 'null'}. Ignoring.`)\n return\n }\n\n if (event.sections) {\n const mode = event.sectionMode || 'replace'\n if (mode === 'replace') {\n s.current.sections = event.sections\n } else if (mode === 'append') {\n s.current.sections = [...s.current.sections, ...event.sections]\n } else if (mode === 'upsert') {\n let matchCount = 0\n for (const incoming of event.sections) {\n const idx = s.current.sections.findIndex((sec: ScratchpadSection) => sec.id === incoming.id)\n if (idx >= 0) {\n s.current.sections[idx] = incoming\n matchCount++\n } else {\n s.current.sections.push(incoming)\n }\n }\n if (matchCount === 0 && event.sections.length > 0) {\n console.warn(\n `[MCP-UI] dispatchScratchpad: sectionMode='upsert' but no IDs matched. ` +\n `Incoming: [${event.sections.map((s: ScratchpadSection) => s.id).join(', ')}] ` +\n `Existing: [${s.current.sections.map((s: ScratchpadSection) => s.id).join(', ')}]. All appended.`\n )\n }\n }\n }\n if (event.agentMessages) s.current.agentMessages = event.agentMessages\n if (event.status) s.current.status = event.status\n if (event.filters) s.current.filters = event.filters\n if (event.preview) s.current.preview = event.preview\n if (event.pinned != null) s.pinned = event.pinned\n if ((event as any).turnHistory) s.current.turnHistory = (event as any).turnHistory\n if ((event as any).turn != null) s.current.turn = (event as any).turn\n }))\n } else if (event.action === 'close') {\n console.info(`%c[MCP-UI] dispatchScratchpad%c close id=${event.id}`, 'color: #6b7280; font-weight: bold', 'color: inherit')\n setScratchpadStore({ current: null, pinned: false })\n }\n}\n"],"names":["_a","s"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scratchpad-store.js","sources":["../../src/stores/scratchpad-store.tsx"],"sourcesContent":["/**\n * Scratchpad Store — reactive state for HITL scratchpad\n *\n * @experimental\n *\n * **v5.2.0 :** the store is now a factory (`createScratchpadStore()`) with a\n * module-level singleton kept as default. Two consumption modes :\n *\n * 1. **Singleton mode (default, zero-config)** — `dispatchScratchpad(event)` +\n * `useScratchpadState()` read/write the module singleton. This is the v4.x\n * path and keeps working unchanged.\n *\n * 2. **Multi-instance mode** — wrap a subtree in `<ScratchpadStoreProvider>`\n * (it creates a scoped `ScratchpadStoreHandle` internally, or use your own\n * via the `store` prop). `useScratchpadState()` auto-detects the context\n * and reads from it; `ScratchpadPanel` mounted inside the provider reads\n * the scoped store. Non-reactive callers (SSE parsers) should pass the\n * handle explicitly — do NOT try to reach context from a non-reactive\n * scope.\n */\n\nimport { createContext, useContext, type ParentComponent, type JSX } from 'solid-js'\nimport { createStore, produce } from 'solid-js/store'\nimport type { ScratchpadState, ScratchpadEvent, ScratchpadSection } from '../types/chat-bus'\n\n// ─── Handle shape ─────────────────────────────────────────────\n\nexport interface ScratchpadStoreHandle {\n /** Mutate the store from an SSE/parser callback. */\n dispatch: (event: ScratchpadEvent) => void\n /** Reactive accessor for the current scratchpad state (null when closed). */\n state: () => ScratchpadState | null\n /** Reactive accessor for the pinned flag. */\n pinned: () => boolean\n /** Close the scratchpad (equivalent to dispatching an action='close'). */\n close: () => void\n}\n\n// ─── Factory ──────────────────────────────────────────────────\n\n/**\n * Create an isolated scratchpad store instance.\n *\n * Use this when you need two or more scratchpads live at the same time\n * (e.g. chat scratchpad + admin dashboard scratchpad). Pair with\n * `<ScratchpadStoreProvider store={...}>` to scope a SolidJS subtree.\n *\n * @experimental\n * @since v5.2.0\n */\nexport function createScratchpadStore(): ScratchpadStoreHandle {\n const [scratchpadStore, setScratchpadStore] = createStore<{\n current: ScratchpadState | null\n pinned: boolean\n }>({ current: null, pinned: false })\n\n const dispatch = (event: ScratchpadEvent): void => {\n if (event.action === 'create') {\n console.info(\n `%c[MCP-UI] dispatchScratchpad%c create id=${event.id} sections=${event.sections?.length || 0} status=${event.status || 'loading'}${event.pinned ? ' pinned' : ''}`,\n 'color: #10b981; font-weight: bold',\n 'color: inherit'\n )\n setScratchpadStore({\n current: {\n id: event.id,\n title: event.title || '',\n sections: event.sections || [],\n filters: event.filters || {},\n preview: event.preview,\n agentMessages: event.agentMessages || [],\n status: event.status || 'loading',\n previewEndpoint: (event as any).previewEndpoint,\n previewDebounce: (event as any).previewDebounce,\n previewMethod: (event as any).previewMethod,\n previewHeaders: (event as any).previewHeaders,\n turn: (event as any).turn,\n totalTurns: (event as any).totalTurns,\n turnHistory: (event as any).turnHistory,\n },\n pinned: event.pinned || false,\n })\n } else if (event.action === 'update') {\n console.info(\n `%c[MCP-UI] dispatchScratchpad%c update id=${event.id} sectionMode=${event.sectionMode || 'replace'} sections=${event.sections?.length || 0} status=${event.status || '-'}`,\n 'color: #3b82f6; font-weight: bold',\n 'color: inherit'\n )\n setScratchpadStore(\n produce((s) => {\n if (!s.current || s.current.id !== event.id) {\n console.warn(\n `[MCP-UI] dispatchScratchpad: update for id=${event.id} but current is ${s.current?.id || 'null'}. Ignoring.`\n )\n return\n }\n\n if (event.sections) {\n const mode = event.sectionMode || 'replace'\n if (mode === 'replace') {\n s.current.sections = event.sections\n } else if (mode === 'append') {\n s.current.sections = [...s.current.sections, ...event.sections]\n } else if (mode === 'upsert') {\n let matchCount = 0\n for (const incoming of event.sections) {\n const idx = s.current.sections.findIndex(\n (sec: ScratchpadSection) => sec.id === incoming.id\n )\n if (idx >= 0) {\n s.current.sections[idx] = incoming\n matchCount++\n } else {\n s.current.sections.push(incoming)\n }\n }\n if (matchCount === 0 && event.sections.length > 0) {\n console.warn(\n `[MCP-UI] dispatchScratchpad: sectionMode='upsert' but no IDs matched. ` +\n `Incoming: [${event.sections.map((s: ScratchpadSection) => s.id).join(', ')}] ` +\n `Existing: [${s.current.sections.map((s: ScratchpadSection) => s.id).join(', ')}]. All appended.`\n )\n }\n }\n }\n if (event.agentMessages) s.current.agentMessages = event.agentMessages\n if (event.status) s.current.status = event.status\n if (event.filters) s.current.filters = event.filters\n if (event.preview) s.current.preview = event.preview\n if (event.pinned != null) s.pinned = event.pinned\n if ((event as any).turnHistory) s.current.turnHistory = (event as any).turnHistory\n if ((event as any).turn != null) s.current.turn = (event as any).turn\n })\n )\n } else if (event.action === 'close') {\n console.info(\n `%c[MCP-UI] dispatchScratchpad%c close id=${event.id}`,\n 'color: #6b7280; font-weight: bold',\n 'color: inherit'\n )\n setScratchpadStore({ current: null, pinned: false })\n }\n }\n\n return {\n dispatch,\n state: () => scratchpadStore.current,\n pinned: () => scratchpadStore.pinned,\n close: () => setScratchpadStore({ current: null, pinned: false }),\n }\n}\n\n// ─── Module-level singleton (v4.x-compatible default) ─────────\n\nconst defaultStore: ScratchpadStoreHandle = createScratchpadStore()\n\n/**\n * Function for the PARSER/STORE — mutates the **module-level singleton**\n * scratchpad state. Use this when you only need one scratchpad at a time\n * (single-instance consumer, the v4.x pattern).\n *\n * For multi-instance scenarios, prefer `createScratchpadStore()` and pass the\n * handle around explicitly.\n *\n * @example\n * // In your SSE parser callback — ONE LINE\n * onScratchpad: (data) => dispatchScratchpad(data as ScratchpadEvent)\n */\nexport function dispatchScratchpad(event: ScratchpadEvent): void {\n defaultStore.dispatch(event)\n}\n\n// ─── Context (v5.2.0) ─────────────────────────────────────────\n\n/**\n * Context for a scoped scratchpad store. Populated by\n * `<ScratchpadStoreProvider>`. Read by `useScratchpadState()` with automatic\n * fallback to the module-level singleton when the context is absent.\n *\n * @experimental\n * @since v5.2.0\n */\nexport const ScratchpadStoreContext = createContext<ScratchpadStoreHandle | undefined>(undefined)\n\n/**\n * Provide a scoped `ScratchpadStoreHandle` to a SolidJS subtree. Children\n * reading via `useScratchpadState()` or rendering a `<ScratchpadPanel>` will\n * bind to this store instead of the module singleton.\n *\n * If no `store` prop is passed, a fresh store is created for the provider's\n * lifetime. Pass `store` explicitly when you need the handle outside the\n * tree (e.g. in an SSE parser that lives at the app root).\n *\n * @experimental\n * @since v5.2.0\n *\n * @example\n * const chatStore = createScratchpadStore()\n * const adminStore = createScratchpadStore()\n *\n * <ScratchpadStoreProvider store={chatStore}>\n * <ChatInterface />\n * </ScratchpadStoreProvider>\n * <ScratchpadStoreProvider store={adminStore}>\n * <AdminDashboard />\n * </ScratchpadStoreProvider>\n */\nexport const ScratchpadStoreProvider: ParentComponent<{\n store?: ScratchpadStoreHandle\n}> = (props): JSX.Element => {\n const store = props.store ?? createScratchpadStore()\n return (\n <ScratchpadStoreContext.Provider value={store}>{props.children}</ScratchpadStoreContext.Provider>\n )\n}\n\n// ─── Reactive hook (context-aware) ────────────────────────────\n\n/**\n * Hook for the COMPONENT — reads the scratchpad state reactively.\n *\n * **v5.2.0 :** if called inside a `<ScratchpadStoreProvider>`, reads the\n * scoped handle; otherwise falls back to the module singleton. Old v4.x\n * consumers keep working unchanged.\n *\n * @example\n * const { state, pinned, close } = useScratchpadState()\n * <Show when={state()}>\n * <ScratchpadPanel state={state()!} pinned={pinned()} onClose={close} />\n * </Show>\n */\nexport function useScratchpadState(): {\n state: () => ScratchpadState | null\n pinned: () => boolean\n close: () => void\n} {\n const scoped = useContext(ScratchpadStoreContext)\n const handle = scoped ?? defaultStore\n return {\n state: handle.state,\n pinned: handle.pinned,\n close: handle.close,\n }\n}\n"],"names":["createScratchpadStore","scratchpadStore","setScratchpadStore","createStore","current","pinned","dispatch","event","action","console","info","id","sections","length","status","title","filters","preview","agentMessages","previewEndpoint","previewDebounce","previewMethod","previewHeaders","turn","totalTurns","turnHistory","sectionMode","produce","s","warn","mode","matchCount","incoming","idx","findIndex","sec","push","map","join","state","close","defaultStore","dispatchScratchpad","ScratchpadStoreContext","createContext","undefined","ScratchpadStoreProvider","props","store","_$createComponent","Provider","value","children","useScratchpadState","scoped","useContext","handle"],"mappings":"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"}
|
package/dist/types/chat-bus.d.ts
CHANGED
|
@@ -59,6 +59,9 @@ export interface ChatEvents {
|
|
|
59
59
|
onClarificationNeeded: (event: ChatEventBase & {
|
|
60
60
|
clarification: ClarificationEvent;
|
|
61
61
|
}) => void;
|
|
62
|
+
onElicitation: (event: ChatEventBase & {
|
|
63
|
+
elicitation: ElicitationEvent;
|
|
64
|
+
}) => void;
|
|
62
65
|
onAgentSwitch: (event: ChatEventBase & {
|
|
63
66
|
agent: AgentContext;
|
|
64
67
|
}) => void;
|
|
@@ -548,6 +551,42 @@ export interface ToolCallEvent {
|
|
|
548
551
|
results?: unknown;
|
|
549
552
|
duration_ms?: number;
|
|
550
553
|
}
|
|
554
|
+
/**
|
|
555
|
+
* MCP `elicitation/create` request payload — server asks the client to
|
|
556
|
+
* collect input from the user according to a JSON Schema.
|
|
557
|
+
*
|
|
558
|
+
* Derived from MCP spec 2025-06-18. See
|
|
559
|
+
* `elicitationToPromptConfig()` in `services/chat-bus.ts` for the
|
|
560
|
+
* helper that converts this to a `ChatPromptConfig`.
|
|
561
|
+
*
|
|
562
|
+
* @experimental
|
|
563
|
+
* @since v5.2.0
|
|
564
|
+
*/
|
|
565
|
+
export interface ElicitationEvent {
|
|
566
|
+
/** Question / instruction to present to the user. */
|
|
567
|
+
message: string;
|
|
568
|
+
/** JSON Schema describing the expected response shape. Object with primitive properties only. */
|
|
569
|
+
requestedSchema: ElicitationRequestedSchema;
|
|
570
|
+
}
|
|
571
|
+
export interface ElicitationRequestedSchema {
|
|
572
|
+
type: 'object';
|
|
573
|
+
properties: Record<string, ElicitationPropertySchema>;
|
|
574
|
+
required?: string[];
|
|
575
|
+
}
|
|
576
|
+
export interface ElicitationPropertySchema {
|
|
577
|
+
type: 'string' | 'number' | 'integer' | 'boolean';
|
|
578
|
+
title?: string;
|
|
579
|
+
description?: string;
|
|
580
|
+
/** Enum of allowed values (strings or numbers). */
|
|
581
|
+
enum?: Array<string | number>;
|
|
582
|
+
/** Parallel array with display labels for each enum entry. */
|
|
583
|
+
enumNames?: string[];
|
|
584
|
+
default?: unknown;
|
|
585
|
+
minimum?: number;
|
|
586
|
+
maximum?: number;
|
|
587
|
+
/** String format hint — date, date-time, email, uri. */
|
|
588
|
+
format?: 'date' | 'date-time' | 'email' | 'uri';
|
|
589
|
+
}
|
|
551
590
|
export interface ClarificationEvent {
|
|
552
591
|
/** The question to ask the user */
|
|
553
592
|
question: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-bus.d.ts","sourceRoot":"","sources":["../../src/types/chat-bus.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat-bus.d.ts","sourceRoot":"","sources":["../../src/types/chat-bus.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for FeedbackInline component — v5.2.0
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
6
|
+
import { render, fireEvent, cleanup } from '@solidjs/testing-library'
|
|
7
|
+
import { FeedbackInline } from './FeedbackInline'
|
|
8
|
+
|
|
9
|
+
describe('FeedbackInline — v5.2.0', () => {
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
cleanup()
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
it('renders two rating buttons by default', () => {
|
|
15
|
+
const { container } = render(() => <FeedbackInline onSubmit={() => {}} />)
|
|
16
|
+
const positive = container.querySelector('[data-feedback-inline-rating="positive"]')
|
|
17
|
+
const negative = container.querySelector('[data-feedback-inline-rating="negative"]')
|
|
18
|
+
expect(positive).toBeDefined()
|
|
19
|
+
expect(negative).toBeDefined()
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
it('click thumb-up calls onSubmit with positive + context and shows ack', () => {
|
|
23
|
+
const onSubmit = vi.fn()
|
|
24
|
+
const { container, getByText } = render(() => (
|
|
25
|
+
<FeedbackInline
|
|
26
|
+
onSubmit={onSubmit}
|
|
27
|
+
context={{ intent: 'search', confidenceBand: 'high' }}
|
|
28
|
+
/>
|
|
29
|
+
))
|
|
30
|
+
const positive = container.querySelector(
|
|
31
|
+
'[data-feedback-inline-rating="positive"]'
|
|
32
|
+
) as HTMLElement
|
|
33
|
+
fireEvent.click(positive)
|
|
34
|
+
|
|
35
|
+
expect(onSubmit).toHaveBeenCalledTimes(1)
|
|
36
|
+
expect(onSubmit).toHaveBeenCalledWith('positive', {
|
|
37
|
+
intent: 'search',
|
|
38
|
+
confidenceBand: 'high',
|
|
39
|
+
})
|
|
40
|
+
expect(getByText('Merci !')).toBeDefined()
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
it('click thumb-down calls onSubmit with negative and shows negative ack', () => {
|
|
44
|
+
const onSubmit = vi.fn()
|
|
45
|
+
const { container, getByText } = render(() => <FeedbackInline onSubmit={onSubmit} />)
|
|
46
|
+
const negative = container.querySelector(
|
|
47
|
+
'[data-feedback-inline-rating="negative"]'
|
|
48
|
+
) as HTMLElement
|
|
49
|
+
fireEvent.click(negative)
|
|
50
|
+
|
|
51
|
+
expect(onSubmit).toHaveBeenCalledWith('negative', undefined)
|
|
52
|
+
expect(getByText("Noté, on s'améliore")).toBeDefined()
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
it('second click after rating is a no-op (final state)', () => {
|
|
56
|
+
const onSubmit = vi.fn()
|
|
57
|
+
const { container } = render(() => <FeedbackInline onSubmit={onSubmit} />)
|
|
58
|
+
const positive = container.querySelector(
|
|
59
|
+
'[data-feedback-inline-rating="positive"]'
|
|
60
|
+
) as HTMLElement
|
|
61
|
+
fireEvent.click(positive)
|
|
62
|
+
// After first click, buttons are replaced by ack text — there's no button
|
|
63
|
+
// to click, but verify onSubmit isn't called again via any stale ref
|
|
64
|
+
expect(onSubmit).toHaveBeenCalledTimes(1)
|
|
65
|
+
expect(container.querySelector('[data-feedback-inline-rating]')).toBeNull()
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
it('custom positiveAck / negativeAck text is rendered', () => {
|
|
69
|
+
const { container, getByText, unmount } = render(() => (
|
|
70
|
+
<FeedbackInline
|
|
71
|
+
onSubmit={() => {}}
|
|
72
|
+
positiveAck="Thanks!"
|
|
73
|
+
negativeAck="Got it, sorry"
|
|
74
|
+
/>
|
|
75
|
+
))
|
|
76
|
+
const positive = container.querySelector(
|
|
77
|
+
'[data-feedback-inline-rating="positive"]'
|
|
78
|
+
) as HTMLElement
|
|
79
|
+
fireEvent.click(positive)
|
|
80
|
+
expect(getByText('Thanks!')).toBeDefined()
|
|
81
|
+
unmount()
|
|
82
|
+
|
|
83
|
+
const second = render(() => (
|
|
84
|
+
<FeedbackInline
|
|
85
|
+
onSubmit={() => {}}
|
|
86
|
+
positiveAck="Thanks!"
|
|
87
|
+
negativeAck="Got it, sorry"
|
|
88
|
+
/>
|
|
89
|
+
))
|
|
90
|
+
const negative = second.container.querySelector(
|
|
91
|
+
'[data-feedback-inline-rating="negative"]'
|
|
92
|
+
) as HTMLElement
|
|
93
|
+
fireEvent.click(negative)
|
|
94
|
+
expect(second.getByText('Got it, sorry')).toBeDefined()
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it('onSubmit promise rejection is swallowed (best-effort, UI still flips)', () => {
|
|
98
|
+
const onSubmit = vi.fn().mockRejectedValue(new Error('network down'))
|
|
99
|
+
const { container, getByText } = render(() => <FeedbackInline onSubmit={onSubmit} />)
|
|
100
|
+
const positive = container.querySelector(
|
|
101
|
+
'[data-feedback-inline-rating="positive"]'
|
|
102
|
+
) as HTMLElement
|
|
103
|
+
// Should not throw even though onSubmit rejects
|
|
104
|
+
expect(() => fireEvent.click(positive)).not.toThrow()
|
|
105
|
+
expect(getByText('Merci !')).toBeDefined()
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
it('works without messageHash or context', () => {
|
|
109
|
+
const onSubmit = vi.fn()
|
|
110
|
+
const { container } = render(() => <FeedbackInline onSubmit={onSubmit} />)
|
|
111
|
+
const positive = container.querySelector(
|
|
112
|
+
'[data-feedback-inline-rating="positive"]'
|
|
113
|
+
) as HTMLElement
|
|
114
|
+
fireEvent.click(positive)
|
|
115
|
+
expect(onSubmit).toHaveBeenCalledWith('positive', undefined)
|
|
116
|
+
})
|
|
117
|
+
})
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeedbackInline — per-message inline feedback (thumbs up/down)
|
|
3
|
+
*
|
|
4
|
+
* @experimental
|
|
5
|
+
* @since v5.2.0
|
|
6
|
+
*
|
|
7
|
+
* A small, non-blocking per-message feedback primitive. Sits next to an
|
|
8
|
+
* assistant message, captures a rating, calls back to the consumer for
|
|
9
|
+
* persistence. Best-effort by design — no retry UX, no revision UX.
|
|
10
|
+
*
|
|
11
|
+
* ## When to use vs other feedback primitives
|
|
12
|
+
*
|
|
13
|
+
* - **`FeedbackInline`** (this) → per-message thumb-up/down, non-blocking,
|
|
14
|
+
* many can coexist.
|
|
15
|
+
* - **`ChatPrompt` (type=choice)** → modal, one-at-a-time above the input,
|
|
16
|
+
* used when the agent needs a blocking answer.
|
|
17
|
+
* - **`ScratchpadPanel` feedback section** → structured feedback bound to a
|
|
18
|
+
* scratchpad turn, panel-side.
|
|
19
|
+
*
|
|
20
|
+
* ## Persistence is the consumer's job
|
|
21
|
+
*
|
|
22
|
+
* The component flips to "submitted" state *optimistically* on click and
|
|
23
|
+
* calls `onSubmit(rating, context)`. Network failures do not revert the UI —
|
|
24
|
+
* feedback is best-effort. If you need stricter semantics (offline retry,
|
|
25
|
+
* revision, ...) wrap this in your own component.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* <FeedbackInline
|
|
30
|
+
* messageHash={msg.hash}
|
|
31
|
+
* context={{ intent: msg.intent, confidenceBand: msg.band }}
|
|
32
|
+
* onSubmit={(rating, ctx) =>
|
|
33
|
+
* fetch('/api/feedback', {
|
|
34
|
+
* method: 'POST',
|
|
35
|
+
* headers: { 'Content-Type': 'application/json' },
|
|
36
|
+
* body: JSON.stringify({ message_hash: msg.hash, rating, ...ctx }),
|
|
37
|
+
* })
|
|
38
|
+
* }
|
|
39
|
+
* />
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
import { Component, Show, createSignal } from 'solid-js'
|
|
44
|
+
|
|
45
|
+
export interface FeedbackInlineContext {
|
|
46
|
+
intent?: string
|
|
47
|
+
confidenceBand?: string
|
|
48
|
+
tags?: string[]
|
|
49
|
+
[key: string]: unknown
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface FeedbackInlineProps {
|
|
53
|
+
/** Stable identifier for the message being rated. */
|
|
54
|
+
messageHash?: string
|
|
55
|
+
/**
|
|
56
|
+
* Called on click. Consumer is responsible for persistence (HTTP, store,
|
|
57
|
+
* localStorage). Return value ignored.
|
|
58
|
+
*/
|
|
59
|
+
onSubmit: (rating: 'positive' | 'negative', context?: FeedbackInlineContext) => void | Promise<void>
|
|
60
|
+
/** Extra context forwarded to `onSubmit`. */
|
|
61
|
+
context?: FeedbackInlineContext
|
|
62
|
+
/** Ack text shown after positive rating. Default: 'Merci !' */
|
|
63
|
+
positiveAck?: string
|
|
64
|
+
/** Ack text shown after negative rating. Default: "Noté, on s'améliore" */
|
|
65
|
+
negativeAck?: string
|
|
66
|
+
/** Extra Tailwind classes on the container. */
|
|
67
|
+
class?: string
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @experimental
|
|
72
|
+
* Per-message inline feedback (thumbs up/down). Non-blocking.
|
|
73
|
+
*/
|
|
74
|
+
export const FeedbackInline: Component<FeedbackInlineProps> = (props) => {
|
|
75
|
+
const [rating, setRating] = createSignal<'positive' | 'negative' | null>(null)
|
|
76
|
+
|
|
77
|
+
const handle = (value: 'positive' | 'negative') => {
|
|
78
|
+
if (rating() !== null) return // already submitted, final state
|
|
79
|
+
setRating(value)
|
|
80
|
+
try {
|
|
81
|
+
// Fire-and-forget. If the consumer returns a Promise that rejects,
|
|
82
|
+
// swallow it — feedback is best-effort by design.
|
|
83
|
+
const result = props.onSubmit(value, props.context)
|
|
84
|
+
if (result && typeof (result as Promise<void>).catch === 'function') {
|
|
85
|
+
;(result as Promise<void>).catch(() => {
|
|
86
|
+
/* non-blocking */
|
|
87
|
+
})
|
|
88
|
+
}
|
|
89
|
+
} catch {
|
|
90
|
+
/* non-blocking */
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return (
|
|
95
|
+
<div class={`flex items-center gap-1 ${props.class ?? ''}`.trim()}>
|
|
96
|
+
<Show
|
|
97
|
+
when={rating() === null}
|
|
98
|
+
fallback={
|
|
99
|
+
<span class="text-[11px] text-deposium-slate-500">
|
|
100
|
+
{rating() === 'positive'
|
|
101
|
+
? (props.positiveAck ?? 'Merci !')
|
|
102
|
+
: (props.negativeAck ?? "Noté, on s'améliore")}
|
|
103
|
+
</span>
|
|
104
|
+
}
|
|
105
|
+
>
|
|
106
|
+
<button
|
|
107
|
+
type="button"
|
|
108
|
+
onClick={() => handle('positive')}
|
|
109
|
+
class="p-1 rounded hover:bg-green-500/10 text-deposium-slate-500 hover:text-green-500 transition-colors"
|
|
110
|
+
title="Utile"
|
|
111
|
+
aria-label="Mark response as useful"
|
|
112
|
+
data-feedback-inline-rating="positive"
|
|
113
|
+
>
|
|
114
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
115
|
+
<path
|
|
116
|
+
stroke-linecap="round"
|
|
117
|
+
stroke-linejoin="round"
|
|
118
|
+
stroke-width="2"
|
|
119
|
+
d="M14 9V5a3 3 0 00-3-3l-4 9v11h11.28a2 2 0 002-1.7l1.38-9a2 2 0 00-2-2.3H14z M3 15v7"
|
|
120
|
+
/>
|
|
121
|
+
</svg>
|
|
122
|
+
</button>
|
|
123
|
+
<button
|
|
124
|
+
type="button"
|
|
125
|
+
onClick={() => handle('negative')}
|
|
126
|
+
class="p-1 rounded hover:bg-red-500/10 text-deposium-slate-500 hover:text-red-500 transition-colors"
|
|
127
|
+
title="Pas utile"
|
|
128
|
+
aria-label="Mark response as not useful"
|
|
129
|
+
data-feedback-inline-rating="negative"
|
|
130
|
+
>
|
|
131
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
132
|
+
<path
|
|
133
|
+
stroke-linecap="round"
|
|
134
|
+
stroke-linejoin="round"
|
|
135
|
+
stroke-width="2"
|
|
136
|
+
d="M10 15v4a3 3 0 003 3l4-9V2H5.72a2 2 0 00-2 1.7l-1.38 9a2 2 0 002 2.3H10z M21 4v7"
|
|
137
|
+
/>
|
|
138
|
+
</svg>
|
|
139
|
+
</button>
|
|
140
|
+
</Show>
|
|
141
|
+
</div>
|
|
142
|
+
)
|
|
143
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -37,12 +37,21 @@ export { ResizeHandle } from './components/ResizeHandle'
|
|
|
37
37
|
export { EditableUIResourceRenderer } from './components/EditableUIResourceRenderer'
|
|
38
38
|
export { ExpandableWrapper, useExpanded } from './components/ExpandableWrapper'
|
|
39
39
|
export { ComponentToolbar } from './components/ComponentToolbar'
|
|
40
|
+
export { FeedbackInline } from './components/FeedbackInline'
|
|
41
|
+
export type { FeedbackInlineProps, FeedbackInlineContext } from './components/FeedbackInline'
|
|
40
42
|
|
|
41
43
|
// Chat Bus (v2.4.0 — @experimental)
|
|
42
44
|
export { ChatBusProvider, useChatBus } from './hooks/useChatBus'
|
|
43
45
|
export { ChatPrompt } from './components/ChatPrompt'
|
|
44
46
|
export { ScratchpadPanel } from './components/ScratchpadPanel'
|
|
45
|
-
export {
|
|
47
|
+
export {
|
|
48
|
+
dispatchScratchpad,
|
|
49
|
+
useScratchpadState,
|
|
50
|
+
createScratchpadStore,
|
|
51
|
+
ScratchpadStoreContext,
|
|
52
|
+
ScratchpadStoreProvider,
|
|
53
|
+
} from './stores/scratchpad-store'
|
|
54
|
+
export type { ScratchpadStoreHandle } from './stores/scratchpad-store'
|
|
46
55
|
|
|
47
56
|
// Data Verification Components (v3.1.0)
|
|
48
57
|
export { VerifiedText } from './components/VerifiedText'
|
|
@@ -248,6 +257,16 @@ export {
|
|
|
248
257
|
// Clarification → Prompt helper (v4.3.9)
|
|
249
258
|
export { clarificationToPromptConfig } from './services/chat-bus'
|
|
250
259
|
|
|
260
|
+
// Elicitation → Prompt helper (v5.2.0)
|
|
261
|
+
export { elicitationToPromptConfig } from './services/chat-bus'
|
|
262
|
+
|
|
263
|
+
// Chat prompt controller (v5.2.0)
|
|
264
|
+
export {
|
|
265
|
+
createChatPromptController,
|
|
266
|
+
PromptReplacedError,
|
|
267
|
+
} from './services/chat-prompt-controller'
|
|
268
|
+
export type { ChatPromptController } from './services/chat-prompt-controller'
|
|
269
|
+
|
|
251
270
|
// Testing utilities (v4.3.9)
|
|
252
271
|
export { createMockChatBus } from './testing'
|
|
253
272
|
export type { MockChatBusOptions } from './testing'
|
|
@@ -279,6 +298,9 @@ export type {
|
|
|
279
298
|
Citation,
|
|
280
299
|
ToolCallEvent,
|
|
281
300
|
ClarificationEvent,
|
|
301
|
+
ElicitationEvent,
|
|
302
|
+
ElicitationRequestedSchema,
|
|
303
|
+
ElicitationPropertySchema,
|
|
282
304
|
// Data Validation types (v3.1.0)
|
|
283
305
|
DataValidation,
|
|
284
306
|
LLMNumber,
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
|
|
6
|
-
import { createEventEmitter, createCommandHandler, createChatBus, clarificationToPromptConfig } from './chat-bus'
|
|
7
|
-
import type { ChatEvents, ChatCommands, ClarificationEvent } from '../types/chat-bus'
|
|
6
|
+
import { createEventEmitter, createCommandHandler, createChatBus, clarificationToPromptConfig, elicitationToPromptConfig } from './chat-bus'
|
|
7
|
+
import type { ChatEvents, ChatCommands, ClarificationEvent, ElicitationEvent } from '../types/chat-bus'
|
|
8
8
|
|
|
9
9
|
describe('createEventEmitter', () => {
|
|
10
10
|
it('emits events to subscribed listeners', () => {
|
|
@@ -384,3 +384,155 @@ describe('clarificationToPromptConfig', () => {
|
|
|
384
384
|
expect(opts[0]).not.toHaveProperty('metadata')
|
|
385
385
|
})
|
|
386
386
|
})
|
|
387
|
+
|
|
388
|
+
describe('elicitationToPromptConfig — v5.2.0', () => {
|
|
389
|
+
it('single boolean property maps to confirm prompt', () => {
|
|
390
|
+
const event: ElicitationEvent = {
|
|
391
|
+
message: 'Proceed with the deployment?',
|
|
392
|
+
requestedSchema: {
|
|
393
|
+
type: 'object',
|
|
394
|
+
properties: { confirmed: { type: 'boolean', description: 'Ship it?' } },
|
|
395
|
+
required: ['confirmed'],
|
|
396
|
+
},
|
|
397
|
+
}
|
|
398
|
+
const config = elicitationToPromptConfig(event)
|
|
399
|
+
expect(config.type).toBe('confirm')
|
|
400
|
+
expect(config.title).toBe('Proceed with the deployment?')
|
|
401
|
+
expect((config.config as any).message).toBe('Ship it?')
|
|
402
|
+
})
|
|
403
|
+
|
|
404
|
+
it('single enum string property (≤4 values) maps to choice prompt', () => {
|
|
405
|
+
const event: ElicitationEvent = {
|
|
406
|
+
message: 'Select severity',
|
|
407
|
+
requestedSchema: {
|
|
408
|
+
type: 'object',
|
|
409
|
+
properties: {
|
|
410
|
+
level: {
|
|
411
|
+
type: 'string',
|
|
412
|
+
enum: ['low', 'medium', 'high'],
|
|
413
|
+
enumNames: ['Low', 'Medium', 'High'],
|
|
414
|
+
},
|
|
415
|
+
},
|
|
416
|
+
},
|
|
417
|
+
}
|
|
418
|
+
const config = elicitationToPromptConfig(event)
|
|
419
|
+
expect(config.type).toBe('choice')
|
|
420
|
+
const opts = (config.config as any).options
|
|
421
|
+
expect(opts).toEqual([
|
|
422
|
+
{ value: 'low', label: 'Low' },
|
|
423
|
+
{ value: 'medium', label: 'Medium' },
|
|
424
|
+
{ value: 'high', label: 'High' },
|
|
425
|
+
])
|
|
426
|
+
})
|
|
427
|
+
|
|
428
|
+
it('enum with >4 values maps to form with select field (not choice)', () => {
|
|
429
|
+
const event: ElicitationEvent = {
|
|
430
|
+
message: 'Pick a country',
|
|
431
|
+
requestedSchema: {
|
|
432
|
+
type: 'object',
|
|
433
|
+
properties: {
|
|
434
|
+
country: {
|
|
435
|
+
type: 'string',
|
|
436
|
+
enum: ['FR', 'DE', 'IT', 'ES', 'PT'],
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
},
|
|
440
|
+
}
|
|
441
|
+
const config = elicitationToPromptConfig(event)
|
|
442
|
+
expect(config.type).toBe('form')
|
|
443
|
+
const fields = (config.config as any).fields
|
|
444
|
+
expect(fields[0].type).toBe('select')
|
|
445
|
+
expect(fields[0].options).toHaveLength(5)
|
|
446
|
+
})
|
|
447
|
+
|
|
448
|
+
it('multi-property object maps to form with one field per property', () => {
|
|
449
|
+
const event: ElicitationEvent = {
|
|
450
|
+
message: 'Fill in contact info',
|
|
451
|
+
requestedSchema: {
|
|
452
|
+
type: 'object',
|
|
453
|
+
properties: {
|
|
454
|
+
name: { type: 'string', title: 'Full name' },
|
|
455
|
+
age: { type: 'integer' },
|
|
456
|
+
newsletter: { type: 'boolean', description: 'Opt-in' },
|
|
457
|
+
},
|
|
458
|
+
required: ['name'],
|
|
459
|
+
},
|
|
460
|
+
}
|
|
461
|
+
const config = elicitationToPromptConfig(event)
|
|
462
|
+
expect(config.type).toBe('form')
|
|
463
|
+
const fields = (config.config as any).fields
|
|
464
|
+
expect(fields).toHaveLength(3)
|
|
465
|
+
expect(fields.map((f: any) => f.name)).toEqual(['name', 'age', 'newsletter'])
|
|
466
|
+
expect(fields[0]).toMatchObject({ type: 'text', label: 'Full name', required: true })
|
|
467
|
+
expect(fields[1]).toMatchObject({ type: 'number', required: false })
|
|
468
|
+
expect(fields[2]).toMatchObject({ type: 'checkbox', helpText: 'Opt-in' })
|
|
469
|
+
})
|
|
470
|
+
|
|
471
|
+
it('string format email maps to email field', () => {
|
|
472
|
+
const event: ElicitationEvent = {
|
|
473
|
+
message: 'Contact',
|
|
474
|
+
requestedSchema: {
|
|
475
|
+
type: 'object',
|
|
476
|
+
properties: {
|
|
477
|
+
email: { type: 'string', format: 'email' },
|
|
478
|
+
reply: { type: 'string' }, // force form (not single-property shortcut)
|
|
479
|
+
},
|
|
480
|
+
},
|
|
481
|
+
}
|
|
482
|
+
const config = elicitationToPromptConfig(event)
|
|
483
|
+
const fields = (config.config as any).fields
|
|
484
|
+
expect(fields[0]).toMatchObject({ name: 'email', type: 'email' })
|
|
485
|
+
})
|
|
486
|
+
|
|
487
|
+
it('string format date / date-time maps to date field', () => {
|
|
488
|
+
const event: ElicitationEvent = {
|
|
489
|
+
message: 'Schedule',
|
|
490
|
+
requestedSchema: {
|
|
491
|
+
type: 'object',
|
|
492
|
+
properties: {
|
|
493
|
+
start: { type: 'string', format: 'date' },
|
|
494
|
+
end: { type: 'string', format: 'date-time' },
|
|
495
|
+
},
|
|
496
|
+
},
|
|
497
|
+
}
|
|
498
|
+
const config = elicitationToPromptConfig(event)
|
|
499
|
+
const fields = (config.config as any).fields
|
|
500
|
+
expect(fields[0].type).toBe('date')
|
|
501
|
+
expect(fields[1].type).toBe('date')
|
|
502
|
+
})
|
|
503
|
+
|
|
504
|
+
it('default value maps to placeholder', () => {
|
|
505
|
+
const event: ElicitationEvent = {
|
|
506
|
+
message: 'Settings',
|
|
507
|
+
requestedSchema: {
|
|
508
|
+
type: 'object',
|
|
509
|
+
properties: {
|
|
510
|
+
retries: { type: 'integer', default: 3 },
|
|
511
|
+
timeout: { type: 'integer' }, // second property to force form
|
|
512
|
+
},
|
|
513
|
+
},
|
|
514
|
+
}
|
|
515
|
+
const config = elicitationToPromptConfig(event)
|
|
516
|
+
const fields = (config.config as any).fields
|
|
517
|
+
expect(fields[0]).toMatchObject({ placeholder: '3' })
|
|
518
|
+
})
|
|
519
|
+
|
|
520
|
+
it('unknown schema type falls through to text with console.warn', () => {
|
|
521
|
+
const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
522
|
+
const event = {
|
|
523
|
+
message: 'Edge case',
|
|
524
|
+
requestedSchema: {
|
|
525
|
+
type: 'object',
|
|
526
|
+
properties: {
|
|
527
|
+
weird: { type: 'array' }, // not a primitive
|
|
528
|
+
other: { type: 'string' },
|
|
529
|
+
},
|
|
530
|
+
},
|
|
531
|
+
} as unknown as ElicitationEvent
|
|
532
|
+
const config = elicitationToPromptConfig(event)
|
|
533
|
+
const fields = (config.config as any).fields
|
|
534
|
+
expect(fields[0].type).toBe('text')
|
|
535
|
+
expect(warnSpy).toHaveBeenCalled()
|
|
536
|
+
warnSpy.mockRestore()
|
|
537
|
+
})
|
|
538
|
+
})
|