@nextworks/blocks-templates 0.2.0-alpha.13 → 0.2.0-alpha.15
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 +3 -0
- package/dist/templates/aiworkflow/PresetThemeVars.d.ts +1 -6
- package/dist/templates/aiworkflow/PresetThemeVars.d.ts.map +1 -1
- package/dist/templates/aiworkflow/PresetThemeVars.jsx +1 -7
- package/dist/templates/aiworkflow/components/CTA.jsx +9 -9
- package/dist/templates/aiworkflow/components/Contact.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Contact.jsx +10 -10
- package/dist/templates/aiworkflow/components/FAQ.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/FAQ.jsx +18 -18
- package/dist/templates/aiworkflow/components/FeatureMockups.d.ts +5 -0
- package/dist/templates/aiworkflow/components/FeatureMockups.d.ts.map +1 -0
- package/dist/templates/aiworkflow/components/FeatureMockups.jsx +442 -0
- package/dist/templates/aiworkflow/components/Features.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Features.jsx +16 -14
- package/dist/templates/aiworkflow/components/Footer.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Footer.jsx +13 -9
- package/dist/templates/aiworkflow/components/Hero.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Hero.jsx +664 -416
- package/dist/templates/aiworkflow/components/Navbar.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Navbar.jsx +13 -14
- package/dist/templates/aiworkflow/components/Pricing.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Pricing.jsx +25 -21
- package/dist/templates/aiworkflow/components/ProcessTimeline.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/ProcessTimeline.jsx +15 -15
- package/dist/templates/aiworkflow/components/Testimonials.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Testimonials.jsx +14 -10
- package/dist/templates/aiworkflow/components/TrustBadges.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/TrustBadges.jsx +14 -12
- package/dist/templates/aiworkflow/themes/default.d.ts +7 -0
- package/dist/templates/aiworkflow/themes/default.d.ts.map +1 -0
- package/dist/templates/aiworkflow/themes/default.jsx +9 -0
- package/dist/templates/gallery/PresetThemeVars.d.ts.map +1 -1
- package/dist/templates/gallery/PresetThemeVars.jsx +2 -0
- package/dist/templates/gallery/page.d.ts.map +1 -1
- package/dist/templates/gallery/page.jsx +381 -34
- package/package.json +3 -3
|
@@ -4,591 +4,839 @@
|
|
|
4
4
|
import { HeroProductDemo } from "@nextworks/blocks-sections";
|
|
5
5
|
const scenarios = [
|
|
6
6
|
{
|
|
7
|
-
key: "
|
|
8
|
-
label: "
|
|
9
|
-
description: "
|
|
7
|
+
key: "fix-auth-flow",
|
|
8
|
+
label: "Coding agent",
|
|
9
|
+
description: "Choose a repo task and watch the agent inspect code, apply edits, and update the diff.",
|
|
10
10
|
activeWindow: "workflowStudio",
|
|
11
|
+
playback: {
|
|
12
|
+
workflowStudio: {
|
|
13
|
+
playbackStepDurationsMs: [780, 860, 1480, 1120, 940, 760, 1720],
|
|
14
|
+
playbackResetDelayMs: 2200,
|
|
15
|
+
},
|
|
16
|
+
runConsole: {
|
|
17
|
+
playbackStepDurationsMs: [1260, 1540, 980, 760, 680, 620, 1380],
|
|
18
|
+
playbackResetDelayMs: 2200,
|
|
19
|
+
playbackStepEntryIndices: [0, 0, 1, 1, 2, 2, 2, 2, 3],
|
|
20
|
+
playbackStepVisibleLineCounts: [2, 2, 3, 4, 6, 9, 12, 15, 16],
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
taskList: {
|
|
24
|
+
window: {
|
|
25
|
+
key: "taskList",
|
|
26
|
+
title: "Tasks",
|
|
27
|
+
subtitle: "Current workspace",
|
|
28
|
+
status: { label: "3 tasks", tone: "info" },
|
|
29
|
+
},
|
|
30
|
+
title: "Agent tasks",
|
|
31
|
+
subtitle: "Select a coding task to inspect and execute.",
|
|
32
|
+
activeItemId: "fix-auth-flow",
|
|
33
|
+
items: [
|
|
34
|
+
{
|
|
35
|
+
id: "fix-auth-flow",
|
|
36
|
+
title: "Fix auth flow",
|
|
37
|
+
description: "Fix the post-login redirect after the OAuth callback.",
|
|
38
|
+
meta: "apps/web · active",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: "refactor-pricing-page",
|
|
42
|
+
title: "Refactor pricing page",
|
|
43
|
+
description: "Extract repeated pricing sections into reusable components.",
|
|
44
|
+
meta: "marketing site · queued",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: "ship-command-palette",
|
|
48
|
+
title: "Ship command palette",
|
|
49
|
+
description: "Add global search, shortcuts, and action routing.",
|
|
50
|
+
meta: "dashboard · ready",
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
},
|
|
11
54
|
workflowStudio: {
|
|
12
55
|
window: {
|
|
13
56
|
key: "workflowStudio",
|
|
14
|
-
title: "
|
|
15
|
-
subtitle: "
|
|
16
|
-
status: { label: "
|
|
17
|
-
badge: "Scenario 01",
|
|
18
|
-
layoutHint: {
|
|
19
|
-
x: 0,
|
|
20
|
-
y: 0,
|
|
21
|
-
width: 62,
|
|
22
|
-
height: 72,
|
|
23
|
-
zIndex: 40,
|
|
24
|
-
rotateDeg: -2,
|
|
25
|
-
},
|
|
57
|
+
title: "Agent",
|
|
58
|
+
subtitle: "Active session",
|
|
59
|
+
status: { label: "Thinking", tone: "info" },
|
|
26
60
|
},
|
|
27
|
-
title: "
|
|
28
|
-
subtitle: "
|
|
29
|
-
activeNodeId: "
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
{ id: "route-approval", label: "Approval routing", tone: "accent" },
|
|
33
|
-
{ id: "crm-sync", label: "CRM sync", tone: "info" },
|
|
34
|
-
],
|
|
35
|
-
nodes: [
|
|
61
|
+
title: "Investigating redirect bug",
|
|
62
|
+
subtitle: "The agent inspects the callback and prepares a safe patch.",
|
|
63
|
+
activeNodeId: "edit-callback",
|
|
64
|
+
transcript: [
|
|
65
|
+
{ id: "auth-title", kind: "title", text: "Fix auth flow" },
|
|
36
66
|
{
|
|
37
|
-
id: "
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
type: "AI",
|
|
41
|
-
status: "success",
|
|
42
|
-
metadata: "Slack → structured brief",
|
|
67
|
+
id: "auth-prompt",
|
|
68
|
+
kind: "prompt",
|
|
69
|
+
text: "Fix the OAuth callback redirect so the app preserves the intended destination after sign-in.",
|
|
43
70
|
},
|
|
44
71
|
{
|
|
45
|
-
id: "
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
type: "Guardrail",
|
|
49
|
-
status: "success",
|
|
50
|
-
metadata: "Policy set v3.2",
|
|
72
|
+
id: "auth-read-1",
|
|
73
|
+
kind: "activity",
|
|
74
|
+
text: "Read app/auth/callback/page.tsx",
|
|
51
75
|
},
|
|
52
76
|
{
|
|
53
|
-
id: "
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
emphasized: true,
|
|
60
|
-
metadata: "2 approvers pending",
|
|
77
|
+
id: "auth-file-1",
|
|
78
|
+
kind: "file",
|
|
79
|
+
path: "app/auth/callback/page.tsx",
|
|
80
|
+
text: "app/auth/callback/page.tsx",
|
|
81
|
+
added: 14,
|
|
82
|
+
removed: 3,
|
|
61
83
|
},
|
|
62
84
|
{
|
|
63
|
-
id: "
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
85
|
+
id: "auth-file-2",
|
|
86
|
+
kind: "file",
|
|
87
|
+
path: "lib/auth/normalize-return-to.ts",
|
|
88
|
+
text: "lib/auth/normalize-return-to.ts",
|
|
89
|
+
added: 6,
|
|
90
|
+
removed: 1,
|
|
69
91
|
},
|
|
70
|
-
],
|
|
71
|
-
branches: [
|
|
72
92
|
{
|
|
73
|
-
id: "
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
status: "success",
|
|
77
|
-
active: true,
|
|
93
|
+
id: "auth-run-1",
|
|
94
|
+
kind: "activity",
|
|
95
|
+
text: "Run redirect scenarios for nested routes and invalid returnTo values",
|
|
78
96
|
},
|
|
79
97
|
{
|
|
80
|
-
id: "
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
label: "Budget > $25k",
|
|
84
|
-
status: "warning",
|
|
85
|
-
active: true,
|
|
98
|
+
id: "auth-thought-1",
|
|
99
|
+
kind: "thought",
|
|
100
|
+
text: "Preserve same-origin destinations, drop empty values, and avoid redirecting twice after the callback completes.",
|
|
86
101
|
},
|
|
87
102
|
{
|
|
88
|
-
id: "
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
103
|
+
id: "auth-message-1",
|
|
104
|
+
kind: "message",
|
|
105
|
+
text: "Patch keeps /dashboard/settings intact, falls back only when sanitize returns null, and records the redirect source for debugging.",
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
id: "auth-run-2",
|
|
109
|
+
kind: "activity",
|
|
110
|
+
text: "Prepare regression notes for auth loop and malformed path checks",
|
|
93
111
|
},
|
|
94
112
|
],
|
|
95
|
-
|
|
113
|
+
composer: {
|
|
114
|
+
placeholder: "Plan, inspect, or patch the next issue...",
|
|
115
|
+
modeLabel: "Agent",
|
|
116
|
+
modelLabel: "Sonnet",
|
|
117
|
+
},
|
|
118
|
+
highlights: [
|
|
119
|
+
{ id: "inspect-route", label: "Read files", tone: "info" },
|
|
120
|
+
{ id: "edit-callback", label: "Write patch", tone: "accent" },
|
|
121
|
+
],
|
|
122
|
+
nodes: [
|
|
96
123
|
{
|
|
97
|
-
id: "
|
|
98
|
-
label: "
|
|
99
|
-
description: "
|
|
124
|
+
id: "inspect-route",
|
|
125
|
+
label: "Inspect auth callback",
|
|
126
|
+
description: "Read callback handler and post-login redirect logic.",
|
|
127
|
+
type: "Read",
|
|
100
128
|
status: "success",
|
|
101
|
-
|
|
129
|
+
metadata: "app/auth/callback/page.tsx",
|
|
102
130
|
},
|
|
103
131
|
{
|
|
104
|
-
id: "
|
|
105
|
-
label: "
|
|
106
|
-
description: "
|
|
107
|
-
|
|
108
|
-
|
|
132
|
+
id: "trace-session",
|
|
133
|
+
label: "Trace session state",
|
|
134
|
+
description: "Verify redirect target after token exchange completes.",
|
|
135
|
+
type: "Analyze",
|
|
136
|
+
status: "success",
|
|
137
|
+
metadata: "session + router state",
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
id: "edit-callback",
|
|
141
|
+
label: "Patch redirect handling",
|
|
142
|
+
type: "Edit",
|
|
143
|
+
status: "info",
|
|
109
144
|
active: true,
|
|
110
|
-
|
|
145
|
+
emphasized: true,
|
|
146
|
+
metadata: "drafting change set",
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: "run-checks",
|
|
150
|
+
label: "Run validation",
|
|
151
|
+
description: "Check for auth loop regression and invalid destination paths.",
|
|
152
|
+
type: "Verify",
|
|
153
|
+
status: "neutral",
|
|
154
|
+
metadata: "tests next",
|
|
111
155
|
},
|
|
112
156
|
],
|
|
113
157
|
},
|
|
114
158
|
runConsole: {
|
|
115
159
|
window: {
|
|
116
160
|
key: "runConsole",
|
|
117
|
-
title: "
|
|
118
|
-
subtitle: "
|
|
119
|
-
status: { label: "
|
|
120
|
-
badge: "24 events",
|
|
121
|
-
layoutHint: {
|
|
122
|
-
x: 50,
|
|
123
|
-
y: 12,
|
|
124
|
-
width: 44,
|
|
125
|
-
height: 52,
|
|
126
|
-
zIndex: 30,
|
|
127
|
-
rotateDeg: 2,
|
|
128
|
-
},
|
|
161
|
+
title: "Editor",
|
|
162
|
+
subtitle: "Live diff",
|
|
163
|
+
status: { label: "Updating", tone: "info" },
|
|
129
164
|
},
|
|
130
|
-
title: "
|
|
131
|
-
subtitle: "
|
|
132
|
-
statusLabel: "
|
|
133
|
-
progressLabel: "
|
|
134
|
-
progressPercent:
|
|
135
|
-
activeEntryId: "
|
|
165
|
+
title: "app/auth/callback/page.tsx",
|
|
166
|
+
subtitle: "The diff updates as the agent writes the patch.",
|
|
167
|
+
statusLabel: "Applying patch",
|
|
168
|
+
progressLabel: "17 lines changed",
|
|
169
|
+
progressPercent: 68,
|
|
170
|
+
activeEntryId: "diff-3",
|
|
171
|
+
editorTabLabel: "page.tsx",
|
|
172
|
+
editorLanguage: "TypeScript",
|
|
173
|
+
editorSummary: "Guard empty return paths and preserve intended destination.",
|
|
136
174
|
entries: [
|
|
137
175
|
{
|
|
138
|
-
id: "
|
|
139
|
-
message: "
|
|
140
|
-
timestamp: "
|
|
141
|
-
source: "
|
|
176
|
+
id: "diff-1",
|
|
177
|
+
message: "Opened callback page and redirect helper",
|
|
178
|
+
timestamp: "11:02",
|
|
179
|
+
source: "agent",
|
|
142
180
|
status: "success",
|
|
143
181
|
},
|
|
144
182
|
{
|
|
145
|
-
id: "
|
|
146
|
-
message: "
|
|
147
|
-
timestamp: "
|
|
148
|
-
source: "
|
|
183
|
+
id: "diff-2",
|
|
184
|
+
message: "Found empty redirect path after OAuth callback",
|
|
185
|
+
timestamp: "11:02",
|
|
186
|
+
source: "analysis",
|
|
149
187
|
status: "success",
|
|
188
|
+
detail: "Fallback was defaulting too early and dropping intended destination.",
|
|
150
189
|
},
|
|
151
190
|
{
|
|
152
|
-
id: "
|
|
153
|
-
message: "
|
|
154
|
-
timestamp: "
|
|
155
|
-
source: "
|
|
156
|
-
status: "
|
|
191
|
+
id: "diff-3",
|
|
192
|
+
message: "Writing guarded redirect with preserved returnTo",
|
|
193
|
+
timestamp: "11:03",
|
|
194
|
+
source: "editor",
|
|
195
|
+
status: "info",
|
|
157
196
|
highlighted: true,
|
|
158
|
-
|
|
197
|
+
lineNumber: "38",
|
|
198
|
+
code: [
|
|
199
|
+
" const safeReturnTo = normalizeReturnTo(searchParams.get('returnTo'))",
|
|
200
|
+
"+const shouldTrackRedirect = safeReturnTo !== null",
|
|
201
|
+
"+const fallbackDestination = '/dashboard'",
|
|
202
|
+
" const destination = safeReturnTo ?? '/dashboard'",
|
|
203
|
+
"+const nextPath = destination || fallbackDestination",
|
|
204
|
+
"+const redirectSource = safeReturnTo ? 'return_to' : 'fallback'",
|
|
205
|
+
" ",
|
|
206
|
+
"+if (!nextPath.startsWith('/')) {",
|
|
207
|
+
"+ router.replace(fallbackDestination)",
|
|
208
|
+
"+ return null",
|
|
209
|
+
"+}",
|
|
210
|
+
"-router.replace('/dashboard')",
|
|
211
|
+
"+router.replace(nextPath)",
|
|
212
|
+
"+if (shouldTrackRedirect) trackAuthRedirect(nextPath, redirectSource)",
|
|
213
|
+
"+logAuthNavigation('oauth_callback_redirect', { destination: nextPath })",
|
|
214
|
+
" return null",
|
|
215
|
+
],
|
|
159
216
|
},
|
|
160
217
|
{
|
|
161
|
-
id: "
|
|
162
|
-
message: "
|
|
163
|
-
timestamp: "
|
|
164
|
-
source: "
|
|
165
|
-
status: "
|
|
218
|
+
id: "diff-4",
|
|
219
|
+
message: "Validated redirect to /dashboard/settings",
|
|
220
|
+
timestamp: "11:03",
|
|
221
|
+
source: "preview",
|
|
222
|
+
status: "neutral",
|
|
166
223
|
},
|
|
167
224
|
],
|
|
168
225
|
metrics: [
|
|
169
|
-
{ id: "m1", label: "
|
|
170
|
-
{ id: "m2", label: "
|
|
171
|
-
{ id: "m3", label: "
|
|
226
|
+
{ id: "m1", label: "Files", value: "2", tone: "success" },
|
|
227
|
+
{ id: "m2", label: "Edits", value: "12", tone: "info" },
|
|
228
|
+
{ id: "m3", label: "Checks", value: "1/2", tone: "warning" },
|
|
172
229
|
],
|
|
173
|
-
highlights: [
|
|
230
|
+
highlights: [],
|
|
174
231
|
},
|
|
175
232
|
approvalInbox: {
|
|
176
233
|
window: {
|
|
177
234
|
key: "approvalInbox",
|
|
178
|
-
title: "
|
|
179
|
-
subtitle: "Decisions",
|
|
180
|
-
status: { label: "Needs review", tone: "warning" },
|
|
181
|
-
badge: "2 pending",
|
|
182
|
-
layoutHint: {
|
|
183
|
-
x: 8,
|
|
184
|
-
y: 56,
|
|
185
|
-
width: 38,
|
|
186
|
-
height: 38,
|
|
187
|
-
zIndex: 20,
|
|
188
|
-
rotateDeg: 1,
|
|
189
|
-
},
|
|
235
|
+
title: "Hidden",
|
|
190
236
|
},
|
|
191
|
-
|
|
192
|
-
subtitle: "Review only where policy requires human sign-off.",
|
|
193
|
-
activeItemId: "approval-1",
|
|
194
|
-
counts: [
|
|
195
|
-
{ id: "c1", label: "Pending", value: "2", tone: "warning" },
|
|
196
|
-
{ id: "c2", label: "Auto-approved", value: "14", tone: "success" },
|
|
197
|
-
{ id: "c3", label: "Escalated", value: "0", tone: "info" },
|
|
198
|
-
],
|
|
199
|
-
items: [
|
|
200
|
-
{
|
|
201
|
-
id: "approval-1",
|
|
202
|
-
title: "Budget increase for EMEA launch",
|
|
203
|
-
description: "AI recommends +18% budget based on forecasted pipeline lift.",
|
|
204
|
-
requester: "Growth workflow",
|
|
205
|
-
status: "warning",
|
|
206
|
-
priorityLabel: "High impact",
|
|
207
|
-
dueLabel: "Due in 2h",
|
|
208
|
-
highlighted: true,
|
|
209
|
-
actions: [
|
|
210
|
-
{ id: "a1", label: "Approve", tone: "success" },
|
|
211
|
-
{ id: "a2", label: "Request change", tone: "warning" },
|
|
212
|
-
],
|
|
213
|
-
},
|
|
214
|
-
{
|
|
215
|
-
id: "approval-2",
|
|
216
|
-
title: "Legal review for new vendor terms",
|
|
217
|
-
description: "Generated summary attached with highlighted clause changes.",
|
|
218
|
-
requester: "Procurement workflow",
|
|
219
|
-
status: "info",
|
|
220
|
-
priorityLabel: "Standard",
|
|
221
|
-
dueLabel: "Today",
|
|
222
|
-
},
|
|
223
|
-
],
|
|
224
|
-
highlights: [
|
|
225
|
-
{ id: "approval-1", label: "Priority approval", tone: "accent" },
|
|
226
|
-
],
|
|
237
|
+
items: [],
|
|
227
238
|
},
|
|
228
239
|
knowledgePanel: {
|
|
229
240
|
window: {
|
|
230
241
|
key: "knowledgePanel",
|
|
231
242
|
title: "Knowledge",
|
|
232
|
-
subtitle: "
|
|
233
|
-
status: { label: "
|
|
234
|
-
badge: "12 sources",
|
|
235
|
-
layoutHint: {
|
|
236
|
-
x: 58,
|
|
237
|
-
y: 56,
|
|
238
|
-
width: 36,
|
|
239
|
-
height: 36,
|
|
240
|
-
zIndex: 10,
|
|
241
|
-
rotateDeg: -1,
|
|
242
|
-
},
|
|
243
|
+
subtitle: "Preview",
|
|
244
|
+
status: { label: "Ready", tone: "success" },
|
|
243
245
|
},
|
|
244
|
-
title: "
|
|
245
|
-
subtitle: "
|
|
246
|
-
query: "
|
|
247
|
-
summary: "
|
|
248
|
-
sources: [
|
|
249
|
-
{ id: "s1", label: "Budget Policy", kind: "Policy", status: "success" },
|
|
250
|
-
{ id: "s2", label: "Vendor Terms", kind: "Contract", status: "info" },
|
|
251
|
-
{
|
|
252
|
-
id: "s3",
|
|
253
|
-
label: "Campaign Playbook",
|
|
254
|
-
kind: "Runbook",
|
|
255
|
-
status: "success",
|
|
256
|
-
},
|
|
257
|
-
],
|
|
258
|
-
activeSnippetId: "snippet-1",
|
|
246
|
+
title: "Patch preview",
|
|
247
|
+
subtitle: "Show the code the agent is producing right now.",
|
|
248
|
+
query: "page.tsx",
|
|
249
|
+
summary: "Redirects now preserve a sanitized returnTo destination and fall back only when needed.",
|
|
259
250
|
snippets: [
|
|
260
251
|
{
|
|
261
252
|
id: "snippet-1",
|
|
262
|
-
title: "
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
confidence: "98% match",
|
|
266
|
-
excerptLabel: "Recommended policy",
|
|
267
|
-
tags: ["finance", "approval routing"],
|
|
253
|
+
title: "Updated callback handler",
|
|
254
|
+
excerptLabel: "Live diff",
|
|
255
|
+
confidence: "12 changed lines",
|
|
268
256
|
highlighted: true,
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
id: "snippet-2",
|
|
272
|
-
title: "Previous launch outcome",
|
|
273
|
-
content: "Similar EMEA launch workflows reduced manual routing time by 72% while keeping audit logs intact.",
|
|
274
|
-
sourceId: "s3",
|
|
275
|
-
confidence: "Historical pattern",
|
|
276
|
-
tags: ["benchmark", "ops efficiency"],
|
|
257
|
+
content: "const safeReturnTo = normalizeReturnTo(searchParams.get('returnTo'))\nconst destination = safeReturnTo ?? '/dashboard'\nrouter.replace(destination)",
|
|
258
|
+
tags: ["redirect", "auth", "callback"],
|
|
277
259
|
},
|
|
278
260
|
],
|
|
279
261
|
highlights: [
|
|
280
|
-
{ id: "snippet-1", label: "
|
|
262
|
+
{ id: "snippet-1", label: "Generated code", tone: "success" },
|
|
281
263
|
],
|
|
282
264
|
},
|
|
283
265
|
highlights: [
|
|
284
|
-
{ id: "
|
|
285
|
-
{ id: "
|
|
266
|
+
{ id: "edit-callback", label: "Active edit", tone: "accent" },
|
|
267
|
+
{ id: "diff-3", label: "Result updates", tone: "info" },
|
|
286
268
|
],
|
|
287
269
|
},
|
|
288
270
|
{
|
|
289
|
-
key: "
|
|
290
|
-
label: "
|
|
291
|
-
description: "
|
|
292
|
-
activeWindow: "
|
|
271
|
+
key: "refactor-pricing-page",
|
|
272
|
+
label: "Coding agent",
|
|
273
|
+
description: "Choose a repo task and watch the agent inspect code, apply edits, and update the diff.",
|
|
274
|
+
activeWindow: "workflowStudio",
|
|
275
|
+
playback: {
|
|
276
|
+
workflowStudio: {
|
|
277
|
+
playbackStepDurationsMs: [820, 920, 1380, 1180, 980, 840, 1640],
|
|
278
|
+
playbackResetDelayMs: 2200,
|
|
279
|
+
},
|
|
280
|
+
runConsole: {
|
|
281
|
+
playbackStepDurationsMs: [1320, 1480, 920, 760, 700, 660, 1320],
|
|
282
|
+
playbackResetDelayMs: 2200,
|
|
283
|
+
playbackStepEntryIndices: [0, 0, 1, 1, 2, 2, 2, 3, 3],
|
|
284
|
+
playbackStepVisibleLineCounts: [2, 2, 3, 4, 5, 7, 9, 11, 11],
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
taskList: {
|
|
288
|
+
window: {
|
|
289
|
+
key: "taskList",
|
|
290
|
+
title: "Tasks",
|
|
291
|
+
subtitle: "Current workspace",
|
|
292
|
+
status: { label: "3 tasks", tone: "info" },
|
|
293
|
+
},
|
|
294
|
+
title: "Agent tasks",
|
|
295
|
+
subtitle: "Select a coding task to inspect and execute.",
|
|
296
|
+
activeItemId: "refactor-pricing-page",
|
|
297
|
+
items: [
|
|
298
|
+
{
|
|
299
|
+
id: "fix-auth-flow",
|
|
300
|
+
title: "Fix auth flow",
|
|
301
|
+
description: "Fix the post-login redirect after the OAuth callback.",
|
|
302
|
+
meta: "apps/web · active",
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
id: "refactor-pricing-page",
|
|
306
|
+
title: "Refactor pricing page",
|
|
307
|
+
description: "Extract repeated pricing sections into reusable components.",
|
|
308
|
+
meta: "marketing site · queued",
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
id: "ship-command-palette",
|
|
312
|
+
title: "Ship command palette",
|
|
313
|
+
description: "Add global search, shortcuts, and action routing.",
|
|
314
|
+
meta: "dashboard · ready",
|
|
315
|
+
},
|
|
316
|
+
],
|
|
317
|
+
},
|
|
293
318
|
workflowStudio: {
|
|
294
319
|
window: {
|
|
295
320
|
key: "workflowStudio",
|
|
296
|
-
title: "
|
|
297
|
-
subtitle: "
|
|
298
|
-
status: { label: "
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
321
|
+
title: "Agent",
|
|
322
|
+
subtitle: "Active session",
|
|
323
|
+
status: { label: "Planning", tone: "info" },
|
|
324
|
+
},
|
|
325
|
+
title: "Extracting pricing sections",
|
|
326
|
+
subtitle: "The agent maps repeated UI and rewires the page composition.",
|
|
327
|
+
activeNodeId: "create-blocks",
|
|
328
|
+
transcript: [
|
|
329
|
+
{ id: "pricing-title", kind: "title", text: "Refactor pricing page" },
|
|
330
|
+
{
|
|
331
|
+
id: "pricing-prompt",
|
|
332
|
+
kind: "prompt",
|
|
333
|
+
text: "Extract the pricing page into reusable sections without changing the visual output.",
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
id: "pricing-read-1",
|
|
337
|
+
kind: "activity",
|
|
338
|
+
text: "Read app/(marketing)/pricing/page.tsx",
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
id: "pricing-file-1",
|
|
342
|
+
kind: "file",
|
|
343
|
+
path: "components/pricing/PricingTiers.tsx",
|
|
344
|
+
text: "components/pricing/PricingTiers.tsx",
|
|
345
|
+
added: 52,
|
|
346
|
+
removed: 0,
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
id: "pricing-file-2",
|
|
350
|
+
kind: "file",
|
|
351
|
+
path: "app/(marketing)/pricing/page.tsx",
|
|
352
|
+
text: "app/(marketing)/pricing/page.tsx",
|
|
353
|
+
added: 18,
|
|
354
|
+
removed: 34,
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
id: "pricing-run-1",
|
|
358
|
+
kind: "activity",
|
|
359
|
+
text: "Move the tier grid wrapper into PricingTiers and normalize the plans prop shape",
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
id: "pricing-thought-1",
|
|
363
|
+
kind: "thought",
|
|
364
|
+
text: "Keep the visual output identical by preserving card order, CTA copy, and the existing spacing classes.",
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
id: "pricing-message-1",
|
|
368
|
+
kind: "message",
|
|
369
|
+
text: "The page entry now composes extracted sections while shared pricing data stays centralized and easier to extend.",
|
|
307
370
|
},
|
|
371
|
+
{
|
|
372
|
+
id: "pricing-run-2",
|
|
373
|
+
kind: "activity",
|
|
374
|
+
text: "Compare extracted markup against the original layout before final cleanup",
|
|
375
|
+
},
|
|
376
|
+
],
|
|
377
|
+
composer: {
|
|
378
|
+
placeholder: "Plan, search, or restructure the page...",
|
|
379
|
+
modeLabel: "Agent",
|
|
380
|
+
modelLabel: "Sonnet",
|
|
308
381
|
},
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
382
|
+
highlights: [
|
|
383
|
+
{ id: "scan-page", label: "Find repetition", tone: "info" },
|
|
384
|
+
{ id: "create-blocks", label: "Extract components", tone: "accent" },
|
|
385
|
+
],
|
|
312
386
|
nodes: [
|
|
313
387
|
{
|
|
314
|
-
id: "
|
|
315
|
-
label: "
|
|
316
|
-
description: "
|
|
317
|
-
type: "
|
|
388
|
+
id: "scan-page",
|
|
389
|
+
label: "Scan pricing page",
|
|
390
|
+
description: "Detect repeated tier, feature, and CTA structures.",
|
|
391
|
+
type: "Read",
|
|
318
392
|
status: "success",
|
|
319
|
-
metadata: "
|
|
393
|
+
metadata: "app/(marketing)/pricing/page.tsx",
|
|
320
394
|
},
|
|
321
395
|
{
|
|
322
|
-
id: "
|
|
323
|
-
label: "
|
|
324
|
-
description: "
|
|
325
|
-
type: "
|
|
396
|
+
id: "map-sections",
|
|
397
|
+
label: "Map component boundaries",
|
|
398
|
+
description: "Group hero, tiers, FAQ, and comparison table logic.",
|
|
399
|
+
type: "Analyze",
|
|
326
400
|
status: "success",
|
|
327
|
-
metadata: "
|
|
401
|
+
metadata: "4 extractable sections",
|
|
328
402
|
},
|
|
329
403
|
{
|
|
330
|
-
id: "
|
|
331
|
-
label: "
|
|
332
|
-
|
|
333
|
-
type: "Action",
|
|
404
|
+
id: "create-blocks",
|
|
405
|
+
label: "Create reusable blocks",
|
|
406
|
+
type: "Edit",
|
|
334
407
|
status: "info",
|
|
335
408
|
active: true,
|
|
336
409
|
emphasized: true,
|
|
337
|
-
metadata: "
|
|
410
|
+
metadata: "components/pricing/*",
|
|
338
411
|
},
|
|
339
412
|
{
|
|
340
|
-
id: "
|
|
341
|
-
label: "
|
|
342
|
-
description: "
|
|
343
|
-
type: "
|
|
413
|
+
id: "trim-page",
|
|
414
|
+
label: "Simplify page entry",
|
|
415
|
+
description: "Reduce the page to composition and imported data.",
|
|
416
|
+
type: "Verify",
|
|
344
417
|
status: "neutral",
|
|
345
|
-
metadata: "
|
|
418
|
+
metadata: "cleanup pending",
|
|
346
419
|
},
|
|
347
420
|
],
|
|
348
|
-
|
|
421
|
+
},
|
|
422
|
+
runConsole: {
|
|
423
|
+
window: {
|
|
424
|
+
key: "runConsole",
|
|
425
|
+
title: "Editor",
|
|
426
|
+
subtitle: "Component output",
|
|
427
|
+
status: { label: "Updating", tone: "info" },
|
|
428
|
+
},
|
|
429
|
+
title: "components/pricing/PricingTiers.tsx",
|
|
430
|
+
subtitle: "The diff updates as the extracted component takes shape.",
|
|
431
|
+
statusLabel: "Extracting components",
|
|
432
|
+
progressLabel: "3 files updated",
|
|
433
|
+
progressPercent: 59,
|
|
434
|
+
activeEntryId: "pricing-3",
|
|
435
|
+
editorTabLabel: "PricingTiers.tsx",
|
|
436
|
+
editorLanguage: "TSX",
|
|
437
|
+
editorSummary: "Move repeated pricing JSX into a reusable tiers component.",
|
|
438
|
+
entries: [
|
|
349
439
|
{
|
|
350
|
-
id: "
|
|
351
|
-
|
|
352
|
-
|
|
440
|
+
id: "pricing-1",
|
|
441
|
+
message: "Found repeated tier markup and CTA footer",
|
|
442
|
+
timestamp: "11:11",
|
|
443
|
+
source: "agent",
|
|
353
444
|
status: "success",
|
|
354
|
-
active: true,
|
|
355
445
|
},
|
|
356
446
|
{
|
|
357
|
-
id: "
|
|
358
|
-
|
|
359
|
-
|
|
447
|
+
id: "pricing-2",
|
|
448
|
+
message: "Created shared types for pricing data and features",
|
|
449
|
+
timestamp: "11:12",
|
|
450
|
+
source: "editor",
|
|
451
|
+
status: "success",
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
id: "pricing-3",
|
|
455
|
+
message: "Extracting PricingTiers component and props shape",
|
|
456
|
+
timestamp: "11:12",
|
|
457
|
+
source: "editor",
|
|
360
458
|
status: "info",
|
|
361
|
-
|
|
459
|
+
highlighted: true,
|
|
460
|
+
lineNumber: "18",
|
|
461
|
+
code: [
|
|
462
|
+
" export function PricingTiers({ plans }: PricingTiersProps) {",
|
|
463
|
+
"- return plans.map((plan) => (",
|
|
464
|
+
"+ return (",
|
|
465
|
+
"+ <div className='grid gap-6 lg:grid-cols-3'>",
|
|
466
|
+
"+ {plans.map((plan) => (",
|
|
467
|
+
" <PricingCard key={plan.name} plan={plan} />",
|
|
468
|
+
"+ ))}",
|
|
469
|
+
"+ </div>",
|
|
470
|
+
"- ))",
|
|
471
|
+
"+ )",
|
|
472
|
+
" }",
|
|
473
|
+
],
|
|
362
474
|
},
|
|
363
475
|
{
|
|
364
|
-
id: "
|
|
365
|
-
|
|
366
|
-
|
|
476
|
+
id: "pricing-4",
|
|
477
|
+
message: "Updating page.tsx to compose extracted sections",
|
|
478
|
+
timestamp: "11:13",
|
|
479
|
+
source: "editor",
|
|
367
480
|
status: "neutral",
|
|
368
481
|
},
|
|
369
482
|
],
|
|
370
|
-
|
|
483
|
+
metrics: [
|
|
484
|
+
{ id: "pm1", label: "Files", value: "4", tone: "success" },
|
|
485
|
+
{ id: "pm2", label: "Blocks", value: "3", tone: "info" },
|
|
486
|
+
{ id: "pm3", label: "Dupes", value: "-38%", tone: "success" },
|
|
487
|
+
],
|
|
488
|
+
highlights: [],
|
|
489
|
+
},
|
|
490
|
+
approvalInbox: {
|
|
491
|
+
window: {
|
|
492
|
+
key: "approvalInbox",
|
|
493
|
+
title: "Hidden",
|
|
494
|
+
},
|
|
495
|
+
items: [],
|
|
496
|
+
},
|
|
497
|
+
knowledgePanel: {
|
|
498
|
+
window: {
|
|
499
|
+
key: "knowledgePanel",
|
|
500
|
+
title: "Knowledge",
|
|
501
|
+
subtitle: "Preview",
|
|
502
|
+
status: { label: "Ready", tone: "success" },
|
|
503
|
+
},
|
|
504
|
+
title: "Component preview",
|
|
505
|
+
subtitle: "Show the extracted UI structure the agent is generating.",
|
|
506
|
+
query: "PricingTiers.tsx",
|
|
507
|
+
summary: "The page is being reduced to reusable blocks with shared data and a slimmer entry point.",
|
|
508
|
+
snippets: [
|
|
371
509
|
{
|
|
372
|
-
id: "
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
nodeIds: ["update-crm", "notify-teams", "monitor-results"],
|
|
377
|
-
active: true,
|
|
510
|
+
id: "pricing-snippet",
|
|
511
|
+
title: "Extracted tier component",
|
|
512
|
+
excerptLabel: "Live component",
|
|
513
|
+
confidence: "3 components created",
|
|
378
514
|
highlighted: true,
|
|
515
|
+
content: "export function PricingTiers({ plans }: PricingTiersProps) {\n return plans.map((plan) => <PricingCard key={plan.name} plan={plan} />)\n}",
|
|
516
|
+
tags: ["components", "refactor", "pricing"],
|
|
379
517
|
},
|
|
380
518
|
],
|
|
519
|
+
highlights: [
|
|
520
|
+
{ id: "pricing-snippet", label: "Generated UI", tone: "success" },
|
|
521
|
+
],
|
|
381
522
|
},
|
|
382
|
-
|
|
523
|
+
highlights: [
|
|
524
|
+
{ id: "create-blocks", label: "Active extraction", tone: "accent" },
|
|
525
|
+
{ id: "pricing-3", label: "Result updates", tone: "info" },
|
|
526
|
+
],
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
key: "ship-command-palette",
|
|
530
|
+
label: "Coding agent",
|
|
531
|
+
description: "Choose a repo task and watch the agent inspect code, apply edits, and update the diff.",
|
|
532
|
+
activeWindow: "workflowStudio",
|
|
533
|
+
playback: {
|
|
534
|
+
workflowStudio: {
|
|
535
|
+
playbackStepDurationsMs: [760, 900, 1320, 1160, 920, 820, 1560],
|
|
536
|
+
playbackResetDelayMs: 2200,
|
|
537
|
+
},
|
|
538
|
+
runConsole: {
|
|
539
|
+
playbackStepDurationsMs: [1180, 1420, 940, 780, 700, 660, 1280],
|
|
540
|
+
playbackResetDelayMs: 2200,
|
|
541
|
+
playbackStepEntryIndices: [0, 0, 1, 1, 2, 2, 2, 3, 3],
|
|
542
|
+
playbackStepVisibleLineCounts: [2, 2, 3, 4, 6, 8, 10, 12, 12],
|
|
543
|
+
},
|
|
544
|
+
},
|
|
545
|
+
taskList: {
|
|
383
546
|
window: {
|
|
384
|
-
key: "
|
|
385
|
-
title: "
|
|
386
|
-
subtitle: "
|
|
387
|
-
status: { label: "
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
547
|
+
key: "taskList",
|
|
548
|
+
title: "Tasks",
|
|
549
|
+
subtitle: "Current workspace",
|
|
550
|
+
status: { label: "3 tasks", tone: "info" },
|
|
551
|
+
},
|
|
552
|
+
title: "Agent tasks",
|
|
553
|
+
subtitle: "Select a coding task to inspect and execute.",
|
|
554
|
+
activeItemId: "ship-command-palette",
|
|
555
|
+
items: [
|
|
556
|
+
{
|
|
557
|
+
id: "fix-auth-flow",
|
|
558
|
+
title: "Fix auth flow",
|
|
559
|
+
description: "Fix the post-login redirect after the OAuth callback.",
|
|
560
|
+
meta: "apps/web · active",
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
id: "refactor-pricing-page",
|
|
564
|
+
title: "Refactor pricing page",
|
|
565
|
+
description: "Extract repeated pricing sections into reusable components.",
|
|
566
|
+
meta: "marketing site · queued",
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
id: "ship-command-palette",
|
|
570
|
+
title: "Ship command palette",
|
|
571
|
+
description: "Add global search, shortcuts, and action routing.",
|
|
572
|
+
meta: "dashboard · ready",
|
|
396
573
|
},
|
|
574
|
+
],
|
|
575
|
+
},
|
|
576
|
+
workflowStudio: {
|
|
577
|
+
window: {
|
|
578
|
+
key: "workflowStudio",
|
|
579
|
+
title: "Agent",
|
|
580
|
+
subtitle: "Active session",
|
|
581
|
+
status: { label: "Building", tone: "info" },
|
|
397
582
|
},
|
|
398
|
-
title: "
|
|
399
|
-
subtitle: "
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
583
|
+
title: "Adding command palette",
|
|
584
|
+
subtitle: "The agent wires shortcuts and fast navigation into one flow.",
|
|
585
|
+
activeNodeId: "wire-shortcuts",
|
|
586
|
+
transcript: [
|
|
587
|
+
{ id: "cmd-title", kind: "title", text: "Ship command palette" },
|
|
588
|
+
{
|
|
589
|
+
id: "cmd-prompt",
|
|
590
|
+
kind: "prompt",
|
|
591
|
+
text: "Add a command palette with global shortcut support, grouped actions, and fast route switching.",
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
id: "cmd-read-1",
|
|
595
|
+
kind: "activity",
|
|
596
|
+
text: "Read app/dashboard/layout.tsx",
|
|
597
|
+
},
|
|
405
598
|
{
|
|
406
|
-
id: "
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
599
|
+
id: "cmd-file-1",
|
|
600
|
+
kind: "file",
|
|
601
|
+
path: "components/command-menu.tsx",
|
|
602
|
+
text: "components/command-menu.tsx",
|
|
603
|
+
added: 27,
|
|
604
|
+
removed: 4,
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
id: "cmd-file-2",
|
|
608
|
+
kind: "file",
|
|
609
|
+
path: "app/dashboard/layout.tsx",
|
|
610
|
+
text: "app/dashboard/layout.tsx",
|
|
611
|
+
added: 9,
|
|
612
|
+
removed: 1,
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
id: "cmd-run-1",
|
|
616
|
+
kind: "activity",
|
|
617
|
+
text: "Index route actions and quick commands so grouped search stays responsive",
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
id: "cmd-thought-1",
|
|
621
|
+
kind: "thought",
|
|
622
|
+
text: "The global shortcut should ignore focused text inputs and always remove its keydown listener on unmount.",
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
id: "cmd-message-1",
|
|
626
|
+
kind: "message",
|
|
627
|
+
text: "Palette now opens globally, keeps grouped actions discoverable, and routes immediately after a selection.",
|
|
628
|
+
},
|
|
629
|
+
{
|
|
630
|
+
id: "cmd-run-2",
|
|
631
|
+
kind: "activity",
|
|
632
|
+
text: "Validate keyboard open-close flow, route jumps, and the empty search state",
|
|
633
|
+
},
|
|
634
|
+
],
|
|
635
|
+
composer: {
|
|
636
|
+
placeholder: "Ask the agent to search, wire, or ship...",
|
|
637
|
+
modeLabel: "Agent",
|
|
638
|
+
modelLabel: "Sonnet",
|
|
639
|
+
},
|
|
640
|
+
highlights: [
|
|
641
|
+
{ id: "inspect-layout", label: "Inspect layout", tone: "info" },
|
|
642
|
+
{ id: "wire-shortcuts", label: "Add shortcuts", tone: "accent" },
|
|
643
|
+
],
|
|
644
|
+
nodes: [
|
|
645
|
+
{
|
|
646
|
+
id: "inspect-layout",
|
|
647
|
+
label: "Inspect app shell",
|
|
648
|
+
description: "Find the dashboard layout, nav state, and modal primitives.",
|
|
649
|
+
type: "Read",
|
|
410
650
|
status: "success",
|
|
651
|
+
metadata: "dashboard shell",
|
|
411
652
|
},
|
|
412
653
|
{
|
|
413
|
-
id: "
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
654
|
+
id: "gather-actions",
|
|
655
|
+
label: "Collect command actions",
|
|
656
|
+
description: "Build a searchable list of routes and common actions.",
|
|
657
|
+
type: "Analyze",
|
|
417
658
|
status: "success",
|
|
418
|
-
|
|
659
|
+
metadata: "12 candidate commands",
|
|
419
660
|
},
|
|
420
661
|
{
|
|
421
|
-
id: "
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
source: "Notifier",
|
|
662
|
+
id: "wire-shortcuts",
|
|
663
|
+
label: "Wire keyboard shortcuts",
|
|
664
|
+
type: "Edit",
|
|
425
665
|
status: "info",
|
|
666
|
+
active: true,
|
|
667
|
+
emphasized: true,
|
|
668
|
+
metadata: "keydown + dialog state",
|
|
426
669
|
},
|
|
427
670
|
{
|
|
428
|
-
id: "
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
status: "
|
|
433
|
-
|
|
434
|
-
detail: "Auto-escalation armed if blockers appear",
|
|
671
|
+
id: "polish-results",
|
|
672
|
+
label: "Polish result list",
|
|
673
|
+
description: "Add grouping, empty state, and active selection feedback.",
|
|
674
|
+
type: "Verify",
|
|
675
|
+
status: "neutral",
|
|
676
|
+
metadata: "UX pass next",
|
|
435
677
|
},
|
|
436
678
|
],
|
|
437
|
-
metrics: [
|
|
438
|
-
{ id: "rm1", label: "Tasks created", value: "18", tone: "success" },
|
|
439
|
-
{ id: "rm2", label: "Records updated", value: "38", tone: "info" },
|
|
440
|
-
{ id: "rm3", label: "Errors", value: "0", tone: "success" },
|
|
441
|
-
],
|
|
442
|
-
highlights: [{ id: "exec-4", label: "Live monitoring", tone: "success" }],
|
|
443
679
|
},
|
|
444
|
-
|
|
680
|
+
runConsole: {
|
|
445
681
|
window: {
|
|
446
|
-
key: "
|
|
447
|
-
title: "
|
|
448
|
-
subtitle: "
|
|
449
|
-
status: { label: "
|
|
450
|
-
badge: "0 pending",
|
|
451
|
-
layoutHint: {
|
|
452
|
-
x: 10,
|
|
453
|
-
y: 58,
|
|
454
|
-
width: 36,
|
|
455
|
-
height: 34,
|
|
456
|
-
zIndex: 20,
|
|
457
|
-
rotateDeg: 1,
|
|
458
|
-
},
|
|
682
|
+
key: "runConsole",
|
|
683
|
+
title: "Editor",
|
|
684
|
+
subtitle: "UI output",
|
|
685
|
+
status: { label: "Updating", tone: "info" },
|
|
459
686
|
},
|
|
460
|
-
title: "
|
|
461
|
-
subtitle: "
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
687
|
+
title: "components/command-menu.tsx",
|
|
688
|
+
subtitle: "The diff updates as the command palette is wired into the app shell.",
|
|
689
|
+
statusLabel: "Wiring command palette",
|
|
690
|
+
progressLabel: "8 commands indexed",
|
|
691
|
+
progressPercent: 73,
|
|
692
|
+
activeEntryId: "cmd-3",
|
|
693
|
+
editorTabLabel: "command-menu.tsx",
|
|
694
|
+
editorLanguage: "TSX",
|
|
695
|
+
editorSummary: "Wire a global shortcut and searchable action list into the dashboard shell.",
|
|
696
|
+
entries: [
|
|
468
697
|
{
|
|
469
|
-
id: "
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
698
|
+
id: "cmd-1",
|
|
699
|
+
message: "Opened dialog primitive and dashboard nav state",
|
|
700
|
+
timestamp: "11:21",
|
|
701
|
+
source: "agent",
|
|
473
702
|
status: "success",
|
|
474
|
-
priorityLabel: "Complete",
|
|
475
|
-
dueLabel: "09:17",
|
|
476
703
|
},
|
|
477
704
|
{
|
|
478
|
-
id: "
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
705
|
+
id: "cmd-2",
|
|
706
|
+
message: "Generated grouped command list and action search",
|
|
707
|
+
timestamp: "11:22",
|
|
708
|
+
source: "editor",
|
|
482
709
|
status: "success",
|
|
483
|
-
|
|
484
|
-
|
|
710
|
+
},
|
|
711
|
+
{
|
|
712
|
+
id: "cmd-3",
|
|
713
|
+
message: "Binding Cmd+K to open the command menu globally",
|
|
714
|
+
timestamp: "11:22",
|
|
715
|
+
source: "editor",
|
|
716
|
+
status: "info",
|
|
717
|
+
highlighted: true,
|
|
718
|
+
lineNumber: "27",
|
|
719
|
+
code: [
|
|
720
|
+
" useEffect(() => {",
|
|
721
|
+
"+ const handleKeyDown = (event: KeyboardEvent) => {",
|
|
722
|
+
"+ if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k') {",
|
|
723
|
+
"+ event.preventDefault()",
|
|
724
|
+
"+ setOpen((current) => !current)",
|
|
725
|
+
"+ }",
|
|
726
|
+
"+ }",
|
|
727
|
+
"- window.addEventListener('keydown', onKeyDown)",
|
|
728
|
+
"+ window.addEventListener('keydown', handleKeyDown)",
|
|
729
|
+
"- return () => window.removeEventListener('keydown', onKeyDown)",
|
|
730
|
+
"+ return () => window.removeEventListener('keydown', handleKeyDown)",
|
|
731
|
+
" }, [])",
|
|
732
|
+
],
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
id: "cmd-4",
|
|
736
|
+
message: "Validated route jump and quick action execution",
|
|
737
|
+
timestamp: "11:23",
|
|
738
|
+
source: "preview",
|
|
739
|
+
status: "neutral",
|
|
485
740
|
},
|
|
486
741
|
],
|
|
742
|
+
metrics: [
|
|
743
|
+
{ id: "cm1", label: "Commands", value: "8", tone: "info" },
|
|
744
|
+
{ id: "cm2", label: "Routes", value: "5", tone: "success" },
|
|
745
|
+
{ id: "cm3", label: "Shortcut", value: "Cmd+K", tone: "success" },
|
|
746
|
+
],
|
|
747
|
+
highlights: [],
|
|
748
|
+
},
|
|
749
|
+
approvalInbox: {
|
|
750
|
+
window: {
|
|
751
|
+
key: "approvalInbox",
|
|
752
|
+
title: "Hidden",
|
|
753
|
+
},
|
|
754
|
+
items: [],
|
|
487
755
|
},
|
|
488
756
|
knowledgePanel: {
|
|
489
757
|
window: {
|
|
490
758
|
key: "knowledgePanel",
|
|
491
759
|
title: "Knowledge",
|
|
492
|
-
subtitle: "
|
|
493
|
-
status: { label: "
|
|
494
|
-
badge: "8 live docs",
|
|
495
|
-
layoutHint: {
|
|
496
|
-
x: 58,
|
|
497
|
-
y: 56,
|
|
498
|
-
width: 34,
|
|
499
|
-
height: 34,
|
|
500
|
-
zIndex: 10,
|
|
501
|
-
rotateDeg: -1,
|
|
502
|
-
},
|
|
760
|
+
subtitle: "Preview",
|
|
761
|
+
status: { label: "Ready", tone: "success" },
|
|
503
762
|
},
|
|
504
|
-
title: "
|
|
505
|
-
subtitle: "
|
|
506
|
-
query: "
|
|
507
|
-
summary: "
|
|
508
|
-
sources: [
|
|
509
|
-
{
|
|
510
|
-
id: "rs1",
|
|
511
|
-
label: "Launch Runbook",
|
|
512
|
-
kind: "Runbook",
|
|
513
|
-
status: "success",
|
|
514
|
-
},
|
|
515
|
-
{ id: "rs2", label: "Team SLA Policy", kind: "Policy", status: "info" },
|
|
516
|
-
],
|
|
517
|
-
activeSnippetId: "runbook-snippet",
|
|
763
|
+
title: "Palette preview",
|
|
764
|
+
subtitle: "Show the agent's latest UI output for the command menu.",
|
|
765
|
+
query: "command-menu.tsx",
|
|
766
|
+
summary: "A global command palette is being added with grouped actions, shortcut support, and instant route changes.",
|
|
518
767
|
snippets: [
|
|
519
768
|
{
|
|
520
|
-
id: "
|
|
521
|
-
title: "
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
confidence: "Runbook step 4",
|
|
525
|
-
excerptLabel: "Execution guidance",
|
|
526
|
-
tags: ["execution", "handoff"],
|
|
769
|
+
id: "command-snippet",
|
|
770
|
+
title: "Command menu",
|
|
771
|
+
excerptLabel: "Live UI",
|
|
772
|
+
confidence: "8 commands wired",
|
|
527
773
|
highlighted: true,
|
|
774
|
+
content: '<CommandDialog open={open} onOpenChange={setOpen}>\n <CommandInput placeholder="Search commands" />\n <CommandList>{groups.map(renderGroup)}</CommandList>\n</CommandDialog>',
|
|
775
|
+
tags: ["command palette", "ux", "keyboard"],
|
|
528
776
|
},
|
|
529
777
|
],
|
|
778
|
+
highlights: [
|
|
779
|
+
{ id: "command-snippet", label: "Generated UI", tone: "success" },
|
|
780
|
+
],
|
|
530
781
|
},
|
|
531
782
|
highlights: [
|
|
532
|
-
{ id: "
|
|
533
|
-
{ id: "
|
|
783
|
+
{ id: "wire-shortcuts", label: "Active build", tone: "accent" },
|
|
784
|
+
{ id: "cmd-3", label: "Result updates", tone: "info" },
|
|
534
785
|
],
|
|
535
786
|
},
|
|
536
787
|
];
|
|
537
788
|
export function Hero() {
|
|
538
|
-
return (<div className="relative overflow-hidden">
|
|
539
|
-
<div className="pointer-events-none absolute inset-0 bg-[
|
|
540
|
-
|
|
541
|
-
<
|
|
542
|
-
|
|
543
|
-
|
|
789
|
+
return (<div className="relative overflow-hidden">
|
|
790
|
+
<div className="pointer-events-none absolute inset-0 bg-[linear-gradient(180deg,#eef3f8_0%,#f6f8fb_48%,#eef3f8_100%)] dark:bg-[linear-gradient(180deg,#171717_0%,#121212_18%,#1d1d1d_46%,#131313_76%,#1b1b1b_100%)]"/>
|
|
791
|
+
<div className="pointer-events-none absolute inset-0 bg-[linear-gradient(112deg,transparent_18%,rgba(255,255,255,0.18)_28%,rgba(255,255,255,0.05)_37%,transparent_50%),linear-gradient(248deg,transparent_22%,rgba(255,255,255,0.14)_31%,rgba(255,255,255,0.04)_41%,transparent_56%)] opacity-70 dark:opacity-100"/>
|
|
792
|
+
<div className="pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_top,rgba(255,255,255,0.12),transparent_34%)] opacity-70 dark:opacity-100"/>
|
|
793
|
+
<div className="pointer-events-none absolute left-1/2 top-[26rem] h-[32rem] w-[62rem] -translate-x-1/2 rounded-full bg-[radial-gradient(circle_at_center,rgba(255,255,255,0.22)_0%,rgba(255,255,255,0.12)_12%,rgba(255,255,255,0.06)_24%,transparent_66%)] blur-3xl opacity-85 dark:opacity-100"/>
|
|
794
|
+
|
|
795
|
+
<HeroProductDemo className="bg-transparent" heading={{
|
|
796
|
+
text: "Code with agents.",
|
|
797
|
+
className: "max-w-4xl text-left font-outfit text-3xl font-semibold leading-none tracking-tight text-[var(--heading-fg)] sm:text-4xl lg:text-5xl",
|
|
544
798
|
}} subheading={{
|
|
545
|
-
text: "
|
|
546
|
-
className: "mt-
|
|
799
|
+
text: "Watch the agent read, edit, and update the result in real time.",
|
|
800
|
+
className: "mt-3 max-w-2xl text-left font-inter text-sm leading-6 text-[var(--subheading-fg)] sm:text-base",
|
|
547
801
|
}} cta1={{
|
|
548
|
-
label: "Start
|
|
802
|
+
label: "Start building",
|
|
549
803
|
href: "#contact",
|
|
550
804
|
variant: "default",
|
|
551
805
|
size: "lg",
|
|
552
806
|
className: [
|
|
553
|
-
"px-
|
|
554
|
-
"[--btn-bg:
|
|
555
|
-
"hover:[--btn-hover-bg:
|
|
556
|
-
"[--btn-fg:
|
|
557
|
-
"hover:[--btn-hover-fg:
|
|
807
|
+
"px-7 py-3 text-sm font-semibold shadow-lg shadow-black/10 dark:shadow-black/30",
|
|
808
|
+
"[--btn-bg:var(--hero-cta-primary-bg)]",
|
|
809
|
+
"hover:[--btn-hover-bg:var(--hero-cta-primary-hover-bg)]",
|
|
810
|
+
"[--btn-fg:var(--hero-cta-primary-fg)]",
|
|
811
|
+
"hover:[--btn-hover-fg:var(--hero-cta-primary-hover-fg)]",
|
|
558
812
|
].join(" "),
|
|
559
813
|
}} cta2={{
|
|
560
|
-
label: "
|
|
814
|
+
label: "View features",
|
|
561
815
|
href: "#features",
|
|
562
816
|
variant: "outline",
|
|
563
817
|
size: "lg",
|
|
564
818
|
className: [
|
|
565
|
-
"border px-
|
|
566
|
-
"[--btn-bg:
|
|
567
|
-
"[--btn-fg:
|
|
568
|
-
"[--btn-border:
|
|
569
|
-
"hover:[--btn-hover-bg:
|
|
570
|
-
"hover:[--btn-hover-fg:
|
|
571
|
-
"dark:[--btn-fg:theme(colors.cyan.300)]",
|
|
572
|
-
"dark:[--btn-border:theme(colors.cyan.700)]",
|
|
573
|
-
"dark:hover:[--btn-hover-bg:theme(colors.cyan.950)]",
|
|
574
|
-
"dark:hover:[--btn-hover-fg:theme(colors.cyan.200)]",
|
|
819
|
+
"border px-7 py-3 text-sm font-semibold shadow-sm dark:shadow-black/20",
|
|
820
|
+
"[--btn-bg:var(--hero-cta-secondary-bg)]",
|
|
821
|
+
"[--btn-fg:var(--hero-cta-secondary-fg)]",
|
|
822
|
+
"[--btn-border:var(--hero-cta-secondary-border)]",
|
|
823
|
+
"hover:[--btn-hover-bg:var(--hero-cta-secondary-hover-bg)]",
|
|
824
|
+
"hover:[--btn-hover-fg:var(--hero-cta-secondary-hover-fg)]",
|
|
575
825
|
].join(" "),
|
|
576
826
|
}} stage={{
|
|
577
827
|
scenarios,
|
|
578
828
|
initialScenarioIndex: 0,
|
|
579
|
-
|
|
580
|
-
cycleIntervalMs: 5200,
|
|
581
|
-
className: "[--demo-stage-bg:linear-gradient(180deg,rgba(255,255,255,0.92)_0%,rgba(224,242,254,0.72)_100%)] dark:[--demo-stage-bg:linear-gradient(180deg,rgba(15,23,42,0.92)_0%,rgba(12,74,110,0.70)_100%)]",
|
|
829
|
+
className: "mt-0",
|
|
582
830
|
}} section={{
|
|
583
|
-
className: "px-6 py-
|
|
831
|
+
className: "px-6 py-10 sm:px-8 lg:px-10 lg:py-12",
|
|
584
832
|
}} container={{
|
|
585
|
-
className: "relative z-10
|
|
833
|
+
className: "relative z-10 max-w-7xl",
|
|
586
834
|
}} textContainer={{
|
|
587
|
-
className: "pt-4 lg:pt-
|
|
835
|
+
className: "max-w-3xl pt-1 lg:pl-4 lg:pt-0",
|
|
588
836
|
}} demoContainer={{
|
|
589
|
-
className: "relative min-h-[
|
|
837
|
+
className: "relative min-h-[32rem] w-full max-w-full lg:px-4 lg:h-[clamp(30rem,calc(100svh-7rem),42rem)] lg:min-h-0",
|
|
590
838
|
}} buttonsContainer={{
|
|
591
|
-
className: "mt-
|
|
592
|
-
}} ariaLabel="AI
|
|
839
|
+
className: "mt-4 flex-col items-start sm:flex-row sm:items-center",
|
|
840
|
+
}} demoBelowText ariaLabel="AI coding agent hero section"/>
|
|
593
841
|
</div>);
|
|
594
842
|
}
|