@agent-native/core 0.122.0 → 0.122.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -12
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +9 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/client.ts +57 -4
- package/corpus/core/src/client/settings/SettingsPanel.tsx +9 -9
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +12 -2
- package/corpus/core/src/extensions/url-safety.ts +67 -4
- package/corpus/core/src/templates/chat/app/components/layout/Sidebar.tsx +0 -7
- package/corpus/core/src/templates/default/app/root.tsx +1 -1
- package/corpus/core/src/templates/default/public/manifest.json +2 -2
- package/corpus/core/src/vite/client.ts +64 -3
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +1 -23
- package/corpus/templates/analytics/app/routes/_index.tsx +1 -1
- package/corpus/templates/analytics/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/analytics/package.json +1 -1
- package/corpus/templates/analytics/public/manifest.json +1 -1
- package/corpus/templates/analytics/server/plugins/auth.ts +1 -1
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +0 -2
- package/corpus/templates/assets/app/routes/_index.tsx +1 -1
- package/corpus/templates/assets/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/assets/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/assets/server/plugins/auth.ts +1 -1
- package/corpus/templates/brain/app/lib/brain.ts +0 -7
- package/corpus/templates/brain/app/routes/_index.tsx +1 -2
- package/corpus/templates/brain/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/brain/package.json +1 -1
- package/corpus/templates/brain/public/manifest.json +1 -1
- package/corpus/templates/brain/server/plugins/auth.ts +1 -1
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +0 -6
- package/corpus/templates/calendar/app/routes/_app._index.tsx +1 -1
- package/corpus/templates/calendar/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/calendar/package.json +1 -1
- package/corpus/templates/calendar/public/manifest.json +1 -1
- package/corpus/templates/calendar/server/plugins/auth.ts +1 -1
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +0 -7
- package/corpus/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/clips/actions/import-loom-recording.ts +53 -98
- package/corpus/templates/clips/actions/lib/loom-import-job.ts +260 -0
- package/corpus/templates/clips/app/components/library/library-layout.tsx +0 -7
- package/corpus/templates/clips/app/routes/_app.library._index.tsx +1 -1
- package/corpus/templates/clips/app/routes/_index.tsx +1 -1
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +6 -0
- package/corpus/templates/clips/app/routes/record.tsx +5 -0
- package/corpus/templates/clips/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/clips/server/db/schema.ts +2 -0
- package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +2 -1
- package/corpus/templates/clips/server/plugins/auth.ts +1 -1
- package/corpus/templates/clips/server/plugins/db.ts +8 -0
- package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +56 -3
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -39
- package/corpus/templates/content/app/routes/_app._index.tsx +1 -2
- package/corpus/templates/content/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/content/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/content/package.json +1 -1
- package/corpus/templates/content/public/manifest.json +1 -1
- package/corpus/templates/content/server/plugins/auth.ts +1 -1
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +0 -2
- package/corpus/templates/design/app/routes/_index.tsx +1 -1
- package/corpus/templates/design/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/design/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/design/server/plugins/auth.ts +1 -1
- package/corpus/templates/dispatch/app/dispatch-extensions.tsx +1 -10
- package/corpus/templates/dispatch/app/routes/overview.tsx +1 -1
- package/corpus/templates/dispatch/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/dispatch/package.json +1 -1
- package/corpus/templates/dispatch/public/manifest.json +1 -1
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +0 -35
- package/corpus/templates/forms/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/forms/package.json +1 -1
- package/corpus/templates/forms/public/manifest.json +1 -1
- package/corpus/templates/forms/server/plugins/auth.ts +1 -1
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +0 -2
- package/corpus/templates/macros/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/macros/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/macros/package.json +1 -1
- package/corpus/templates/macros/server/plugins/auth.ts +2 -2
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +0 -39
- package/corpus/templates/mail/app/routes/$view.$threadId.tsx +1 -1
- package/corpus/templates/mail/app/routes/$view.tsx +1 -1
- package/corpus/templates/mail/app/routes/_index.tsx +1 -1
- package/corpus/templates/mail/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/mail/package.json +1 -1
- package/corpus/templates/mail/public/manifest.json +1 -1
- package/corpus/templates/mail/server/plugins/auth.ts +1 -1
- package/corpus/templates/plan/agent-native.app-skill.json +1 -1
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +4 -9
- package/corpus/templates/plan/app/lib/app-config.ts +1 -1
- package/corpus/templates/plan/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/plan/package.json +1 -1
- package/corpus/templates/plan/public/manifest.json +1 -1
- package/corpus/templates/plan/server/plugins/auth.ts +1 -1
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +0 -2
- package/corpus/templates/slides/app/routes/_index.tsx +1 -1
- package/corpus/templates/slides/changelog/2026-07-25-app-branding-now-uses-the-product-name-without-the-agent-nat.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/templates/slides/package.json +1 -1
- package/corpus/templates/slides/public/manifest.json +1 -1
- package/corpus/templates/slides/server/plugins/auth.ts +1 -1
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +58 -4
- package/dist/a2a/client.js.map +1 -1
- package/dist/client/settings/SettingsPanel.js +9 -9
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +7 -4
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/extensions/url-safety.d.ts +9 -16
- package/dist/extensions/url-safety.d.ts.map +1 -1
- package/dist/extensions/url-safety.js +48 -4
- package/dist/extensions/url-safety.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +3 -3
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +0 -7
- package/dist/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/dist/templates/default/app/root.tsx +1 -1
- package/dist/templates/default/public/manifest.json +2 -2
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +64 -1
- package/dist/vite/client.js.map +1 -1
- package/package.json +1 -1
- package/src/a2a/client.ts +57 -4
- package/src/client/settings/SettingsPanel.tsx +9 -9
- package/src/client/settings/SettingsTabsPage.tsx +12 -2
- package/src/extensions/url-safety.ts +67 -4
- package/src/templates/chat/app/components/layout/Sidebar.tsx +0 -7
- package/src/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/src/templates/default/app/root.tsx +1 -1
- package/src/templates/default/public/manifest.json +2 -2
- package/src/vite/client.ts +64 -3
|
@@ -6,7 +6,7 @@ import { LibraryGrid } from "@/components/library/library-grid";
|
|
|
6
6
|
import { usePageHeaderLayout } from "@/components/library/page-header";
|
|
7
7
|
import { Button } from "@/components/ui/button";
|
|
8
8
|
|
|
9
|
-
const SEO_TITLE = "
|
|
9
|
+
const SEO_TITLE = "Clips - Open Source screen recorder";
|
|
10
10
|
const SEO_DESCRIPTION =
|
|
11
11
|
"Open Source screen recorder and meeting-notes app with AI transcripts, summaries, search, dictation, and agent-readable share links.";
|
|
12
12
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DefaultSpinner } from "@agent-native/core/client/ui";
|
|
2
2
|
import { redirect, type LoaderFunctionArgs } from "react-router";
|
|
3
3
|
|
|
4
|
-
const SEO_TITLE = "
|
|
4
|
+
const SEO_TITLE = "Clips - Open Source screen recorder";
|
|
5
5
|
const SEO_DESCRIPTION =
|
|
6
6
|
"Open Source screen recorder and meeting-notes app with AI transcripts, summaries, search, dictation, and agent-readable share links.";
|
|
7
7
|
|
|
@@ -596,6 +596,12 @@ export default function RecordingPage() {
|
|
|
596
596
|
});
|
|
597
597
|
return;
|
|
598
598
|
}
|
|
599
|
+
if (retryingLoomImport && result?.status === "processing") {
|
|
600
|
+
// Download + reupload now run as a background job; this request only
|
|
601
|
+
// confirms the retry was accepted, not that the clip is ready yet.
|
|
602
|
+
toast.info(t("recordingPage.importingLoom"));
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
599
605
|
toast.success(
|
|
600
606
|
retryingLoomImport
|
|
601
607
|
? t("recordingPage.loomImportResumed")
|
|
@@ -1850,6 +1850,11 @@ export default function RecordRoute() {
|
|
|
1850
1850
|
description: t("recordRoute.connectStorageToRetryLoom"),
|
|
1851
1851
|
duration: 12_000,
|
|
1852
1852
|
});
|
|
1853
|
+
} else if (result?.status === "processing") {
|
|
1854
|
+
// The video download + reupload run as a background job (see
|
|
1855
|
+
// import-loom-recording.ts) so this request stays fast regardless of
|
|
1856
|
+
// Loom video length; the recording page polls until it is ready.
|
|
1857
|
+
toast.info(t("recordingPage.importingLoom"));
|
|
1853
1858
|
} else {
|
|
1854
1859
|
showSavedToast(
|
|
1855
1860
|
t("recordRoute.loomImported"),
|
|
@@ -166,6 +166,8 @@ export const recordings = table("recordings", {
|
|
|
166
166
|
.default("uploading"),
|
|
167
167
|
uploadProgress: integer("upload_progress").notNull().default(0),
|
|
168
168
|
failureReason: text("failure_reason"),
|
|
169
|
+
loomImportClaimId: text("loom_import_claim_id"),
|
|
170
|
+
loomImportClaimedAt: text("loom_import_claimed_at"),
|
|
169
171
|
|
|
170
172
|
// Non-destructive edits: JSON `{ trims: [{startMs,endMs,excluded}], blurs: [...], speed: [...] }`
|
|
171
173
|
editsJson: text("edits_json").notNull().default("{}"),
|
|
@@ -7,7 +7,7 @@ export default createAuthPlugin({
|
|
|
7
7
|
// callback can handle both normal sign-in and the Calendar connect flow.
|
|
8
8
|
mountGoogleOAuthRoutes: false,
|
|
9
9
|
marketing: {
|
|
10
|
-
appName: "
|
|
10
|
+
appName: "Clips",
|
|
11
11
|
tagline:
|
|
12
12
|
"Your AI agent transcribes, summarizes, and searches everything you record alongside you.",
|
|
13
13
|
features: [
|
|
@@ -873,6 +873,14 @@ const migrations = runMigrations(
|
|
|
873
873
|
`CREATE INDEX IF NOT EXISTS recording_agent_views_recording_idx ON recording_agent_views (recording_id, last_seen_at)`,
|
|
874
874
|
].join("; "),
|
|
875
875
|
},
|
|
876
|
+
{
|
|
877
|
+
version: 52,
|
|
878
|
+
name: "recording-loom-import-claim-lease",
|
|
879
|
+
sql: [
|
|
880
|
+
`ALTER TABLE recordings ADD COLUMN IF NOT EXISTS loom_import_claim_id TEXT`,
|
|
881
|
+
`ALTER TABLE recordings ADD COLUMN IF NOT EXISTS loom_import_claimed_at TEXT`,
|
|
882
|
+
].join("; "),
|
|
883
|
+
},
|
|
876
884
|
],
|
|
877
885
|
{ table: "clips_migrations" },
|
|
878
886
|
);
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
|
|
1
3
|
import {
|
|
2
4
|
runWithRequestContext,
|
|
3
5
|
verifyScopedAgentAccessToken,
|
|
4
6
|
} from "@agent-native/core/server";
|
|
5
|
-
import { eq } from "drizzle-orm";
|
|
7
|
+
import { and, eq, isNull, lt, or } from "drizzle-orm";
|
|
6
8
|
import {
|
|
7
9
|
defineEventHandler,
|
|
8
10
|
readBody,
|
|
@@ -14,6 +16,7 @@ import { z } from "zod";
|
|
|
14
16
|
import exportToBrain from "../../../../actions/export-to-brain.js";
|
|
15
17
|
import finalizeRecording from "../../../../actions/finalize-recording.js";
|
|
16
18
|
import { ensureRecordingSeekable } from "../../../../actions/lib/ensure-seekable-video.js";
|
|
19
|
+
import { runLoomImportJob } from "../../../../actions/lib/loom-import-job.js";
|
|
17
20
|
import requestTranscript from "../../../../actions/request-transcript.js";
|
|
18
21
|
import { getDb, schema } from "../../../db/index.js";
|
|
19
22
|
import {
|
|
@@ -24,13 +27,21 @@ import {
|
|
|
24
27
|
|
|
25
28
|
const bodySchema = z.object({
|
|
26
29
|
recordingId: z.string().min(1).max(200),
|
|
27
|
-
kind: z.enum([
|
|
30
|
+
kind: z.enum([
|
|
31
|
+
"media-ready",
|
|
32
|
+
"seekable",
|
|
33
|
+
"transcript",
|
|
34
|
+
"brain-export",
|
|
35
|
+
"loom-import",
|
|
36
|
+
]),
|
|
28
37
|
token: z.string().min(1),
|
|
29
38
|
delayMs: z.number().int().min(0).max(30_000).optional(),
|
|
30
39
|
retryAttempt: z.number().int().min(1).max(10).optional(),
|
|
31
40
|
regenerate: z.boolean().optional(),
|
|
32
41
|
});
|
|
33
42
|
|
|
43
|
+
const LOOM_IMPORT_LEASE_MS = 30 * 60 * 1000;
|
|
44
|
+
|
|
34
45
|
export default defineEventHandler(async (event: H3Event) => {
|
|
35
46
|
const parsed = bodySchema.safeParse(await readBody(event).catch(() => null));
|
|
36
47
|
if (!parsed.success) {
|
|
@@ -63,7 +74,8 @@ export default defineEventHandler(async (event: H3Event) => {
|
|
|
63
74
|
setResponseStatus(event, 404);
|
|
64
75
|
return { ok: false, error: "Recording not found" };
|
|
65
76
|
}
|
|
66
|
-
const requiredStatus =
|
|
77
|
+
const requiredStatus =
|
|
78
|
+
kind === "media-ready" || kind === "loom-import" ? "processing" : "ready";
|
|
67
79
|
if (recording.status !== requiredStatus) {
|
|
68
80
|
return {
|
|
69
81
|
ok: true,
|
|
@@ -112,6 +124,47 @@ export default defineEventHandler(async (event: H3Event) => {
|
|
|
112
124
|
return { ok: true, kind, result };
|
|
113
125
|
}
|
|
114
126
|
|
|
127
|
+
if (kind === "loom-import") {
|
|
128
|
+
const claimId = randomUUID();
|
|
129
|
+
const claimStartedAt = new Date().toISOString();
|
|
130
|
+
const claimExpiredBefore = new Date(
|
|
131
|
+
Date.now() - LOOM_IMPORT_LEASE_MS,
|
|
132
|
+
).toISOString();
|
|
133
|
+
const [claimed] = await getDb()
|
|
134
|
+
.update(schema.recordings)
|
|
135
|
+
.set({
|
|
136
|
+
loomImportClaimId: claimId,
|
|
137
|
+
loomImportClaimedAt: claimStartedAt,
|
|
138
|
+
})
|
|
139
|
+
.where(
|
|
140
|
+
and(
|
|
141
|
+
eq(schema.recordings.id, recordingId),
|
|
142
|
+
eq(schema.recordings.status, "processing"),
|
|
143
|
+
or(
|
|
144
|
+
isNull(schema.recordings.loomImportClaimId),
|
|
145
|
+
isNull(schema.recordings.loomImportClaimedAt),
|
|
146
|
+
lt(schema.recordings.loomImportClaimedAt, claimExpiredBefore),
|
|
147
|
+
),
|
|
148
|
+
),
|
|
149
|
+
)
|
|
150
|
+
.returning({ id: schema.recordings.id });
|
|
151
|
+
if (!claimed) {
|
|
152
|
+
return {
|
|
153
|
+
ok: true,
|
|
154
|
+
recordingId,
|
|
155
|
+
kind,
|
|
156
|
+
skipped: true,
|
|
157
|
+
reason: "loom-import-already-running",
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const result = await runLoomImportJob({
|
|
161
|
+
recordingId,
|
|
162
|
+
ownerEmail: recording.ownerEmail,
|
|
163
|
+
claimId,
|
|
164
|
+
});
|
|
165
|
+
return { ok: true, kind, result };
|
|
166
|
+
}
|
|
167
|
+
|
|
115
168
|
if (kind === "brain-export") {
|
|
116
169
|
const result = await exportToBrain.run({
|
|
117
170
|
recordingId,
|
|
@@ -34,7 +34,6 @@ import type {
|
|
|
34
34
|
} from "@shared/api";
|
|
35
35
|
import { CONTENT_DATABASE_PERSONAL_VIEW_OVERRIDES_VERSION } from "@shared/api";
|
|
36
36
|
import {
|
|
37
|
-
IconHierarchy2,
|
|
38
37
|
IconFolder,
|
|
39
38
|
IconFolderOpen,
|
|
40
39
|
IconPlus,
|
|
@@ -637,7 +636,6 @@ export function DocumentSidebar({
|
|
|
637
636
|
}, [setStoredCollapsedSections]);
|
|
638
637
|
const [removeLocalFilesDialogOpen, setRemoveLocalFilesDialogOpen] =
|
|
639
638
|
useState(false);
|
|
640
|
-
const agentActive = location.pathname.startsWith("/agent");
|
|
641
639
|
const settingsActive = location.pathname.startsWith("/settings");
|
|
642
640
|
const sensors = useSensors(
|
|
643
641
|
useSensor(PointerSensor, {
|
|
@@ -1326,23 +1324,6 @@ export function DocumentSidebar({
|
|
|
1326
1324
|
/>
|
|
1327
1325
|
);
|
|
1328
1326
|
|
|
1329
|
-
const renderAgentNavButton = () => (
|
|
1330
|
-
<Link
|
|
1331
|
-
to="/agent"
|
|
1332
|
-
className={cn(
|
|
1333
|
-
"flex h-8 w-full items-center gap-2 rounded-md px-2 text-sm",
|
|
1334
|
-
agentActive
|
|
1335
|
-
? "bg-accent text-accent-foreground"
|
|
1336
|
-
: "text-muted-foreground hover:bg-accent/50 hover:text-foreground",
|
|
1337
|
-
)}
|
|
1338
|
-
>
|
|
1339
|
-
<IconHierarchy2 size={15} className="shrink-0" />
|
|
1340
|
-
<span className="min-w-0 flex-1 truncate text-start">
|
|
1341
|
-
{t("settings.agentTitle")}
|
|
1342
|
-
</span>
|
|
1343
|
-
</Link>
|
|
1344
|
-
);
|
|
1345
|
-
|
|
1346
1327
|
const toggleSection = (id: SidebarSectionId) => {
|
|
1347
1328
|
setStoredCollapsedSections((current) => {
|
|
1348
1329
|
const normalized = normalizeCollapsedSections(current);
|
|
@@ -1881,22 +1862,6 @@ export function DocumentSidebar({
|
|
|
1881
1862
|
return (
|
|
1882
1863
|
<div className="agent-layout-left-drawer flex h-full w-12 flex-col items-center gap-1 border-e border-border bg-sidebar py-3 transition-[width] duration-200 ease-out">
|
|
1883
1864
|
{renderCollapsedNewButton()}
|
|
1884
|
-
<Tooltip>
|
|
1885
|
-
<TooltipTrigger asChild>
|
|
1886
|
-
<Link
|
|
1887
|
-
to="/agent"
|
|
1888
|
-
className={cn(
|
|
1889
|
-
"w-10 h-10 flex items-center justify-center rounded-lg hover:bg-accent",
|
|
1890
|
-
agentActive
|
|
1891
|
-
? "bg-accent text-accent-foreground"
|
|
1892
|
-
: "text-muted-foreground hover:text-foreground",
|
|
1893
|
-
)}
|
|
1894
|
-
>
|
|
1895
|
-
<IconHierarchy2 size={16} />
|
|
1896
|
-
</Link>
|
|
1897
|
-
</TooltipTrigger>
|
|
1898
|
-
<TooltipContent>{t("settings.agentTitle")}</TooltipContent>
|
|
1899
|
-
</Tooltip>
|
|
1900
1865
|
<Tooltip>
|
|
1901
1866
|
<TooltipTrigger asChild>
|
|
1902
1867
|
<Link
|
|
@@ -2091,10 +2056,7 @@ export function DocumentSidebar({
|
|
|
2091
2056
|
</ScrollArea>
|
|
2092
2057
|
|
|
2093
2058
|
<div className="shrink-0 px-3 py-2">
|
|
2094
|
-
<div className="space-y-1">
|
|
2095
|
-
{renderAgentNavButton()}
|
|
2096
|
-
{renderSettingsNavButton()}
|
|
2097
|
-
</div>
|
|
2059
|
+
<div className="space-y-1">{renderSettingsNavButton()}</div>
|
|
2098
2060
|
</div>
|
|
2099
2061
|
|
|
2100
2062
|
<div className="shrink-0">
|
|
@@ -7,8 +7,7 @@ import { QueryErrorState } from "@/components/QueryErrorState";
|
|
|
7
7
|
import { Skeleton } from "@/components/ui/skeleton";
|
|
8
8
|
import { useDocuments } from "@/hooks/use-documents";
|
|
9
9
|
|
|
10
|
-
const SEO_TITLE =
|
|
11
|
-
"Agent-Native Content - Open Source, agent-friendly Obsidian alternative";
|
|
10
|
+
const SEO_TITLE = "Content - Open Source, agent-friendly Obsidian alternative";
|
|
12
11
|
const SEO_DESCRIPTION =
|
|
13
12
|
"Open Source MDX editor for local docs, knowledge bases, and content systems, with custom blocks and agent-assisted editing.";
|
|
14
13
|
|
|
@@ -2,7 +2,7 @@ import { createAuthPlugin } from "@agent-native/core/server";
|
|
|
2
2
|
|
|
3
3
|
export default createAuthPlugin({
|
|
4
4
|
marketing: {
|
|
5
|
-
appName: "
|
|
5
|
+
appName: "Content",
|
|
6
6
|
tagline:
|
|
7
7
|
"Open-source Obsidian for MDX: your AI agent edits local docs, creates custom blocks, and organizes everything alongside you.",
|
|
8
8
|
features: [
|
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
IconPencil,
|
|
10
10
|
IconTemplate,
|
|
11
11
|
IconPalette,
|
|
12
|
-
IconHierarchy2,
|
|
13
12
|
IconSettings,
|
|
14
13
|
IconLayoutSidebarLeftCollapse,
|
|
15
14
|
IconLayoutSidebarLeftExpand,
|
|
@@ -37,7 +36,6 @@ const navItems = [
|
|
|
37
36
|
];
|
|
38
37
|
|
|
39
38
|
const bottomNavItems = [
|
|
40
|
-
{ icon: IconHierarchy2, labelKey: "settings.agentTitle", href: "/agent" },
|
|
41
39
|
{ icon: IconSettings, labelKey: "navigation.settings", href: "/settings" },
|
|
42
40
|
];
|
|
43
41
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { default } from "../pages/Index";
|
|
2
2
|
|
|
3
3
|
const SEO_TITLE =
|
|
4
|
-
"
|
|
4
|
+
"Design - Open Source AI design tool for agent-built prototypes";
|
|
5
5
|
const SEO_DESCRIPTION =
|
|
6
6
|
"Open Source AI design tool for creating, remixing, and sharing responsive prototypes, design systems, and coding handoffs.";
|
|
7
7
|
|
|
@@ -7,7 +7,7 @@ export default createAuthPlugin({
|
|
|
7
7
|
// still go through authenticated actions.
|
|
8
8
|
workspaceAppPublicPaths: ["/visual-edit", "/design", "/present"],
|
|
9
9
|
marketing: {
|
|
10
|
-
appName: "
|
|
10
|
+
appName: "Design",
|
|
11
11
|
tagline:
|
|
12
12
|
"Design and prototype by describing what you want. The AI agent turns your ideas into interactive, fully responsive designs in seconds.",
|
|
13
13
|
features: [
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { DispatchExtensionConfig } from "@agent-native/dispatch/components";
|
|
2
|
-
import { IconHierarchy2 } from "@tabler/icons-react";
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* Local Dispatch extensions for this generated workspace.
|
|
@@ -26,14 +25,6 @@ import { IconHierarchy2 } from "@tabler/icons-react";
|
|
|
26
25
|
* } satisfies DispatchExtensionConfig;
|
|
27
26
|
*/
|
|
28
27
|
export const dispatchExtensions = {
|
|
29
|
-
navItems: [
|
|
30
|
-
{
|
|
31
|
-
id: "agent",
|
|
32
|
-
to: "/agent",
|
|
33
|
-
label: "Manage agent",
|
|
34
|
-
icon: IconHierarchy2,
|
|
35
|
-
section: "operations",
|
|
36
|
-
},
|
|
37
|
-
],
|
|
28
|
+
navItems: [],
|
|
38
29
|
queryKeys: [],
|
|
39
30
|
} satisfies DispatchExtensionConfig;
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
import type { LoaderFunctionArgs } from "react-router";
|
|
7
7
|
|
|
8
8
|
const SEO_TITLE =
|
|
9
|
-
"
|
|
9
|
+
"Dispatch - Open Source workspace control plane for AI agents";
|
|
10
10
|
const SEO_DESCRIPTION =
|
|
11
11
|
"Open Source workspace control plane for AI agents to manage apps, secrets, approvals, messages, jobs, and cross-app delegation.";
|
|
12
12
|
|
|
@@ -17,7 +17,6 @@ import {
|
|
|
17
17
|
IconMenu2,
|
|
18
18
|
IconX,
|
|
19
19
|
IconMessageCircle,
|
|
20
|
-
IconHierarchy2,
|
|
21
20
|
IconSettings,
|
|
22
21
|
IconForms,
|
|
23
22
|
IconLayoutSidebarLeftCollapse,
|
|
@@ -317,26 +316,6 @@ export function Sidebar() {
|
|
|
317
316
|
</Popover>
|
|
318
317
|
|
|
319
318
|
<div className="mt-auto flex flex-col items-center gap-1">
|
|
320
|
-
<Tooltip>
|
|
321
|
-
<TooltipTrigger asChild>
|
|
322
|
-
<Link
|
|
323
|
-
to="/agent"
|
|
324
|
-
aria-label={t("settings.agentTitle")}
|
|
325
|
-
className={cn(
|
|
326
|
-
"forms-sidebar-nav-item flex size-10 items-center justify-center rounded-lg active:scale-[0.96] transition-[background-color,box-shadow,color,transform]",
|
|
327
|
-
location.pathname.startsWith("/agent")
|
|
328
|
-
? "bg-accent text-accent-foreground"
|
|
329
|
-
: "text-muted-foreground hover:bg-accent/50 hover:text-foreground",
|
|
330
|
-
)}
|
|
331
|
-
>
|
|
332
|
-
<IconHierarchy2 className="h-4 w-4" />
|
|
333
|
-
</Link>
|
|
334
|
-
</TooltipTrigger>
|
|
335
|
-
<TooltipContent side="right">
|
|
336
|
-
{t("settings.agentTitle")}
|
|
337
|
-
</TooltipContent>
|
|
338
|
-
</Tooltip>
|
|
339
|
-
|
|
340
319
|
<Tooltip>
|
|
341
320
|
<TooltipTrigger asChild>
|
|
342
321
|
<Link
|
|
@@ -465,20 +444,6 @@ export function Sidebar() {
|
|
|
465
444
|
|
|
466
445
|
{/* Pinned nav + footer */}
|
|
467
446
|
<div className="shrink-0 px-3 py-1.5">
|
|
468
|
-
<Link
|
|
469
|
-
to="/agent"
|
|
470
|
-
onClick={() => isMobile && setMobileOpen(false)}
|
|
471
|
-
className={cn(
|
|
472
|
-
"forms-sidebar-nav-item flex min-h-[44px] w-full items-center gap-2.5 rounded-lg px-3 py-2 text-sm active:scale-[0.96] transition-[background-color,box-shadow,color,transform]",
|
|
473
|
-
location.pathname.startsWith("/agent")
|
|
474
|
-
? "bg-accent text-accent-foreground"
|
|
475
|
-
: "text-muted-foreground hover:bg-accent/50 hover:text-foreground",
|
|
476
|
-
)}
|
|
477
|
-
>
|
|
478
|
-
<IconHierarchy2 size={14} className="shrink-0" />
|
|
479
|
-
<span>{t("settings.agentTitle")}</span>
|
|
480
|
-
</Link>
|
|
481
|
-
|
|
482
447
|
<Link
|
|
483
448
|
to="/settings"
|
|
484
449
|
onClick={() => isMobile && setMobileOpen(false)}
|
|
@@ -13,7 +13,6 @@ import {
|
|
|
13
13
|
IconFlame,
|
|
14
14
|
IconLoader2,
|
|
15
15
|
IconChartBar,
|
|
16
|
-
IconHierarchy2,
|
|
17
16
|
IconSettings,
|
|
18
17
|
IconLayoutSidebarLeftCollapse,
|
|
19
18
|
IconLayoutSidebarLeftExpand,
|
|
@@ -46,7 +45,6 @@ const navItems = [
|
|
|
46
45
|
];
|
|
47
46
|
|
|
48
47
|
const bottomNavItems = [
|
|
49
|
-
{ icon: IconHierarchy2, labelKey: "settings.agentTitle", href: "/agent" },
|
|
50
48
|
{ icon: IconSettings, labelKey: "navigation.settings", href: "/settings" },
|
|
51
49
|
];
|
|
52
50
|
|
|
@@ -38,9 +38,9 @@ function getSupabase() {
|
|
|
38
38
|
const LOGIN_HTML = `<!DOCTYPE html>
|
|
39
39
|
<html lang="en"><head>
|
|
40
40
|
<meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
|
|
41
|
-
<title>
|
|
41
|
+
<title>Macros — Sign in</title>
|
|
42
42
|
<meta name="description" content="Log meals, exercises, and weight by typing or voice while the agent estimates calories and macros for you."/>
|
|
43
|
-
<meta property="og:title" content="
|
|
43
|
+
<meta property="og:title" content="Macros"/>
|
|
44
44
|
<meta property="og:description" content="Log meals, exercises, and weight by typing or voice while the agent estimates calories and macros for you."/>
|
|
45
45
|
<style>
|
|
46
46
|
*{margin:0;padding:0;box-sizing:border-box}
|