@agent-native/core 0.187.0-nightly-20260924172231 → 0.187.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.
Files changed (35) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/CHANGELOG.md +11 -0
  3. package/corpus/templates/analytics/app/i18n/en-US.ts +1 -0
  4. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +101 -11
  5. package/corpus/templates/analytics/changelog/2026-09-24-session-list-hides-0m-recordings-by-default.md +6 -0
  6. package/corpus/templates/assets/CHANGELOG.md +6 -0
  7. package/corpus/templates/brain/actions/backfill-search-embeddings.ts +337 -0
  8. package/corpus/templates/brain/actions/get-brain-health.ts +1 -1
  9. package/corpus/templates/brain/app/lib/brain.ts +18 -0
  10. package/corpus/templates/brain/jobs/process-ingest-queue.ts +25 -3
  11. package/corpus/templates/brain/server/lib/brain-health.ts +197 -57
  12. package/corpus/templates/brain/server/lib/demo.ts +25 -4
  13. package/corpus/templates/brain/server/lib/hybrid-search.ts +4 -1
  14. package/corpus/templates/brain/server/lib/ingest-queue.ts +1 -0
  15. package/corpus/templates/brain/server/lib/search-index.ts +254 -17
  16. package/corpus/templates/brain/server/lib/search.ts +27 -0
  17. package/corpus/templates/calendar/CHANGELOG.md +6 -0
  18. package/corpus/templates/clips/CHANGELOG.md +10 -0
  19. package/corpus/templates/content/CHANGELOG.md +22 -0
  20. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +559 -227
  21. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +25 -1
  22. package/corpus/templates/design/CHANGELOG.md +36 -0
  23. package/corpus/templates/dispatch/CHANGELOG.md +7 -0
  24. package/corpus/templates/mail/CHANGELOG.md +17 -0
  25. package/corpus/templates/slides/CHANGELOG.md +7 -0
  26. package/dist/automation/index.d.ts +1 -1
  27. package/dist/collab/awareness.d.ts +2 -2
  28. package/dist/collab/struct-routes.d.ts +1 -1
  29. package/dist/embeddings/index.d.ts +5 -0
  30. package/dist/embeddings/index.js +44 -11
  31. package/dist/observability/routes.d.ts +5 -5
  32. package/dist/progress/routes.d.ts +1 -1
  33. package/dist/secrets/routes.d.ts +6 -6
  34. package/dist/server/agent-engine-ollama-models-route.d.ts +1 -1
  35. package/package.json +4 -4
@@ -72,7 +72,14 @@ import {
72
72
  } from "@tiptap/react";
73
73
  import { yUndoPluginKey } from "@tiptap/y-tiptap";
74
74
  import { defaultMarkdownSerializer } from "prosemirror-markdown";
75
- import { useCallback, useEffect, useRef, useMemo, useState } from "react";
75
+ import {
76
+ useCallback,
77
+ useEffect,
78
+ useLayoutEffect,
79
+ useRef,
80
+ useMemo,
81
+ useState,
82
+ } from "react";
76
83
  import { toast } from "sonner";
77
84
  import { Markdown } from "tiptap-markdown";
78
85
  import { Awareness } from "y-protocols/awareness";
