@agent-native/core 0.122.0 → 0.122.2
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 +5 -25
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +15 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/client.ts +57 -4
- package/corpus/core/src/agent/production-agent.ts +65 -1
- package/corpus/core/src/agent/run-store.ts +61 -1
- 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/server/builder-design-systems.ts +1 -1
- 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/.agents/skills/dashboard-management/SKILL.md +15 -0
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +1 -23
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/report-panel-window.ts +3 -3
- package/corpus/templates/analytics/app/routes/_index.tsx +1 -1
- package/corpus/templates/analytics/changelog/2026-07-25-analytics-dashboards-and-scheduled-reports-are-faster-and-mo.md +6 -0
- 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/db/schema.ts +12 -0
- package/corpus/templates/analytics/server/lib/dashboard-panel-query.ts +8 -4
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +136 -5
- package/corpus/templates/analytics/server/lib/dashboard-time-scope.ts +250 -1
- package/corpus/templates/analytics/server/lib/first-party-analytics-cache.ts +167 -0
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +34 -9
- package/corpus/templates/analytics/server/lib/first-party-dashboard-repair.ts +105 -23
- package/corpus/templates/analytics/server/lib/first-party-unbounded-panel-repair.ts +169 -0
- package/corpus/templates/analytics/server/plugins/auth.ts +1 -1
- package/corpus/templates/analytics/server/plugins/db.ts +41 -1
- package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +6 -3
- 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/actions/edit-design.ts +66 -27
- 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-design-edits-retry-concurrent-changes.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/design/server/source-workspace.ts +5 -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/.agents/skills/form-responses/SKILL.md +6 -4
- package/corpus/templates/forms/actions/create-form.ts +5 -1
- package/corpus/templates/forms/actions/export-responses.ts +22 -11
- package/corpus/templates/forms/actions/update-form.ts +5 -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-fields-can-be-created-without-ids.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-25-response-exports-use-file-storage.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/lib/validate-fields.ts +43 -0
- 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/actions/extract-pdf.ts +4 -4
- package/corpus/templates/slides/actions/import-file.ts +3 -4
- 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-gemini-image-models-updated.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-25-pdf-imports-tolerate-missing-canvas.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/handlers/image-providers/gemini.ts +5 -2
- package/corpus/templates/slides/server/lib/pdf-parse-setup.ts +150 -0
- 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/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +63 -1
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +49 -0
- package/dist/agent/run-store.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/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/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 +3 -3
- package/dist/observability/routes.d.ts +3 -3
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/builder-design-systems.js +1 -1
- package/dist/server/builder-design-systems.js.map +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 +3 -3
- package/src/a2a/client.ts +57 -4
- package/src/agent/production-agent.ts +65 -1
- package/src/agent/run-store.ts +61 -1
- 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/server/builder-design-systems.ts +1 -1
- 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
|
@@ -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)}
|
|
@@ -6,6 +6,49 @@
|
|
|
6
6
|
export const FIELD_ID_PATTERN = /^[A-Za-z0-9_-]+$/;
|
|
7
7
|
const CONDITIONAL_OPERATORS = new Set(["equals", "not_equals", "contains"]);
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Generates a safe id for a whole-array field replacement (create-form,
|
|
11
|
+
* update-form) when the model omits one — the #1 create-form failure in
|
|
12
|
+
* the 2026-07-25 reliability sweep ("field #1 has an invalid id undefined").
|
|
13
|
+
* Never used by patch-form-fields: there a missing id on an upsert op is
|
|
14
|
+
* ambiguous (new field vs. a forgotten reference to an existing one), so it
|
|
15
|
+
* must keep failing loud rather than risk silently creating a duplicate.
|
|
16
|
+
* Ids are slugified from `label` through the same FIELD_ID_PATTERN charset
|
|
17
|
+
* `assertValidFields` enforces, so a generated id can never fail that check.
|
|
18
|
+
*/
|
|
19
|
+
export function normalizeFieldIds(fields: unknown): unknown {
|
|
20
|
+
if (!Array.isArray(fields)) return fields;
|
|
21
|
+
const usedIds = new Set(
|
|
22
|
+
fields
|
|
23
|
+
.map((f) =>
|
|
24
|
+
f && typeof f === "object" ? (f as Record<string, unknown>).id : null,
|
|
25
|
+
)
|
|
26
|
+
.filter(
|
|
27
|
+
(id): id is string =>
|
|
28
|
+
typeof id === "string" && FIELD_ID_PATTERN.test(id),
|
|
29
|
+
),
|
|
30
|
+
);
|
|
31
|
+
return fields.map((field) => {
|
|
32
|
+
if (field == null || typeof field !== "object") return field;
|
|
33
|
+
const f = field as Record<string, unknown>;
|
|
34
|
+
if (typeof f.id === "string" && FIELD_ID_PATTERN.test(f.id)) return field;
|
|
35
|
+
const label = typeof f.label === "string" ? f.label : "";
|
|
36
|
+
const base =
|
|
37
|
+
label
|
|
38
|
+
.toLowerCase()
|
|
39
|
+
.replace(/[^a-z0-9_-]+/g, "_")
|
|
40
|
+
.replace(/^_+|_+$/g, "")
|
|
41
|
+
.slice(0, 40) || "field";
|
|
42
|
+
let candidate = base;
|
|
43
|
+
let suffix = 1;
|
|
44
|
+
while (usedIds.has(candidate)) {
|
|
45
|
+
candidate = `${base}_${++suffix}`;
|
|
46
|
+
}
|
|
47
|
+
usedIds.add(candidate);
|
|
48
|
+
return { ...f, id: candidate };
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
9
52
|
export function assertValidFields(fields: unknown): void {
|
|
10
53
|
if (!Array.isArray(fields)) {
|
|
11
54
|
throw new Error("fields must be an array");
|
|
@@ -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}
|
|
@@ -14,7 +14,6 @@ import { normalizeMailLabel } from "@shared/gmail-labels";
|
|
|
14
14
|
import type { Label } from "@shared/types";
|
|
15
15
|
import {
|
|
16
16
|
IconMenu2,
|
|
17
|
-
IconHierarchy2,
|
|
18
17
|
IconSettings,
|
|
19
18
|
IconSearch,
|
|
20
19
|
IconCheck,
|
|
@@ -1775,25 +1774,6 @@ function AppLayoutInner({ children }: AppLayoutProps) {
|
|
|
1775
1774
|
|
|
1776
1775
|
<div className="flex items-center justify-end gap-1 px-2 py-2">
|
|
1777
1776
|
<DevDatabaseLink />
|
|
1778
|
-
<Tooltip>
|
|
1779
|
-
<TooltipTrigger asChild>
|
|
1780
|
-
<Link
|
|
1781
|
-
to="/agent"
|
|
1782
|
-
onClick={closeSidebar}
|
|
1783
|
-
aria-label={t("settings.openAgentSettings")}
|
|
1784
|
-
className={cn(
|
|
1785
|
-
"flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground",
|
|
1786
|
-
location.pathname === "/agent" &&
|
|
1787
|
-
"bg-accent/60 text-foreground",
|
|
1788
|
-
)}
|
|
1789
|
-
>
|
|
1790
|
-
<IconHierarchy2 className="h-4 w-4" />
|
|
1791
|
-
</Link>
|
|
1792
|
-
</TooltipTrigger>
|
|
1793
|
-
<TooltipContent>
|
|
1794
|
-
{t("settings.openAgentSettings")}
|
|
1795
|
-
</TooltipContent>
|
|
1796
|
-
</Tooltip>
|
|
1797
1777
|
<Tooltip>
|
|
1798
1778
|
<TooltipTrigger asChild>
|
|
1799
1779
|
<Link
|
|
@@ -2196,25 +2176,6 @@ function StandardLayout({ children }: AppLayoutProps) {
|
|
|
2196
2176
|
<div className="flex items-center justify-end gap-1 px-2 py-2">
|
|
2197
2177
|
<DevDatabaseLink />
|
|
2198
2178
|
<div className="flex shrink-0 items-center gap-0.5">
|
|
2199
|
-
<Tooltip>
|
|
2200
|
-
<TooltipTrigger asChild>
|
|
2201
|
-
<Link
|
|
2202
|
-
to="/agent"
|
|
2203
|
-
onClick={() => setSidebarOpen(false)}
|
|
2204
|
-
aria-label={t("settings.openAgentSettings")}
|
|
2205
|
-
className={cn(
|
|
2206
|
-
"flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground",
|
|
2207
|
-
location.pathname === "/agent" &&
|
|
2208
|
-
"bg-accent/60 text-foreground",
|
|
2209
|
-
)}
|
|
2210
|
-
>
|
|
2211
|
-
<IconHierarchy2 className="h-4 w-4" />
|
|
2212
|
-
</Link>
|
|
2213
|
-
</TooltipTrigger>
|
|
2214
|
-
<TooltipContent>
|
|
2215
|
-
{t("settings.openAgentSettings")}
|
|
2216
|
-
</TooltipContent>
|
|
2217
|
-
</Tooltip>
|
|
2218
2179
|
<Tooltip>
|
|
2219
2180
|
<TooltipTrigger asChild>
|
|
2220
2181
|
<Link
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { InboxPage } from "@/pages/InboxPage";
|
|
2
2
|
|
|
3
3
|
const SEO_TITLE =
|
|
4
|
-
"
|
|
4
|
+
"Mail - Open Source AI email client and Superhuman alternative";
|
|
5
5
|
const SEO_DESCRIPTION =
|
|
6
6
|
"Open Source AI email client for Gmail triage, drafting, organization, follow-ups, and inbox workflows built around shared actions.";
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { InboxPage } from "@/pages/InboxPage";
|
|
2
2
|
|
|
3
3
|
const SEO_TITLE =
|
|
4
|
-
"
|
|
4
|
+
"Mail - Open Source AI email client and Superhuman alternative";
|
|
5
5
|
const SEO_DESCRIPTION =
|
|
6
6
|
"Open Source AI email client for Gmail triage, drafting, organization, follow-ups, and inbox workflows built around shared actions.";
|
|
7
7
|
|
|
@@ -3,7 +3,7 @@ import { redirect } from "react-router";
|
|
|
3
3
|
import { Spinner } from "@/components/ui/spinner";
|
|
4
4
|
|
|
5
5
|
const SEO_TITLE =
|
|
6
|
-
"
|
|
6
|
+
"Mail - Open Source AI email client and Superhuman alternative";
|
|
7
7
|
const SEO_DESCRIPTION =
|
|
8
8
|
"Open Source AI email client for Gmail triage, drafting, organization, follow-ups, and inbox workflows built around shared actions.";
|
|
9
9
|
|
|
@@ -26,7 +26,7 @@ export default createAuthPlugin({
|
|
|
26
26
|
"https://www.googleapis.com/auth/calendar.events",
|
|
27
27
|
],
|
|
28
28
|
marketing: {
|
|
29
|
-
appName: "
|
|
29
|
+
appName: "Mail",
|
|
30
30
|
tagline: "Your AI agent reads, drafts, and organizes email alongside you.",
|
|
31
31
|
features: [
|
|
32
32
|
"Replies that match your tone and style",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"id": "plans",
|
|
4
|
-
"displayName": "
|
|
4
|
+
"displayName": "Plan",
|
|
5
5
|
"description": "Generate and review coding-agent plans as structured visual documents with diagrams, wireframes, prototypes, annotations, share links, feedback, and HTML export.",
|
|
6
6
|
"hosted": {
|
|
7
7
|
"url": "https://plan.agent-native.com",
|
|
@@ -20,7 +20,6 @@ import {
|
|
|
20
20
|
type ChatHistoryItem,
|
|
21
21
|
} from "@agent-native/toolkit/chat-history";
|
|
22
22
|
import {
|
|
23
|
-
IconHierarchy2,
|
|
24
23
|
IconClipboardCheck,
|
|
25
24
|
IconEdit,
|
|
26
25
|
IconLayoutSidebarLeftCollapse,
|
|
@@ -57,19 +56,16 @@ const PLAN_CHAT_STORAGE_KEY = "plans";
|
|
|
57
56
|
|
|
58
57
|
const PLAN_BRANDING_CODE_CONTEXT = [
|
|
59
58
|
"The user is using the Plan app branding customization popover.",
|
|
60
|
-
"Make source-code changes for
|
|
59
|
+
"Make source-code changes for Plan branding in templates/plan.",
|
|
61
60
|
"Inspect the current brand surfaces first: app/lib/app-config.ts, app/components/layout/Sidebar.tsx, app/root.tsx metadata/icons, public brand assets, and app/global.css theme tokens.",
|
|
62
61
|
"Keep runtime plan data, stored plans, recaps, comments, and generated plan content unchanged unless the user explicitly asks for those data changes.",
|
|
63
62
|
"Use existing Plan styling, shadcn primitives, Tabler icons, and repo patterns. Keep changes tightly scoped.",
|
|
64
63
|
].join("\n");
|
|
65
64
|
|
|
66
65
|
function buildBrandingCustomizationMessage(request: string) {
|
|
67
|
-
return [
|
|
68
|
-
"
|
|
69
|
-
|
|
70
|
-
"Request:",
|
|
71
|
-
request,
|
|
72
|
-
].join("\n");
|
|
66
|
+
return ["Customize the Plan app branding.", "", "Request:", request].join(
|
|
67
|
+
"\n",
|
|
68
|
+
);
|
|
73
69
|
}
|
|
74
70
|
|
|
75
71
|
const navItems = [
|
|
@@ -78,7 +74,6 @@ const navItems = [
|
|
|
78
74
|
];
|
|
79
75
|
|
|
80
76
|
const bottomNavItems = [
|
|
81
|
-
{ icon: IconHierarchy2, labelKey: "settings.agentTitle", href: "/agent" },
|
|
82
77
|
{ icon: IconSettings, labelKey: "navigation.settings", href: "/settings" },
|
|
83
78
|
];
|
|
84
79
|
|
|
@@ -2,6 +2,8 @@ import fs from "fs";
|
|
|
2
2
|
|
|
3
3
|
import { parseArgs } from "@agent-native/core";
|
|
4
4
|
|
|
5
|
+
import { setupPdfParse } from "../server/lib/pdf-parse-setup.js";
|
|
6
|
+
|
|
5
7
|
export default async function (args: string[]) {
|
|
6
8
|
const { path: pdfPath } = parseArgs(args);
|
|
7
9
|
if (!pdfPath) {
|
|
@@ -10,12 +12,10 @@ export default async function (args: string[]) {
|
|
|
10
12
|
}
|
|
11
13
|
|
|
12
14
|
const buf = fs.readFileSync(pdfPath);
|
|
13
|
-
const {
|
|
14
|
-
const { PDFParse } = await import("pdf-parse");
|
|
15
|
-
PDFParse.setWorker(getData());
|
|
15
|
+
const { PDFParse, canvasFactory } = await setupPdfParse();
|
|
16
16
|
const pdf = new PDFParse({
|
|
17
17
|
data: new Uint8Array(buf),
|
|
18
|
-
CanvasFactory,
|
|
18
|
+
CanvasFactory: canvasFactory,
|
|
19
19
|
});
|
|
20
20
|
const result = await pdf.getText().finally(() => pdf.destroy());
|
|
21
21
|
const pages = result.pages || [];
|
|
@@ -14,6 +14,7 @@ import { z } from "zod";
|
|
|
14
14
|
import { getDb, schema } from "../server/db/index.js";
|
|
15
15
|
import { notifyClients } from "../server/handlers/decks.js";
|
|
16
16
|
import { upsertBuilderProxyDesignSystem } from "../server/lib/builder-design-system-proxy.js";
|
|
17
|
+
import { setupPdfParse } from "../server/lib/pdf-parse-setup.js";
|
|
17
18
|
import { readUserUploadedFile } from "./_uploaded-files.js";
|
|
18
19
|
|
|
19
20
|
const DEFAULT_MAX_SOURCE_CHARS = 60_000;
|
|
@@ -211,14 +212,12 @@ export default defineAction({
|
|
|
211
212
|
}
|
|
212
213
|
|
|
213
214
|
if (detectedFormat === "pdf") {
|
|
214
|
-
const {
|
|
215
|
-
const { PDFParse } = await import("pdf-parse");
|
|
216
|
-
PDFParse.setWorker(getData());
|
|
215
|
+
const { PDFParse, canvasFactory } = await setupPdfParse();
|
|
217
216
|
const { convertSectionsToSlides } =
|
|
218
217
|
await import("../server/handlers/import/html-converter.js");
|
|
219
218
|
const pdf = new PDFParse({
|
|
220
219
|
data: new Uint8Array(fileBuffer),
|
|
221
|
-
CanvasFactory,
|
|
220
|
+
CanvasFactory: canvasFactory,
|
|
222
221
|
});
|
|
223
222
|
const result = await pdf.getText().finally(() => pdf.destroy());
|
|
224
223
|
const pages = normalizePdfPages(result);
|
|
@@ -7,7 +7,6 @@ import { FeedbackButton } from "@agent-native/core/client/ui";
|
|
|
7
7
|
import { SidebarFooterActions } from "@agent-native/toolkit/app-shell";
|
|
8
8
|
import {
|
|
9
9
|
IconStack2,
|
|
10
|
-
IconHierarchy2,
|
|
11
10
|
IconPalette,
|
|
12
11
|
IconSettings,
|
|
13
12
|
IconLayoutSidebarLeftCollapse,
|
|
@@ -33,7 +32,6 @@ const navItems = [
|
|
|
33
32
|
];
|
|
34
33
|
|
|
35
34
|
const bottomNavItems = [
|
|
36
|
-
{ icon: IconHierarchy2, labelKey: "settings.agentTitle", href: "/agent" },
|
|
37
35
|
{ icon: IconSettings, labelKey: "navigation.settings", href: "/settings" },
|
|
38
36
|
];
|
|
39
37
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Index from "@/pages/Index";
|
|
2
2
|
|
|
3
3
|
const SEO_TITLE =
|
|
4
|
-
"
|
|
4
|
+
"Slides - Open Source AI presentation builder and Google Slides alternative";
|
|
5
5
|
const SEO_DESCRIPTION =
|
|
6
6
|
"Open Source AI presentation builder for generating, editing, refining, and exporting React decks as Google Slides-ready presentations.";
|
|
7
7
|
|
|
@@ -74,9 +74,12 @@ export class GeminiProvider implements ImageProvider {
|
|
|
74
74
|
imageConfig.aspectRatio = config.aspectRatio;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
// Google retired the "-preview" aliases (shut down 2026-06-25); the GA
|
|
78
|
+
// model ids dropped the suffix. Sending the old preview ids 404s every
|
|
79
|
+
// call before falling through to gemini-2.5-flash-image.
|
|
77
80
|
const geminiModels = [
|
|
78
|
-
"gemini-3.1-flash-image
|
|
79
|
-
"gemini-3-pro-image
|
|
81
|
+
"gemini-3.1-flash-image",
|
|
82
|
+
"gemini-3-pro-image",
|
|
80
83
|
"gemini-2.5-flash-image",
|
|
81
84
|
];
|
|
82
85
|
let lastError: Error | null = null;
|