@guuey/chat 0.7.1 → 0.8.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/README.md +13 -0
- package/dist/hitl.d.ts +5 -0
- package/dist/hitl.d.ts.map +1 -1
- package/dist/hitl.js +5 -0
- package/dist/native/components.d.ts.map +1 -1
- package/dist/native/components.js +1 -3
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +9 -1
- package/dist/react/components.d.ts +8 -2
- package/dist/react/components.d.ts.map +1 -1
- package/dist/react/components.js +2 -4
- package/dist/react/guuey-chat.d.ts.map +1 -1
- package/dist/react/guuey-chat.js +2 -2
- package/dist/react/transcript.d.ts +1 -1
- package/dist/react/transcript.d.ts.map +1 -1
- package/dist/react/transcript.js +13 -2
- package/dist/react/use-transcript.d.ts +10 -4
- package/dist/react/use-transcript.d.ts.map +1 -1
- package/dist/react/use-transcript.js +33 -30
- package/dist/strings.d.ts +11 -0
- package/dist/strings.d.ts.map +1 -1
- package/dist/strings.js +1 -0
- package/dist/types.d.ts +31 -12
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/corpus/__snapshots__/corpus.test.ts.snap +52 -7
- package/src/corpus/drive.ts +43 -12
- package/src/corpus/fixtures.ts +18 -4
- package/src/hitl.ts +5 -0
- package/src/native/components.tsx +1 -3
- package/src/plan.ts +9 -2
- package/src/react/components.tsx +10 -6
- package/src/react/guuey-chat.tsx +2 -1
- package/src/react/transcript.tsx +23 -3
- package/src/react/use-transcript.ts +42 -36
- package/src/strings.ts +13 -0
- package/src/types.ts +41 -13
package/README.md
CHANGED
|
@@ -105,6 +105,19 @@ string (`ChatStrings`, the i18n seam) without forfeiting the rest:
|
|
|
105
105
|
calmPolicy({ toolGroup: { threshold: 3 }, strings: { thinking: "Pondering…" } });
|
|
106
106
|
```
|
|
107
107
|
|
|
108
|
+
## Strict-CSP hosts
|
|
109
|
+
|
|
110
|
+
Generated views boot a runtime and open a live channel to their MCP host;
|
|
111
|
+
a page CSP that omits those origins leaves the frame blank. Pass the view's
|
|
112
|
+
declared origins via `viewProps={{ cspOrigins: { resourceDomains, connectDomains } }}`
|
|
113
|
+
and a policy violation your page incurs on them upgrades the "didn't start"
|
|
114
|
+
label into the exact allowance to add. And on a policy without
|
|
115
|
+
`'unsafe-eval'`, zod v4 (a dependency) reports one `script-src eval`
|
|
116
|
+
violation at boot from its `new Function("")` probe — harmless, but noise
|
|
117
|
+
on that same channel; opt out with `z.config({ jitless: true })` in a
|
|
118
|
+
side-effect module that is your entry's FIRST import. Full notes on
|
|
119
|
+
docs.guuey.com → Chat UI kit → "Strict Content-Security-Policy hosts".
|
|
120
|
+
|
|
108
121
|
## Theme
|
|
109
122
|
|
|
110
123
|
`GuueyChatTheme` is a serializable token schema (zod) — the same object a
|
package/dist/hitl.d.ts
CHANGED
|
@@ -19,6 +19,11 @@
|
|
|
19
19
|
* Answer states encode guuey's ratified dismissal ruling (#16): dismissal
|
|
20
20
|
* maps to `cancelled` (still-pending, re-askable — the card stays
|
|
21
21
|
* answerable), `declined` is the durable explicit deny.
|
|
22
|
+
*
|
|
23
|
+
* The first producer is the guuey runtime's cross-app profile consent
|
|
24
|
+
* (guuey#207): the pod appends a paused turn whose ask declares
|
|
25
|
+
* `grantModes: [always, once?]`; the host delivers the built answer through
|
|
26
|
+
* `@guuey/agent-client`'s `createHitlAnswerRelay` (`POST <pod>/agent/hitl-answer`).
|
|
22
27
|
*/
|
|
23
28
|
import { type AgGrantMode, type AgHitlAnswer, type AgPausedAsk, type AgReduceResult } from "@silverprotocol/core";
|
|
24
29
|
import type { HitlPromptInput } from "./types.js";
|
package/dist/hitl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hitl.d.ts","sourceRoot":"","sources":["../src/hitl.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hitl.d.ts","sourceRoot":"","sources":["../src/hitl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,oFAAoF;AACpF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IAC9C,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,+EAA+E;AAC/E,MAAM,MAAM,gBAAgB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1F;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAM,GACvD,eAAe,EAAE,CAiBnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,GAAG,YAAY,CAexF"}
|
package/dist/hitl.js
CHANGED
|
@@ -19,6 +19,11 @@
|
|
|
19
19
|
* Answer states encode guuey's ratified dismissal ruling (#16): dismissal
|
|
20
20
|
* maps to `cancelled` (still-pending, re-askable — the card stays
|
|
21
21
|
* answerable), `declined` is the durable explicit deny.
|
|
22
|
+
*
|
|
23
|
+
* The first producer is the guuey runtime's cross-app profile consent
|
|
24
|
+
* (guuey#207): the pod appends a paused turn whose ask declares
|
|
25
|
+
* `grantModes: [always, once?]`; the host delivers the built answer through
|
|
26
|
+
* `@guuey/agent-client`'s `createHitlAnswerRelay` (`POST <pod>/agent/hitl-answer`).
|
|
22
27
|
*/
|
|
23
28
|
import { validateHitlAnswer, } from "@silverprotocol/core";
|
|
24
29
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/native/components.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/native/components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -209,9 +209,7 @@ export function NativePrompt({ item, ctx }) {
|
|
|
209
209
|
, {
|
|
210
210
|
// RN has no document focus to move; the live region announces the ask
|
|
211
211
|
// (the web kit's focus contract, restated over the platform).
|
|
212
|
-
accessibilityLiveRegion: "polite", accessible: true, style: { backgroundColor: tokens.palette.surface, borderRadius: tokens.radius, padding: tokens.pad, gap: 8 }, children: [_jsx(Text, { style: { color: tokens.palette.ink, fontSize: tokens.fontSize, fontFamily: tokens.fontFamily }, children: item.
|
|
213
|
-
? `${item.appId} requests ${item.requested} access`
|
|
214
|
-
: `Link your account to ${item.appId}` }), _jsxs(View, { style: { flexDirection: "row", gap: 12 }, children: [_jsx(Pressable, { accessibilityRole: "button", onPress: () => ctx.onPromptAction?.(item, "accept"), children: _jsx(Text, { style: { color: tokens.palette.accent, fontWeight: "700", fontSize: tokens.fontSize }, children: "Allow" }) }), _jsx(Pressable, { accessibilityRole: "button", onPress: () => ctx.onPromptAction?.(item, "decline"), children: _jsx(Text, { style: { color: tokens.palette.inkMuted, fontSize: tokens.fontSize }, children: "Decline" }) })] })] }));
|
|
212
|
+
accessibilityLiveRegion: "polite", accessible: true, style: { backgroundColor: tokens.palette.surface, borderRadius: tokens.radius, padding: tokens.pad, gap: 8 }, children: [_jsx(Text, { style: { color: tokens.palette.ink, fontSize: tokens.fontSize, fontFamily: tokens.fontFamily }, children: `Link your account to ${item.appId}` }), _jsxs(View, { style: { flexDirection: "row", gap: 12 }, children: [_jsx(Pressable, { accessibilityRole: "button", onPress: () => ctx.onPromptAction?.(item, "accept"), children: _jsx(Text, { style: { color: tokens.palette.accent, fontWeight: "700", fontSize: tokens.fontSize }, children: "Allow" }) }), _jsx(Pressable, { accessibilityRole: "button", onPress: () => ctx.onPromptAction?.(item, "decline"), children: _jsx(Text, { style: { color: tokens.palette.inkMuted, fontSize: tokens.fontSize }, children: "Decline" }) })] })] }));
|
|
215
213
|
}
|
|
216
214
|
// ─── R16 ──────────────────────────────────────────────────────────────────
|
|
217
215
|
/** The notice row (spec draft.2) — labeled, non-conversational, never agent-voiced. */
|
package/dist/plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAkCA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,KAAK,EASV,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EAIf,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAkCA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,KAAK,EASV,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EAIf,MAAM,YAAY,CAAC;AA0mBpB,uCAAuC;AACvC,wBAAgB,cAAc,CAC5B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,mBAAwB,GAClC,cAAc,CA4QhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,cAAc,CAAC,GACxD;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAAE,GAAG,SAAS,CAiB5D"}
|
package/dist/plan.js
CHANGED
|
@@ -187,6 +187,11 @@ function viewLabel(item, policy) {
|
|
|
187
187
|
case "expired":
|
|
188
188
|
return s.viewExpired;
|
|
189
189
|
case "no-handshake":
|
|
190
|
+
// The host's CSP tripwire outranks the channel heuristic (guuey#235):
|
|
191
|
+
// a blocked runtime never negotiates on ANY channel, and the verdict
|
|
192
|
+
// is actionable — name the blocked URI and the allowance.
|
|
193
|
+
if (item.diagnosis !== null)
|
|
194
|
+
return s.viewCspBlocked(item.diagnosis);
|
|
190
195
|
// Channel-aware (R6): a ggui shell that never handshakes is a boot
|
|
191
196
|
// failure; inline tenant HTML may legitimately be a non-App document.
|
|
192
197
|
// Keyed on the TRUST channel (locators resolve to it by uri), not the
|
|
@@ -318,6 +323,7 @@ function planAssistantSource(source, slot, inputs, policy, overrides) {
|
|
|
318
323
|
channel: mount.channel,
|
|
319
324
|
phase: inputs.viewPhases?.[viewKey] ?? "negotiating",
|
|
320
325
|
label: null,
|
|
326
|
+
diagnosis: inputs.viewDiagnoses?.[viewKey] ?? null,
|
|
321
327
|
attribution: policy.debugDetail ? null : policy.strings.viaTool(tool.title),
|
|
322
328
|
toolTitle: tool.title,
|
|
323
329
|
// `result` is narrowed by `mount !== undefined` above; the scope
|
|
@@ -699,6 +705,7 @@ export function planTranscript(inputs, policy, overrides = {}) {
|
|
|
699
705
|
channel: mount?.channel ?? null,
|
|
700
706
|
phase: mount === undefined ? "expired" : (inputs.viewPhases?.[key] ?? "negotiating"),
|
|
701
707
|
label: null,
|
|
708
|
+
diagnosis: mount === undefined ? null : (inputs.viewDiagnoses?.[key] ?? null),
|
|
702
709
|
attribution: null,
|
|
703
710
|
toolTitle: null,
|
|
704
711
|
actionScope: scope,
|
|
@@ -707,7 +714,8 @@ export function planTranscript(inputs, policy, overrides = {}) {
|
|
|
707
714
|
items.push(view);
|
|
708
715
|
}
|
|
709
716
|
// R10 — prompts, in input order (narrow on `kind`: the guuey-wire
|
|
710
|
-
//
|
|
717
|
+
// link-invite arm vs the AgJSON hitl arm — spec draft.2; consent rides
|
|
718
|
+
// hitl since guuey#207).
|
|
711
719
|
for (const prompt of inputs.prompts) {
|
|
712
720
|
const key = `p.${prompt.id}`;
|
|
713
721
|
if (prompt.kind === "hitl") {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import { type ComponentType, type ReactNode } from "react";
|
|
22
22
|
import { type GuueyViewProps } from "@guuey/mcp-apps-host/react";
|
|
23
|
-
import type { ResolvedViewMount, ViewHostPhase } from "@guuey/mcp-apps-host";
|
|
23
|
+
import type { ResolvedViewMount, ViewCspDiagnosis, ViewHostPhase } from "@guuey/mcp-apps-host";
|
|
24
24
|
import type { ChatStrings } from "../strings.js";
|
|
25
25
|
import type { CitationsItem, CodeItem, CompactionItem, DataResultItem, DisplayItem, ErrorItem, HistoryBoundaryItem, ItemKey, MediaItem, NoticeItem, PromptItem, ReasoningItem, StatusLineItem, ToolGroupItem, ToolItem, UnknownItem, UserMessageItem, TextItem, ViewMountItem, ViewRefItem } from "../types.js";
|
|
26
26
|
/** Everything a rendered item may need beyond itself. */
|
|
@@ -44,6 +44,12 @@ export interface TranscriptItemContext {
|
|
|
44
44
|
resolvedMounts: ReadonlyMap<ItemKey, ResolvedViewMount | "expired">;
|
|
45
45
|
/** R6: live phase reports wired back into the next plan. */
|
|
46
46
|
onViewPhase: (key: ItemKey, phase: ViewHostPhase) => void;
|
|
47
|
+
/**
|
|
48
|
+
* R6: the host's CSP tripwire diagnosed the embedding page blocking a
|
|
49
|
+
* view (guuey#235) — wired back so the label names the cause. Optional:
|
|
50
|
+
* a hand-wired host that omits it simply keeps the channel heuristic.
|
|
51
|
+
*/
|
|
52
|
+
onViewDiagnosis?: (key: ItemKey, diagnosis: ViewCspDiagnosis) => void;
|
|
47
53
|
/**
|
|
48
54
|
* guuey#204: a promoted-view reference chip was activated — the host
|
|
49
55
|
* focuses/reveals its stage (canvas). Absent ⇒ the chip renders as a
|
|
@@ -63,7 +69,7 @@ export interface TranscriptItemContext {
|
|
|
63
69
|
viewProps?: ViewSlotProps | ((item: ViewMountItem, mount: ResolvedViewMount) => ViewSlotProps);
|
|
64
70
|
}
|
|
65
71
|
/** The per-view slice of `GuueyViewProps` a transcript may configure. */
|
|
66
|
-
export type ViewSlotProps = Pick<GuueyViewProps, "hostCapabilities" | "hostInfo" | "hostContext" | "onCallTool" | "onReadResource" | "onSizeChanged" | "negotiationTimeoutMs" | "dangerouslyAddSandboxFlags" | "allow" | "sandboxPageUrl" | "autoResize">;
|
|
72
|
+
export type ViewSlotProps = Pick<GuueyViewProps, "hostCapabilities" | "hostInfo" | "hostContext" | "onCallTool" | "onReadResource" | "onSizeChanged" | "negotiationTimeoutMs" | "dangerouslyAddSandboxFlags" | "allow" | "sandboxPageUrl" | "autoResize" | "cspOrigins">;
|
|
67
73
|
interface ItemProps<T> {
|
|
68
74
|
item: T;
|
|
69
75
|
ctx: TranscriptItemContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/react/components.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/react/components.tsx"],"names":[],"mappings":"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"}
|
package/dist/react/components.js
CHANGED
|
@@ -101,7 +101,7 @@ export function DefaultView({ item, ctx }) {
|
|
|
101
101
|
// The function form resolves against the ACTUAL mount (per-channel relay
|
|
102
102
|
// URLs, per-locator action scoping); it runs only when something mounts.
|
|
103
103
|
const viewProps = typeof ctx.viewProps === "function" ? ctx.viewProps(item, mount) : (ctx.viewProps ?? {});
|
|
104
|
-
return (_jsxs("div", { className: "guuey-chat-view", children: [_jsx(GuueyView, { mount: mount, ...viewProps, onPhaseChange: (phase) => ctx.onViewPhase(item.key, phase) }), item.attribution !== null ? (_jsx("p", { className: "guuey-chat-attribution", children: item.attribution })) : null] }));
|
|
104
|
+
return (_jsxs("div", { className: "guuey-chat-view", children: [_jsx(GuueyView, { mount: mount, ...viewProps, onPhaseChange: (phase) => ctx.onViewPhase(item.key, phase), onCspDiagnosis: (diagnosis) => ctx.onViewDiagnosis?.(item.key, diagnosis) }), item.attribution !== null ? (_jsx("p", { className: "guuey-chat-attribution", children: item.attribution })) : null] }));
|
|
105
105
|
}
|
|
106
106
|
/**
|
|
107
107
|
* guuey#204: the "promote and reference" chip — stands in for the one
|
|
@@ -194,9 +194,7 @@ export function DefaultPrompt({ item, ctx }) {
|
|
|
194
194
|
if (item.state !== "pending") {
|
|
195
195
|
return (_jsxs("p", { className: `guuey-chat-prompt-record guuey-chat-prompt-${item.state}`, children: [item.promptKind, ": ", item.state] }));
|
|
196
196
|
}
|
|
197
|
-
return (_jsxs("div", { className: "guuey-chat-prompt", role: "group", children: [_jsx("p", { className: "guuey-chat-prompt-ask", children: item.
|
|
198
|
-
? `${item.appId} requests ${item.requested} access`
|
|
199
|
-
: `Link your account to ${item.appId}` }), _jsxs("div", { className: "guuey-chat-prompt-actions", children: [_jsx("button", { ref: firstAction, type: "button", className: "guuey-chat-prompt-accept", onClick: () => ctx.onPromptAction?.(item, "accept"), children: "Allow" }), _jsx("button", { type: "button", onClick: () => ctx.onPromptAction?.(item, "decline"), children: "Decline" })] }), item.raw !== null ? (_jsx("pre", { className: "guuey-chat-prompt-raw", children: JSON.stringify(item.raw, null, 2) })) : null] }));
|
|
197
|
+
return (_jsxs("div", { className: "guuey-chat-prompt", role: "group", children: [_jsx("p", { className: "guuey-chat-prompt-ask", children: `Link your account to ${item.appId}` }), _jsxs("div", { className: "guuey-chat-prompt-actions", children: [_jsx("button", { ref: firstAction, type: "button", className: "guuey-chat-prompt-accept", onClick: () => ctx.onPromptAction?.(item, "accept"), children: "Allow" }), _jsx("button", { type: "button", onClick: () => ctx.onPromptAction?.(item, "decline"), children: "Decline" })] }), item.raw !== null ? (_jsx("pre", { className: "guuey-chat-prompt-raw", children: JSON.stringify(item.raw, null, 2) })) : null] }));
|
|
200
198
|
}
|
|
201
199
|
// ─── R16 ──────────────────────────────────────────────────────────────────
|
|
202
200
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guuey-chat.d.ts","sourceRoot":"","sources":["../../src/react/guuey-chat.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"guuey-chat.d.ts","sourceRoot":"","sources":["../../src/react/guuey-chat.tsx"],"names":[],"mappings":"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"}
|
package/dist/react/guuey-chat.js
CHANGED
|
@@ -110,7 +110,7 @@ export const GuueyChat = forwardRef(function GuueyChat(props, ref) {
|
|
|
110
110
|
return factory({ ...policyOverrides, strings });
|
|
111
111
|
}, [preset, policyOverrides, stringOverrides]);
|
|
112
112
|
const { inputs, resolvePrompt, answerHitlPrompt } = useTranscriptInputs(invoke);
|
|
113
|
-
const { plan, toggle, resolvedMounts, onViewPhase } = useTranscript({
|
|
113
|
+
const { plan, toggle, resolvedMounts, onViewPhase, onViewDiagnosis } = useTranscript({
|
|
114
114
|
inputs,
|
|
115
115
|
policy,
|
|
116
116
|
...(effectiveReader !== undefined ? { reader: effectiveReader } : {}),
|
|
@@ -213,7 +213,7 @@ export const GuueyChat = forwardRef(function GuueyChat(props, ref) {
|
|
|
213
213
|
onPromptAction?.(item, action);
|
|
214
214
|
}, [resolvePrompt, answerHitlPrompt, onHitlAnswer, onPromptAction]);
|
|
215
215
|
const strings = policy.strings;
|
|
216
|
-
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, ...(viewProps !== undefined ? { viewProps } : {}) }), _jsxs("form", { className: "guuey-chat-composer", onSubmit: (e) => {
|
|
216
|
+
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, ...(viewProps !== undefined ? { viewProps } : {}) }), _jsxs("form", { className: "guuey-chat-composer", onSubmit: (e) => {
|
|
217
217
|
e.preventDefault();
|
|
218
218
|
submit();
|
|
219
219
|
}, children: [_jsx("textarea", { ref: inputRef, className: "guuey-chat-composer-input", rows: 1, value: input, onChange: (e) => setInput(e.target.value), onKeyDown: (e) => {
|
|
@@ -25,7 +25,7 @@ export interface TranscriptWindowing {
|
|
|
25
25
|
/** Trailing items rendered; earlier ones sit behind the expander. */
|
|
26
26
|
tail: number;
|
|
27
27
|
}
|
|
28
|
-
export interface TranscriptProps extends Pick<TranscriptItemContext, "onToggle" | "onRetry" | "onPromptAction" | "onErrorAction" | "resolvedMounts" | "onViewPhase" | "onViewRef" | "viewProps"> {
|
|
28
|
+
export interface TranscriptProps extends Pick<TranscriptItemContext, "onToggle" | "onRetry" | "onPromptAction" | "onErrorAction" | "resolvedMounts" | "onViewPhase" | "onViewDiagnosis" | "onViewRef" | "viewProps"> {
|
|
29
29
|
plan: TranscriptPlan;
|
|
30
30
|
/** Per-slot component overrides (spec §3's override column). */
|
|
31
31
|
components?: Partial<TranscriptComponents>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/react/transcript.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK9D,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eACf,SAAQ,IAAI,CACV,qBAAqB,
|
|
1
|
+
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/react/transcript.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK9D,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eACf,SAAQ,IAAI,CACV,qBAAqB,EACnB,UAAU,GACV,SAAS,GACT,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,iBAAiB,GACjB,WAAW,GACX,WAAW,CACd;IACD,IAAI,EAAE,cAAc,CAAC;IACrB,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC3C,gEAAgE;IAChE,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,yEAAyE;IACzE,MAAM,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,CAwI5D"}
|
package/dist/react/transcript.js
CHANGED
|
@@ -24,9 +24,20 @@ import { themeCssVars } from "./theme-css.js";
|
|
|
24
24
|
/** How close to the bottom (px) still counts as pinned. */
|
|
25
25
|
const PIN_THRESHOLD_PX = 48;
|
|
26
26
|
export function Transcript(props) {
|
|
27
|
-
const { plan, components, strings = defaultChatStrings, theme = DEFAULT_CHAT_THEME, mode = "light", window: windowing = { tail: 80 }, className, style, onToggle, onRetry, onPromptAction, onErrorAction, resolvedMounts, onViewPhase, onViewRef, viewProps, } = props;
|
|
27
|
+
const { plan, components, strings = defaultChatStrings, theme = DEFAULT_CHAT_THEME, mode = "light", window: windowing = { tail: 80 }, className, style, onToggle, onRetry, onPromptAction, onErrorAction, resolvedMounts, onViewPhase, onViewDiagnosis, onViewRef, viewProps, } = props;
|
|
28
28
|
const resolvedComponents = useMemo(() => ({ ...defaultTranscriptComponents, ...components }), [components]);
|
|
29
|
-
const ctx = useMemo(() => ({
|
|
29
|
+
const ctx = useMemo(() => ({
|
|
30
|
+
strings,
|
|
31
|
+
onToggle,
|
|
32
|
+
onRetry,
|
|
33
|
+
onPromptAction,
|
|
34
|
+
onErrorAction,
|
|
35
|
+
resolvedMounts,
|
|
36
|
+
onViewPhase,
|
|
37
|
+
onViewDiagnosis,
|
|
38
|
+
onViewRef,
|
|
39
|
+
viewProps,
|
|
40
|
+
}), [strings, onToggle, onRetry, onPromptAction, onErrorAction, resolvedMounts, onViewPhase, onViewDiagnosis, onViewRef, viewProps]);
|
|
30
41
|
// ── Windowing ────────────────────────────────────────────────────────
|
|
31
42
|
const [extraShown, setExtraShown] = useState(0);
|
|
32
43
|
const tail = windowing === false ? Number.POSITIVE_INFINITY : windowing.tail;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { UseAgentInvokeReturn } from "@guuey/agent-client";
|
|
2
2
|
import type { AgHitlAnswer, AgPausedAsk } from "@silverprotocol/core";
|
|
3
|
-
import { type ResolvedViewMount, type UiResourceReader, type ViewHostPhase } from "@guuey/mcp-apps-host";
|
|
3
|
+
import { type ResolvedViewMount, type UiResourceReader, type ViewCspDiagnosis, type ViewHostPhase } from "@guuey/mcp-apps-host";
|
|
4
4
|
import { type HitlPromptAction } from "../hitl.js";
|
|
5
5
|
import type { TranscriptPolicy } from "../policy.js";
|
|
6
6
|
import type { ChatDebugEvent, ItemKey, TranscriptInputs, TranscriptOverrides, TranscriptPlan } from "../types.js";
|
|
@@ -30,6 +30,12 @@ export interface UseTranscriptResult {
|
|
|
30
30
|
overrides: TranscriptOverrides;
|
|
31
31
|
/** Wire to `<GuueyView onPhaseChange>` (the default kit already does). */
|
|
32
32
|
onViewPhase: (key: ItemKey, phase: ViewHostPhase) => void;
|
|
33
|
+
/**
|
|
34
|
+
* Wire to `<GuueyView onCspDiagnosis>` (the default kit already does):
|
|
35
|
+
* the host's CSP tripwire caught the embedding page blocking this view
|
|
36
|
+
* (guuey#235). Feeds `viewDiagnoses` so the R6 label names the cause.
|
|
37
|
+
*/
|
|
38
|
+
onViewDiagnosis: (key: ItemKey, diagnosis: ViewCspDiagnosis) => void;
|
|
33
39
|
/** Locator resolutions: mount material, or `"expired"` for a miss. */
|
|
34
40
|
resolvedMounts: ReadonlyMap<ItemKey, ResolvedViewMount | "expired">;
|
|
35
41
|
}
|
|
@@ -48,9 +54,9 @@ export interface UseTranscriptInputsResult {
|
|
|
48
54
|
* VALIDATES it against the ask's persisted record (`validateHitlAnswer`
|
|
49
55
|
* — required-iff-declared, echo-must-be-declared, requestState byte-echo)
|
|
50
56
|
* BEFORE anything dispatches, records it in the ledger, and returns it
|
|
51
|
-
* for the HOST to deliver — the kit renders and validates; the
|
|
52
|
-
*
|
|
53
|
-
*
|
|
57
|
+
* for the HOST to deliver — the kit renders and validates; the transport
|
|
58
|
+
* is the host's (`@guuey/agent-client`'s `createHitlAnswerRelay` posts it
|
|
59
|
+
* to `<pod>/agent/hitl-answer`, guuey#207).
|
|
54
60
|
*/
|
|
55
61
|
answerHitlPrompt: (ask: AgPausedAsk, action: HitlPromptAction) => AgHitlAnswer;
|
|
56
62
|
}
|
|
@@ -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,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,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,CAmIzC;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"}
|
|
@@ -18,11 +18,16 @@ import { planTranscript } from "../plan.js";
|
|
|
18
18
|
export function useTranscript({ inputs, policy, reader, onDebugEvent, }) {
|
|
19
19
|
const [overrides, setOverrides] = useState({});
|
|
20
20
|
const [phases, setPhases] = useState({});
|
|
21
|
+
const [diagnoses, setDiagnoses] = useState({});
|
|
21
22
|
const [resolvedMounts, setResolvedMounts] = useState(new Map());
|
|
22
23
|
// The debug sink (gated on the debug policy — calm ignores it, spec §5).
|
|
23
24
|
const debugSink = useRef(null);
|
|
24
25
|
debugSink.current = policy.debugDetail && onDebugEvent !== undefined ? onDebugEvent : null;
|
|
25
|
-
const merged = useMemo(() => ({
|
|
26
|
+
const merged = useMemo(() => ({
|
|
27
|
+
...inputs,
|
|
28
|
+
viewPhases: { ...inputs.viewPhases, ...phases },
|
|
29
|
+
viewDiagnoses: { ...inputs.viewDiagnoses, ...diagnoses },
|
|
30
|
+
}), [inputs, phases, diagnoses]);
|
|
26
31
|
const plan = useMemo(() => planTranscript(merged, policy, overrides), [merged, policy, overrides]);
|
|
27
32
|
// Toggle flips the item's CURRENT resolved state (policy default or a
|
|
28
33
|
// previous override) — read from the plan so the first toggle of a
|
|
@@ -53,13 +58,34 @@ export function useTranscript({ inputs, policy, reader, onDebugEvent, }) {
|
|
|
53
58
|
// Mirror of `phases` for the change check OUTSIDE the state updater — a
|
|
54
59
|
// sink call inside an updater would double-fire under StrictMode.
|
|
55
60
|
const phasesRef = useRef({});
|
|
61
|
+
const diagnosesRef = useRef({});
|
|
56
62
|
const onViewPhase = useCallback((key, phase) => {
|
|
57
63
|
if (phasesRef.current[key] !== phase) {
|
|
58
64
|
phasesRef.current = { ...phasesRef.current, [key]: phase };
|
|
59
|
-
|
|
65
|
+
const diagnosis = diagnosesRef.current[key];
|
|
66
|
+
debugSink.current?.({
|
|
67
|
+
type: "view-phase",
|
|
68
|
+
key,
|
|
69
|
+
phase,
|
|
70
|
+
...(diagnosis !== undefined ? { diagnosis } : {}),
|
|
71
|
+
});
|
|
60
72
|
}
|
|
61
73
|
setPhases((prev) => (prev[key] === phase ? prev : { ...prev, [key]: phase }));
|
|
62
74
|
}, []);
|
|
75
|
+
// The tripwire fires BEFORE the negotiation window lapses (a blocked
|
|
76
|
+
// runtime never negotiates), so the diagnosis is usually known by the
|
|
77
|
+
// time `no-handshake` arrives — the phase event above carries it. If it
|
|
78
|
+
// lands after, re-emit the current phase with the verdict so a debug
|
|
79
|
+
// sink still sees the pairing.
|
|
80
|
+
const onViewDiagnosis = useCallback((key, diagnosis) => {
|
|
81
|
+
if (diagnosesRef.current[key] === diagnosis)
|
|
82
|
+
return;
|
|
83
|
+
diagnosesRef.current = { ...diagnosesRef.current, [key]: diagnosis };
|
|
84
|
+
const phase = phasesRef.current[key];
|
|
85
|
+
if (phase !== undefined)
|
|
86
|
+
debugSink.current?.({ type: "view-phase", key, phase, diagnosis });
|
|
87
|
+
setDiagnoses((prev) => (prev[key] === diagnosis ? prev : { ...prev, [key]: diagnosis }));
|
|
88
|
+
}, []);
|
|
63
89
|
// Plan-derived debug events, emitted once per sighting (post-render — the
|
|
64
90
|
// plan itself stays pure data).
|
|
65
91
|
const emittedUnknowns = useRef(new Set());
|
|
@@ -116,7 +142,7 @@ export function useTranscript({ inputs, policy, reader, onDebugEvent, }) {
|
|
|
116
142
|
void resolveViewMount(locator, read).then((resolved) => settle(resolved ?? "expired"), () => settle("expired"));
|
|
117
143
|
}
|
|
118
144
|
}, [plan, resolvedMounts]);
|
|
119
|
-
return { plan, toggle, overrides, onViewPhase, resolvedMounts };
|
|
145
|
+
return { plan, toggle, overrides, onViewPhase, onViewDiagnosis, resolvedMounts };
|
|
120
146
|
}
|
|
121
147
|
/** How often the escalation clock ticks while a status needs one. */
|
|
122
148
|
const ELAPSED_TICK_MS = 500;
|
|
@@ -133,33 +159,12 @@ export function useTranscriptInputs(invoke) {
|
|
|
133
159
|
const timer = setInterval(() => setElapsedMs(Date.now() - startedAt), ELAPSED_TICK_MS);
|
|
134
160
|
return () => clearInterval(timer);
|
|
135
161
|
}, [invoke.status]);
|
|
136
|
-
// R10 ledger: the hook exposes only the LATEST pending
|
|
137
|
-
// transcript keeps the record of every ask and its resolution.
|
|
162
|
+
// R10 ledger (the LINK invite): the hook exposes only the LATEST pending
|
|
163
|
+
// invite; the transcript keeps the record of every ask and its resolution.
|
|
164
|
+
// Consent is NOT ledgered here — it is an AgJSON paused turn in the fold
|
|
165
|
+
// (`hitlPromptsFromFold` below, guuey#207).
|
|
138
166
|
const [prompts, setPrompts] = useState([]);
|
|
139
167
|
const promptSeq = useRef(0);
|
|
140
|
-
useEffect(() => {
|
|
141
|
-
const request = invoke.profileConsentRequest;
|
|
142
|
-
if (request === null) {
|
|
143
|
-
setPrompts((prev) => prev.some((p) => p.kind === "consent" && p.state === "pending")
|
|
144
|
-
? prev.map((p) => p.kind === "consent" && p.state === "pending" ? { ...p, state: "dismissed" } : p)
|
|
145
|
-
: prev);
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
setPrompts((prev) => {
|
|
149
|
-
if (prev.some((p) => p.kind === "consent" && p.state === "pending"))
|
|
150
|
-
return prev;
|
|
151
|
-
return [
|
|
152
|
-
...prev,
|
|
153
|
-
{
|
|
154
|
-
id: `consent.${promptSeq.current++}`,
|
|
155
|
-
kind: "consent",
|
|
156
|
-
appId: request.appId,
|
|
157
|
-
requested: request.requested,
|
|
158
|
-
state: "pending",
|
|
159
|
-
},
|
|
160
|
-
];
|
|
161
|
-
});
|
|
162
|
-
}, [invoke.profileConsentRequest]);
|
|
163
168
|
useEffect(() => {
|
|
164
169
|
const request = invoke.profileLinkRequest;
|
|
165
170
|
if (request === null) {
|
|
@@ -188,8 +193,6 @@ export function useTranscriptInputs(invoke) {
|
|
|
188
193
|
// Clearing the hook's pending request AFTER the ledger moved keeps the
|
|
189
194
|
// dismissal effect above from double-transitioning it.
|
|
190
195
|
const pending = prompts.find((p) => p.id === id);
|
|
191
|
-
if (pending?.kind === "consent")
|
|
192
|
-
invoke.clearProfileConsentRequest();
|
|
193
196
|
if (pending?.kind === "link")
|
|
194
197
|
invoke.clearProfileLinkRequest();
|
|
195
198
|
}, [invoke, prompts]);
|
package/dist/strings.d.ts
CHANGED
|
@@ -47,6 +47,17 @@ export interface ChatStrings {
|
|
|
47
47
|
viewInlineFallback: string;
|
|
48
48
|
viewExpired: string;
|
|
49
49
|
viewSandboxUnavailable: string;
|
|
50
|
+
/**
|
|
51
|
+
* R6 no-handshake with a CSP diagnosis (guuey#235): the embedding page's
|
|
52
|
+
* own policy blocked the view. Receives the structured verdict so a
|
|
53
|
+
* locale can shape the sentence; the en default names the blocked URI
|
|
54
|
+
* and the exact allowance to add.
|
|
55
|
+
*/
|
|
56
|
+
viewCspBlocked: (diagnosis: {
|
|
57
|
+
blockedUri: string;
|
|
58
|
+
violatedDirective: string;
|
|
59
|
+
suggestedEntry: string;
|
|
60
|
+
}) => string;
|
|
50
61
|
/** guuey#204: the chip text for a mount promoted to a host stage/canvas. */
|
|
51
62
|
viewPromoted: (title: string) => string;
|
|
52
63
|
/** Chip title when the mount has no producing-call title (history cards). */
|
package/dist/strings.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAEhB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IAErB,aAAa;IACb,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAEvC,UAAU;IACV,cAAc,EAAE,MAAM,CAAC;IAEvB,UAAU;IACV,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAErC,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW;IACX,UAAU,EAAE,MAAM,CAAC;IAEnB,UAAU;IACV,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAElB,iBAAiB;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,4EAA4E;IAC5E,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,6EAA6E;IAC7E,oBAAoB,EAAE,MAAM,CAAC;IAE7B,qEAAqE;IACrE,oBAAoB,EAAE,MAAM,CAAC;IAE7B,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAErC,kBAAkB;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IAEnB,kEAAkE;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IAEf,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD,oBAAoB,EAAE,MAAM,CAAC;IAE7B,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IAEpB,uCAAuC;IACvC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,eAAO,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"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"}
|
package/dist/strings.js
CHANGED
|
@@ -28,6 +28,7 @@ export const defaultChatStrings = {
|
|
|
28
28
|
viewInlineFallback: "Showing plain content",
|
|
29
29
|
viewExpired: "This view expired",
|
|
30
30
|
viewSandboxUnavailable: "Interactive view unavailable",
|
|
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`,
|
|
31
32
|
viewPromoted: (title) => `${title} — on canvas`,
|
|
32
33
|
viewRefFallbackTitle: "Card",
|
|
33
34
|
recoveredFromHistory: "recovered from history",
|
package/dist/types.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import type { AgGrantMode, AgNoticeSource, AgPausedAsk, AgReduceResult, AgSource, JsonValue } from "@silverprotocol/core";
|
|
15
15
|
import type { AgentInvokeStatus, HistoryCard } from "@guuey/agent-client";
|
|
16
|
-
import type { ViewHostPhase, ViewMount, ViewMountChannel } from "@guuey/mcp-apps-host";
|
|
16
|
+
import type { ViewCspDiagnosis, ViewHostPhase, ViewMount, ViewMountChannel } from "@guuey/mcp-apps-host";
|
|
17
17
|
/**
|
|
18
18
|
* One settled entry of the flat conversation transcript — structurally
|
|
19
19
|
* compatible with the hook's `AgentMessage`, plus the optional
|
|
@@ -33,14 +33,17 @@ export interface TranscriptMessage {
|
|
|
33
33
|
noticeSource?: AgNoticeSource;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
* A pending/resolved
|
|
37
|
-
* `profile-
|
|
38
|
-
*
|
|
39
|
-
*
|
|
36
|
+
* A pending/resolved account-LINK invite (R10) — the turn-level
|
|
37
|
+
* `profile-link` event lifted into renderable state. The assembler (3b)
|
|
38
|
+
* accumulates these from `invokeTurn` events; `id` is assembler-chosen and
|
|
39
|
+
* stable for the ask's lifetime. (Consent is NOT a profile arm any more:
|
|
40
|
+
* since guuey#207 the pod asks over AgJSON `hitl.ask` + `turn.done
|
|
41
|
+
* outcome:"paused"` with declared `grantModes`, and it renders through
|
|
42
|
+
* {@link HitlPromptInput}.)
|
|
40
43
|
*/
|
|
41
44
|
export interface ProfilePromptInput {
|
|
42
45
|
id: string;
|
|
43
|
-
kind: "
|
|
46
|
+
kind: "link";
|
|
44
47
|
appId: string;
|
|
45
48
|
requested: "read" | "read-write";
|
|
46
49
|
state: "pending" | "answered" | "declined" | "dismissed";
|
|
@@ -67,9 +70,9 @@ export interface HitlPromptInput {
|
|
|
67
70
|
}
|
|
68
71
|
/**
|
|
69
72
|
* R10 prompt inputs — a discriminated union (narrow on `kind`). The
|
|
70
|
-
* profile arm is the
|
|
71
|
-
*
|
|
72
|
-
* the one shape this union retired — narrow first.)
|
|
73
|
+
* profile arm is the guuey-wire LINK invite; `hitl` (spec draft.2) carries
|
|
74
|
+
* every AgJSON ask, consent included. (Direct un-narrowed reads of
|
|
75
|
+
* profile-only fields are the one shape this union retired — narrow first.)
|
|
73
76
|
*/
|
|
74
77
|
export type PromptItemInput = ProfilePromptInput | HitlPromptInput;
|
|
75
78
|
/** Everything the plan derives from. All fields are data — no clocks, no DOM. */
|
|
@@ -103,7 +106,7 @@ export interface TranscriptInputs {
|
|
|
103
106
|
message: string;
|
|
104
107
|
code: string | null;
|
|
105
108
|
} | null;
|
|
106
|
-
/** Pending/answered
|
|
109
|
+
/** Pending/answered asks (R10): the link invite + AgJSON hitl asks (consent). */
|
|
107
110
|
prompts: PromptItemInput[];
|
|
108
111
|
/**
|
|
109
112
|
* The settled conversation, both roles, in order. Assistant entries are
|
|
@@ -119,6 +122,14 @@ export interface TranscriptInputs {
|
|
|
119
122
|
sendStates?: Readonly<Record<string, "sending" | "failed">>;
|
|
120
123
|
/** mountKey → live phase (R6 states). Keys match `ViewMountItem.key`. */
|
|
121
124
|
viewPhases?: Readonly<Record<string, ViewHostPhase>>;
|
|
125
|
+
/**
|
|
126
|
+
* mountKey → the host's CSP tripwire verdict (guuey#235): the embedding
|
|
127
|
+
* page's own policy blocked the view. Renderer-supplied like
|
|
128
|
+
* `viewPhases` (`<GuueyView onCspDiagnosis>` → `useTranscript`); a
|
|
129
|
+
* `no-handshake` mount with a diagnosis labels the actionable cause
|
|
130
|
+
* instead of the channel heuristic.
|
|
131
|
+
*/
|
|
132
|
+
viewDiagnoses?: Readonly<Record<string, ViewCspDiagnosis>>;
|
|
122
133
|
/**
|
|
123
134
|
* The mount key a host-owned stage/canvas surface currently shows
|
|
124
135
|
* (guuey#204 "promote and reference") — renderer-supplied state, like
|
|
@@ -228,6 +239,12 @@ export interface ViewMountItem extends BaseItem {
|
|
|
228
239
|
phase: ViewHostPhase | "expired";
|
|
229
240
|
/** The channel-aware state label the renderer shows for non-connected phases. */
|
|
230
241
|
label: string | null;
|
|
242
|
+
/**
|
|
243
|
+
* The CSP tripwire's verdict when the embedding page blocked this view
|
|
244
|
+
* (guuey#235) — WHY a `no-handshake`; `label` already carries its
|
|
245
|
+
* message, this is the structured form for renderers/debug sinks.
|
|
246
|
+
*/
|
|
247
|
+
diagnosis: ViewCspDiagnosis | null;
|
|
231
248
|
/** Calm chrome: "via {tool}" when this mount broke an R4 group. */
|
|
232
249
|
attribution: string | null;
|
|
233
250
|
/** The producing call's humanized title (live mounts); null for history cards. */
|
|
@@ -280,12 +297,12 @@ export interface CitationsItem extends BaseItem {
|
|
|
280
297
|
}[];
|
|
281
298
|
style: "chips" | "list";
|
|
282
299
|
}
|
|
283
|
-
/** R10 — the guuey-wire
|
|
300
|
+
/** R10 — the guuey-wire account-LINK prompt card (the original arm). */
|
|
284
301
|
export interface ProfilePromptItem extends BaseItem {
|
|
285
302
|
kind: "prompt";
|
|
286
303
|
/** The `PromptItemInput.id` this row records — the host's resolution key. */
|
|
287
304
|
promptId: string;
|
|
288
|
-
promptKind: "
|
|
305
|
+
promptKind: "link";
|
|
289
306
|
appId: string;
|
|
290
307
|
requested: "read" | "read-write";
|
|
291
308
|
state: "pending" | "answered" | "declined" | "dismissed";
|
|
@@ -397,6 +414,8 @@ export type ChatDebugEvent = {
|
|
|
397
414
|
type: "view-phase";
|
|
398
415
|
key: ItemKey;
|
|
399
416
|
phase: ViewHostPhase | "expired";
|
|
417
|
+
/** Present when the host's CSP tripwire diagnosed the failure (guuey#235). */
|
|
418
|
+
diagnosis?: ViewCspDiagnosis;
|
|
400
419
|
} | {
|
|
401
420
|
type: "unknown-block";
|
|
402
421
|
key: ItemKey;
|