@guuey/chat 0.10.0 → 0.12.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/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +134 -35
- package/dist/policy.d.ts +9 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +1 -1
- package/dist/react/components.d.ts +1 -1
- package/dist/react/components.d.ts.map +1 -1
- package/dist/react/components.js +3 -2
- package/dist/react/guuey-chat.d.ts +32 -2
- package/dist/react/guuey-chat.d.ts.map +1 -1
- package/dist/react/guuey-chat.js +167 -16
- package/dist/react/structural-identity.d.ts +3 -0
- package/dist/react/structural-identity.d.ts.map +1 -0
- package/dist/react/structural-identity.js +45 -0
- package/dist/react/use-transcript.d.ts.map +1 -1
- package/dist/react/use-transcript.js +5 -3
- package/dist/strings.d.ts +4 -0
- package/dist/strings.d.ts.map +1 -1
- package/dist/strings.js +2 -0
- package/dist/types.d.ts +62 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/corpus/__snapshots__/corpus.test.ts.snap +269 -0
- package/src/index.ts +1 -0
- package/src/plan.ts +133 -37
- package/src/policy.ts +10 -3
- package/src/react/components.tsx +7 -2
- package/src/react/guuey-chat.tsx +218 -15
- package/src/react/structural-identity.ts +47 -0
- package/src/react/use-transcript.ts +5 -2
- package/src/strings.ts +6 -0
- package/src/types.ts +61 -5
- package/styles.css +10 -0
package/dist/react/guuey-chat.js
CHANGED
|
@@ -45,28 +45,73 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
45
45
|
* Web-only for now: the native tier ships `<NativeTranscript>` without a
|
|
46
46
|
* native GuueyChat, so there is no native surface to put a handle on yet.
|
|
47
47
|
*/
|
|
48
|
-
import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState, } from "react";
|
|
49
|
-
import { createUiResourceReader, createWebAdapters, } from "@guuey/agent-client";
|
|
48
|
+
import { forwardRef, useCallback, useEffect, useId, useImperativeHandle, useMemo, useRef, useState, } from "react";
|
|
49
|
+
import { createUiActionRelay, createUiResourceReader, createWebAdapters, } from "@guuey/agent-client";
|
|
50
50
|
import { useAgentInvoke } from "@guuey/agent-client/react";
|
|
51
|
+
import { unavailableToolCallResult } from "@guuey/mcp-apps-host";
|
|
51
52
|
import { calmPolicy, debugPolicy } from "../policy.js";
|
|
53
|
+
import { useStructuralIdentity } from "./structural-identity.js";
|
|
52
54
|
import { defaultChatStrings } from "../strings.js";
|
|
53
55
|
import { DEFAULT_CHAT_THEME } from "../theme.js";
|
|
54
56
|
import { Transcript } from "./transcript.js";
|
|
55
57
|
import { useTranscript, useTranscriptInputs } from "./use-transcript.js";
|
|
56
58
|
import { oauthPromptAction, useOAuthReturn } from "./oauth-return.js";
|
|
59
|
+
/**
|
|
60
|
+
* The kit-tier theme announce (guuey#302): default `hostContext.theme`
|
|
61
|
+
* from the transcript mode onto every view slot. A caller-declared
|
|
62
|
+
* `hostContext` key wins field-by-field; `theme` is only filled in.
|
|
63
|
+
* Exported for tests; not part of the package surface.
|
|
64
|
+
*/
|
|
65
|
+
export function viewPropsWithThemeAnnounce(viewProps, mode, defaults = {}) {
|
|
66
|
+
const themed = (base) => ({
|
|
67
|
+
// Kit-default host wires (guuey#335): the ACTION RELAY (Confirm inside
|
|
68
|
+
// a rendered card is a tools/call — without a relay the initialize-only
|
|
69
|
+
// host -32601s and the interaction visibly fails) and the
|
|
70
|
+
// model-context sink (a COMPLEMENT channel — producers mirror the
|
|
71
|
+
// snapshot server-side, so a recording sink is honest). A caller-
|
|
72
|
+
// declared slot prop always wins.
|
|
73
|
+
...defaults,
|
|
74
|
+
...base,
|
|
75
|
+
hostContext: { theme: mode, ...base?.hostContext },
|
|
76
|
+
});
|
|
77
|
+
if (typeof viewProps === "function") {
|
|
78
|
+
return (item, mount) => themed(viewProps(item, mount));
|
|
79
|
+
}
|
|
80
|
+
return themed(viewProps);
|
|
81
|
+
}
|
|
57
82
|
const PROMPT_STATE = {
|
|
58
83
|
accept: "answered",
|
|
59
84
|
decline: "declined",
|
|
60
85
|
dismiss: "dismissed",
|
|
61
86
|
};
|
|
62
87
|
export const GuueyChat = forwardRef(function GuueyChat(props, ref) {
|
|
63
|
-
const { endpointUrl, appId, apiBaseUrl, getAccessToken, getGuestSecret, adapters: adaptersProp, preset = "calm", policy: policyOverrides, components, strings: stringOverrides, theme = DEFAULT_CHAT_THEME, mode = "light", window: windowing, reader, onDebugEvent, viewProps, onPromptAction, onHitlAnswer, oauthReturnTo, onOAuthAuthorize, onErrorAction, onReady, onThread, className, style, } = props;
|
|
88
|
+
const { endpointUrl, appId, apiBaseUrl, getAccessToken, getGuestSecret, adapters: adaptersProp, preset = "calm", policy: policyOverrides, components, strings: stringOverrides, theme = DEFAULT_CHAT_THEME, mode = "light", window: windowing, reader, onDebugEvent, viewProps, promotedViewKey, onViewRef, onViewsChange, onPromptAction, onHitlAnswer, oauthReturnTo, onOAuthAuthorize, onErrorAction, onReady, onThread, className, style, } = props;
|
|
89
|
+
// Identity stabilization (guuey#303 QA — the template's own chat-rail
|
|
90
|
+
// shipped the failure): hosts pass inline literals and arrows, so prop
|
|
91
|
+
// IDENTITY is noise. The getter props route through refs (presence, not
|
|
92
|
+
// identity, is the re-mint trigger — flipping guest↔bearer is a real
|
|
93
|
+
// change; a fresh arrow per render is not), and the policy/strings
|
|
94
|
+
// overrides stabilize structurally below. Without this, every host
|
|
95
|
+
// re-render re-minted the plan, whose views-emission effect calls the
|
|
96
|
+
// host back → setState → re-render → "Maximum update depth exceeded".
|
|
97
|
+
const getAccessTokenRef = useRef(getAccessToken);
|
|
98
|
+
getAccessTokenRef.current = getAccessToken;
|
|
99
|
+
const getGuestSecretRef = useRef(getGuestSecret);
|
|
100
|
+
getGuestSecretRef.current = getGuestSecret;
|
|
101
|
+
const hasAccessToken = getAccessToken !== undefined;
|
|
102
|
+
const hasGuestSecret = getGuestSecret !== undefined;
|
|
64
103
|
const adapters = useMemo(() => adaptersProp ??
|
|
65
104
|
createWebAdapters({
|
|
66
105
|
...(apiBaseUrl !== undefined ? { apiBaseUrl } : {}),
|
|
67
|
-
...(
|
|
68
|
-
|
|
69
|
-
|
|
106
|
+
...(hasAccessToken
|
|
107
|
+
? {
|
|
108
|
+
getAccessToken: (opts) => getAccessTokenRef.current?.(opts) ?? Promise.resolve(null),
|
|
109
|
+
}
|
|
110
|
+
: {}),
|
|
111
|
+
...(hasGuestSecret
|
|
112
|
+
? { getGuestSecret: () => getGuestSecretRef.current?.() ?? null }
|
|
113
|
+
: {}),
|
|
114
|
+
}), [adaptersProp, apiBaseUrl, hasAccessToken, hasGuestSecret]);
|
|
70
115
|
const invoke = useAgentInvoke({ endpointUrl, ...(appId !== undefined ? { appId } : {}), adapters, preserveBlocks: true });
|
|
71
116
|
// Default reader (guuey#221): built over the SAME identity as the
|
|
72
117
|
// transport/history, targeting the pod door (live turns) then the
|
|
@@ -90,36 +135,139 @@ export const GuueyChat = forwardRef(function GuueyChat(props, ref) {
|
|
|
90
135
|
// the guest secret is re-resolved each call so a rotation takes
|
|
91
136
|
// effect immediately — the same per-request property
|
|
92
137
|
// `createWebAdapters` documents for its own resolvers.
|
|
138
|
+
// Getters read through the refs at CALL time — the reader's identity
|
|
139
|
+
// survives a host re-render handing in fresh arrows, and a rotated
|
|
140
|
+
// getter takes effect on the next read (the same per-request property
|
|
141
|
+
// `createWebAdapters` documents).
|
|
142
|
+
const getToken = getAccessTokenRef.current;
|
|
143
|
+
const getGuest = getGuestSecretRef.current;
|
|
93
144
|
const read = createUiResourceReader({
|
|
94
145
|
apiBaseUrl,
|
|
95
146
|
threadId,
|
|
96
147
|
endpointUrl,
|
|
97
|
-
...(
|
|
98
|
-
guestSecret:
|
|
148
|
+
...(getToken !== undefined ? { getAccessToken: getToken } : {}),
|
|
149
|
+
guestSecret: getGuest !== undefined ? getGuest() : null,
|
|
99
150
|
});
|
|
100
151
|
return read(resourceUri);
|
|
101
152
|
};
|
|
102
|
-
}, [apiBaseUrl, endpointUrl
|
|
153
|
+
}, [apiBaseUrl, endpointUrl]);
|
|
103
154
|
const effectiveReader = reader ?? defaultReader;
|
|
155
|
+
// Structurally-stable overrides: `policy={{ view: { … } }}` inline
|
|
156
|
+
// literals keep ONE identity while their contents hold still, so the
|
|
157
|
+
// policy (and through it the plan) does not re-mint per host render.
|
|
158
|
+
const stablePolicyOverrides = useStructuralIdentity(policyOverrides);
|
|
159
|
+
const stableStringOverrides = useStructuralIdentity(stringOverrides);
|
|
104
160
|
const policy = useMemo(() => {
|
|
105
161
|
const factory = preset === "debug" ? debugPolicy : calmPolicy;
|
|
106
162
|
const strings = {
|
|
107
163
|
...defaultChatStrings,
|
|
108
|
-
...
|
|
109
|
-
...
|
|
164
|
+
...stablePolicyOverrides?.strings,
|
|
165
|
+
...stableStringOverrides,
|
|
110
166
|
};
|
|
111
|
-
return factory({ ...
|
|
112
|
-
}, [preset,
|
|
167
|
+
return factory({ ...stablePolicyOverrides, strings });
|
|
168
|
+
}, [preset, stablePolicyOverrides, stableStringOverrides]);
|
|
113
169
|
const { inputs, resolvePrompt, answerHitlPrompt } = useTranscriptInputs(invoke);
|
|
170
|
+
// Memoized: once a chip is selected (`promotedViewKey` set) this object
|
|
171
|
+
// is on the plan's identity path — a per-render fresh spread here was the
|
|
172
|
+
// second leg of the render loop the template surfaced.
|
|
173
|
+
const transcriptInputs = useMemo(() => (promotedViewKey !== undefined ? { ...inputs, promotedViewKey } : inputs), [inputs, promotedViewKey]);
|
|
114
174
|
const { plan, toggle, resolvedMounts, onViewPhase, onViewDiagnosis } = useTranscript({
|
|
115
|
-
inputs,
|
|
175
|
+
inputs: transcriptInputs,
|
|
116
176
|
policy,
|
|
117
177
|
...(effectiveReader !== undefined ? { reader: effectiveReader } : {}),
|
|
118
178
|
...(onDebugEvent !== undefined ? { onDebugEvent } : {}),
|
|
119
179
|
});
|
|
180
|
+
// guuey#301: hand the host the plan's view roster whenever it changes —
|
|
181
|
+
// the stage renders the selected mount from it. Locator entries carry
|
|
182
|
+
// the RESOLUTION overlay (a stage mounts material, not identities):
|
|
183
|
+
// resolved material replaces the locator mount, a failed read surfaces
|
|
184
|
+
// as the expired phase. Ref'd callback so a host passing a fresh
|
|
185
|
+
// closure each render doesn't loop the effect.
|
|
186
|
+
const onViewsChangeRef = useRef(onViewsChange);
|
|
187
|
+
onViewsChangeRef.current = onViewsChange;
|
|
188
|
+
useEffect(() => {
|
|
189
|
+
if (onViewsChangeRef.current === undefined)
|
|
190
|
+
return;
|
|
191
|
+
const overlaid = plan.views.map((view) => {
|
|
192
|
+
const resolved = resolvedMounts.get(view.key);
|
|
193
|
+
if (resolved === undefined)
|
|
194
|
+
return view;
|
|
195
|
+
if (resolved === "expired")
|
|
196
|
+
return { ...view, phase: "expired" };
|
|
197
|
+
return { ...view, mount: resolved };
|
|
198
|
+
});
|
|
199
|
+
onViewsChangeRef.current(overlaid);
|
|
200
|
+
}, [plan.views, resolvedMounts]);
|
|
201
|
+
// The theme announce, completed at the kit tier (guuey#302): every
|
|
202
|
+
// inline mount carries `hostContext.theme` from the transcript's `mode`
|
|
203
|
+
// — render bundles read it at ui/initialize (ggui precedence: slice
|
|
204
|
+
// wins, host falls back — their #551/#573). A caller's explicit
|
|
205
|
+
// `viewProps.hostContext` keys win; `theme` is only defaulted. Hosts
|
|
206
|
+
// mounting views DIRECTLY (a canvas over the roster) announce on their
|
|
207
|
+
// own <GuueyView hostContext> — this covers the kit's own mounts.
|
|
208
|
+
// The DEFAULT ACTION RELAY (guuey#335 — the founder-hit Confirm bug):
|
|
209
|
+
// pod-then-persisted, built over the SAME identity as the reader, thread
|
|
210
|
+
// read through the ref at CALL time. Without it, a kit-mounted render's
|
|
211
|
+
// tools/call hits an initialize-only host and the card's interaction
|
|
212
|
+
// visibly fails — the #221 batteries-included treatment, applied to the
|
|
213
|
+
// ACTION half. No thread yet ⇒ the in-band unavailable result (a card
|
|
214
|
+
// cannot exist before its thread, but a race answers honestly).
|
|
215
|
+
const defaultOnCallTool = useMemo(() => {
|
|
216
|
+
if (apiBaseUrl === undefined)
|
|
217
|
+
return undefined;
|
|
218
|
+
return async (request) => {
|
|
219
|
+
const threadId = threadIdRef.current;
|
|
220
|
+
if (threadId === null)
|
|
221
|
+
return unavailableToolCallResult();
|
|
222
|
+
const getToken = getAccessTokenRef.current;
|
|
223
|
+
const getGuest = getGuestSecretRef.current;
|
|
224
|
+
const relay = createUiActionRelay({
|
|
225
|
+
apiBaseUrl,
|
|
226
|
+
threadId,
|
|
227
|
+
endpointUrl,
|
|
228
|
+
...(getToken !== undefined ? { getAccessToken: getToken } : {}),
|
|
229
|
+
guestSecret: getGuest !== undefined ? getGuest() : null,
|
|
230
|
+
});
|
|
231
|
+
return relay(request);
|
|
232
|
+
};
|
|
233
|
+
}, [apiBaseUrl, endpointUrl]);
|
|
234
|
+
// Model-context sink (guuey#335): the snapshot is a complement (producers
|
|
235
|
+
// mirror it server-side), so recording to the debug surface is the honest
|
|
236
|
+
// kit default — and answering the method keeps strict producers green.
|
|
237
|
+
const onDebugEventRef = useRef(onDebugEvent);
|
|
238
|
+
onDebugEventRef.current = onDebugEvent;
|
|
239
|
+
const defaultOnUpdateModelContext = useCallback((params) => {
|
|
240
|
+
onDebugEventRef.current?.({
|
|
241
|
+
type: "model-context-update",
|
|
242
|
+
byteSize: JSON.stringify(params)?.length ?? 0,
|
|
243
|
+
});
|
|
244
|
+
}, []);
|
|
245
|
+
const effectiveViewProps = useMemo(() => viewPropsWithThemeAnnounce(viewProps, mode, {
|
|
246
|
+
...(defaultOnCallTool !== undefined ? { onCallTool: defaultOnCallTool } : {}),
|
|
247
|
+
onUpdateModelContext: defaultOnUpdateModelContext,
|
|
248
|
+
}), [viewProps, mode, defaultOnCallTool, defaultOnUpdateModelContext]);
|
|
249
|
+
// The canvas-host door (guuey#335): a host mounting views DIRECTLY from
|
|
250
|
+
// the roster (the chat-rail shell) needs the SAME slot wiring the kit's
|
|
251
|
+
// inline mounts get — theme announce, action relay, context sink. Read
|
|
252
|
+
// through a ref so the lifetime-stable handle always hands out current
|
|
253
|
+
// wiring; a caller-passed FUNCTION-form viewProps resolves per transcript
|
|
254
|
+
// item only, so the handle returns the kit defaults in that case.
|
|
255
|
+
const staticSlotPropsRef = useRef({});
|
|
256
|
+
staticSlotPropsRef.current =
|
|
257
|
+
typeof effectiveViewProps === "function"
|
|
258
|
+
? {
|
|
259
|
+
...(defaultOnCallTool !== undefined ? { onCallTool: defaultOnCallTool } : {}),
|
|
260
|
+
onUpdateModelContext: defaultOnUpdateModelContext,
|
|
261
|
+
hostContext: { theme: mode },
|
|
262
|
+
}
|
|
263
|
+
: (effectiveViewProps ?? {});
|
|
120
264
|
// ── Composer ─────────────────────────────────────────────────────────
|
|
121
265
|
const [input, setInput] = useState("");
|
|
122
266
|
const inputRef = useRef(null);
|
|
267
|
+
// Browser form-field heuristics (a11y/autofill lints) flag a field with
|
|
268
|
+
// neither id nor name on every embedding site. useId keeps the id unique
|
|
269
|
+
// when several chats mount on one page — a static id would collide.
|
|
270
|
+
const composerId = useId();
|
|
123
271
|
const busy = invoke.status !== "ready";
|
|
124
272
|
const available = endpointUrl !== null;
|
|
125
273
|
const canSend = available && !busy && input.trim() !== "";
|
|
@@ -160,6 +308,9 @@ export const GuueyChat = forwardRef(function GuueyChat(props, ref) {
|
|
|
160
308
|
get threadId() {
|
|
161
309
|
return threadIdRef.current;
|
|
162
310
|
},
|
|
311
|
+
// Same live-read discipline as `threadId`: the ref always holds the
|
|
312
|
+
// CURRENT kit wiring (guuey#335 — the canvas-host door).
|
|
313
|
+
viewSlotProps: () => staticSlotPropsRef.current,
|
|
163
314
|
}), []);
|
|
164
315
|
useImperativeHandle(ref, () => handle, [handle]);
|
|
165
316
|
// `onThread` fires on the first hydrated id and on each DISTINCT change —
|
|
@@ -229,12 +380,12 @@ export const GuueyChat = forwardRef(function GuueyChat(props, ref) {
|
|
|
229
380
|
onPromptAction?.(item, action);
|
|
230
381
|
}, [resolvePrompt, answerHitlPrompt, onHitlAnswer, onPromptAction, oauthReturnTo, onOAuthAuthorize]);
|
|
231
382
|
const strings = policy.strings;
|
|
232
|
-
return (_jsxs("div", { className: `guuey-chat-surface${className !== undefined ? ` ${className}` : ""}`, style: style, children: [_jsx(Transcript, { plan: plan, strings: strings, theme: theme, mode: mode, ...(windowing !== undefined ? { window: windowing } : {}), ...(components !== undefined ? { components } : {}), onToggle: toggle, onRetry: handleRetry, onPromptAction: handlePromptAction, ...(onErrorAction !== undefined ? { onErrorAction } : {}), resolvedMounts: resolvedMounts, onViewPhase: onViewPhase, onViewDiagnosis: onViewDiagnosis, ...(
|
|
383
|
+
return (_jsxs("div", { className: `guuey-chat-surface${className !== undefined ? ` ${className}` : ""}`, style: style, children: [_jsx(Transcript, { plan: plan, strings: strings, theme: theme, mode: mode, ...(windowing !== undefined ? { window: windowing } : {}), ...(components !== undefined ? { components } : {}), onToggle: toggle, onRetry: handleRetry, onPromptAction: handlePromptAction, ...(onErrorAction !== undefined ? { onErrorAction } : {}), resolvedMounts: resolvedMounts, onViewPhase: onViewPhase, onViewDiagnosis: onViewDiagnosis, ...(onViewRef !== undefined ? { onViewRef } : {}), viewProps: effectiveViewProps }), oauthReturn.notice !== null && (_jsxs("p", { role: "status", className: `guuey-chat-oauth-notice guuey-chat-oauth-${oauthReturn.notice.kind}`, children: [oauthReturn.notice.kind === "connected"
|
|
233
384
|
? strings.oauthConnected(oauthReturn.notice.serverName)
|
|
234
385
|
: strings.oauthFailed(oauthReturn.notice.reason), _jsx("button", { type: "button", className: "guuey-chat-oauth-dismiss", onClick: oauthReturn.dismiss, children: strings.promptDismissed })] })), _jsxs("form", { className: "guuey-chat-composer", onSubmit: (e) => {
|
|
235
386
|
e.preventDefault();
|
|
236
387
|
submit();
|
|
237
|
-
}, children: [_jsx("textarea", { ref: inputRef, className: "guuey-chat-composer-input", rows: 1, value: input, onChange: (e) => setInput(e.target.value), onKeyDown: (e) => {
|
|
388
|
+
}, children: [_jsx("textarea", { ref: inputRef, id: composerId, name: "message", className: "guuey-chat-composer-input", rows: 1, value: input, onChange: (e) => setInput(e.target.value), onKeyDown: (e) => {
|
|
238
389
|
// `isComposing` guards IME input: an Enter that commits a
|
|
239
390
|
// candidate must not also send the message.
|
|
240
391
|
if (e.key === "Enter" && !e.shiftKey && !e.nativeEvent.isComposing) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-identity.d.ts","sourceRoot":"","sources":["../../src/react/structural-identity.ts"],"names":[],"mappings":"AAwBA,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAgBjE;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAIpD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identity stabilization for host-supplied prop OBJECTS (guuey#303 QA).
|
|
3
|
+
*
|
|
4
|
+
* Hosts write `<GuueyChat policy={{ view: { presentation: "chips" } }}>` —
|
|
5
|
+
* a fresh object identity every render. Anything memo-keyed on that
|
|
6
|
+
* identity would re-mint per render, and anything the re-mint feeds into a
|
|
7
|
+
* `useEffect` → host `setState` edge becomes an infinite render loop (the
|
|
8
|
+
* template's chat-rail shipped exactly that). Identity is not a contract
|
|
9
|
+
* hosts signed up for; structure is.
|
|
10
|
+
*
|
|
11
|
+
* `useStructuralIdentity` returns the PREVIOUS reference while the new
|
|
12
|
+
* value is structurally equal, so downstream memos see one identity per
|
|
13
|
+
* structural value. Functions (and anything else non-plain) compare by
|
|
14
|
+
* reference — a policy override carrying an inline closure (for example
|
|
15
|
+
* `strings.humanizeTitle`) still churns; hoist such overrides.
|
|
16
|
+
*/
|
|
17
|
+
import { useRef } from "react";
|
|
18
|
+
function isPlainObject(value) {
|
|
19
|
+
if (typeof value !== "object" || value === null)
|
|
20
|
+
return false;
|
|
21
|
+
const proto = Object.getPrototypeOf(value);
|
|
22
|
+
return proto === Object.prototype || proto === null;
|
|
23
|
+
}
|
|
24
|
+
export function structurallyEqual(a, b) {
|
|
25
|
+
if (Object.is(a, b))
|
|
26
|
+
return true;
|
|
27
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
28
|
+
return a.length === b.length && a.every((item, i) => structurallyEqual(item, b[i]));
|
|
29
|
+
}
|
|
30
|
+
if (isPlainObject(a) && isPlainObject(b)) {
|
|
31
|
+
const aKeys = Object.keys(a);
|
|
32
|
+
const bKeys = Object.keys(b);
|
|
33
|
+
return (aKeys.length === bKeys.length &&
|
|
34
|
+
aKeys.every((key) => Object.hasOwn(b, key) && structurallyEqual(a[key], b[key])));
|
|
35
|
+
}
|
|
36
|
+
// Functions, class instances, Maps, … — reference identity only (already
|
|
37
|
+
// handled by Object.is above).
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
export function useStructuralIdentity(value) {
|
|
41
|
+
const ref = useRef(value);
|
|
42
|
+
if (!structurallyEqual(ref.current, value))
|
|
43
|
+
ref.current = value;
|
|
44
|
+
return ref.current;
|
|
45
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-transcript.d.ts","sourceRoot":"","sources":["../../src/react/use-transcript.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA+D,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEhH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EAEP,gBAAgB,EAEhB,mBAAmB,EACnB,cAAc,EACf,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,wEAAwE;IACxE,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/B,mEAAmE;IACnE,SAAS,EAAE,mBAAmB,CAAC;IAC/B,0EAA0E;IAC1E,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1D;;;;OAIG;IACH,eAAe,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrE,sEAAsE;IACtE,cAAc,EAAE,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC,CAAC;CACrE;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,MAAM,EACN,MAAM,EACN,YAAY,GACb,EAAE,iBAAiB,GAAG,mBAAmB,
|
|
1
|
+
{"version":3,"file":"use-transcript.d.ts","sourceRoot":"","sources":["../../src/react/use-transcript.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA+D,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEhH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EAEP,gBAAgB,EAEhB,mBAAmB,EACnB,cAAc,EACf,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,wEAAwE;IACxE,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/B,mEAAmE;IACnE,SAAS,EAAE,mBAAmB,CAAC;IAC/B,0EAA0E;IAC1E,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1D;;;;OAIG;IACH,eAAe,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrE,sEAAsE;IACtE,cAAc,EAAE,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC,CAAC;CACrE;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,MAAM,EACN,MAAM,EACN,YAAY,GACb,EAAE,iBAAiB,GAAG,mBAAmB,CAsIzC;AAID,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,gBAAgB,CAAC;IACzB;;;;;OAKG;IACH,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,KAAK,IAAI,CAAC;IAClF;;;;;;;;OAQG;IACH,gBAAgB,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,KAAK,YAAY,CAAC;CAChF;AAKD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,yBAAyB,CAsH3F"}
|
|
@@ -109,13 +109,15 @@ export function useTranscript({ inputs, policy, reader, onDebugEvent, }) {
|
|
|
109
109
|
}
|
|
110
110
|
}, [plan]);
|
|
111
111
|
// Locator resolution — one read per locator key, misses become "expired".
|
|
112
|
+
// Walks the plan's VIEWS roster, not the display items: under the chips
|
|
113
|
+
// presentation (guuey#301) no inline mount renders, but the host's canvas
|
|
114
|
+
// still needs every locator resolved — the roster is presentation-
|
|
115
|
+
// independent, so resolution is too.
|
|
112
116
|
const readerRef = useRef(reader);
|
|
113
117
|
readerRef.current = reader;
|
|
114
118
|
const inFlight = useRef(new Set());
|
|
115
119
|
useEffect(() => {
|
|
116
|
-
for (const item of plan.
|
|
117
|
-
if (item.kind !== "view")
|
|
118
|
-
continue;
|
|
120
|
+
for (const item of plan.views) {
|
|
119
121
|
if (item.mount === null || item.mount.channel !== "locator")
|
|
120
122
|
continue;
|
|
121
123
|
if (resolvedMounts.has(item.key) || inFlight.current.has(item.key))
|
package/dist/strings.d.ts
CHANGED
|
@@ -60,6 +60,10 @@ export interface ChatStrings {
|
|
|
60
60
|
}) => string;
|
|
61
61
|
/** guuey#204: the chip text for a mount promoted to a host stage/canvas. */
|
|
62
62
|
viewPromoted: (title: string) => string;
|
|
63
|
+
/** guuey#301 chips presentation: an unselected, mountable view's chip text. */
|
|
64
|
+
viewChip: (title: string) => string;
|
|
65
|
+
/** guuey#301 chips presentation: an expired/dead view's chip text (honest state). */
|
|
66
|
+
viewChipExpired: (title: string) => string;
|
|
63
67
|
/** Chip title when the mount has no producing-call title (history cards). */
|
|
64
68
|
viewRefFallbackTitle: string;
|
|
65
69
|
/** #192 debug-preset marker (calm never shows it — spec §3, F10). */
|
package/dist/strings.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"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"}
|
package/dist/strings.js
CHANGED
|
@@ -30,6 +30,8 @@ export const defaultChatStrings = {
|
|
|
30
30
|
viewSandboxUnavailable: "Interactive view unavailable",
|
|
31
31
|
viewCspBlocked: (d) => `This page's Content-Security-Policy blocks ${d.blockedUri} — add "${d.violatedDirective} ${d.suggestedEntry}" to the policy so the view can start`,
|
|
32
32
|
viewPromoted: (title) => `${title} — on canvas`,
|
|
33
|
+
viewChip: (title) => title,
|
|
34
|
+
viewChipExpired: (title) => `${title} — expired`,
|
|
33
35
|
viewRefFallbackTitle: "Card",
|
|
34
36
|
recoveredFromHistory: "recovered from history",
|
|
35
37
|
noOutput: "no output",
|
package/dist/types.d.ts
CHANGED
|
@@ -138,9 +138,11 @@ export interface TranscriptInputs {
|
|
|
138
138
|
* {@link ViewMountItem}, so an interactive surface exists exactly ONCE.
|
|
139
139
|
* Absent (or matching nothing / an expired mount) = today's behavior —
|
|
140
140
|
* every mount renders inline. Hosts derive the key with
|
|
141
|
-
* {@link newestViewKey} rather than hand-building it
|
|
142
|
-
*
|
|
143
|
-
*
|
|
141
|
+
* {@link newestViewKey} rather than hand-building it. Set per host
|
|
142
|
+
* click (via `onViewRef`) this is the SELECTION half of guuey#301's
|
|
143
|
+
* browser-history mechanic; the collapse-ALL-views half is the policy
|
|
144
|
+
* knob `view.presentation: "chips"` — the two compose, this field alone
|
|
145
|
+
* never chips more than the one promoted view.
|
|
144
146
|
*/
|
|
145
147
|
promotedViewKey?: string;
|
|
146
148
|
/** The last turn ended by user abort (R1 aborted-partial + "Stopped."). */
|
|
@@ -269,8 +271,23 @@ export interface ViewRefItem extends BaseItem {
|
|
|
269
271
|
kind: "viewRef";
|
|
270
272
|
/** The display title (the producing call's, or the strings fallback). */
|
|
271
273
|
title: string;
|
|
272
|
-
/**
|
|
274
|
+
/**
|
|
275
|
+
* The full resolved chip text — `strings.viewPromoted(title)` for the
|
|
276
|
+
* selected chip, `strings.viewChip(title)` / `viewChipExpired(title)`
|
|
277
|
+
* for the rest under chips presentation (guuey#301).
|
|
278
|
+
*/
|
|
273
279
|
label: string;
|
|
280
|
+
/**
|
|
281
|
+
* True when this chip's mount is the one the host's stage currently
|
|
282
|
+
* shows (`key === promotedViewKey` and mountable). Renderers style it
|
|
283
|
+
* as the active history entry (guuey#301).
|
|
284
|
+
*/
|
|
285
|
+
selected: boolean;
|
|
286
|
+
/**
|
|
287
|
+
* The underlying mount's phase — chips presentation keeps expired /
|
|
288
|
+
* unresolved views honest instead of hiding their state (guuey#301).
|
|
289
|
+
*/
|
|
290
|
+
phase: ViewHostPhase | "expired";
|
|
274
291
|
}
|
|
275
292
|
/** R7 — media blocks. */
|
|
276
293
|
export interface MediaItem extends BaseItem {
|
|
@@ -435,7 +452,42 @@ export type ChatDebugEvent = {
|
|
|
435
452
|
} | {
|
|
436
453
|
type: "turn-recovered";
|
|
437
454
|
marker: string;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* A view pushed a `ui/update-model-context` snapshot and the kit's
|
|
458
|
+
* default sink recorded it (guuey#335). The snapshot itself is a
|
|
459
|
+
* COMPLEMENT — producers mirror it server-side — so the debug surface
|
|
460
|
+
* carries the fact and the size, not the payload.
|
|
461
|
+
*/
|
|
462
|
+
| {
|
|
463
|
+
type: "model-context-update";
|
|
464
|
+
byteSize: number;
|
|
438
465
|
};
|
|
466
|
+
/**
|
|
467
|
+
* One renderable view the plan saw, BEFORE any chips/promotion pass —
|
|
468
|
+
* the host-canvas contract (guuey#301): everything a stage needs to
|
|
469
|
+
* render the selected mount and label a history rail, in transcript
|
|
470
|
+
* order (history cards first, live mounts after — the same order the
|
|
471
|
+
* items carry).
|
|
472
|
+
*/
|
|
473
|
+
export interface PlanViewSummary {
|
|
474
|
+
key: ItemKey;
|
|
475
|
+
/** The display title (the producing call's, or the strings fallback). */
|
|
476
|
+
title: string;
|
|
477
|
+
phase: ViewHostPhase | "expired";
|
|
478
|
+
channel: ViewMountChannel | null;
|
|
479
|
+
/** Null when the locator is dead (the R13 expired path). */
|
|
480
|
+
mount: ViewMount | null;
|
|
481
|
+
/** The persisted `ui://` locator actions bind to (guuey#158), or null. */
|
|
482
|
+
actionScope: string | null;
|
|
483
|
+
/**
|
|
484
|
+
* Provenance: a LIVE fold mount vs a persisted HISTORY card. The roster
|
|
485
|
+
* is in transcript order (history cards sit with the settled prefix), so
|
|
486
|
+
* "newest" recency needs this — live outranks history, exactly
|
|
487
|
+
* {@link newestViewKey}'s walk.
|
|
488
|
+
*/
|
|
489
|
+
origin: "live" | "history";
|
|
490
|
+
}
|
|
439
491
|
export interface TranscriptPlan {
|
|
440
492
|
/** Ordered, stable keys (spec §7's determinism contract). */
|
|
441
493
|
items: DisplayItem[];
|
|
@@ -447,6 +499,12 @@ export interface TranscriptPlan {
|
|
|
447
499
|
* byte-identical to a streamed turn's (fixture 17).
|
|
448
500
|
*/
|
|
449
501
|
recovery: string | null;
|
|
502
|
+
/**
|
|
503
|
+
* Every view the plan saw (guuey#301's host-canvas contract) — present
|
|
504
|
+
* regardless of `view.presentation`, so a stage can render the selected
|
|
505
|
+
* mount even when the transcript shows only chips.
|
|
506
|
+
*/
|
|
507
|
+
views: PlanViewSummary[];
|
|
450
508
|
}
|
|
451
509
|
export {};
|
|
452
510
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,QAAQ,EACR,SAAS,EACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC;IACjC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;CAC1D;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACzD,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,kBAAkB,GAAG,eAAe,CAAC;AAEnE,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,iFAAiF;IACjF,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,iFAAiF;IACjF,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,kDAAkD;IAClD,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C,iFAAiF;IACjF,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;IAC5D,yEAAyE;IACzE,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACrD;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC3D
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,QAAQ,EACR,SAAS,EACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC;IACjC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;CAC1D;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACzD,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,kBAAkB,GAAG,eAAe,CAAC;AAEnE,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,iFAAiF;IACjF,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,iFAAiF;IACjF,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,kDAAkD;IAClD,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C,iFAAiF;IACjF,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;IAC5D,yEAAyE;IACzE,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACrD;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC3D;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,uEAAuE;AACvE,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,+EAA+E;AAC/E,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAAC;AAIpF,UAAU,QAAQ;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,kCAAkC;AAClC,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrC,6EAA6E;IAC7E,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,2BAA2B;AAC3B,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,sBAAsB;AACtB,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,aAAa,CAAC;IACpB;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC9C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,yCAAyC;AACzC,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAClD,sEAAsE;IACtE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,uEAAuE;IACvE,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,6DAA6D;AAC7D,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,sDAAsD;IACtD,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,iFAAiF;IACjF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;;OAIG;IACH,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,mEAAmE;IACnE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kFAAkF;IAClF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,IAAI,EAAE,SAAS,CAAC;IAChB,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;CAClC;AAED,yBAAyB;AACzB,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IAC/C,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,QAAQ,GAAG,MAAM,CAAC;CACjC;AAED,wBAAwB;AACxB,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,mDAAmD;AACnD,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IACxD,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB;AAED,wEAAwE;AACxE,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,IAAI,EAAE,QAAQ,CAAC;IACf,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC;IACjC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACzD,8DAA8D;IAC9D,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,4FAA4F;IAC5F,GAAG,EAAE,WAAW,CAAC;IACjB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,oEAAoE;IACpE,UAAU,EAAE,SAAS,WAAW,EAAE,CAAC;IACnC;;;;;;OAMG;IACH,KAAK,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACtE,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACzD,yEAAyE;IACzE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,sFAAsF;IACtF,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,8DAA8D;IAC9D,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;CACvB;AAED,0CAA0C;AAC1C,MAAM,MAAM,UAAU,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,+EAA+E;IAC/E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,gDAAgD;AAChD,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,IAAI,EAAE,OAAO,CAAC;IACd;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;IACnD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,iDAAiD;AACjD,MAAM,WAAW,mBAAoB,SAAQ,QAAQ;IACnD,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,6EAA6E;AAC7E,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,WAAW,GACnB,eAAe,GACf,QAAQ,GACR,aAAa,GACb,QAAQ,GACR,aAAa,GACb,cAAc,GACd,aAAa,GACb,WAAW,GACX,SAAS,GACT,QAAQ,GACR,aAAa,GACb,UAAU,GACV,UAAU,GACV,SAAS,GACT,mBAAmB,GACnB,cAAc,GACd,WAAW,CAAC;AAEhB,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EACD,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,SAAS,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,8EAA8E;IAC9E,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B,GACD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC5C;;;;;GAKG;GACD;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,OAAO,CAAC;IACb,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,4DAA4D;IAC5D,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;OAKG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,kEAAkE;IAClE,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;OAIG;IACH,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@guuey/chat",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "The default end-user transcript UI for guuey agents — the headless view-model (planTranscript), calm/debug presets, the GuueyChatTheme token schema, the ChatStrings i18n seam, and (at ./react) the component kit that renders it: per-category components, <Transcript>, the live + history input assemblers, and stick-to-bottom/windowed/accessible transcript behavior; at ./native, the React Native renderer over the same view-model.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"@silverprotocol/core": "0.5.0",
|
|
40
40
|
"@silverprotocol/richtext": "0.5.0",
|
|
41
41
|
"zod": "^4.3.6",
|
|
42
|
-
"@guuey/mcp-apps-host": "0.
|
|
43
|
-
"@guuey/agent-client": "0.
|
|
42
|
+
"@guuey/mcp-apps-host": "0.12.0",
|
|
43
|
+
"@guuey/agent-client": "0.12.0"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
46
|
"react": ">=18",
|