@guuey/create-agentic-app 0.11.0 → 0.12.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/templates/agentic-app/claude-agent-sdk/package.json +4 -4
- package/dist/templates/agentic-app/claude-agent-sdk/web/package.json +2 -2
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/AgentChat.tsx +5 -0
- package/dist/templates/agentic-app/claude-agent-sdk/web/src/components/AppShell.tsx +14 -0
- package/dist/templates/agentic-app/google-adk/package.json +3 -3
- package/dist/templates/agentic-app/google-adk/web/package.json +2 -2
- package/dist/templates/agentic-app/google-adk/web/src/components/AgentChat.tsx +5 -0
- package/dist/templates/agentic-app/google-adk/web/src/components/AppShell.tsx +14 -0
- package/dist/templates/agentic-app/openai-agents-sdk/package.json +4 -4
- package/dist/templates/agentic-app/openai-agents-sdk/web/package.json +2 -2
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/AgentChat.tsx +5 -0
- package/dist/templates/agentic-app/openai-agents-sdk/web/src/components/AppShell.tsx +14 -0
- package/dist/templates/base/claude-agent-sdk/package.json +4 -4
- package/dist/templates/base/claude-agent-sdk/web/package.json +1 -1
- package/dist/templates/base/claude-agent-sdk/web/src/components/AgentChat.tsx +5 -0
- package/dist/templates/base/google-adk/package.json +3 -3
- package/dist/templates/base/google-adk/web/package.json +1 -1
- package/dist/templates/base/google-adk/web/src/components/AgentChat.tsx +5 -0
- package/dist/templates/base/openai-agents-sdk/package.json +4 -4
- package/dist/templates/base/openai-agents-sdk/web/package.json +1 -1
- package/dist/templates/base/openai-agents-sdk/web/src/components/AgentChat.tsx +5 -0
- package/package.json +3 -3
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@anthropic-ai/claude-agent-sdk": "^0.3.199",
|
|
15
|
-
"@guuey/config": "0.
|
|
16
|
-
"@guuey/worker": "0.
|
|
15
|
+
"@guuey/config": "0.12.1",
|
|
16
|
+
"@guuey/worker": "0.12.1"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@ggui-ai/cli": "0.
|
|
20
|
-
"@guuey/cli": "0.
|
|
19
|
+
"@ggui-ai/cli": "0.11.0",
|
|
20
|
+
"@guuey/cli": "0.12.1",
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
22
|
"tsx": "^4.19.0",
|
|
23
23
|
"typescript": "^5.8.0"
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"typecheck": "tsc --noEmit"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@guuey/chat": "0.
|
|
13
|
-
"@guuey/mcp-apps-host": "0.
|
|
12
|
+
"@guuey/chat": "0.12.1",
|
|
13
|
+
"@guuey/mcp-apps-host": "0.12.1",
|
|
14
14
|
"oidc-client-ts": "^3.1.0",
|
|
15
15
|
"qrcode": "^1.5.4",
|
|
16
16
|
"react": "^19.0.0",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { useEffect, useState, type CSSProperties } from "react";
|
|
12
12
|
import { GuueyChat } from "@guuey/chat/react";
|
|
13
|
+
import type { GuueyChatHandle } from "@guuey/chat/react";
|
|
13
14
|
import type { PlanViewSummary, ViewRefItem } from "@guuey/chat";
|
|
14
15
|
import { agentEndpointUrl, appConfig, historyBaseUrl } from "../config";
|
|
15
16
|
import { currentIdentityMode, ensureGuestSecret } from "../lib/identity";
|
|
@@ -38,10 +39,13 @@ export function AgentChat({
|
|
|
38
39
|
className,
|
|
39
40
|
style,
|
|
40
41
|
viewsBridge,
|
|
42
|
+
onReady,
|
|
41
43
|
}: {
|
|
42
44
|
className?: string;
|
|
43
45
|
style?: CSSProperties;
|
|
44
46
|
viewsBridge?: ViewsBridge;
|
|
47
|
+
/** Receives the chat handle — the AppShell mounts canvas views with `handle.viewSlotProps()`. */
|
|
48
|
+
onReady?: (handle: GuueyChatHandle) => void;
|
|
45
49
|
}) {
|
|
46
50
|
// The user's CHOSEN mode wins: an explicit "Continue as guest" must never
|
|
47
51
|
// be shadowed by a cached OIDC session. Only when no choice is recorded
|
|
@@ -71,6 +75,7 @@ export function AgentChat({
|
|
|
71
75
|
mode: appConfig.theme.mode,
|
|
72
76
|
className,
|
|
73
77
|
style,
|
|
78
|
+
...(onReady !== undefined ? { onReady } : {}),
|
|
74
79
|
...(viewsBridge !== undefined
|
|
75
80
|
? {
|
|
76
81
|
policy: RAIL_POLICY,
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* menu swaps the canvas back to your pages.
|
|
21
21
|
*/
|
|
22
22
|
import { useCallback, useRef, useState } from "react";
|
|
23
|
+
import type { GuueyChatHandle } from "@guuey/chat/react";
|
|
23
24
|
import { NavLink, Outlet, useNavigate } from "react-router-dom";
|
|
24
25
|
import type { PlanViewSummary, ViewRefItem } from "@guuey/chat";
|
|
25
26
|
import { GuueyView } from "@guuey/mcp-apps-host/react";
|
|
@@ -36,6 +37,10 @@ export function AppShell() {
|
|
|
36
37
|
// here, the rail shows only chips), the selected key, and whether the
|
|
37
38
|
// canvas currently shows a view or the routed pages.
|
|
38
39
|
const [views, setViews] = useState<PlanViewSummary[]>([]);
|
|
40
|
+
// The chat handle carries the kit's view-host wiring (action relay,
|
|
41
|
+
// model-context sink, theme announce) — the canvas mounts with it so a
|
|
42
|
+
// rendered card's Confirm works OUTSIDE the transcript too (guuey#335).
|
|
43
|
+
const [chat, setChat] = useState<GuueyChatHandle | null>(null);
|
|
39
44
|
const [selectedKey, setSelectedKey] = useState<string | undefined>(undefined);
|
|
40
45
|
const [canvasShowsView, setCanvasShowsView] = useState(false);
|
|
41
46
|
const newestKeyRef = useRef<string | undefined>(undefined);
|
|
@@ -103,6 +108,7 @@ export function AppShell() {
|
|
|
103
108
|
<AgentChat
|
|
104
109
|
className="rail-chat"
|
|
105
110
|
viewsBridge={{ promotedViewKey: selectedKey, onViewRef, onViewsChange }}
|
|
111
|
+
onReady={setChat}
|
|
106
112
|
/>
|
|
107
113
|
</div>
|
|
108
114
|
</aside>
|
|
@@ -121,6 +127,14 @@ export function AppShell() {
|
|
|
121
127
|
mount={selected.mount}
|
|
122
128
|
title={selected.title}
|
|
123
129
|
className="canvas-view-mount"
|
|
130
|
+
// The kit's slot wiring (guuey#335): action relay +
|
|
131
|
+
// model-context sink + the #302 theme announce, identical
|
|
132
|
+
// to the transcript's own mounts — Confirm inside a
|
|
133
|
+
// canvas-mounted card is a tools/call and needs the relay.
|
|
134
|
+
{...(chat !== null ? chat.viewSlotProps() : {})}
|
|
135
|
+
// Explicit announce kept (same value the kit defaults):
|
|
136
|
+
// the canvas mounts correctly even pre-handle.
|
|
137
|
+
hostContext={{ theme: appConfig.theme.mode }}
|
|
124
138
|
/>
|
|
125
139
|
) : (
|
|
126
140
|
// A locator still resolving — the kit reads it and the next
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"zod": "^4.2.1"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@ggui-ai/cli": "0.
|
|
19
|
-
"@guuey/cli": "0.
|
|
20
|
-
"@guuey/config": "0.
|
|
18
|
+
"@ggui-ai/cli": "0.11.0",
|
|
19
|
+
"@guuey/cli": "0.12.1",
|
|
20
|
+
"@guuey/config": "0.12.1",
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
22
|
"tsx": "^4.19.0",
|
|
23
23
|
"typescript": "^5.8.0"
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"typecheck": "tsc --noEmit"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@guuey/chat": "0.
|
|
13
|
-
"@guuey/mcp-apps-host": "0.
|
|
12
|
+
"@guuey/chat": "0.12.1",
|
|
13
|
+
"@guuey/mcp-apps-host": "0.12.1",
|
|
14
14
|
"oidc-client-ts": "^3.1.0",
|
|
15
15
|
"qrcode": "^1.5.4",
|
|
16
16
|
"react": "^19.0.0",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { useEffect, useState, type CSSProperties } from "react";
|
|
12
12
|
import { GuueyChat } from "@guuey/chat/react";
|
|
13
|
+
import type { GuueyChatHandle } from "@guuey/chat/react";
|
|
13
14
|
import type { PlanViewSummary, ViewRefItem } from "@guuey/chat";
|
|
14
15
|
import { agentEndpointUrl, appConfig, historyBaseUrl } from "../config";
|
|
15
16
|
import { currentIdentityMode, ensureGuestSecret } from "../lib/identity";
|
|
@@ -38,10 +39,13 @@ export function AgentChat({
|
|
|
38
39
|
className,
|
|
39
40
|
style,
|
|
40
41
|
viewsBridge,
|
|
42
|
+
onReady,
|
|
41
43
|
}: {
|
|
42
44
|
className?: string;
|
|
43
45
|
style?: CSSProperties;
|
|
44
46
|
viewsBridge?: ViewsBridge;
|
|
47
|
+
/** Receives the chat handle — the AppShell mounts canvas views with `handle.viewSlotProps()`. */
|
|
48
|
+
onReady?: (handle: GuueyChatHandle) => void;
|
|
45
49
|
}) {
|
|
46
50
|
// The user's CHOSEN mode wins: an explicit "Continue as guest" must never
|
|
47
51
|
// be shadowed by a cached OIDC session. Only when no choice is recorded
|
|
@@ -71,6 +75,7 @@ export function AgentChat({
|
|
|
71
75
|
mode: appConfig.theme.mode,
|
|
72
76
|
className,
|
|
73
77
|
style,
|
|
78
|
+
...(onReady !== undefined ? { onReady } : {}),
|
|
74
79
|
...(viewsBridge !== undefined
|
|
75
80
|
? {
|
|
76
81
|
policy: RAIL_POLICY,
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* menu swaps the canvas back to your pages.
|
|
21
21
|
*/
|
|
22
22
|
import { useCallback, useRef, useState } from "react";
|
|
23
|
+
import type { GuueyChatHandle } from "@guuey/chat/react";
|
|
23
24
|
import { NavLink, Outlet, useNavigate } from "react-router-dom";
|
|
24
25
|
import type { PlanViewSummary, ViewRefItem } from "@guuey/chat";
|
|
25
26
|
import { GuueyView } from "@guuey/mcp-apps-host/react";
|
|
@@ -36,6 +37,10 @@ export function AppShell() {
|
|
|
36
37
|
// here, the rail shows only chips), the selected key, and whether the
|
|
37
38
|
// canvas currently shows a view or the routed pages.
|
|
38
39
|
const [views, setViews] = useState<PlanViewSummary[]>([]);
|
|
40
|
+
// The chat handle carries the kit's view-host wiring (action relay,
|
|
41
|
+
// model-context sink, theme announce) — the canvas mounts with it so a
|
|
42
|
+
// rendered card's Confirm works OUTSIDE the transcript too (guuey#335).
|
|
43
|
+
const [chat, setChat] = useState<GuueyChatHandle | null>(null);
|
|
39
44
|
const [selectedKey, setSelectedKey] = useState<string | undefined>(undefined);
|
|
40
45
|
const [canvasShowsView, setCanvasShowsView] = useState(false);
|
|
41
46
|
const newestKeyRef = useRef<string | undefined>(undefined);
|
|
@@ -103,6 +108,7 @@ export function AppShell() {
|
|
|
103
108
|
<AgentChat
|
|
104
109
|
className="rail-chat"
|
|
105
110
|
viewsBridge={{ promotedViewKey: selectedKey, onViewRef, onViewsChange }}
|
|
111
|
+
onReady={setChat}
|
|
106
112
|
/>
|
|
107
113
|
</div>
|
|
108
114
|
</aside>
|
|
@@ -121,6 +127,14 @@ export function AppShell() {
|
|
|
121
127
|
mount={selected.mount}
|
|
122
128
|
title={selected.title}
|
|
123
129
|
className="canvas-view-mount"
|
|
130
|
+
// The kit's slot wiring (guuey#335): action relay +
|
|
131
|
+
// model-context sink + the #302 theme announce, identical
|
|
132
|
+
// to the transcript's own mounts — Confirm inside a
|
|
133
|
+
// canvas-mounted card is a tools/call and needs the relay.
|
|
134
|
+
{...(chat !== null ? chat.viewSlotProps() : {})}
|
|
135
|
+
// Explicit announce kept (same value the kit defaults):
|
|
136
|
+
// the canvas mounts correctly even pre-handle.
|
|
137
|
+
hostContext={{ theme: appConfig.theme.mode }}
|
|
124
138
|
/>
|
|
125
139
|
) : (
|
|
126
140
|
// A locator still resolving — the kit reads it and the next
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@openai/agents": "^0.12.0",
|
|
15
|
-
"@guuey/config": "0.
|
|
16
|
-
"@guuey/worker": "0.
|
|
15
|
+
"@guuey/config": "0.12.1",
|
|
16
|
+
"@guuey/worker": "0.12.1"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@ggui-ai/cli": "0.
|
|
20
|
-
"@guuey/cli": "0.
|
|
19
|
+
"@ggui-ai/cli": "0.11.0",
|
|
20
|
+
"@guuey/cli": "0.12.1",
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
22
|
"tsx": "^4.19.0",
|
|
23
23
|
"typescript": "^5.8.0"
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"typecheck": "tsc --noEmit"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@guuey/chat": "0.
|
|
13
|
-
"@guuey/mcp-apps-host": "0.
|
|
12
|
+
"@guuey/chat": "0.12.1",
|
|
13
|
+
"@guuey/mcp-apps-host": "0.12.1",
|
|
14
14
|
"oidc-client-ts": "^3.1.0",
|
|
15
15
|
"qrcode": "^1.5.4",
|
|
16
16
|
"react": "^19.0.0",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { useEffect, useState, type CSSProperties } from "react";
|
|
12
12
|
import { GuueyChat } from "@guuey/chat/react";
|
|
13
|
+
import type { GuueyChatHandle } from "@guuey/chat/react";
|
|
13
14
|
import type { PlanViewSummary, ViewRefItem } from "@guuey/chat";
|
|
14
15
|
import { agentEndpointUrl, appConfig, historyBaseUrl } from "../config";
|
|
15
16
|
import { currentIdentityMode, ensureGuestSecret } from "../lib/identity";
|
|
@@ -38,10 +39,13 @@ export function AgentChat({
|
|
|
38
39
|
className,
|
|
39
40
|
style,
|
|
40
41
|
viewsBridge,
|
|
42
|
+
onReady,
|
|
41
43
|
}: {
|
|
42
44
|
className?: string;
|
|
43
45
|
style?: CSSProperties;
|
|
44
46
|
viewsBridge?: ViewsBridge;
|
|
47
|
+
/** Receives the chat handle — the AppShell mounts canvas views with `handle.viewSlotProps()`. */
|
|
48
|
+
onReady?: (handle: GuueyChatHandle) => void;
|
|
45
49
|
}) {
|
|
46
50
|
// The user's CHOSEN mode wins: an explicit "Continue as guest" must never
|
|
47
51
|
// be shadowed by a cached OIDC session. Only when no choice is recorded
|
|
@@ -71,6 +75,7 @@ export function AgentChat({
|
|
|
71
75
|
mode: appConfig.theme.mode,
|
|
72
76
|
className,
|
|
73
77
|
style,
|
|
78
|
+
...(onReady !== undefined ? { onReady } : {}),
|
|
74
79
|
...(viewsBridge !== undefined
|
|
75
80
|
? {
|
|
76
81
|
policy: RAIL_POLICY,
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* menu swaps the canvas back to your pages.
|
|
21
21
|
*/
|
|
22
22
|
import { useCallback, useRef, useState } from "react";
|
|
23
|
+
import type { GuueyChatHandle } from "@guuey/chat/react";
|
|
23
24
|
import { NavLink, Outlet, useNavigate } from "react-router-dom";
|
|
24
25
|
import type { PlanViewSummary, ViewRefItem } from "@guuey/chat";
|
|
25
26
|
import { GuueyView } from "@guuey/mcp-apps-host/react";
|
|
@@ -36,6 +37,10 @@ export function AppShell() {
|
|
|
36
37
|
// here, the rail shows only chips), the selected key, and whether the
|
|
37
38
|
// canvas currently shows a view or the routed pages.
|
|
38
39
|
const [views, setViews] = useState<PlanViewSummary[]>([]);
|
|
40
|
+
// The chat handle carries the kit's view-host wiring (action relay,
|
|
41
|
+
// model-context sink, theme announce) — the canvas mounts with it so a
|
|
42
|
+
// rendered card's Confirm works OUTSIDE the transcript too (guuey#335).
|
|
43
|
+
const [chat, setChat] = useState<GuueyChatHandle | null>(null);
|
|
39
44
|
const [selectedKey, setSelectedKey] = useState<string | undefined>(undefined);
|
|
40
45
|
const [canvasShowsView, setCanvasShowsView] = useState(false);
|
|
41
46
|
const newestKeyRef = useRef<string | undefined>(undefined);
|
|
@@ -103,6 +108,7 @@ export function AppShell() {
|
|
|
103
108
|
<AgentChat
|
|
104
109
|
className="rail-chat"
|
|
105
110
|
viewsBridge={{ promotedViewKey: selectedKey, onViewRef, onViewsChange }}
|
|
111
|
+
onReady={setChat}
|
|
106
112
|
/>
|
|
107
113
|
</div>
|
|
108
114
|
</aside>
|
|
@@ -121,6 +127,14 @@ export function AppShell() {
|
|
|
121
127
|
mount={selected.mount}
|
|
122
128
|
title={selected.title}
|
|
123
129
|
className="canvas-view-mount"
|
|
130
|
+
// The kit's slot wiring (guuey#335): action relay +
|
|
131
|
+
// model-context sink + the #302 theme announce, identical
|
|
132
|
+
// to the transcript's own mounts — Confirm inside a
|
|
133
|
+
// canvas-mounted card is a tools/call and needs the relay.
|
|
134
|
+
{...(chat !== null ? chat.viewSlotProps() : {})}
|
|
135
|
+
// Explicit announce kept (same value the kit defaults):
|
|
136
|
+
// the canvas mounts correctly even pre-handle.
|
|
137
|
+
hostContext={{ theme: appConfig.theme.mode }}
|
|
124
138
|
/>
|
|
125
139
|
) : (
|
|
126
140
|
// A locator still resolving — the kit reads it and the next
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@anthropic-ai/claude-agent-sdk": "^0.3.199",
|
|
15
|
-
"@guuey/config": "0.
|
|
16
|
-
"@guuey/worker": "0.
|
|
15
|
+
"@guuey/config": "0.12.1",
|
|
16
|
+
"@guuey/worker": "0.12.1"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@ggui-ai/cli": "0.
|
|
20
|
-
"@guuey/cli": "0.
|
|
19
|
+
"@ggui-ai/cli": "0.11.0",
|
|
20
|
+
"@guuey/cli": "0.12.1",
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
22
|
"tsx": "^4.19.0",
|
|
23
23
|
"typescript": "^5.8.0"
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { useEffect, useState, type CSSProperties } from "react";
|
|
12
12
|
import { GuueyChat } from "@guuey/chat/react";
|
|
13
|
+
import type { GuueyChatHandle } from "@guuey/chat/react";
|
|
13
14
|
import type { PlanViewSummary, ViewRefItem } from "@guuey/chat";
|
|
14
15
|
import { agentEndpointUrl, appConfig, historyBaseUrl } from "../config";
|
|
15
16
|
import { currentIdentityMode, ensureGuestSecret } from "../lib/identity";
|
|
@@ -38,10 +39,13 @@ export function AgentChat({
|
|
|
38
39
|
className,
|
|
39
40
|
style,
|
|
40
41
|
viewsBridge,
|
|
42
|
+
onReady,
|
|
41
43
|
}: {
|
|
42
44
|
className?: string;
|
|
43
45
|
style?: CSSProperties;
|
|
44
46
|
viewsBridge?: ViewsBridge;
|
|
47
|
+
/** Receives the chat handle — the AppShell mounts canvas views with `handle.viewSlotProps()`. */
|
|
48
|
+
onReady?: (handle: GuueyChatHandle) => void;
|
|
45
49
|
}) {
|
|
46
50
|
// The user's CHOSEN mode wins: an explicit "Continue as guest" must never
|
|
47
51
|
// be shadowed by a cached OIDC session. Only when no choice is recorded
|
|
@@ -71,6 +75,7 @@ export function AgentChat({
|
|
|
71
75
|
mode: appConfig.theme.mode,
|
|
72
76
|
className,
|
|
73
77
|
style,
|
|
78
|
+
...(onReady !== undefined ? { onReady } : {}),
|
|
74
79
|
...(viewsBridge !== undefined
|
|
75
80
|
? {
|
|
76
81
|
policy: RAIL_POLICY,
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"zod": "^4.2.1"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@ggui-ai/cli": "0.
|
|
19
|
-
"@guuey/cli": "0.
|
|
20
|
-
"@guuey/config": "0.
|
|
18
|
+
"@ggui-ai/cli": "0.11.0",
|
|
19
|
+
"@guuey/cli": "0.12.1",
|
|
20
|
+
"@guuey/config": "0.12.1",
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
22
|
"tsx": "^4.19.0",
|
|
23
23
|
"typescript": "^5.8.0"
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { useEffect, useState, type CSSProperties } from "react";
|
|
12
12
|
import { GuueyChat } from "@guuey/chat/react";
|
|
13
|
+
import type { GuueyChatHandle } from "@guuey/chat/react";
|
|
13
14
|
import type { PlanViewSummary, ViewRefItem } from "@guuey/chat";
|
|
14
15
|
import { agentEndpointUrl, appConfig, historyBaseUrl } from "../config";
|
|
15
16
|
import { currentIdentityMode, ensureGuestSecret } from "../lib/identity";
|
|
@@ -38,10 +39,13 @@ export function AgentChat({
|
|
|
38
39
|
className,
|
|
39
40
|
style,
|
|
40
41
|
viewsBridge,
|
|
42
|
+
onReady,
|
|
41
43
|
}: {
|
|
42
44
|
className?: string;
|
|
43
45
|
style?: CSSProperties;
|
|
44
46
|
viewsBridge?: ViewsBridge;
|
|
47
|
+
/** Receives the chat handle — the AppShell mounts canvas views with `handle.viewSlotProps()`. */
|
|
48
|
+
onReady?: (handle: GuueyChatHandle) => void;
|
|
45
49
|
}) {
|
|
46
50
|
// The user's CHOSEN mode wins: an explicit "Continue as guest" must never
|
|
47
51
|
// be shadowed by a cached OIDC session. Only when no choice is recorded
|
|
@@ -71,6 +75,7 @@ export function AgentChat({
|
|
|
71
75
|
mode: appConfig.theme.mode,
|
|
72
76
|
className,
|
|
73
77
|
style,
|
|
78
|
+
...(onReady !== undefined ? { onReady } : {}),
|
|
74
79
|
...(viewsBridge !== undefined
|
|
75
80
|
? {
|
|
76
81
|
policy: RAIL_POLICY,
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@openai/agents": "^0.12.0",
|
|
15
|
-
"@guuey/config": "0.
|
|
16
|
-
"@guuey/worker": "0.
|
|
15
|
+
"@guuey/config": "0.12.1",
|
|
16
|
+
"@guuey/worker": "0.12.1"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@ggui-ai/cli": "0.
|
|
20
|
-
"@guuey/cli": "0.
|
|
19
|
+
"@ggui-ai/cli": "0.11.0",
|
|
20
|
+
"@guuey/cli": "0.12.1",
|
|
21
21
|
"tsup": "^8.5.0",
|
|
22
22
|
"tsx": "^4.19.0",
|
|
23
23
|
"typescript": "^5.8.0"
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { useEffect, useState, type CSSProperties } from "react";
|
|
12
12
|
import { GuueyChat } from "@guuey/chat/react";
|
|
13
|
+
import type { GuueyChatHandle } from "@guuey/chat/react";
|
|
13
14
|
import type { PlanViewSummary, ViewRefItem } from "@guuey/chat";
|
|
14
15
|
import { agentEndpointUrl, appConfig, historyBaseUrl } from "../config";
|
|
15
16
|
import { currentIdentityMode, ensureGuestSecret } from "../lib/identity";
|
|
@@ -38,10 +39,13 @@ export function AgentChat({
|
|
|
38
39
|
className,
|
|
39
40
|
style,
|
|
40
41
|
viewsBridge,
|
|
42
|
+
onReady,
|
|
41
43
|
}: {
|
|
42
44
|
className?: string;
|
|
43
45
|
style?: CSSProperties;
|
|
44
46
|
viewsBridge?: ViewsBridge;
|
|
47
|
+
/** Receives the chat handle — the AppShell mounts canvas views with `handle.viewSlotProps()`. */
|
|
48
|
+
onReady?: (handle: GuueyChatHandle) => void;
|
|
45
49
|
}) {
|
|
46
50
|
// The user's CHOSEN mode wins: an explicit "Continue as guest" must never
|
|
47
51
|
// be shadowed by a cached OIDC session. Only when no choice is recorded
|
|
@@ -71,6 +75,7 @@ export function AgentChat({
|
|
|
71
75
|
mode: appConfig.theme.mode,
|
|
72
76
|
className,
|
|
73
77
|
style,
|
|
78
|
+
...(onReady !== undefined ? { onReady } : {}),
|
|
74
79
|
...(viewsBridge !== undefined
|
|
75
80
|
? {
|
|
76
81
|
policy: RAIL_POLICY,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@guuey/create-agentic-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.1",
|
|
4
4
|
"description": "Scaffold a guuey agentic app: code-mode agent + custom MCP + ggui + web, local pnpm dev, one-command guuey deploy.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"tsup": "^8.5.0",
|
|
26
26
|
"typescript": "^5.8.0",
|
|
27
27
|
"vitest": "^3.2.4",
|
|
28
|
-
"@guuey/config": "0.
|
|
29
|
-
"@guuey/worker": "0.
|
|
28
|
+
"@guuey/config": "0.12.1",
|
|
29
|
+
"@guuey/worker": "0.12.1"
|
|
30
30
|
},
|
|
31
31
|
"publishConfig": {
|
|
32
32
|
"access": "public"
|