@@ -1467,6 +1474,7 @@ interface VisualEditorProps {
1467
1474
  documentId?: string;
1468
1475
  contentSpaceId?: string;
1469
1476
  content: string;
1477
+ contentResetKey?: string | null;
1470
1478
  /**
1471
1479
  * Server `updatedAt` for `content`. Used to tell a genuinely-newer external
1472
1480
  * edit (agent / Notion / peer-via-SQL) apart from a stale autosave echo or a
@@ -3045,6 +3053,7 @@ export function VisualEditor({
3045
3053
  documentId,
3046
3054
  contentSpaceId,
3047
3055
  content,
3056
+ contentResetKey = null,
3048
3057
  contentUpdatedAt,
3049
3058
  contentRevision,
3050
3059
  acknowledgedLocalSnapshot,
@@ -3624,6 +3633,21 @@ export function VisualEditor({
3624
3633
  },
3625
3634
  });
3626
3635
  historyEditorRef.current = editor;
3636
+ const appliedContentResetKeyRef = useRef(contentResetKey);
3637
+ useLayoutEffect(() => {
3638
+ if (!editor || appliedContentResetKeyRef.current === contentResetKey)
3639
+ return;
3640
+ appliedContentResetKeyRef.current = contentResetKey;
3641
+ if (ydoc || docToNfm(editor.getJSON() as any) === content) return;
3642
+ editor
3643
+ .chain()
3644
+ .command(({ tr }) => {
3645
+ tr.setMeta("addToHistory", false);
3646
+ return true;
3647
+ })
3648
+ .setContent(nfmToDoc(content), { emitUpdate: false })
3649
+ .run();
3650
+ }, [content, contentResetKey, editor, ydoc]);
3627
3651
  useEffect(() => {
3628
3652
  if (!editor) return;
3629
3653
  const capture = ({ transaction }: { transaction: Transaction }) => {
@@ -3,22 +3,58 @@
3
3
  All notable user-facing changes to Design are documented here. Open it any time
4
4
  from the command menu (Cmd+K → "What's new") or from Settings.
5
5
 
6
+ ## 2026-09-24
7
+
8
+ ### Improved
9
+
10
+ - Pasted images now expose their sizing and adjustment controls in the inspector
11
+
12
+ ### Fixed
13
+
14
+ - Editing a vector path preserves its fill and stroke when reopened or closed.
15
+ - Pasted images, SVGs, and Design layers preserve more of their original content and placement.
16
+
6
17
  ## 2026-09-23
7
18
 
8
19
  ### Improved
9
20
 
21
+ - Pasted vector paths can be edited independently and use gradient strokes
10
22
  - Design loads translated catalogs and AI prompt tools only when you need them.
11
23
 
24
+ ### Fixed
25
+
26
+ - Entering Interact on a frame with unsaved live edits is now blocked consistently, matching the toolbar Interact toggle
27
+ - Figma clipboard pastes preserve multi-layer spacing and explain access errors.
28
+ - Fixed pasted SVG color inspection, vector path continuation, layer-list keyboard activation, and stroke-row creation.
29
+ - Holding Space during a live-frame drag now preserves the layer's intended parent
30
+ - Interact mode now reliably returns pointer and keyboard control to the running app.
31
+ - Live preview outlines now render at the correct scale as soon as an overview screen loads, not only after zooming
32
+ - Live previews keep their editing outlines, switch cleanly into Interact, and offer a clear coding-agent handoff when signed out.
33
+ - Live URL screens stay editable across modes, public viewers can copy visual-update prompts, and coding agents can pull pending visual edits through Design MCP
34
+ - Pasted images keep their original dimensions, and vector, stroke, and text edits behave more predictably.
35
+ - Pasted SVG files and SVG code become editable vector layers, pasted images keep their native size and land centred, Image/video… (⇧⌘K) uploads images, and images get Fill/Fit/Crop scale modes
36
+ - Pasted SVGs, images, and videos remain editable and keep their size and placement across reloads.
37
+ - Pasted vector and media artwork stays editable and correctly placed, with clearer drawing and scaling feedback.
38
+ - Public visual-edit viewers no longer see a spurious handoff error after making a live edit
39
+ - Space-drag pans the canvas even when another live screen has keyboard focus.
40
+ - Text editing on the canvas now works like Figma: click to place the caret, drag, double-click, or triple-click to select, style just the selected words and keep typing, and the caret stays visible when zoomed out.
41
+
42
+ ### Removed
43
+
44
+ - Design no longer shows a hint to Command-click to select inner layers.
45
+
12
46
  ## 2026-09-22
13
47
 
14
48
  ### Improved
15
49
 
50
+ - Continue open Pen paths from the selected end anchor after Enter
16
51
  - Apps start with an app-shaped skeleton while session data loads immediately.
17
52
  - Canvas saves are faster because version checkpoints are taken at most every few minutes while you edit.
18
53
  - Large Figma files with hundreds of frames now import in seconds without freezing the editor, keep their Figma canvas layout, and render component slots and instance overrides much more faithfully.
19
54
 
20
55
  ### Fixed
21
56
 
57
+ - Fixed image import, vector editing, scaling, and text selection inconsistencies.
22
58
  - Fixed the design system picker showing a still-indexing Builder design system as ready to use
23
59
  - Blocks can be selected with one click inside screens
24
60
  - Canvas edits on large designs now save even when version history can't be stored, with a one-time notice instead of a lost change.
@@ -3,6 +3,13 @@
3
3
  All notable user-facing changes to Agent-Native Dispatch are documented here. Open it any
4
4
  time from the command menu (Cmd+K → "What's new").
5
5
 
6
+ ## 2026-09-23
7
+
8
+ ### Fixed
9
+
10
+ - App launchers show only apps connected to the current workspace.
11
+ - Usage alerts explain that their thresholds notify you without limiting usage or spend.
12
+
6
13
  ## 2026-09-04
7
14
 
8
15
  ### Improved
@@ -3,10 +3,27 @@
3
3
  All notable user-facing changes to Agent-Native Mail are documented here. Open it any
4
4
  time from the command menu (Cmd+K → "What's new") or from Settings.
5
5
 
6
+ ## 2026-09-24
7
+
8
+ ### Improved
9
+
10
+ - The compose window opens larger, leaving more room to write with quieter toolbar icons.
11
+
12
+ ## 2026-09-23
13
+
14
+ ### Improved
15
+
16
+ - Jev email matches now show match probability instead of calling it confidence.
17
+
18
+ ### Fixed
19
+
20
+ - Mail keeps Priority sort selected when Jev availability is temporarily unavailable.
21
+
6
22
  ## 2026-09-22
7
23
 
8
24
  ### Improved
9
25
 
26
+ - Jev-powered Mail rules and Priority sort work with an enabled Builder space or your personal Jev key.
10
27
  - Apps start with an app-shaped skeleton while session data loads immediately.
11
28
 
12
29
  ### Fixed
@@ -9,6 +9,13 @@ time from the command menu (Cmd+K → "What's new").
9
9
 
10
10
  - Slides loads AI prompt tools and extra slide controls only when you open them.
11
11
 
12
+ ### Fixed
13
+
14
+ - Deck access errors leave the loading state and explain that the deck is unavailable.
15
+ - Slide chat follows the current selection, and loaded slides remain visible when a background refresh fails
16
+ - Slides home retries failed deck-list reads sooner.
17
+ - Slides no longer shows an error page while the deck list is recovering.
18
+
12
19
  ## 2026-09-22
13
20
 
14
21
  ### Improved
@@ -186,8 +186,8 @@ export declare function createAutomationCallbackHandler(runtime: AutomationRunti
186
186
  duplicate?: undefined;
187
187
  eventId?: undefined;
188
188
  } | {
189
- error?: undefined;
190
189
  accepted: boolean;
191
190
  duplicate: boolean;
192
191
  eventId: string;
192
+ error?: undefined;
193
193
  }>;
@@ -62,11 +62,11 @@ export declare const postAwareness: import("h3").EventHandlerWithFetch<import("h
62
62
  error: string;
63
63
  states?: undefined;
64
64
  } | {
65
- error?: undefined;
66
65
  states: {
67
66
  clientId: number;
68
67
  state: string;
69
68
  }[];
69
+ error?: undefined;
70
70
  }>>;
71
71
  /**
72
72
  * GET /_agent-native/collab/:docId/users
@@ -77,9 +77,9 @@ export declare const getActiveUsers: import("h3").EventHandlerWithFetch<import("
77
77
  error: string;
78
78
  users?: undefined;
79
79
  } | {
80
- error?: undefined;
81
80
  users: {
82
81
  clientId: number;
83
82
  lastSeen: number;
84
83
  }[];
84
+ error?: undefined;
85
85
  }>>;
@@ -13,8 +13,8 @@
13
13
  * Body: { json: any, fieldName?: string, type?: "map"|"array", requestSource?: string }
14
14
  */
15
15
  export declare const postCollabJson: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
16
- error: string;
17
16
  ok?: undefined;
17
+ error: string;
18
18
  } | {
19
19
  error?: undefined;
20
20
  ok: boolean;
@@ -19,5 +19,10 @@ export interface EmbeddingFamily {
19
19
  export declare function createGeminiEmbeddingFamily(apiKey: string, dimensions?: number): EmbeddingFamily;
20
20
  export declare function createCohereEmbeddingFamily(apiKey: string, dimensions?: number): EmbeddingFamily;
21
21
  export declare function createVoyageEmbeddingFamily(apiKey: string): EmbeddingFamily;
22
+ export interface EmbeddingFamilyAvailability {
23
+ families: EmbeddingFamily[];
24
+ unavailableProviders: string[];
25
+ }
26
+ export declare function readEmbeddingFamilyAvailability(): Promise<EmbeddingFamilyAvailability>;
22
27
  export declare function availableEmbeddingFamilies(): Promise<EmbeddingFamily[]>;
23
28
  export declare function defaultEmbeddingFamily(families: readonly EmbeddingFamily[]): EmbeddingFamily | null;
@@ -1,5 +1,5 @@
1
1
  import { readBoundedResponseBytes } from "../ingestion/index.js";
2
- import { resolveSecret } from "../server/credential-provider.js";
2
+ import { prefetchSecrets, resolveSecretDetailed, } from "../server/credential-provider.js";
3
3
  const DEFAULT_DIMENSIONS = 1024;
4
4
  function dataUrl(image) {
5
5
  return `data:${image.mimeType};base64,${image.base64}`;
@@ -154,17 +154,50 @@ export function createVoyageEmbeddingFamily(apiKey) {
154
154
  },
155
155
  };
156
156
  }
157
+ const EMBEDDING_CREDENTIALS = [
158
+ {
159
+ provider: "gemini",
160
+ key: "GEMINI_API_KEY",
161
+ create: createGeminiEmbeddingFamily,
162
+ },
163
+ {
164
+ provider: "cohere",
165
+ key: "COHERE_API_KEY",
166
+ create: createCohereEmbeddingFamily,
167
+ },
168
+ {
169
+ provider: "voyage",
170
+ key: "VOYAGE_API_KEY",
171
+ create: createVoyageEmbeddingFamily,
172
+ },
173
+ ];
174
+ export async function readEmbeddingFamilyAvailability() {
175
+ await prefetchSecrets(EMBEDDING_CREDENTIALS.map(({ key }) => key)).catch(() => undefined);
176
+ const resolved = await Promise.all(EMBEDDING_CREDENTIALS.map(async (credential) => {
177
+ try {
178
+ return {
179
+ credential,
180
+ detail: await resolveSecretDetailed(credential.key),
181
+ };
182
+ }
183
+ catch {
184
+ return {
185
+ credential,
186
+ detail: { value: null, lookupFailed: true },
187
+ };
188
+ }
189
+ }));
190
+ return {
191
+ families: resolved.flatMap(({ credential, detail }) => detail.value ? [credential.create(detail.value)] : []),
192
+ unavailableProviders: resolved.flatMap(({ credential, detail }) => detail.lookupFailed && !detail.value ? [credential.provider] : []),
193
+ };
194
+ }
157
195
  export async function availableEmbeddingFamilies() {
158
- const [gemini, cohere, voyage] = await Promise.all([
159
- resolveSecret("GEMINI_API_KEY").catch(() => null),
160
- resolveSecret("COHERE_API_KEY").catch(() => null),
161
- resolveSecret("VOYAGE_API_KEY").catch(() => null),
162
- ]);
163
- return [
164
- ...(gemini ? [createGeminiEmbeddingFamily(gemini)] : []),
165
- ...(cohere ? [createCohereEmbeddingFamily(cohere)] : []),
166
- ...(voyage ? [createVoyageEmbeddingFamily(voyage)] : []),
167
- ];
196
+ const availability = await readEmbeddingFamilyAvailability();
197
+ if (availability.unavailableProviders.length) {
198
+ throw new Error(`Embedding credential lookup is temporarily unavailable for: ${availability.unavailableProviders.join(", ")}.`);
199
+ }
200
+ return availability.families;
168
201
  }
169
202
  export function defaultEmbeddingFamily(families) {
170
203
  return families.length === 1 ? (families[0] ?? null) : null;
@@ -42,26 +42,26 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
42
42
  avgEvalScore: number;
43
43
  } | {
44
44
  id?: undefined;
45
- error?: undefined;
46
- ok?: undefined;
47
45
  summary: import("./types.js").TraceSummary;
48
46
  spans: import("./types.js").TraceSpan[];
49
- } | {
50
47
  error?: undefined;
51
48
  ok?: undefined;
49
+ } | {
52
50
  summary?: undefined;
53
51
  spans?: undefined;
54
52
  id: string;
53
+ error?: undefined;
54
+ ok?: undefined;
55
55
  } | {
56
56
  id?: undefined;
57
- ok?: undefined;
58
57
  summary?: undefined;
59
58
  spans?: undefined;
60
59
  error: any;
60
+ ok?: undefined;
61
61
  } | {
62
62
  id?: undefined;
63
- error?: undefined;
64
63
  summary?: undefined;
65
64
  spans?: undefined;
65
+ error?: undefined;
66
66
  ok: boolean;
67
67
  }>>;
@@ -15,6 +15,6 @@ export declare function createProgressHandler(): import("h3").EventHandlerWithFe
15
15
  error: string;
16
16
  ok?: undefined;
17
17
  } | {
18
- error?: undefined;
19
18
  ok: boolean;
19
+ error?: undefined;
20
20
  }>>;
