reflex-agent 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +116 -103
- package/.next/app-path-routes-manifest.json +10 -10
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +4 -54
- package/.next/react-loadable-manifest.json +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/agents/[agentId]/page.js +3 -3
- package/.next/server/app/agents/[agentId]/page.js.nft.json +1 -1
- package/.next/server/app/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/[agentId]/respond/route.js +2 -2
- package/.next/server/app/api/agents/[agentId]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/agents/[agentId]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/images/[rootId]/[file]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/callback/route.js +4 -4
- package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roots/[id]/attachments/route.js +0 -0
- package/.next/server/app/api/roots/[id]/attachments/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roots/[id]/chat/[topicId]/send/route.js +2 -2
- package/.next/server/app/api/roots/[id]/chat/[topicId]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/roots/[id]/chat/[topicId]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roots/[id]/chat/[topicId]/stop/route.js +2 -2
- package/.next/server/app/api/roots/[id]/chat/[topicId]/stop/route.js.nft.json +1 -1
- package/.next/server/app/api/roots/[id]/chat/[topicId]/stop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roots/[id]/chat/[topicId]/stream/route.js +3 -3
- package/.next/server/app/api/roots/[id]/chat/[topicId]/stream/route.js.nft.json +1 -1
- package/.next/server/app/api/roots/[id]/chat/[topicId]/stream/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roots/[id]/dashboard/route.js +1 -1
- package/.next/server/app/api/roots/[id]/dashboard/route.js.nft.json +1 -1
- package/.next/server/app/api/roots/[id]/dashboard/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roots/[id]/suggestions/route.js +1 -1
- package/.next/server/app/api/roots/[id]/suggestions/route.js.nft.json +1 -1
- package/.next/server/app/api/roots/[id]/suggestions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/bundle.js/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/host/route.js +2 -2
- package/.next/server/app/api/utilities/[scope]/[id]/host/route.js.nft.json +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/host/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/host-api.mjs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/host-ui.mjs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/iframe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/utilities/[scope]/[id]/style.css/route_client-reference-manifest.js +1 -1
- package/.next/server/app/audit/page.js +2 -2
- package/.next/server/app/audit/page.js.nft.json +1 -1
- package/.next/server/app/audit/page_client-reference-manifest.js +1 -1
- package/.next/server/app/onboarding/page.js +3 -3
- package/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +2 -2
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/[id]/chat/[topicId]/page.js +2 -6
- package/.next/server/app/roots/[id]/chat/[topicId]/page.js.nft.json +1 -1
- package/.next/server/app/roots/[id]/chat/[topicId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/[id]/kb/[...slug]/page.js +2 -6
- package/.next/server/app/roots/[id]/kb/[...slug]/page.js.nft.json +1 -1
- package/.next/server/app/roots/[id]/kb/[...slug]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/[id]/page.js +3 -3
- package/.next/server/app/roots/[id]/page.js.nft.json +1 -1
- package/.next/server/app/roots/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/[id]/workflows/[wfId]/page.js +2 -2
- package/.next/server/app/roots/[id]/workflows/[wfId]/page.js.nft.json +1 -1
- package/.next/server/app/roots/[id]/workflows/[wfId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/[id]/workflows/page.js +2 -2
- package/.next/server/app/roots/[id]/workflows/page.js.nft.json +1 -1
- package/.next/server/app/roots/[id]/workflows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roots/new/page.js +5 -3
- package/.next/server/app/roots/new/page.js.nft.json +1 -1
- package/.next/server/app/roots/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js +6 -6
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/share/[id]/file/page.js +2 -2
- package/.next/server/app/share/[id]/file/page.js.nft.json +1 -1
- package/.next/server/app/share/[id]/file/page_client-reference-manifest.js +1 -1
- package/.next/server/app/share/[id]/page.js +2 -2
- package/.next/server/app/share/[id]/page.js.nft.json +1 -1
- package/.next/server/app/share/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/utilities/[scope]/[id]/page.js +2 -2
- package/.next/server/app/utilities/[scope]/[id]/page.js.nft.json +1 -1
- package/.next/server/app/utilities/[scope]/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/utilities/page.js +2 -17
- package/.next/server/app/utilities/page.js.nft.json +1 -1
- package/.next/server/app/utilities/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +10 -10
- package/.next/server/chunks/1.js +3 -0
- package/.next/server/chunks/1223.js +1 -1
- package/.next/server/chunks/133.js +1 -490
- package/.next/server/chunks/1888.js +1 -1
- package/.next/server/chunks/{9739.js → 1988.js} +13 -9
- package/.next/server/chunks/2192.js +1 -0
- package/.next/server/chunks/2433.js +1 -1
- package/.next/server/chunks/2503.js +1 -1
- package/.next/server/chunks/285.js +471 -0
- package/.next/server/chunks/2995.js +1 -0
- package/.next/server/chunks/3240.js +1 -1
- package/.next/server/chunks/3332.js +1 -1
- package/.next/server/chunks/{2528.js → 3512.js} +2 -2
- package/.next/server/chunks/3657.js +1 -1
- package/.next/server/chunks/4066.js +1 -1
- package/.next/server/chunks/4438.js +1 -0
- package/.next/server/chunks/4553.js +1 -1
- package/.next/server/chunks/4812.js +179 -0
- package/.next/server/chunks/4925.js +1 -1
- package/.next/server/chunks/5319.js +1 -1
- package/.next/server/chunks/569.js +1 -1
- package/.next/server/chunks/6730.js +1 -1
- package/.next/server/chunks/6734.js +1 -0
- package/.next/server/chunks/6909.js +142 -161
- package/.next/server/chunks/7215.js +1 -0
- package/.next/server/chunks/8262.js +1 -1
- package/.next/server/chunks/9098.js +1 -1
- package/.next/server/chunks/94.js +1 -1
- package/.next/server/chunks/9835.js +1 -1
- package/.next/server/chunks/9944.js +1 -0
- package/.next/server/functions-config-manifest.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages-manifest.json +1 -2
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/1082-326e649fb24d4945.js +1 -0
- package/.next/static/chunks/3736-f4e42d6d38be50b0.js +1 -0
- package/.next/static/chunks/4108.ca0bdf3cbf3c56cc.js +1 -0
- package/.next/static/chunks/6445-99824866a51b582a.js +1 -0
- package/.next/static/chunks/7482-7ef26030a10ce14f.js +1 -0
- package/.next/static/chunks/8944-c4f2406ecd61094f.js +1 -0
- package/.next/static/chunks/9411-af5f758c57741929.js +3 -0
- package/.next/static/chunks/9415-eb6b5d4c2de3a7c0.js +1 -0
- package/.next/static/chunks/app/agents/[agentId]/page-5d6f4cb16b42d02b.js +1 -0
- package/.next/static/chunks/app/layout-85eb1fd21dab0895.js +1 -0
- package/.next/static/chunks/app/onboarding/page-2013bd8124b9162e.js +1 -0
- package/.next/static/chunks/app/page-558a224e13ffb52c.js +1 -0
- package/.next/static/chunks/app/roots/[id]/chat/[topicId]/page-b42f03fd58669d12.js +1 -0
- package/.next/static/chunks/app/roots/[id]/kb/[...slug]/page-7d17b4e6a5231f56.js +1 -0
- package/.next/static/chunks/app/roots/[id]/page-4aab5266f432e37e.js +1 -0
- package/.next/static/chunks/app/roots/[id]/workflows/[wfId]/page-1ee3320bf5744efc.js +1 -0
- package/.next/static/chunks/app/roots/new/page-df8d2c1f0c64c37a.js +1 -0
- package/.next/static/chunks/app/settings/page-fdba798d9e243ad3.js +1 -0
- package/.next/static/chunks/app/share/[id]/page-818a451d05e08d26.js +1 -0
- package/.next/static/chunks/app/utilities/[scope]/[id]/page-2cee09cc2ab9b5e8.js +1 -0
- package/.next/static/chunks/app/utilities/page-44a51522b347f13e.js +1 -0
- package/.next/static/chunks/{webpack-87b4bb79fdc48563.js → webpack-2b0eab4ccdf44f63.js} +1 -1
- package/.next/static/css/4b367c1d0fa99b78.css +1 -0
- package/.next/trace +47 -46
- package/README.md +4 -1
- package/dist/lib/reflex/agents/prompts.js +46 -46
- package/dist/lib/reflex/agents/prompts.js.map +1 -1
- package/dist/lib/reflex/prompts/defaults.js +102 -102
- package/next.config.ts +4 -1
- package/package.json +4 -3
- package/packages/utilities/learn-anything/README.md +29 -29
- package/packages/utilities/learn-anything/actions/_json.ts +11 -11
- package/packages/utilities/learn-anything/actions/_store.ts +2 -2
- package/packages/utilities/learn-anything/actions/buildModule.ts +60 -59
- package/packages/utilities/learn-anything/actions/explainSelection.ts +14 -13
- package/packages/utilities/learn-anything/actions/generateOutline.ts +15 -15
- package/packages/utilities/learn-anything/actions/generateQuiz.ts +8 -8
- package/packages/utilities/learn-anything/actions/generateTrainer.ts +15 -15
- package/packages/utilities/learn-anything/actions/refreshCourseCard.ts +4 -4
- package/packages/utilities/learn-anything/actions/tutorAsk.ts +15 -15
- package/packages/utilities/learn-anything/article-view.tsx +4 -4
- package/packages/utilities/learn-anything/manifest.json +5 -5
- package/packages/utilities/learn-anything/ui.tsx +57 -57
- package/.next/server/app/_not-found.html +0 -1
- package/.next/server/app/_not-found.meta +0 -8
- package/.next/server/app/_not-found.rsc +0 -18
- package/.next/server/app/index.html +0 -1
- package/.next/server/app/index.meta +0 -9
- package/.next/server/app/index.rsc +0 -19
- package/.next/server/chunks/1986.js +0 -1
- package/.next/server/chunks/4065.js +0 -1
- package/.next/server/chunks/6981.js +0 -1
- package/.next/server/chunks/7017.js +0 -3
- package/.next/server/chunks/7800.js +0 -1
- package/.next/server/chunks/8494.js +0 -1
- package/.next/server/chunks/8843.js +0 -1
- package/.next/server/chunks/9328.js +0 -179
- package/.next/server/chunks/9423.js +0 -3
- package/.next/server/chunks/9455.js +0 -1
- package/.next/server/pages/404.html +0 -1
- package/.next/static/chunks/1384-d28fb6c6c058876f.js +0 -1
- package/.next/static/chunks/2718-78fee2c0de782178.js +0 -1
- package/.next/static/chunks/4108.1ef6b5e7679b56ac.js +0 -1
- package/.next/static/chunks/7238-11701befb3ca3e41.js +0 -1
- package/.next/static/chunks/7951-590bf2004d7935b5.js +0 -1
- package/.next/static/chunks/8423-ffded33a21b27360.js +0 -1
- package/.next/static/chunks/9045-731ff0865352dd95.js +0 -1
- package/.next/static/chunks/app/agents/[agentId]/page-0b5c2838354d0eba.js +0 -1
- package/.next/static/chunks/app/layout-4fbf9f91ad45e221.js +0 -1
- package/.next/static/chunks/app/onboarding/page-532b193d1c4b0dee.js +0 -1
- package/.next/static/chunks/app/page-e3ec0990b78ce7c7.js +0 -1
- package/.next/static/chunks/app/roots/[id]/chat/[topicId]/page-11aad9a40def2e0d.js +0 -1
- package/.next/static/chunks/app/roots/[id]/kb/[...slug]/page-d8757a85e873dfa1.js +0 -1
- package/.next/static/chunks/app/roots/[id]/page-76216026efb90ae0.js +0 -1
- package/.next/static/chunks/app/roots/[id]/workflows/[wfId]/page-c4b6e3825f8626f5.js +0 -1
- package/.next/static/chunks/app/roots/new/page-53ea8d2787e79425.js +0 -1
- package/.next/static/chunks/app/settings/page-7ebaf2b62f256538.js +0 -1
- package/.next/static/chunks/app/share/[id]/page-d5bbbb7e454d1375.js +0 -1
- package/.next/static/chunks/app/utilities/[scope]/[id]/page-e2f928a37483d113.js +0 -1
- package/.next/static/chunks/app/utilities/page-839262ff726a52a2.js +0 -1
- package/.next/static/css/87e01f779d555d04.css +0 -1
- /package/.next/static/{vTfQfQnAWV_hFVZjWEYvZ → fhVNqfmJl5Mdfhyhg6orp}/_buildManifest.js +0 -0
- /package/.next/static/{vTfQfQnAWV_hFVZjWEYvZ → fhVNqfmJl5Mdfhyhg6orp}/_ssgManifest.js +0 -0
|
@@ -14,12 +14,12 @@ import {
|
|
|
14
14
|
} from "@host/ui";
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
* "
|
|
17
|
+
* "Learn Anything" — universal AI tutor / course builder.
|
|
18
18
|
*
|
|
19
19
|
* UI state machine:
|
|
20
|
-
* list → user's existing courses + "
|
|
20
|
+
* list → user's existing courses + "New course" button
|
|
21
21
|
* wizard → topic → agent-driven Q&A → ready
|
|
22
|
-
* outline → preview of generated modules → "
|
|
22
|
+
* outline → preview of generated modules → "Start"
|
|
23
23
|
* module → article + video + links + diagrams + quiz + homework + trainer
|
|
24
24
|
* trainer → fullscreen iframe with the generated HTML
|
|
25
25
|
*/
|
|
@@ -112,9 +112,9 @@ export default function LearnAnythingUtility() {
|
|
|
112
112
|
<div className="min-h-screen bg-slate-50">
|
|
113
113
|
<div className="mx-auto max-w-3xl px-4 py-6 space-y-4">
|
|
114
114
|
<header className="flex items-center gap-3">
|
|
115
|
-
<h1 className="text-xl font-semibold">🎓
|
|
115
|
+
<h1 className="text-xl font-semibold">🎓 Learn Anything</h1>
|
|
116
116
|
<span className="text-xs text-slate-500">
|
|
117
|
-
|
|
117
|
+
personal AI tutor
|
|
118
118
|
</span>
|
|
119
119
|
<div className="ml-auto" />
|
|
120
120
|
{view.name !== "list" && (
|
|
@@ -123,7 +123,7 @@ export default function LearnAnythingUtility() {
|
|
|
123
123
|
type="button"
|
|
124
124
|
onClick={() => setView({ name: "list" })}
|
|
125
125
|
>
|
|
126
|
-
←
|
|
126
|
+
← Back to courses
|
|
127
127
|
</Button>
|
|
128
128
|
)}
|
|
129
129
|
</header>
|
|
@@ -208,7 +208,7 @@ export default function LearnAnythingUtility() {
|
|
|
208
208
|
)}
|
|
209
209
|
|
|
210
210
|
{error && (
|
|
211
|
-
<p className="text-xs text-red-600"
|
|
211
|
+
<p className="text-xs text-red-600">Error: {error}</p>
|
|
212
212
|
)}
|
|
213
213
|
</div>
|
|
214
214
|
</div>
|
|
@@ -232,13 +232,13 @@ function CourseList({
|
|
|
232
232
|
<div className="space-y-4">
|
|
233
233
|
<Card>
|
|
234
234
|
<CardHeader>
|
|
235
|
-
<CardTitle>🎯
|
|
235
|
+
<CardTitle>🎯 What do you want to learn?</CardTitle>
|
|
236
236
|
</CardHeader>
|
|
237
237
|
<CardContent className="space-y-2">
|
|
238
238
|
<Input
|
|
239
239
|
value={topic}
|
|
240
240
|
onChange={(e) => setTopic(e.target.value)}
|
|
241
|
-
placeholder="
|
|
241
|
+
placeholder="e.g. watercolor painting, python for backend, spanish from scratch"
|
|
242
242
|
onKeyDown={(e) => {
|
|
243
243
|
if (e.key === "Enter" && topic.trim()) {
|
|
244
244
|
e.preventDefault();
|
|
@@ -250,20 +250,20 @@ function CourseList({
|
|
|
250
250
|
onClick={() => topic.trim() && onNew(topic.trim())}
|
|
251
251
|
disabled={!topic.trim()}
|
|
252
252
|
>
|
|
253
|
-
|
|
253
|
+
Build course →
|
|
254
254
|
</Button>
|
|
255
255
|
</CardContent>
|
|
256
256
|
</Card>
|
|
257
257
|
|
|
258
258
|
<Card>
|
|
259
259
|
<CardHeader>
|
|
260
|
-
<CardTitle>📚
|
|
260
|
+
<CardTitle>📚 My courses ({courses.length})</CardTitle>
|
|
261
261
|
</CardHeader>
|
|
262
262
|
<CardContent>
|
|
263
263
|
{courses.length === 0 ? (
|
|
264
264
|
<p className="text-sm text-slate-500">
|
|
265
|
-
|
|
266
|
-
|
|
265
|
+
None yet. Enter a topic above — Reflex will ask 3-4 questions
|
|
266
|
+
and assemble a program.
|
|
267
267
|
</p>
|
|
268
268
|
) : (
|
|
269
269
|
<ul className="space-y-1.5">
|
|
@@ -283,7 +283,7 @@ function CourseList({
|
|
|
283
283
|
<div className="flex items-center gap-2">
|
|
284
284
|
<span className="font-medium truncate">{c.topic}</span>
|
|
285
285
|
<span className="ml-auto text-xs text-slate-500">
|
|
286
|
-
{done}/{total}
|
|
286
|
+
{done}/{total} modules
|
|
287
287
|
</span>
|
|
288
288
|
</div>
|
|
289
289
|
<div className="mt-1 h-1 rounded-full bg-slate-200 overflow-hidden">
|
|
@@ -396,7 +396,7 @@ function WizardView({
|
|
|
396
396
|
<CardContent className="py-8 text-center space-y-2">
|
|
397
397
|
<div className="text-2xl">📐</div>
|
|
398
398
|
<p className="text-sm text-slate-600">
|
|
399
|
-
|
|
399
|
+
Building the course program… this takes 20-40 seconds.
|
|
400
400
|
</p>
|
|
401
401
|
</CardContent>
|
|
402
402
|
</Card>
|
|
@@ -408,7 +408,7 @@ function WizardView({
|
|
|
408
408
|
<CardHeader>
|
|
409
409
|
<CardTitle>
|
|
410
410
|
<span className="text-slate-500 text-xs uppercase tracking-wider">
|
|
411
|
-
|
|
411
|
+
Topic:
|
|
412
412
|
</span>{" "}
|
|
413
413
|
{topic}
|
|
414
414
|
</CardTitle>
|
|
@@ -456,7 +456,7 @@ function WizardView({
|
|
|
456
456
|
value={draft}
|
|
457
457
|
onChange={(e) => setDraft(e.target.value)}
|
|
458
458
|
rows={3}
|
|
459
|
-
placeholder="
|
|
459
|
+
placeholder="your answer…"
|
|
460
460
|
/>
|
|
461
461
|
<div className="flex items-center gap-2">
|
|
462
462
|
<Button
|
|
@@ -472,7 +472,7 @@ function WizardView({
|
|
|
472
472
|
void ask(next);
|
|
473
473
|
}}
|
|
474
474
|
>
|
|
475
|
-
|
|
475
|
+
Answer →
|
|
476
476
|
</Button>
|
|
477
477
|
<Button
|
|
478
478
|
type="button"
|
|
@@ -480,15 +480,15 @@ function WizardView({
|
|
|
480
480
|
disabled={busy}
|
|
481
481
|
onClick={() => void buildOutline(history)}
|
|
482
482
|
>
|
|
483
|
-
|
|
483
|
+
Enough, build the course
|
|
484
484
|
</Button>
|
|
485
485
|
<Button type="button" variant="outline" onClick={onCancel}>
|
|
486
|
-
|
|
486
|
+
Cancel
|
|
487
487
|
</Button>
|
|
488
488
|
</div>
|
|
489
489
|
</>
|
|
490
490
|
) : (
|
|
491
|
-
<p className="text-sm text-slate-500"
|
|
491
|
+
<p className="text-sm text-slate-500">Thinking about the next question…</p>
|
|
492
492
|
)}
|
|
493
493
|
</CardContent>
|
|
494
494
|
</Card>
|
|
@@ -508,7 +508,7 @@ function OutlineView({
|
|
|
508
508
|
return (
|
|
509
509
|
<Card>
|
|
510
510
|
<CardHeader>
|
|
511
|
-
<CardTitle>🧭
|
|
511
|
+
<CardTitle>🧭 Program for course "{course.topic}"</CardTitle>
|
|
512
512
|
</CardHeader>
|
|
513
513
|
<CardContent className="space-y-3">
|
|
514
514
|
<ol className="space-y-2 list-decimal pl-5">
|
|
@@ -519,12 +519,12 @@ function OutlineView({
|
|
|
519
519
|
<span className="text-slate-600"> — {m.objective}</span>
|
|
520
520
|
)}
|
|
521
521
|
<span className="text-xs text-slate-400 ml-1">
|
|
522
|
-
(~{m.estMinutes}
|
|
522
|
+
(~{m.estMinutes} min)
|
|
523
523
|
</span>
|
|
524
524
|
</li>
|
|
525
525
|
))}
|
|
526
526
|
</ol>
|
|
527
|
-
<Button onClick={onStart}
|
|
527
|
+
<Button onClick={onStart}>Start learning →</Button>
|
|
528
528
|
</CardContent>
|
|
529
529
|
</Card>
|
|
530
530
|
);
|
|
@@ -550,7 +550,7 @@ function CourseView({
|
|
|
550
550
|
</CardHeader>
|
|
551
551
|
<CardContent className="space-y-3">
|
|
552
552
|
<div className="text-xs text-slate-500">
|
|
553
|
-
|
|
553
|
+
Progress: {done} of {course.modules.length}
|
|
554
554
|
</div>
|
|
555
555
|
<div className="h-1.5 rounded-full bg-slate-200 overflow-hidden">
|
|
556
556
|
<div
|
|
@@ -583,11 +583,11 @@ function CourseView({
|
|
|
583
583
|
<span className="flex-1 truncate">{m.title}</span>
|
|
584
584
|
{p?.quizScore !== undefined && (
|
|
585
585
|
<Badge variant="outline" className="text-[10px]">
|
|
586
|
-
|
|
586
|
+
quiz {p.quizScore}%
|
|
587
587
|
</Badge>
|
|
588
588
|
)}
|
|
589
589
|
<span className="text-[10px] text-slate-400">
|
|
590
|
-
~{m.estMinutes}
|
|
590
|
+
~{m.estMinutes} min
|
|
591
591
|
</span>
|
|
592
592
|
</button>
|
|
593
593
|
</li>
|
|
@@ -889,7 +889,7 @@ function ModuleView({
|
|
|
889
889
|
return (
|
|
890
890
|
<Card>
|
|
891
891
|
<CardContent className="py-10 text-center text-sm text-slate-500">
|
|
892
|
-
📖
|
|
892
|
+
📖 Gathering materials, articles, videos, diagrams… 30-60 seconds.
|
|
893
893
|
</CardContent>
|
|
894
894
|
</Card>
|
|
895
895
|
);
|
|
@@ -903,7 +903,7 @@ function ModuleView({
|
|
|
903
903
|
</CardHeader>
|
|
904
904
|
<CardContent className="space-y-2">
|
|
905
905
|
<p className="text-sm text-slate-600">{module.objective}</p>
|
|
906
|
-
<Button onClick={() => void build()}
|
|
906
|
+
<Button onClick={() => void build()}>Prepare module →</Button>
|
|
907
907
|
</CardContent>
|
|
908
908
|
</Card>
|
|
909
909
|
);
|
|
@@ -939,7 +939,7 @@ function ModuleView({
|
|
|
939
939
|
{content.images.length > 0 && (
|
|
940
940
|
<Card>
|
|
941
941
|
<CardHeader>
|
|
942
|
-
<CardTitle>🖼
|
|
942
|
+
<CardTitle>🖼 Illustrations</CardTitle>
|
|
943
943
|
</CardHeader>
|
|
944
944
|
<CardContent className="grid grid-cols-2 gap-3">
|
|
945
945
|
{content.images.map((im, i) => (
|
|
@@ -948,7 +948,7 @@ function ModuleView({
|
|
|
948
948
|
src={im.url}
|
|
949
949
|
alt={im.alt}
|
|
950
950
|
loading="lazy"
|
|
951
|
-
title={im.alt || "
|
|
951
|
+
title={im.alt || "Open fullscreen"}
|
|
952
952
|
onClick={() =>
|
|
953
953
|
setGalleryZoom({ src: im.url, alt: im.alt })
|
|
954
954
|
}
|
|
@@ -973,7 +973,7 @@ function ModuleView({
|
|
|
973
973
|
{content.diagrams.length > 0 && (
|
|
974
974
|
<Card>
|
|
975
975
|
<CardHeader>
|
|
976
|
-
<CardTitle>📐
|
|
976
|
+
<CardTitle>📐 Diagrams</CardTitle>
|
|
977
977
|
</CardHeader>
|
|
978
978
|
<CardContent className="space-y-4">
|
|
979
979
|
{content.diagrams.map((d, i) => (
|
|
@@ -995,7 +995,7 @@ function ModuleView({
|
|
|
995
995
|
{content.videos.length > 0 && (
|
|
996
996
|
<Card>
|
|
997
997
|
<CardHeader>
|
|
998
|
-
<CardTitle>🎬
|
|
998
|
+
<CardTitle>🎬 Videos</CardTitle>
|
|
999
999
|
</CardHeader>
|
|
1000
1000
|
<CardContent className="space-y-2">
|
|
1001
1001
|
{content.videos.map((v, i) => (
|
|
@@ -1022,7 +1022,7 @@ function ModuleView({
|
|
|
1022
1022
|
{content.links.length > 0 && (
|
|
1023
1023
|
<Card>
|
|
1024
1024
|
<CardHeader>
|
|
1025
|
-
<CardTitle>📑
|
|
1025
|
+
<CardTitle>📑 Sources</CardTitle>
|
|
1026
1026
|
</CardHeader>
|
|
1027
1027
|
<CardContent className="space-y-1">
|
|
1028
1028
|
{content.links.map((l, i) => (
|
|
@@ -1046,7 +1046,7 @@ function ModuleView({
|
|
|
1046
1046
|
{content.homework.length > 0 && (
|
|
1047
1047
|
<Card>
|
|
1048
1048
|
<CardHeader>
|
|
1049
|
-
<CardTitle>📝
|
|
1049
|
+
<CardTitle>📝 Homework</CardTitle>
|
|
1050
1050
|
</CardHeader>
|
|
1051
1051
|
<CardContent>
|
|
1052
1052
|
<ul className="space-y-1 text-sm list-decimal pl-5">
|
|
@@ -1060,12 +1060,12 @@ function ModuleView({
|
|
|
1060
1060
|
|
|
1061
1061
|
<Card>
|
|
1062
1062
|
<CardHeader>
|
|
1063
|
-
<CardTitle>✅
|
|
1063
|
+
<CardTitle>✅ Quiz check</CardTitle>
|
|
1064
1064
|
</CardHeader>
|
|
1065
1065
|
<CardContent className="space-y-3">
|
|
1066
1066
|
{!quiz ? (
|
|
1067
1067
|
<Button onClick={() => void startQuiz()} disabled={quizBusy}>
|
|
1068
|
-
{quizBusy ? "
|
|
1068
|
+
{quizBusy ? "Preparing…" : "Generate quiz"}
|
|
1069
1069
|
</Button>
|
|
1070
1070
|
) : (
|
|
1071
1071
|
<>
|
|
@@ -1124,11 +1124,11 @@ function ModuleView({
|
|
|
1124
1124
|
onClick={() => void submitQuiz()}
|
|
1125
1125
|
disabled={Object.keys(quizAnswers).length < quiz.length}
|
|
1126
1126
|
>
|
|
1127
|
-
|
|
1127
|
+
Check
|
|
1128
1128
|
</Button>
|
|
1129
1129
|
) : (
|
|
1130
1130
|
<Badge variant="default" className="text-xs">
|
|
1131
|
-
|
|
1131
|
+
Score:{" "}
|
|
1132
1132
|
{Math.round(
|
|
1133
1133
|
(quiz.filter((q, i) => quizAnswers[i] === q.correctIndex)
|
|
1134
1134
|
.length /
|
|
@@ -1145,16 +1145,16 @@ function ModuleView({
|
|
|
1145
1145
|
|
|
1146
1146
|
<Card>
|
|
1147
1147
|
<CardHeader>
|
|
1148
|
-
<CardTitle>🕹
|
|
1148
|
+
<CardTitle>🕹 Trainer</CardTitle>
|
|
1149
1149
|
</CardHeader>
|
|
1150
1150
|
<CardContent className="space-y-2">
|
|
1151
1151
|
<Input
|
|
1152
1152
|
value={trainerIdea}
|
|
1153
1153
|
onChange={(e) => setTrainerIdea(e.target.value)}
|
|
1154
|
-
placeholder="
|
|
1154
|
+
placeholder="trainer idea (optional) — Reflex will invent one if empty"
|
|
1155
1155
|
/>
|
|
1156
1156
|
<Button onClick={() => void makeTrainer()} disabled={trainerBusy}>
|
|
1157
|
-
{trainerBusy ? "
|
|
1157
|
+
{trainerBusy ? "Building…" : "Generate interactive trainer"}
|
|
1158
1158
|
</Button>
|
|
1159
1159
|
</CardContent>
|
|
1160
1160
|
</Card>
|
|
@@ -1165,13 +1165,13 @@ function ModuleView({
|
|
|
1165
1165
|
onClick={() => void onProgress({ completed: true })}
|
|
1166
1166
|
variant="outline"
|
|
1167
1167
|
>
|
|
1168
|
-
✓
|
|
1168
|
+
✓ Mark as completed
|
|
1169
1169
|
</Button>
|
|
1170
1170
|
<Button
|
|
1171
1171
|
onClick={() => void onProgress({ completed: false })}
|
|
1172
1172
|
variant="outline"
|
|
1173
1173
|
>
|
|
1174
|
-
|
|
1174
|
+
Unmark
|
|
1175
1175
|
</Button>
|
|
1176
1176
|
</CardContent>
|
|
1177
1177
|
</Card>
|
|
@@ -1195,14 +1195,14 @@ function TrainerView({
|
|
|
1195
1195
|
<Card>
|
|
1196
1196
|
<CardHeader>
|
|
1197
1197
|
<CardTitle>
|
|
1198
|
-
🕹
|
|
1198
|
+
🕹 Trainer · {title}
|
|
1199
1199
|
<Button
|
|
1200
1200
|
type="button"
|
|
1201
1201
|
variant="outline"
|
|
1202
1202
|
className="ml-auto"
|
|
1203
1203
|
onClick={onClose}
|
|
1204
1204
|
>
|
|
1205
|
-
|
|
1205
|
+
Close
|
|
1206
1206
|
</Button>
|
|
1207
1207
|
</CardTitle>
|
|
1208
1208
|
</CardHeader>
|
|
@@ -1293,7 +1293,7 @@ function baseSlug(rel: string): string {
|
|
|
1293
1293
|
//
|
|
1294
1294
|
// 2. A floating popover above the selection (or below if the
|
|
1295
1295
|
// selection sits near the top of the viewport). Initial state
|
|
1296
|
-
// offers `✨
|
|
1296
|
+
// offers `✨ Explain` (default action) and `❓ Ask a question`
|
|
1297
1297
|
// (reveals an input). After the agent replies the popover stays
|
|
1298
1298
|
// pinned in place and shows the explanation inline — readable
|
|
1299
1299
|
// like a Kindle/Apple Books margin annotation.
|
|
@@ -1365,7 +1365,7 @@ function AnnotationOverlay({
|
|
|
1365
1365
|
{/* Margin note popover. */}
|
|
1366
1366
|
<div
|
|
1367
1367
|
role="dialog"
|
|
1368
|
-
aria-label="
|
|
1368
|
+
aria-label="Explanation"
|
|
1369
1369
|
style={{
|
|
1370
1370
|
position: "fixed",
|
|
1371
1371
|
top,
|
|
@@ -1398,7 +1398,7 @@ function AnnotationOverlay({
|
|
|
1398
1398
|
}}
|
|
1399
1399
|
>
|
|
1400
1400
|
<span aria-hidden>✨</span>
|
|
1401
|
-
<span style={{ fontWeight: 600 }}
|
|
1401
|
+
<span style={{ fontWeight: 600 }}>Note</span>
|
|
1402
1402
|
<span
|
|
1403
1403
|
style={{
|
|
1404
1404
|
marginLeft: 6,
|
|
@@ -1417,7 +1417,7 @@ function AnnotationOverlay({
|
|
|
1417
1417
|
<button
|
|
1418
1418
|
type="button"
|
|
1419
1419
|
onClick={onClose}
|
|
1420
|
-
aria-label="
|
|
1420
|
+
aria-label="Close"
|
|
1421
1421
|
style={{
|
|
1422
1422
|
border: "none",
|
|
1423
1423
|
background: "transparent",
|
|
@@ -1460,7 +1460,7 @@ function AnnotationOverlay({
|
|
|
1460
1460
|
cursor: "pointer",
|
|
1461
1461
|
}}
|
|
1462
1462
|
>
|
|
1463
|
-
✨
|
|
1463
|
+
✨ Explain
|
|
1464
1464
|
</button>
|
|
1465
1465
|
<button
|
|
1466
1466
|
type="button"
|
|
@@ -1476,9 +1476,9 @@ function AnnotationOverlay({
|
|
|
1476
1476
|
fontSize: 12,
|
|
1477
1477
|
cursor: "pointer",
|
|
1478
1478
|
}}
|
|
1479
|
-
title="
|
|
1479
|
+
title="Ask your own question about the selected fragment"
|
|
1480
1480
|
>
|
|
1481
|
-
❓
|
|
1481
|
+
❓ Ask a question
|
|
1482
1482
|
</button>
|
|
1483
1483
|
</div>
|
|
1484
1484
|
{annot.showQuestion && (
|
|
@@ -1492,7 +1492,7 @@ function AnnotationOverlay({
|
|
|
1492
1492
|
<textarea
|
|
1493
1493
|
value={annot.question}
|
|
1494
1494
|
onChange={(e) => onChange({ question: e.target.value })}
|
|
1495
|
-
placeholder="
|
|
1495
|
+
placeholder="For example: 'what does this law have to do with it?' or 'give me an example'"
|
|
1496
1496
|
autoFocus
|
|
1497
1497
|
rows={3}
|
|
1498
1498
|
style={{
|
|
@@ -1520,7 +1520,7 @@ function AnnotationOverlay({
|
|
|
1520
1520
|
alignSelf: "flex-end",
|
|
1521
1521
|
}}
|
|
1522
1522
|
>
|
|
1523
|
-
|
|
1523
|
+
Ask →
|
|
1524
1524
|
</button>
|
|
1525
1525
|
</form>
|
|
1526
1526
|
)}
|
|
@@ -1539,7 +1539,7 @@ function AnnotationOverlay({
|
|
|
1539
1539
|
}}
|
|
1540
1540
|
>
|
|
1541
1541
|
<span aria-hidden>✨</span>
|
|
1542
|
-
<span>{annot.question ? "
|
|
1542
|
+
<span>{annot.question ? "Thinking about the question…" : "Explaining…"}</span>
|
|
1543
1543
|
</div>
|
|
1544
1544
|
)}
|
|
1545
1545
|
|
|
@@ -1574,7 +1574,7 @@ function AnnotationOverlay({
|
|
|
1574
1574
|
cursor: "pointer",
|
|
1575
1575
|
}}
|
|
1576
1576
|
>
|
|
1577
|
-
❓
|
|
1577
|
+
❓ Another question
|
|
1578
1578
|
</button>
|
|
1579
1579
|
</div>
|
|
1580
1580
|
</div>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html><!--vTfQfQnAWV_hFVZjWEYvZ--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/87e01f779d555d04.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-87b4bb79fdc48563.js"/><script src="/_next/static/chunks/6fe292aa-7126ff9d6732e864.js" async=""></script><script src="/_next/static/chunks/146-ccee3b26755b68c8.js" async=""></script><script src="/_next/static/chunks/main-app-ebe67847147d19aa.js" async=""></script><script src="/_next/static/chunks/4400-cdb1f7913ae34e09.js" async=""></script><script src="/_next/static/chunks/1217-407174d9b164a499.js" async=""></script><script src="/_next/static/chunks/5097-f07f6aeee3f60a33.js" async=""></script><script src="/_next/static/chunks/9045-731ff0865352dd95.js" async=""></script><script src="/_next/static/chunks/app/layout-4fbf9f91ad45e221.js" async=""></script><meta name="robots" content="noindex"/><title>Reflex</title><meta name="description" content="Local-first knowledge base built by an agent."/><title>404: This page could not be found.</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="h-screen flex"><aside class="w-72 shrink-0 border-r bg-muted/30 flex flex-col"><div class="px-4 py-4 flex items-center gap-2 border-b"><span class="reflex-gradient inline-flex h-7 w-7 items-center justify-center rounded-lg text-white shadow-sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkles h-4 w-4"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path><path d="M20 3v4"></path><path d="M22 5h-4"></path><path d="M4 17v2"></path><path d="M5 18H3"></path></svg></span><div class="leading-tight"><a class="text-sm font-semibold tracking-tight hover:underline" href="/">Reflex</a><div class="text-[10px] uppercase tracking-wider text-muted-foreground">knowledge base</div></div></div><div dir="ltr" data-slot="scroll-area" class="relative flex-1" style="position:relative;--radix-scroll-area-corner-width:0px;--radix-scroll-area-corner-height:0px"><style>[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}</style><div data-radix-scroll-area-viewport="" data-slot="scroll-area-viewport" class="size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1" style="overflow-x:hidden;overflow-y:hidden"><div style="min-width:100%;display:table"><nav class="px-2 pt-3 pb-6"><div class="px-2 mb-1 text-[10px] uppercase tracking-wider text-muted-foreground">Пространства</div><div class="px-2 py-3 text-xs text-muted-foreground">Пока пусто.</div><div class="mt-2 px-2"><a data-slot="button" data-variant="ghost" data-size="sm" class="inline-flex shrink-0 items-center font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5 h-7 w-full justify-start text-xs" href="/roots/new"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-folder-plus mr-1 h-3.5 w-3.5"><path d="M12 10v6"></path><path d="M9 13h6"></path><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"></path></svg> Добавить пространство</a></div></nav></div></div></div><div data-orientation="horizontal" role="none" data-slot="separator" class="shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px"></div><div class="px-2 py-2 space-y-0.5"><a data-slot="button" data-variant="ghost" data-size="sm" class="inline-flex shrink-0 items-center text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5 w-full justify-start" href="/utilities"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-boxes mr-2 h-4 w-4"><path d="M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z"></path><path d="m7 16.5-4.74-2.85"></path><path d="m7 16.5 5-3"></path><path d="M7 16.5v5.17"></path><path d="M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z"></path><path d="m17 16.5-5-3"></path><path d="m17 16.5 4.74-2.85"></path><path d="M17 16.5v5.17"></path><path d="M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z"></path><path d="M12 8 7.26 5.15"></path><path d="m12 8 4.74-2.85"></path><path d="M12 13.5V8"></path></svg> Мини-приложения</a><a data-slot="button" data-variant="ghost" data-size="sm" class="inline-flex shrink-0 items-center text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5 w-full justify-start" href="/audit"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-search mr-2 h-4 w-4"><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M4.268 21a2 2 0 0 0 1.727 1H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3"></path><path d="m9 18-1.5-1.5"></path><circle cx="5" cy="14" r="3"></circle></svg> Аудит</a><a data-slot="button" data-variant="ghost" data-size="sm" class="inline-flex shrink-0 items-center text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5 w-full justify-start" href="/settings"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings mr-2 h-4 w-4"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg> Settings</a></div></aside><main class="flex-1 min-w-0 flex flex-col"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/_next/static/chunks/webpack-87b4bb79fdc48563.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n3:I[26957,[],\"\"]\n4:I[97369,[],\"\"]\n5:I[21968,[],\"OutletBoundary\"]\n7:I[33705,[],\"AsyncMetadataOutlet\"]\n9:I[21968,[],\"ViewportBoundary\"]\nb:I[21968,[],\"MetadataBoundary\"]\nc:\"$Sreact.suspense\"\ne:I[6287,[],\"\"]\n:HL[\"/_next/static/css/87e01f779d555d04.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"vTfQfQnAWV_hFVZjWEYvZ\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/87e01f779d555d04.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],\"$L2\"]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$L6\",[\"$\",\"$L7\",null,{\"promise\":\"$@8\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],null],[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$c\",null,{\"fallback\":null,\"children\":\"$Ld\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"8:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Reflex\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Local-first knowledge base built by an agent.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"d:\"$8:metadata\"\n"])</script><script>self.__next_f.push([1,"f:I[22438,[\"4400\",\"static/chunks/4400-cdb1f7913ae34e09.js\",\"1217\",\"static/chunks/1217-407174d9b164a499.js\",\"5097\",\"static/chunks/5097-f07f6aeee3f60a33.js\",\"9045\",\"static/chunks/9045-731ff0865352dd95.js\",\"7177\",\"static/chunks/app/layout-4fbf9f91ad45e221.js\"],\"AppSidebar\"]\n10:I[43450,[\"4400\",\"static/chunks/4400-cdb1f7913ae34e09.js\",\"1217\",\"static/chunks/1217-407174d9b164a499.js\",\"5097\",\"static/chunks/5097-f07f6aeee3f60a33.js\",\"9045\",\"static/chunks/9045-731ff0865352dd95.js\",\"7177\",\"static/chunks/app/layout-4fbf9f91ad45e221.js\"],\"Toaster\"]\n2:[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"h-screen flex\",\"children\":[[\"$\",\"$Lf\",null,{\"initialRoots\":[]}],[\"$\",\"main\",null,{\"className\":\"flex-1 min-w-0 flex flex-col\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}],[\"$\",\"$L10\",null,{\"richColors\":true,\"closeButton\":true}]]}]}]\n"])</script></body></html>
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
1:"$Sreact.fragment"
|
|
2
|
-
3:I[26957,[],""]
|
|
3
|
-
4:I[97369,[],""]
|
|
4
|
-
5:I[21968,[],"OutletBoundary"]
|
|
5
|
-
7:I[33705,[],"AsyncMetadataOutlet"]
|
|
6
|
-
9:I[21968,[],"ViewportBoundary"]
|
|
7
|
-
b:I[21968,[],"MetadataBoundary"]
|
|
8
|
-
c:"$Sreact.suspense"
|
|
9
|
-
e:I[6287,[],""]
|
|
10
|
-
:HL["/_next/static/css/87e01f779d555d04.css","style"]
|
|
11
|
-
0:{"P":null,"b":"vTfQfQnAWV_hFVZjWEYvZ","p":"","c":["","_not-found"],"i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/87e01f779d555d04.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],"$L2"]}],{"children":["/_not-found",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null,["$","$L5",null,{"children":["$L6",["$","$L7",null,{"promise":"$@8"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],[["$","$L9",null,{"children":"$La"}],null],["$","$Lb",null,{"children":["$","div",null,{"hidden":true,"children":["$","$c",null,{"fallback":null,"children":"$Ld"}]}]}]]}],false]],"m":"$undefined","G":["$e",[]],"s":false,"S":true}
|
|
12
|
-
a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
13
|
-
6:null
|
|
14
|
-
8:{"metadata":[["$","title","0",{"children":"Reflex"}],["$","meta","1",{"name":"description","content":"Local-first knowledge base built by an agent."}]],"error":null,"digest":"$undefined"}
|
|
15
|
-
d:"$8:metadata"
|
|
16
|
-
f:I[22438,["4400","static/chunks/4400-cdb1f7913ae34e09.js","1217","static/chunks/1217-407174d9b164a499.js","5097","static/chunks/5097-f07f6aeee3f60a33.js","9045","static/chunks/9045-731ff0865352dd95.js","7177","static/chunks/app/layout-4fbf9f91ad45e221.js"],"AppSidebar"]
|
|
17
|
-
10:I[43450,["4400","static/chunks/4400-cdb1f7913ae34e09.js","1217","static/chunks/1217-407174d9b164a499.js","5097","static/chunks/5097-f07f6aeee3f60a33.js","9045","static/chunks/9045-731ff0865352dd95.js","7177","static/chunks/app/layout-4fbf9f91ad45e221.js"],"Toaster"]
|
|
18
|
-
2:["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"children":[["$","div",null,{"className":"h-screen flex","children":[["$","$Lf",null,{"initialRoots":[]}],["$","main",null,{"className":"flex-1 min-w-0 flex flex-col","children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]}]]}],["$","$L10",null,{"richColors":true,"closeButton":true}]]}]}]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html><!--vTfQfQnAWV_hFVZjWEYvZ--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-87b4bb79fdc48563.js"/><script src="/_next/static/chunks/6fe292aa-7126ff9d6732e864.js" async=""></script><script src="/_next/static/chunks/146-ccee3b26755b68c8.js" async=""></script><script src="/_next/static/chunks/main-app-ebe67847147d19aa.js" async=""></script><title>Reflex</title><meta name="description" content="Local-first knowledge base built by an agent."/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><script src="/_next/static/chunks/webpack-87b4bb79fdc48563.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n4:I[21968,[],\"OutletBoundary\"]\n6:I[33705,[],\"AsyncMetadataOutlet\"]\n8:I[21968,[],\"ViewportBoundary\"]\na:I[21968,[],\"MetadataBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[6287,[],\"\"]\n:HL[\"/_next/static/css/87e01f779d555d04.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"vTfQfQnAWV_hFVZjWEYvZ\",\"p\":\"\",\"c\":[\"\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/87e01f779d555d04.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],\"$L2\"]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$L3\",null,[\"$\",\"$L4\",null,{\"children\":[\"$L5\",[\"$\",\"$L6\",null,{\"promise\":\"$@7\"}]]}]]}],{},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],null],[\"$\",\"$La\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$b\",null,{\"fallback\":null,\"children\":\"$Lc\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n5:null\n"])</script><script>self.__next_f.push([1,"7:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Reflex\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Local-first knowledge base built by an agent.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"c:\"$7:metadata\"\n"])</script><script>self.__next_f.push([1,"e:I[22438,[\"4400\",\"static/chunks/4400-cdb1f7913ae34e09.js\",\"1217\",\"static/chunks/1217-407174d9b164a499.js\",\"5097\",\"static/chunks/5097-f07f6aeee3f60a33.js\",\"9045\",\"static/chunks/9045-731ff0865352dd95.js\",\"7177\",\"static/chunks/app/layout-4fbf9f91ad45e221.js\"],\"AppSidebar\"]\nf:I[26957,[],\"\"]\n10:I[97369,[],\"\"]\n11:I[43450,[\"4400\",\"static/chunks/4400-cdb1f7913ae34e09.js\",\"1217\",\"static/chunks/1217-407174d9b164a499.js\",\"5097\",\"static/chunks/5097-f07f6aeee3f60a33.js\",\"9045\",\"static/chunks/9045-731ff0865352dd95.js\",\"7177\",\"static/chunks/app/layout-4fbf9f91ad45e221.js\"],\"Toaster\"]\n"])</script><script>self.__next_f.push([1,"2:[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"h-screen flex\",\"children\":[[\"$\",\"$Le\",null,{\"initialRoots\":[]}],[\"$\",\"main\",null,{\"className\":\"flex-1 min-w-0 flex flex-col\",\"children\":[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}],[\"$\",\"$L11\",null,{\"richColors\":true,\"closeButton\":true}]]}]}]\n"])</script><script>self.__next_f.push([1,"3:E{\"digest\":\"NEXT_REDIRECT;replace;/onboarding;307;\"}\n"])</script></body></html>
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
1:"$Sreact.fragment"
|
|
2
|
-
4:I[21968,[],"OutletBoundary"]
|
|
3
|
-
6:I[33705,[],"AsyncMetadataOutlet"]
|
|
4
|
-
8:I[21968,[],"ViewportBoundary"]
|
|
5
|
-
a:I[21968,[],"MetadataBoundary"]
|
|
6
|
-
b:"$Sreact.suspense"
|
|
7
|
-
d:I[6287,[],""]
|
|
8
|
-
:HL["/_next/static/css/87e01f779d555d04.css","style"]
|
|
9
|
-
0:{"P":null,"b":"vTfQfQnAWV_hFVZjWEYvZ","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/87e01f779d555d04.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],"$L2"]}],{"children":["__PAGE__",["$","$1","c",{"children":["$L3",null,["$","$L4",null,{"children":["$L5",["$","$L6",null,{"promise":"$@7"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$L8",null,{"children":"$L9"}],null],["$","$La",null,{"children":["$","div",null,{"hidden":true,"children":["$","$b",null,{"fallback":null,"children":"$Lc"}]}]}]]}],false]],"m":"$undefined","G":["$d",[]],"s":false,"S":true}
|
|
10
|
-
9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
11
|
-
5:null
|
|
12
|
-
7:{"metadata":[["$","title","0",{"children":"Reflex"}],["$","meta","1",{"name":"description","content":"Local-first knowledge base built by an agent."}]],"error":null,"digest":"$undefined"}
|
|
13
|
-
c:"$7:metadata"
|
|
14
|
-
e:I[22438,["4400","static/chunks/4400-cdb1f7913ae34e09.js","1217","static/chunks/1217-407174d9b164a499.js","5097","static/chunks/5097-f07f6aeee3f60a33.js","9045","static/chunks/9045-731ff0865352dd95.js","7177","static/chunks/app/layout-4fbf9f91ad45e221.js"],"AppSidebar"]
|
|
15
|
-
f:I[26957,[],""]
|
|
16
|
-
10:I[97369,[],""]
|
|
17
|
-
11:I[43450,["4400","static/chunks/4400-cdb1f7913ae34e09.js","1217","static/chunks/1217-407174d9b164a499.js","5097","static/chunks/5097-f07f6aeee3f60a33.js","9045","static/chunks/9045-731ff0865352dd95.js","7177","static/chunks/app/layout-4fbf9f91ad45e221.js"],"Toaster"]
|
|
18
|
-
2:["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"children":[["$","div",null,{"className":"h-screen flex","children":[["$","$Le",null,{"initialRoots":[]}],["$","main",null,{"className":"flex-1 min-w-0 flex flex-col","children":["$","$Lf",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L10",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}],["$","$L11",null,{"richColors":true,"closeButton":true}]]}]}]
|
|
19
|
-
3:E{"digest":"NEXT_REDIRECT;replace;/onboarding;307;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=1986,exports.ids=[1986],exports.modules={17640:(a,b,c)=>{c.d(b,{M:()=>o,D:()=>p});var d=c(73024),e=c(76760),f=c.n(e),g=c(14126);let h=g.Ik({"claude-code":g.Ik({enabled:g.zM().default(!0)}),codex:g.Ik({enabled:g.zM().default(!0)}),ollama:g.Ik({enabled:g.zM().default(!0),baseUrl:g.Yj().url().default("http://localhost:11434")})}),i=g.Ik({harness:g.k5(["claude-code","codex","ollama"]),model:g.Yj().min(1),allowedTools:g.YO(g.Yj()).default([])}),j=g.Ik({enabled:g.zM().default(!0),maxDimension:g.ai().int().min(256).max(8192).default(2e3),quality:g.ai().int().min(40).max(100).default(85),format:g.k5(["auto","jpeg","webp","original"]).default("auto")}),k=g.Ik({version:g.eu(1).default(1),language:g.Yj().min(1).default("english"),onboardedAt:g.Yj().optional(),userName:g.Yj().default(""),timezone:g.Yj().default(""),uiMode:g.k5(["simple","advanced"]).default("simple"),imageProcessing:j.default({enabled:!0,maxDimension:2e3,quality:85,format:"auto"}),harnesses:h.default({"claude-code":{enabled:!0},codex:{enabled:!0},ollama:{enabled:!0,baseUrl:"http://localhost:11434"}}),assignments:g.Ik({analyze:i,chat:i,rag:i,embed:i,quick:i}).default({analyze:{harness:"claude-code",model:"claude-opus-4-7",allowedTools:["Read","Write","Edit","LS","Glob","Grep","WebSearch","WebFetch"]},chat:{harness:"claude-code",model:"claude-sonnet-4-6",allowedTools:["Read","LS","Glob","Grep","WebSearch","WebFetch"]},rag:{harness:"ollama",model:"llama3.1:8b",allowedTools:[]},embed:{harness:"ollama",model:"nomic-embed-text",allowedTools:[]},quick:{harness:"claude-code",model:"claude-haiku-4-5",allowedTools:[]}}),mapServices:g.Ik({enabled:g.YO(g.Yj()).default(["google","yandex","apple","osm"])}).default({enabled:["google","yandex","apple","osm"]}),ngrok:g.Ik({authtoken:g.Yj().default(""),apiKey:g.Yj().default(""),domain:g.Yj().default(""),port:g.ai().int().min(1).max(65535).default(3210)}).default({authtoken:"",apiKey:"",domain:"",port:3210})}),l=k.parse({}),m=(0,c(29163)._)(),n=f().join(m,"settings.json");async function o(){try{let a=await d.promises.readFile(n,"utf8"),b=k.safeParse(JSON.parse(a));if(!b.success)return l;return b.data}catch(b){var a;if("object"==typeof(a=b)&&null!==a&&"code"in a&&"ENOENT"===a.code)return l;throw b}}async function p(a){let b=k.parse(a);await d.promises.mkdir(m,{recursive:!0}),await d.promises.writeFile(n,JSON.stringify(b,null,2)+"\n","utf8")}},18746:(a,b,c)=>{c.d(b,{O1:()=>p,Gh:()=>q,AZ:()=>o,rD:()=>r,summarizeYoutubeAction:()=>n});var d=c(31776);c(428);var e=c(43180);let f=globalThis.__reflexGeminiModelsCache??new Map;async function g(a){let b,c=await (0,e.CG)("gemini");if(!c)throw Error("Gemini API key not configured");let d=c.slice(0,16),g=f.get(d);if(!a?.refresh&&g&&Date.now()-g.fetchedAt<36e5)return g.models;let i=[];do{let a=new URL("https://generativelanguage.googleapis.com/v1beta/models");a.searchParams.set("key",c),a.searchParams.set("pageSize","100"),b&&a.searchParams.set("pageToken",b);let d=await fetch(a.toString(),{headers:{Accept:"application/json"}});if(!d.ok){let a=await d.text();throw Error(`models.list HTTP ${d.status}: ${a.slice(0,500)}`)}let e=await d.json();for(let a of e.models??[]){if(!a.name)continue;let b=a.supportedGenerationMethods??[];if(!b.includes("generateContent"))continue;let c=a.name.toLowerCase();!c.includes("embedding")&&(c.includes("aqa")||i.push({name:a.name,id:a.name.replace(/^models\//,""),...a.displayName?{displayName:a.displayName}:{},...a.description?{description:a.description}:{},...void 0!==a.inputTokenLimit?{inputTokenLimit:a.inputTokenLimit}:{},...void 0!==a.outputTokenLimit?{outputTokenLimit:a.outputTokenLimit}:{},supportedGenerationMethods:b}))}b=e.nextPageToken}while(b);return i.sort(h),f.set(d,{fetchedAt:Date.now(),models:i}),i}function h(a,b){let c=i(a.id),d=i(b.id);if(c!==d)return c-d;let e=j(a.id),f=j(b.id);return e!==f?f-e:a.id.localeCompare(b.id)}function i(a){return a.endsWith("flash-latest")?0:a.includes("flash")&&!a.includes("lite")?1:a.includes("flash-lite")?2:a.endsWith("pro-latest")||a.includes("pro")?3:4}function j(a){let b=/gemini-(\d+)\.(\d+)/.exec(a);return b?100*Number(b[1])+Number(b[2]):0}async function k(a="general"){let b=await (0,e.$L)("gemini");if("video"===a&&b?.videoModel)return b.videoModel;if(b?.model)return b.model;try{let a=await g();if(a.length>0)return a[0].id}catch{}return"gemini-flash-latest"}async function l(a){let b=`https://generativelanguage.googleapis.com/v1beta/models/${encodeURIComponent(a.model)}:generateContent?key=${encodeURIComponent(a.apiKey)}`,c=await fetch(b,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contents:a.contents,...a.generationConfig?{generationConfig:a.generationConfig}:{}})}),d=await c.text();if(!c.ok)throw Error(`Gemini HTTP ${c.status}: ${d.slice(0,800)}`);let e=JSON.parse(d);if(e.promptFeedback?.blockReason)throw Error(`Gemini blocked: ${e.promptFeedback.blockReason}`);return{text:(e.candidates??[]).flatMap(a=>a.content?.parts??[]).map(a=>a.text??"").filter(Boolean).join("\n").trim(),raw:e}}globalThis.__reflexGeminiModelsCache=f;var m=c(17640);async function n(a){var b;let c=await (0,e.CG)("gemini");if(!c)return{ok:!1,needsKey:!0,error:"Gemini API key не сохранён — введи его, чтобы суммаризировать видео."};let d=(await (0,m.M)()).language??"russian",f=a.prompt?.trim()||(b=d,/russ/i.test(b)||/рус/i.test(b)?"Сделай структурированную выжимку этого YouTube-видео:\n\n1. Один абзац — о чём видео целиком и для кого.\n2. Главные тезисы списком с тайм-кодами вида `[mm:ss]`.\n3. Ключевые цитаты (если есть запоминающиеся фразы) — с тайм-кодами.\n4. Если показаны диаграммы / схемы / код — кратко опиши что в них.\n5. Вывод 1-3 предложения: главное, что стоит унести.\n\nПиши на русском, лаконично. Без воды.":"Produce a structured summary of this YouTube video:\n\n1. One paragraph — what the video is about and who it's for.\n2. Main points as a bulleted list with `[mm:ss]` timestamps.\n3. Notable quotes (if any) with timestamps.\n4. If diagrams / slides / code are shown — briefly describe them.\n5. 1-3 sentence takeaway.\n\nBe concise. No filler."),g=a.modelOverride?.trim()||await k("video");try{let{text:b}=await l({model:g,apiKey:c,contents:[{parts:[{file_data:{file_uri:a.url,mime_type:"video/*"}},{text:f}]}]});if(!b)return{ok:!1,error:"Gemini вернул пустой ответ — возможно видео недоступно или приватное."};return{ok:!0,text:b,model:g}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function o(a){try{if(!a.trim())return{ok:!1,error:"API key is empty"};return await (0,e.Pc)("gemini",a),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function p(a){return{ok:!0,present:await (0,e.hasApiKey)(a)}}async function q(a=!1){try{let b=await g({refresh:a});return{ok:!0,models:b.map(a=>({id:a.id,...a.displayName?{displayName:a.displayName}:{},...a.description?{description:a.description}:{},...void 0!==a.inputTokenLimit?{inputTokenLimit:a.inputTokenLimit}:{},...void 0!==a.outputTokenLimit?{outputTokenLimit:a.outputTokenLimit}:{}})),currentModel:await k("general"),currentVideoModel:await k("video")}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}async function r(a){try{return await (0,e.ND)("gemini",a),{ok:!0}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a)}}}(0,c(97364).D)([n,o,p,q,r]),(0,d.A)(n,"40bdf5387ecda8d30ee1ae616c85733f882df67754",null),(0,d.A)(o,"40edcdfb0c67ebf35498a6aff6d1926081f669f235",null),(0,d.A)(p,"40bfac1a21882e9becc8d3d3f679a0e378b921251d",null),(0,d.A)(q,"40ae168c85160b1fbef7c1573a6aed3055a2c56793",null),(0,d.A)(r,"40c38f628b5ec89e9c9abedc73cf8d081dc1f86a8c",null)},43180:(a,b,c)=>{c.d(b,{$L:()=>j,CG:()=>k,ND:()=>n,Pc:()=>m,hasApiKey:()=>o});var d=c(73024),e=c(76760),f=c.n(e),g=c(29163);let h=f().join((0,g._)(),"api-keys");function i(a){return f().join(h,`${a}.json`)}async function j(a){try{let b=await d.promises.readFile(i(a),"utf8"),c=JSON.parse(b);if("string"!=typeof c.apiKey||0===c.apiKey.length)return null;return{apiKey:c.apiKey,..."string"==typeof c.model?{model:c.model}:{},..."string"==typeof c.videoModel?{videoModel:c.videoModel}:{},updatedAt:"string"==typeof c.updatedAt?c.updatedAt:new Date().toISOString()}}catch{return null}}async function k(a){let b=await j(a);return b?.apiKey??null}async function l(a,b){let c=i(a);await d.promises.mkdir(f().dirname(c),{recursive:!0}),await d.promises.writeFile(c,JSON.stringify(b,null,2)+"\n",{encoding:"utf8",mode:384});try{await d.promises.chmod(c,384)}catch{}}async function m(a,b){let c=await j(a);await l(a,{...c??{},apiKey:b.trim(),updatedAt:new Date().toISOString()})}async function n(a,b){let c=await j(a);if(!c)throw Error(`API key for "${a}" is not saved`);let d={apiKey:c.apiKey,updatedAt:new Date().toISOString()},e=void 0===b.model?c.model:b.model??void 0,f=void 0===b.videoModel?c.videoModel:b.videoModel??void 0;e&&(d.model=e),f&&(d.videoModel=f),await l(a,d)}async function o(a){return await k(a)!==null}},49353:(a,b,c)=>{c.d(b,{j:()=>j});var d=c(73024),e=c(76760),f=c.n(e),g=c(30192),h=c.n(g),i=c(13474);async function j(a){var b;let{rootPath:c,directive:e,provenance:g}=a,j=k(e.kind)||"note",m=new Date().toISOString().slice(0,10),n=((b=e.date)&&/^\d{4}-\d{2}-\d{2}$/.test(b)?b:null)??m,o=k(e.slug&&e.slug.trim()?e.slug:e.title)||"entry",p=`${n}-${o}`,q=f().join((0,i.FF)(c),j);await d.promises.mkdir(q,{recursive:!0});let r=await l(q,p,".md"),s={title:e.title,kind:j,date:n,version:1,...e.meta&&"object"==typeof e.meta?e.meta:{}};g&&(s.createdBy=`${g.kind}:${g.id}${g.version?"@"+g.version:""}`);let t=(e.body??"").replace(/\r\n/g,"\n").trimEnd(),u=h().stringify(t?t+"\n":"",s);await d.promises.writeFile(r,u,"utf8");let v=f().relative((0,i.FF)(c),r).split(f().sep).join("/");return{kind:j,title:e.title,relPath:v,absPath:r}}function k(a){return a.normalize("NFKD").toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,60)}async function l(a,b,c){let d=f().join(a,b+c),e=1;for(;await m(d);){if(e>99){d=f().join(a,`${b}-${Date.now().toString(36)}${c}`);break}d=f().join(a,`${b}-${++e}${c}`)}return d}async function m(a){try{return await d.promises.access(a),!0}catch{return!1}}}};
|