@guuey/chat 0.7.2 → 0.8.1
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/hitl.d.ts +5 -0
- package/dist/hitl.d.ts.map +1 -1
- package/dist/hitl.js +5 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/native/components.d.ts.map +1 -1
- package/dist/native/components.js +5 -5
- package/dist/oauth.d.ts +87 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +121 -0
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +4 -1
- package/dist/react/components.d.ts.map +1 -1
- package/dist/react/components.js +7 -5
- package/dist/react/guuey-chat.d.ts +14 -0
- package/dist/react/guuey-chat.d.ts.map +1 -1
- package/dist/react/guuey-chat.js +21 -3
- package/dist/react/oauth-return.d.ts +61 -0
- package/dist/react/oauth-return.d.ts.map +1 -0
- package/dist/react/oauth-return.js +103 -0
- package/dist/react/use-transcript.d.ts +3 -3
- package/dist/react/use-transcript.d.ts.map +1 -1
- package/dist/react/use-transcript.js +4 -27
- package/dist/react.d.ts +1 -0
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +1 -0
- package/dist/strings.d.ts +10 -0
- package/dist/strings.d.ts.map +1 -1
- package/dist/strings.js +4 -0
- package/dist/types.d.ts +25 -11
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/corpus/README.md +7 -1
- package/src/corpus/__snapshots__/corpus.test.ts.snap +126 -7
- package/src/corpus/drive.ts +43 -12
- package/src/corpus/fixtures.ts +95 -4
- package/src/hitl.ts +5 -0
- package/src/index.ts +11 -0
- package/src/native/components.tsx +15 -7
- package/src/oauth.ts +157 -0
- package/src/plan.ts +4 -1
- package/src/react/components.tsx +17 -9
- package/src/react/guuey-chat.tsx +49 -1
- package/src/react/oauth-return.ts +129 -0
- package/src/react/use-transcript.ts +7 -32
- package/src/react.tsx +9 -0
- package/src/strings.ts +14 -0
- package/src/types.ts +22 -11
- package/styles.css +26 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The web half of the OAuth "authorize this server" arm (guuey#178 Slice 4)
|
|
3
|
+
* — the DOM-touching pieces the pure `../oauth.js` helpers deliberately
|
|
4
|
+
* leave out. Every web surface (the `<GuueyChat>` composite, the widget, the
|
|
5
|
+
* studio agent page) shares these three so the redirect + return behave the
|
|
6
|
+
* same everywhere:
|
|
7
|
+
*
|
|
8
|
+
* - {@link oauthReturnToHere} — the surface's own location, with a stale
|
|
9
|
+
* `?connected=`/`?error=` from a PREVIOUS dance stripped, ready to be
|
|
10
|
+
* the next `returnTo`.
|
|
11
|
+
* - {@link openOAuthAuthorize} — how the link is opened: a top-level page
|
|
12
|
+
* navigates in place (the broker 302s straight back to `returnTo`); a
|
|
13
|
+
* FRAMED page (the widget inside a customer origin) opens a new tab,
|
|
14
|
+
* because identity providers refuse to render inside a third-party
|
|
15
|
+
* frame (`X-Frame-Options` / `frame-ancestors`).
|
|
16
|
+
* - {@link useOAuthReturn} — on mount, read the broker's return params off
|
|
17
|
+
* the address bar, REPLACE the URL without them (a reload never re-shows
|
|
18
|
+
* the notice), and hand the surface a one-shot notice to render.
|
|
19
|
+
*/
|
|
20
|
+
import { useCallback, useEffect, useState } from "react";
|
|
21
|
+
import { oauthAuthorizeHref, parseOAuthReturn, stripOAuthReturn } from "../oauth.js";
|
|
22
|
+
/** The surface's own location as the next `returnTo` (stale return params stripped). */
|
|
23
|
+
export function oauthReturnToHere() {
|
|
24
|
+
return stripOAuthReturn(window.location.href);
|
|
25
|
+
}
|
|
26
|
+
/** Whether this document is rendered inside another origin's frame. */
|
|
27
|
+
function isFramed(win) {
|
|
28
|
+
try {
|
|
29
|
+
return win.top !== win.self;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// A cross-origin `window.top` read throws in some browsers — that IS framed.
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Open the authorize link. In place when top-level (the dance ends back on
|
|
38
|
+
* this page); a new tab when framed (the IdP will not render in a frame —
|
|
39
|
+
* `returnTo` then lands the SAME page top-level in that tab, where
|
|
40
|
+
* {@link useOAuthReturn} shows the notice; the embedded chat picks the
|
|
41
|
+
* connection up on its next turn).
|
|
42
|
+
*/
|
|
43
|
+
export function openOAuthAuthorize(href, win = window) {
|
|
44
|
+
if (isFramed(win)) {
|
|
45
|
+
win.open(href, "_blank", "noopener,noreferrer");
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
win.location.assign(href);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Read `?connected=<serverName>` / `?error=<reason>` off the current
|
|
52
|
+
* location ONCE (on mount), strip them from the address bar via
|
|
53
|
+
* `history.replaceState`, and expose the result as a dismissible notice.
|
|
54
|
+
* SSR-safe: nothing runs until the effect.
|
|
55
|
+
*/
|
|
56
|
+
export function useOAuthReturn() {
|
|
57
|
+
const [notice, setNotice] = useState(null);
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
if (typeof window === "undefined")
|
|
60
|
+
return;
|
|
61
|
+
const href = window.location.href;
|
|
62
|
+
const found = parseOAuthReturn(href);
|
|
63
|
+
if (found === null)
|
|
64
|
+
return;
|
|
65
|
+
const clean = stripOAuthReturn(href);
|
|
66
|
+
if (clean !== href)
|
|
67
|
+
window.history.replaceState(window.history.state, "", clean);
|
|
68
|
+
setNotice(found);
|
|
69
|
+
}, []);
|
|
70
|
+
const dismiss = useCallback(() => setNotice(null), []);
|
|
71
|
+
return { notice, dismiss };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The OAuth arm of a prompt action, shared by every web surface. Returns
|
|
75
|
+
* `false` (nothing done) when the item is not an OAuth ask, so a host's
|
|
76
|
+
* #207 hitl branch (build the answer, POST it to the pod door) runs as
|
|
77
|
+
* before. For an OAuth ask:
|
|
78
|
+
*
|
|
79
|
+
* - a mode pick (or a plain accept on a mode-less ask) records the pick in
|
|
80
|
+
* the ledger — the card shows "Connecting — <mode>" — and OPENS
|
|
81
|
+
* `authorizationUrl&mode=<id>&returnTo=<here>`; NOTHING is posted to the
|
|
82
|
+
* pod (there is no answer door — the answer is the redirect);
|
|
83
|
+
* - "Not now" / decline / dismiss all record `cancelled` (still pending,
|
|
84
|
+
* re-askable): nothing is written anywhere and the pod asks again next
|
|
85
|
+
* turn.
|
|
86
|
+
*/
|
|
87
|
+
export function oauthPromptAction(args) {
|
|
88
|
+
const { item, action, answerHitlPrompt } = args;
|
|
89
|
+
if (item.oauth === null)
|
|
90
|
+
return false;
|
|
91
|
+
if (typeof action === "object" || action === "accept") {
|
|
92
|
+
const grantModeId = typeof action === "object" ? action.grantModeId : null;
|
|
93
|
+
answerHitlPrompt(item.ask, action);
|
|
94
|
+
const href = oauthAuthorizeHref(item.ask, grantModeId, args.returnTo ?? oauthReturnToHere());
|
|
95
|
+
if (args.open !== undefined)
|
|
96
|
+
args.open(href, item.ask);
|
|
97
|
+
else
|
|
98
|
+
openOAuthAuthorize(href);
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
answerHitlPrompt(item.ask, "dismiss");
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
@@ -54,9 +54,9 @@ export interface UseTranscriptInputsResult {
|
|
|
54
54
|
* VALIDATES it against the ask's persisted record (`validateHitlAnswer`
|
|
55
55
|
* — required-iff-declared, echo-must-be-declared, requestState byte-echo)
|
|
56
56
|
* BEFORE anything dispatches, records it in the ledger, and returns it
|
|
57
|
-
* for the HOST to deliver — the kit renders and validates; the
|
|
58
|
-
*
|
|
59
|
-
*
|
|
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).
|
|
60
60
|
*/
|
|
61
61
|
answerHitlPrompt: (ask: AgPausedAsk, action: HitlPromptAction) => AgHitlAnswer;
|
|
62
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,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,
|
|
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"}
|
|
@@ -159,33 +159,12 @@ export function useTranscriptInputs(invoke) {
|
|
|
159
159
|
const timer = setInterval(() => setElapsedMs(Date.now() - startedAt), ELAPSED_TICK_MS);
|
|
160
160
|
return () => clearInterval(timer);
|
|
161
161
|
}, [invoke.status]);
|
|
162
|
-
// R10 ledger: the hook exposes only the LATEST pending
|
|
163
|
-
// 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).
|
|
164
166
|
const [prompts, setPrompts] = useState([]);
|
|
165
167
|
const promptSeq = useRef(0);
|
|
166
|
-
useEffect(() => {
|
|
167
|
-
const request = invoke.profileConsentRequest;
|
|
168
|
-
if (request === null) {
|
|
169
|
-
setPrompts((prev) => prev.some((p) => p.kind === "consent" && p.state === "pending")
|
|
170
|
-
? prev.map((p) => p.kind === "consent" && p.state === "pending" ? { ...p, state: "dismissed" } : p)
|
|
171
|
-
: prev);
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
setPrompts((prev) => {
|
|
175
|
-
if (prev.some((p) => p.kind === "consent" && p.state === "pending"))
|
|
176
|
-
return prev;
|
|
177
|
-
return [
|
|
178
|
-
...prev,
|
|
179
|
-
{
|
|
180
|
-
id: `consent.${promptSeq.current++}`,
|
|
181
|
-
kind: "consent",
|
|
182
|
-
appId: request.appId,
|
|
183
|
-
requested: request.requested,
|
|
184
|
-
state: "pending",
|
|
185
|
-
},
|
|
186
|
-
];
|
|
187
|
-
});
|
|
188
|
-
}, [invoke.profileConsentRequest]);
|
|
189
168
|
useEffect(() => {
|
|
190
169
|
const request = invoke.profileLinkRequest;
|
|
191
170
|
if (request === null) {
|
|
@@ -214,8 +193,6 @@ export function useTranscriptInputs(invoke) {
|
|
|
214
193
|
// Clearing the hook's pending request AFTER the ledger moved keeps the
|
|
215
194
|
// dismissal effect above from double-transitioning it.
|
|
216
195
|
const pending = prompts.find((p) => p.id === id);
|
|
217
|
-
if (pending?.kind === "consent")
|
|
218
|
-
invoke.clearProfileConsentRequest();
|
|
219
196
|
if (pending?.kind === "link")
|
|
220
197
|
invoke.clearProfileLinkRequest();
|
|
221
198
|
}, [invoke, prompts]);
|
package/dist/react.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export { Transcript, type TranscriptProps, type TranscriptWindowing, } from "./r
|
|
|
16
16
|
export { defaultTranscriptComponents, renderItem, DefaultUserMessage, DefaultText, DefaultReasoning, DefaultTool, DefaultToolGroup, DefaultDataResult, DefaultView, DefaultViewRef, DefaultMedia, DefaultCode, DefaultCitations, DefaultPrompt, DefaultError, DefaultHistoryBoundary, DefaultCompaction, DefaultUnknown, DefaultStatus, type TranscriptComponents, type TranscriptItemContext, type ViewSlotProps, } from "./react/components.js";
|
|
17
17
|
export { useTranscript, useTranscriptInputs, type UseTranscriptArgs, type UseTranscriptResult, type UseTranscriptInputsResult, } from "./react/use-transcript.js";
|
|
18
18
|
export { GuueyChat, type GuueyChatProps, type GuueyChatHandle } from "./react/guuey-chat.js";
|
|
19
|
+
export { oauthPromptAction, oauthReturnToHere, openOAuthAuthorize, useOAuthReturn, type OAuthPromptActionArgs, type OAuthWindow, type UseOAuthReturnResult, } from "./react/oauth-return.js";
|
|
19
20
|
export { Markdown } from "./react/markdown.js";
|
|
20
21
|
export { themeCssVars, type ThemeMode } from "./react/theme-css.js";
|
|
21
22
|
//# sourceMappingURL=react.d.ts.map
|
package/dist/react.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,mBAAmB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,2BAA2B,EAC3B,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,mBAAmB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,2BAA2B,EAC3B,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/react.js
CHANGED
|
@@ -16,5 +16,6 @@ export { Transcript, } from "./react/transcript.js";
|
|
|
16
16
|
export { defaultTranscriptComponents, renderItem, DefaultUserMessage, DefaultText, DefaultReasoning, DefaultTool, DefaultToolGroup, DefaultDataResult, DefaultView, DefaultViewRef, DefaultMedia, DefaultCode, DefaultCitations, DefaultPrompt, DefaultError, DefaultHistoryBoundary, DefaultCompaction, DefaultUnknown, DefaultStatus, } from "./react/components.js";
|
|
17
17
|
export { useTranscript, useTranscriptInputs, } from "./react/use-transcript.js";
|
|
18
18
|
export { GuueyChat } from "./react/guuey-chat.js";
|
|
19
|
+
export { oauthPromptAction, oauthReturnToHere, openOAuthAuthorize, useOAuthReturn, } from "./react/oauth-return.js";
|
|
19
20
|
export { Markdown } from "./react/markdown.js";
|
|
20
21
|
export { themeCssVars } from "./react/theme-css.js";
|
package/dist/strings.d.ts
CHANGED
|
@@ -83,6 +83,16 @@ export interface ChatStrings {
|
|
|
83
83
|
/** The answered record line, e.g. `Allowed — Always`. */
|
|
84
84
|
promptAnsweredWith: (modeLabel: string) => string;
|
|
85
85
|
promptDeclinedRecord: string;
|
|
86
|
+
/**
|
|
87
|
+
* The OAuth arm (guuey#178): the dismiss action ("Not now" — nothing is
|
|
88
|
+
* written, the ask re-emits next turn), the answered record (the user was
|
|
89
|
+
* sent to the provider), and the return notices the surface shows after
|
|
90
|
+
* the broker 302s back with `?connected=<serverName>` / `?error=<reason>`.
|
|
91
|
+
*/
|
|
92
|
+
promptNotNow: string;
|
|
93
|
+
promptOAuthSent: (modeLabel: string) => string;
|
|
94
|
+
oauthConnected: (serverName: string) => string;
|
|
95
|
+
oauthFailed: (reason: string) => string;
|
|
86
96
|
/** R16 — the notice row's label (provenance shows only under debug). */
|
|
87
97
|
noticeLabel: string;
|
|
88
98
|
/** The 3c composer (`<GuueyChat>`). */
|
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;;;;;OAKG;IACH,cAAc,EAAE,CAAC,SAAS,EAAE;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;KACxB,KAAK,MAAM,CAAC;IACb,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;
|
|
1
|
+
{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"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"}
|
package/dist/strings.js
CHANGED
|
@@ -45,6 +45,10 @@ export const defaultChatStrings = {
|
|
|
45
45
|
promptDismissed: "Dismissed",
|
|
46
46
|
promptAnsweredWith: (modeLabel) => `Allowed — ${modeLabel}`,
|
|
47
47
|
promptDeclinedRecord: "Not allowed",
|
|
48
|
+
promptNotNow: "Not now",
|
|
49
|
+
promptOAuthSent: (modeLabel) => `Connecting — ${modeLabel}`,
|
|
50
|
+
oauthConnected: (serverName) => `Connected ${serverName}. The agent can use it from your next message.`,
|
|
51
|
+
oauthFailed: (reason) => `Couldn't connect: ${reason}`,
|
|
48
52
|
noticeLabel: "Note",
|
|
49
53
|
composerPlaceholder: "Message the agent…",
|
|
50
54
|
composerUnavailable: "Chat is unavailable.",
|
package/dist/types.d.ts
CHANGED
|
@@ -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
|
|
@@ -294,12 +297,12 @@ export interface CitationsItem extends BaseItem {
|
|
|
294
297
|
}[];
|
|
295
298
|
style: "chips" | "list";
|
|
296
299
|
}
|
|
297
|
-
/** R10 — the guuey-wire
|
|
300
|
+
/** R10 — the guuey-wire account-LINK prompt card (the original arm). */
|
|
298
301
|
export interface ProfilePromptItem extends BaseItem {
|
|
299
302
|
kind: "prompt";
|
|
300
303
|
/** The `PromptItemInput.id` this row records — the host's resolution key. */
|
|
301
304
|
promptId: string;
|
|
302
|
-
promptKind: "
|
|
305
|
+
promptKind: "link";
|
|
303
306
|
appId: string;
|
|
304
307
|
requested: "read" | "read-write";
|
|
305
308
|
state: "pending" | "answered" | "declined" | "dismissed";
|
|
@@ -325,6 +328,17 @@ export interface HitlPromptItem extends BaseItem {
|
|
|
325
328
|
askKind: AgPausedAsk["kind"];
|
|
326
329
|
/** Declared accept variants; empty = a plain accept/decline ask. */
|
|
327
330
|
grantModes: readonly AgGrantMode[];
|
|
331
|
+
/**
|
|
332
|
+
* The OAuth arm (guuey#178): set when the ask is `kind:"auth"` with
|
|
333
|
+
* `authConfig.scheme:"oauth2"` + an `authorizationUrl`. There is no
|
|
334
|
+
* answer door for this ask — a mode pick OPENS `authorizationUrl` with
|
|
335
|
+
* `&mode=` + `&returnTo=` appended (`oauthAuthorizeHref`); "Not now" is a
|
|
336
|
+
* plain dismissal. `null` for every other ask.
|
|
337
|
+
*/
|
|
338
|
+
oauth: {
|
|
339
|
+
authorizationUrl: string;
|
|
340
|
+
scopes: readonly string[];
|
|
341
|
+
} | null;
|
|
328
342
|
state: "pending" | "resolved" | "declined" | "cancelled";
|
|
329
343
|
/** Echo of the chosen mode id (identity, never displayed as meaning). */
|
|
330
344
|
chosenModeId: string | null;
|
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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@guuey/chat",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
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/agent-client": "0.
|
|
43
|
-
"@guuey/mcp-apps-host": "0.
|
|
42
|
+
"@guuey/agent-client": "0.8.1",
|
|
43
|
+
"@guuey/mcp-apps-host": "0.8.1"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
46
|
"react": ">=18",
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
"@testing-library/react": "^16.3.2",
|
|
60
60
|
"@types/node": "^24.0.0",
|
|
61
61
|
"@types/react": "^19.0.0",
|
|
62
|
+
"@types/react-dom": "^19.0.0",
|
|
62
63
|
"jsdom": "^25.0.1",
|
|
63
64
|
"react": "^19.0.0",
|
|
64
65
|
"react-dom": "^19.0.0",
|
package/src/corpus/README.md
CHANGED
|
@@ -56,7 +56,13 @@ witness.
|
|
|
56
56
|
C2-shaped read shell (`gguiReadShell`) to the `"ggui"` channel — the
|
|
57
57
|
whole converged path in plain Node; 24c pins that a bootstrap-carrying
|
|
58
58
|
result (fixture 7's shape) rides the same arm to the same outcome, and
|
|
59
|
-
family 18's production capture asserts the same)
|
|
59
|
+
family 18's production capture asserts the same), and family 25
|
|
60
|
+
(`oauth-auth-ask` — guuey#178: the MCP OAuth broker's "authorize this
|
|
61
|
+
server" card, `hitl.ask kind:"auth"` + `authConfig:{scheme:"oauth2",
|
|
62
|
+
authorizationUrl}` + grant modes; the SAME hitl card with an `oauth` arm,
|
|
63
|
+
where a mode pick is a LINK (`oauthAuthorizeHref` — `&mode=` +
|
|
64
|
+
`&returnTo=` appended by the client) and "Not now" is a dismissal —
|
|
65
|
+
there is no answer door, the answer is the redirect).
|
|
60
66
|
- `capture.ts` / `captures/` — family 18: production-capture replay
|
|
61
67
|
through the real `invokeTurn` (provenance in the module header).
|
|
62
68
|
- `corpus.test.ts` — the runner: per-fixture assertions + snapshots, plain
|
|
@@ -995,7 +995,7 @@ exports[`corpus > 3. cold-start — R12 escalation at 0 / 2.5 s / 15 s 1`] = `
|
|
|
995
995
|
}
|
|
996
996
|
`;
|
|
997
997
|
|
|
998
|
-
exports[`corpus > 4. consent-gate — pending card → answered one-line collapse 1`] = `
|
|
998
|
+
exports[`corpus > 4. consent-gate — pending grant-mode card → answered one-line collapse (guuey#207 hitl arm) 1`] = `
|
|
999
999
|
{
|
|
1000
1000
|
"items": [
|
|
1001
1001
|
{
|
|
@@ -1013,17 +1013,53 @@ exports[`corpus > 4. consent-gate — pending card → answered one-line collaps
|
|
|
1013
1013
|
"markdown": true,
|
|
1014
1014
|
"stopped": false,
|
|
1015
1015
|
"streaming": false,
|
|
1016
|
-
"text": "
|
|
1016
|
+
"text": "Booked your usual — I couldn't see your profile yet.",
|
|
1017
1017
|
},
|
|
1018
1018
|
{
|
|
1019
|
-
"
|
|
1019
|
+
"ask": {
|
|
1020
|
+
"askId": "profile-consent:app-1:thread-corpus",
|
|
1021
|
+
"grantModes": [
|
|
1022
|
+
{
|
|
1023
|
+
"description": "Every conversation with this agent",
|
|
1024
|
+
"id": "always",
|
|
1025
|
+
"label": "Always allow",
|
|
1026
|
+
},
|
|
1027
|
+
{
|
|
1028
|
+
"description": "Only this conversation",
|
|
1029
|
+
"id": "once",
|
|
1030
|
+
"label": "Allow this chat",
|
|
1031
|
+
},
|
|
1032
|
+
],
|
|
1033
|
+
"kind": "approval",
|
|
1034
|
+
"message": "Trip Planner wants to read your guuey profile — the notes agents keep about you across apps.",
|
|
1035
|
+
"metadata": {
|
|
1036
|
+
"appId": "app-1",
|
|
1037
|
+
"requested": "read",
|
|
1038
|
+
},
|
|
1039
|
+
},
|
|
1040
|
+
"askKind": "approval",
|
|
1041
|
+
"chosenModeId": null,
|
|
1042
|
+
"chosenModeLabel": null,
|
|
1020
1043
|
"expanded": true,
|
|
1021
|
-
"
|
|
1044
|
+
"grantModes": [
|
|
1045
|
+
{
|
|
1046
|
+
"description": "Every conversation with this agent",
|
|
1047
|
+
"id": "always",
|
|
1048
|
+
"label": "Always allow",
|
|
1049
|
+
},
|
|
1050
|
+
{
|
|
1051
|
+
"description": "Only this conversation",
|
|
1052
|
+
"id": "once",
|
|
1053
|
+
"label": "Allow this chat",
|
|
1054
|
+
},
|
|
1055
|
+
],
|
|
1056
|
+
"key": "p.profile-consent:app-1:thread-corpus",
|
|
1022
1057
|
"kind": "prompt",
|
|
1023
|
-
"
|
|
1024
|
-
"
|
|
1058
|
+
"message": "Trip Planner wants to read your guuey profile — the notes agents keep about you across apps.",
|
|
1059
|
+
"oauth": null,
|
|
1060
|
+
"promptId": "profile-consent:app-1:thread-corpus",
|
|
1061
|
+
"promptKind": "hitl",
|
|
1025
1062
|
"raw": null,
|
|
1026
|
-
"requested": "read",
|
|
1027
1063
|
"state": "pending",
|
|
1028
1064
|
},
|
|
1029
1065
|
],
|
|
@@ -1762,6 +1798,7 @@ exports[`corpus > 20. hitl-grant-modes — the persisted declaration renders; an
|
|
|
1762
1798
|
"key": "p.ask-remember-1",
|
|
1763
1799
|
"kind": "prompt",
|
|
1764
1800
|
"message": "Remember your seating preference?",
|
|
1801
|
+
"oauth": null,
|
|
1765
1802
|
"promptId": "ask-remember-1",
|
|
1766
1803
|
"promptKind": "hitl",
|
|
1767
1804
|
"raw": null,
|
|
@@ -1981,3 +2018,85 @@ exports[`corpus > 24. prod-wire-ggui-render — ggui's production posture: no _m
|
|
|
1981
2018
|
"status": null,
|
|
1982
2019
|
}
|
|
1983
2020
|
`;
|
|
2021
|
+
|
|
2022
|
+
exports[`corpus > 25. oauth-auth-ask — kind:auth + authConfig oauth2 plans as the SAME hitl card with an oauth arm; a mode pick is a link, not an answer (guuey#178) 1`] = `
|
|
2023
|
+
{
|
|
2024
|
+
"items": [
|
|
2025
|
+
{
|
|
2026
|
+
"expanded": true,
|
|
2027
|
+
"key": "u0",
|
|
2028
|
+
"kind": "user",
|
|
2029
|
+
"retry": false,
|
|
2030
|
+
"state": "sent",
|
|
2031
|
+
"text": "what's on my Linear board?",
|
|
2032
|
+
},
|
|
2033
|
+
{
|
|
2034
|
+
"expanded": true,
|
|
2035
|
+
"key": "a0.t0",
|
|
2036
|
+
"kind": "text",
|
|
2037
|
+
"markdown": true,
|
|
2038
|
+
"stopped": false,
|
|
2039
|
+
"streaming": false,
|
|
2040
|
+
"text": "I can't reach Linear yet.",
|
|
2041
|
+
},
|
|
2042
|
+
{
|
|
2043
|
+
"ask": {
|
|
2044
|
+
"askId": "mcp-oauth:app_1:linear:thread-oauth",
|
|
2045
|
+
"authConfig": {
|
|
2046
|
+
"authorizationUrl": "https://mcp.dev.sandbox.guuey.com/oauth/start?state=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
2047
|
+
"scheme": "oauth2",
|
|
2048
|
+
},
|
|
2049
|
+
"expiresAt": "2026-08-17T10:10:00.000Z",
|
|
2050
|
+
"grantModes": [
|
|
2051
|
+
{
|
|
2052
|
+
"description": "Every conversation with this agent",
|
|
2053
|
+
"id": "always",
|
|
2054
|
+
"label": "Always allow",
|
|
2055
|
+
},
|
|
2056
|
+
{
|
|
2057
|
+
"description": "Only this conversation",
|
|
2058
|
+
"id": "once",
|
|
2059
|
+
"label": "Allow this chat",
|
|
2060
|
+
},
|
|
2061
|
+
],
|
|
2062
|
+
"kind": "auth",
|
|
2063
|
+
"message": "Trip Planner wants to use your Linear account",
|
|
2064
|
+
"metadata": {
|
|
2065
|
+
"appId": "app_1",
|
|
2066
|
+
"expiresAt": "2026-08-17T10:10:00.000Z",
|
|
2067
|
+
"serverName": "linear",
|
|
2068
|
+
},
|
|
2069
|
+
},
|
|
2070
|
+
"askKind": "auth",
|
|
2071
|
+
"chosenModeId": null,
|
|
2072
|
+
"chosenModeLabel": null,
|
|
2073
|
+
"expanded": true,
|
|
2074
|
+
"grantModes": [
|
|
2075
|
+
{
|
|
2076
|
+
"description": "Every conversation with this agent",
|
|
2077
|
+
"id": "always",
|
|
2078
|
+
"label": "Always allow",
|
|
2079
|
+
},
|
|
2080
|
+
{
|
|
2081
|
+
"description": "Only this conversation",
|
|
2082
|
+
"id": "once",
|
|
2083
|
+
"label": "Allow this chat",
|
|
2084
|
+
},
|
|
2085
|
+
],
|
|
2086
|
+
"key": "p.mcp-oauth:app_1:linear:thread-oauth",
|
|
2087
|
+
"kind": "prompt",
|
|
2088
|
+
"message": "Trip Planner wants to use your Linear account",
|
|
2089
|
+
"oauth": {
|
|
2090
|
+
"authorizationUrl": "https://mcp.dev.sandbox.guuey.com/oauth/start?state=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
2091
|
+
"scopes": [],
|
|
2092
|
+
},
|
|
2093
|
+
"promptId": "mcp-oauth:app_1:linear:thread-oauth",
|
|
2094
|
+
"promptKind": "hitl",
|
|
2095
|
+
"raw": null,
|
|
2096
|
+
"state": "pending",
|
|
2097
|
+
},
|
|
2098
|
+
],
|
|
2099
|
+
"recovery": null,
|
|
2100
|
+
"status": null,
|
|
2101
|
+
}
|
|
2102
|
+
`;
|