@@ -60,17 +60,17 @@ export declare function createWriteSecretHandler(): import("h3").EventHandlerWit
60
60
  status?: undefined;
61
61
  ok?: undefined;
62
62
  } | {
63
- error?: undefined;
64
63
  ok: boolean;
65
64
  status: string;
65
+ error?: undefined;
66
66
  } | {
67
67
  error: string;
68
68
  removed?: undefined;
69
69
  ok?: undefined;
70
70
  } | {
71
- error?: undefined;
72
71
  ok: boolean;
73
72
  removed: boolean;
73
+ error?: undefined;
74
74
  }>>;
75
75
  /**
76
76
  * POST /_agent-native/secrets/:key/test — validate an optional candidate value
@@ -81,13 +81,13 @@ export declare function createTestSecretHandler(): import("h3").EventHandlerWith
81
81
  note?: undefined;
82
82
  ok?: undefined;
83
83
  } | {
84
- error?: undefined;
85
84
  ok: boolean;
86
85
  note?: undefined;
87
- } | {
88
86
  error?: undefined;
87
+ } | {
89
88
  ok: boolean;
90
89
  note: string;
90
+ error?: undefined;
91
91
  } | {
92
92
  note?: undefined;
93
93
  ok: boolean;
@@ -119,11 +119,11 @@ export interface AdHocSecretPayload {
119
119
  export declare function createAdHocSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<AdHocSecretPayload[] | {
120
120
  error: string;
121
121
  } | {
122
- error?: undefined;
123
122
  ok: boolean;
124
123
  key: string;
125
- } | {
126
124
  error?: undefined;
125
+ } | {
127
126
  ok: boolean;
128
127
  removed: boolean;
128
+ error?: undefined;
129
129
  }>>;
@@ -6,8 +6,8 @@
6
6
  */
7
7
  export declare function createAgentEngineOllamaModelsHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
8
8
  error: string;
9
- models?: undefined;
10
9
  ok?: undefined;
10
+ models?: undefined;
11
11
  } | {
12
12
  error?: undefined;
13
13
  ok: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.187.0-nightly-20260924172231",
3
+ "version": "0.187.0",
4
4
  "description": "The agentic application framework for building autonomous agents with intuitive UIs",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -498,9 +498,9 @@
498
498
  "yaml": "^2.9.0",
499
499
  "yjs": "^13.6.32",
500
500
  "zod": "^4.3.6",
501
- "@agent-native/agentkit": "^0.2.8",
502
- "@agent-native/toolkit": "^0.20.8",
503
- "@agent-native/recap-cli": "0.5.38"
501
+ "@agent-native/recap-cli": "0.5.39",
502
+ "@agent-native/toolkit": "^0.20.9",
503
+ "@agent-native/agentkit": "^0.2.9"
504
504
  },
505
505
  "devDependencies": {
506
506
  "@ai-sdk/anthropic": "^3.0.71",