@agent-native/core 0.181.0-nightly-20260916101515 → 0.181.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.
@@ -3,6 +3,16 @@
3
3
  All notable user-facing changes to Agent-Native Analytics 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-15
7
+
8
+ ### Improved
9
+
10
+ - Account menus are now shorter, with workspace apps and agent management available in Settings.
11
+
12
+ ### Fixed
13
+
14
+ - Implementing an Analytics plan now starts a fresh Act-mode run.
15
+
6
16
  ## 2026-09-14
7
17
 
8
18
  ### Improved
@@ -7,6 +7,7 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
7
7
 
8
8
  ### Improved
9
9
 
10
+ - Account menus are now shorter, with workspace apps and agent management available in Settings.
10
11
  - Calendar mirrors Notion Calendar's customizable day ranges and view settings
11
12
 
12
13
  ### Fixed
@@ -76,6 +77,10 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
76
77
 
77
78
  ## 2026-09-04
78
79
 
80
+ ### Added
81
+
82
+ - Booking link hosts now show whether their real working hours are applied, with a one-click request to fix it when they aren't
83
+
79
84
  ### Improved
80
85
 
81
86
  - Generated booking-link OG images now use the shared branded background.
@@ -5,12 +5,24 @@ from the command menu (Cmd+K → "What's new") or from Settings.
5
5
 
6
6
  ## 2026-09-15
7
7
 
8
+ ### Added
9
+
10
+ - Recordings include a structured timeline of browser interactions and diagnostics
11
+
8
12
  ### Improved
9
13
 
14
+ - Clips places editing controls between the video preview and timeline.
15
+ - Account menus are now shorter, with workspace apps and agent management available in Settings.
10
16
  - Trash now supports paging through more than 100 deleted recordings
11
17
 
12
18
  ### Fixed
13
19
 
20
+ - Clips Desktop keeps Dictate visible when voice dictation is enabled
21
+ - Clips no longer reports 0% completion on a clip that only agents have read - completion and CTA conversion now show as unknown until a human view is counted
22
+ - Clips popovers now close when you switch to another application.
23
+ - Clips serves private thumbnails through the same-origin thumbnail route.
24
+ - Playback speed changes no longer restart paused clips, Picture-in-Picture stops cleanly when leaving the player, and the Windows tray stays within the usable desktop without hiding recorder controls.
25
+ - The comments empty state now uses the shared shadcn empty-state style with an icon
14
26
  - Fixed the volume slider knob alignment in shared recordings
15
27
  - Shared Clips now focus the agent when asked, show clear viewer-safe transcript states, and keep workspace branding visible.
16
28
 
@@ -7,8 +7,44 @@ from the command menu (Cmd+K → "What's new") or from Settings.
7
7
 
8
8
  ### Fixed
9
9
 
10
+ - Authored flex direction, wrap, gaps, justify-content, and padding now survive layout edits instead of being reset.
10
11
  - A message that only mentions a design, or pastes Design's own guidance back into chat, no longer ends with a false "couldn't confirm that a Design artifact was saved" reply.
11
12
 
13
+ ## 2026-09-15
14
+
15
+ ### Improved
16
+
17
+ - Auto layout controls use a compact alignment and gap layout with smaller constraint controls.
18
+ - Keep the Screens list focused and resize its split with Layers
19
+ - Large-design element selection keeps bulk geometry collection lightweight for faster marquee interactions.
20
+ - Large visual-edit maps limit concurrent live app boots so more screens stay responsive
21
+ - Layers have more breathing room, smaller chevrons, and balanced toolbar icons; inspector tabs have more vertical padding.
22
+ - Main component structure edits stay linked across instances, and deleted main components can be restored from an instance.
23
+ - Marquee select and double-click element select on the canvas are much faster on large screens.
24
+ - Responsive breakpoint edits preserve authored CSS, and Shift-dragging a padding handle updates all four sides together.
25
+ - Account menus are now shorter, with workspace apps and agent management available in Settings.
26
+ - Visual structure reorders now verify after source updates even when HMR changes runtime identities
27
+
28
+ ### Fixed
29
+
30
+ - Alt-dragging a layer inside a group now keeps the duplicate under the cursor for the whole drag instead of jumping into place on release.
31
+ - Breakpoint width edits preserve the existing breakpoint, and new Screens stay clear of visible breakpoint previews.
32
+ - Changing a grid's column or row count no longer turns fill or hug tracks into fixed pixel sizes
33
+ - Creating and focusing Screens keeps the canvas zoom and position stable.
34
+ - Figma imports preserve original layer names in the Layers panel
35
+ - Figma layer names now survive import, rename, and reload in Design
36
+ - Fixed padding indicator tick marks so they render at the same length on every edge
37
+ - Groups now resize with linked text overrides in the editor, previews, and exports.
38
+ - Keep local Design rotation edits undoable while preserving collaboration conflict checks.
39
+ - New designs start with fresh prompts, reliable asset picking, and responsive screens.
40
+ - Overview canvas no longer shows generated screens as blank or black frames at low zoom
41
+ - Prevent pending visual edits from being lost during screen navigation
42
+ - Rapid dependent layout edits now retain changes made immediately before them.
43
+ - Restore the standard Agent-Native chat header and tabs in the Design editor.
44
+ - Text typed immediately after clicking the Text tool on empty canvas space is no longer lost, and the new layer is named from what you typed
45
+ - The Letter spacing field now accepts percentages and em values like Figma, and keeps two decimals instead of rounding 0.64 to 0.6
46
+ - Visual edit maps keep query-specific screens distinct and expose the latest native WebMCP surface.
47
+
12
48
  ## 2026-09-14
13
49
 
14
50
  ### Added
@@ -9,6 +9,11 @@ import { numericDesignDataWriteError } from "../shared/canvas-frames.js";
9
9
 
10
10
  const MAX_DATA_CAS_ATTEMPTS = 5;
11
11
  const MAX_DATA_OPERATION_SOURCES = 128;
12
+ const NUMERIC_DESIGN_DATA_MAPS = new Set([
13
+ "canvasFrames",
14
+ "screenMetadata",
15
+ "localhostScreens",
16
+ ]);
12
17
  const FORBIDDEN_DATA_PATH_SEGMENTS = new Set([
13
18
  "__proto__",
14
19
  "constructor",
@@ -237,6 +242,39 @@ function applyDataOperations(
237
242
  return JSON.stringify(root);
238
243
  }
239
244
 
245
+ function validatePersistedDataSnapshot(
246
+ raw: string,
247
+ touchedMaps?: ReadonlySet<string>,
248
+ touchedCanvasFrameIds?: ReadonlySet<string>,
249
+ ): void {
250
+ const parsed = JSON.parse(raw);
251
+ if (!isRecord(parsed)) return;
252
+ for (const [key, value] of Object.entries(parsed)) {
253
+ if (
254
+ touchedMaps &&
255
+ NUMERIC_DESIGN_DATA_MAPS.has(key) &&
256
+ !touchedMaps.has(key)
257
+ ) {
258
+ continue;
259
+ }
260
+ if (key === "canvasFrames" && touchedCanvasFrameIds) {
261
+ if (!isRecord(value)) {
262
+ const message = numericDesignDataWriteError([key], value);
263
+ if (message) throw new Error(message);
264
+ continue;
265
+ }
266
+ for (const [frameId, frame] of Object.entries(value)) {
267
+ if (!touchedCanvasFrameIds.has(frameId)) continue;
268
+ const message = numericDesignDataWriteError([key, frameId], frame);
269
+ if (message) throw new Error(message);
270
+ }
271
+ continue;
272
+ }
273
+ const message = numericDesignDataWriteError([key], value);
274
+ if (message) throw new Error(message);
275
+ }
276
+ }
277
+
240
278
  export default defineAction({
241
279
  description:
242
280
  "Update an existing design project. Requires editor access. " +
@@ -244,7 +282,11 @@ export default defineAction({
244
282
  "For map entries such as canvasFrames, use dataOperations " +
245
283
  "with explicit set/delete paths instead of a full data snapshot. " +
246
284
  "Dimensions and positions (x, y, width, height, rotation, z) are " +
247
- "numbers. String values are rejected.",
285
+ "numbers. String values are rejected. Renderable screens created by " +
286
+ "create-file or generate-design are auto-placed, so omit canvasFrames " +
287
+ "unless intentionally placing or moving a frame. Full placement objects " +
288
+ "must provide complete numeric geometry; path-addressed updates may change " +
289
+ "individual numeric fields.",
248
290
  schema: z
249
291
  .object({
250
292
  id: z.string().describe("Design ID"),
@@ -457,6 +499,32 @@ export default defineAction({
457
499
  })
458
500
  : data!;
459
501
  }
502
+ // Validate the complete post-operation snapshot. Nested set/delete
503
+ // operations can otherwise leave an empty canvas frame after the
504
+ // per-value numeric checks have passed.
505
+ const touchedMaps = dataOperations
506
+ ? new Set(dataOperations.map((operation) => operation.path[0]))
507
+ : (() => {
508
+ const parsed = JSON.parse(data!);
509
+ return new Set(isRecord(parsed) ? Object.keys(parsed) : []);
510
+ })();
511
+ const touchedCanvasFrameIds = dataOperations
512
+ ? (() => {
513
+ const ids = dataOperations
514
+ .filter(
515
+ (operation) =>
516
+ operation.path[0] === "canvasFrames" &&
517
+ operation.path.length > 1,
518
+ )
519
+ .map((operation) => operation.path[1]!);
520
+ return ids.length > 0 ? new Set(ids) : undefined;
521
+ })()
522
+ : undefined;
523
+ validatePersistedDataSnapshot(
524
+ nextData,
525
+ touchedMaps,
526
+ touchedCanvasFrameIds,
527
+ );
460
528
 
461
529
  // Compare-and-swap on the exact data snapshot. Transactions at the
462
530
  // default isolation level do not make a read-merge-write safe: two
@@ -111,6 +111,12 @@ function numericEntryError(
111
111
  if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
112
112
  return `Design ${map} entry must be an object with numeric width and height fields, received ${describeRejectedValue(entry)}. Use a delete operation to clear an entry.`;
113
113
  }
114
+ if (
115
+ map === "canvasFrames" &&
116
+ !Object.keys(entry).some((key) => numericKeys.has(key))
117
+ ) {
118
+ return "Design canvasFrames entry must include at least one geometry field. Use a delete operation to clear an entry.";
119
+ }
114
120
  if (map === "screenMetadata") {
115
121
  const heights = (entry as Record<string, unknown>).breakpointHeights;
116
122
  if (heights !== undefined) {
@@ -7,11 +7,15 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
7
7
 
8
8
  ### Improved
9
9
 
10
+ - Account menus are now shorter, with workspace apps and agent management available in Settings.
10
11
  - Mail labels recipient and account controls for keyboard and assistive-technology parity.
11
12
  - Match Superhuman's compact compose card geometry on desktop
12
13
 
13
14
  ### Fixed
14
15
 
16
+ - Inbox archive and read-state changes stay consistent during rapid actions
17
+ - Mail keeps rapid archive and read actions in sync
18
+ - Mail recovers cleanly when an email view or navigation takes too long to load.
15
19
  - New drafts focus the To field immediately for keyboard-first composing
16
20
 
17
21
  ## 2026-09-14
@@ -3,6 +3,21 @@
3
3
  All notable user-facing changes to Agent-Native Slides are documented here. Open it any
4
4
  time from the command menu (Cmd+K → "What's new").
5
5
 
6
+ ## 2026-09-15
7
+
8
+ ### Improved
9
+
10
+ - Design previews can inspect every onboarding step and apply visual edits more reliably across screens.
11
+ - Generated slide decks keep a cohesive visual theme while layouts vary with the story
12
+ - Account menus are now shorter, with workspace apps and agent management available in Settings.
13
+
14
+ ### Fixed
15
+
16
+ - Google Slides exports keep every line of text where it sits in Slides instead of re-wrapping into overlapping, stacked text.
17
+ - Imported decks now export to PowerPoint and Google Slides in their original layer order, so background panels no longer cover slide content
18
+ - PowerPoint and Google Slides exports keep full-size text on every slide, not just the one open in the editor.
19
+ - Table rules and dividers now export to PowerPoint and Google Slides as editable lines instead of images
20
+
6
21
  ## 2026-09-14
7
22
 
8
23
  ### Improved
@@ -12,6 +27,7 @@ time from the command menu (Cmd+K → "What's new").
12
27
 
13
28
  ### Fixed
14
29
 
30
+ - Asking the agent to restyle a whole deck no longer reports slides as beautified when their content was left exactly as it was, and a restyle that changes nothing now fails instead of claiming success.
15
31
  - An attached PDF, PowerPoint, or Word reference is now read before a new deck is generated, and its typography, palette, and page proportions steer the design instead of being silently dropped
16
32
  - Creating a design system no longer fails silently when Builder indexing is unavailable.
17
33
  - Design system creation from onboarding now opens inline instead of a new tab, so onboarding progress is no longer lost
@@ -26,8 +26,8 @@ export declare const getCollabState: import("h3").EventHandlerWithFetch<import("
26
26
  * Body: { update: string (base64), requestSource?: string }
27
27
  */
28
28
  export declare const postCollabUpdate: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
29
- error: string;
30
29
  ok?: undefined;
30
+ error: string;
31
31
  } | {
32
32
  error?: undefined;
33
33
  ok: boolean;
@@ -3,18 +3,18 @@ declare const _default: import("../../action.js").ActionDefinition<{
3
3
  url?: string;
4
4
  filename?: string;
5
5
  }, {
6
+ id?: undefined;
6
7
  error: string;
7
8
  configured?: undefined;
8
9
  connectPath?: undefined;
9
10
  url?: undefined;
10
- id?: undefined;
11
11
  provider?: undefined;
12
12
  } | {
13
+ id?: undefined;
13
14
  error: string;
14
15
  configured: boolean;
15
16
  connectPath: string;
16
17
  url?: undefined;
17
- id?: undefined;
18
18
  provider?: undefined;
19
19
  } | {
20
20
  error?: undefined;
@@ -137,13 +137,13 @@ export declare function screenMemoryMcpToolDefinitions(): ({
137
137
  inputSchema: {
138
138
  type: string;
139
139
  properties: {
140
- count?: undefined;
141
140
  query?: undefined;
142
141
  minutes?: undefined;
143
142
  limit?: undefined;
144
143
  clientHint?: undefined;
145
144
  timestamp?: undefined;
146
145
  chapterId?: undefined;
146
+ count?: undefined;
147
147
  startAt?: undefined;
148
148
  endAt?: undefined;
149
149
  reason?: undefined;
@@ -159,7 +159,6 @@ export declare function screenMemoryMcpToolDefinitions(): ({
159
159
  inputSchema: {
160
160
  type: string;
161
161
  properties: {
162
- count?: undefined;
163
162
  query: {
164
163
  type: string;
165
164
  description: string;
@@ -175,6 +174,7 @@ export declare function screenMemoryMcpToolDefinitions(): ({
175
174
  clientHint?: undefined;
176
175
  timestamp?: undefined;
177
176
  chapterId?: undefined;
177
+ count?: undefined;
178
178
  startAt?: undefined;
179
179
  endAt?: undefined;
180
180
  reason?: undefined;
@@ -190,7 +190,6 @@ export declare function screenMemoryMcpToolDefinitions(): ({
190
190
  inputSchema: {
191
191
  type: string;
192
192
  properties: {
193
- count?: undefined;
194
193
  minutes: {
195
194
  type: string;
196
195
  description: string;
@@ -200,6 +199,7 @@ export declare function screenMemoryMcpToolDefinitions(): ({
200
199
  clientHint?: undefined;
201
200
  timestamp?: undefined;
202
201
  chapterId?: undefined;
202
+ count?: undefined;
203
203
  startAt?: undefined;
204
204
  endAt?: undefined;
205
205
  reason?: undefined;
@@ -216,7 +216,6 @@ export declare function screenMemoryMcpToolDefinitions(): ({
216
216
  type: string;
217
217
  required: string[];
218
218
  properties: {
219
- count?: undefined;
220
219
  query: {
221
220
  type: string;
222
221
  description: string;
@@ -235,6 +234,7 @@ export declare function screenMemoryMcpToolDefinitions(): ({
235
234
  };
236
235
  timestamp?: undefined;
237
236
  chapterId?: undefined;
237
+ count?: undefined;
238
238
  startAt?: undefined;
239
239
  endAt?: undefined;
240
240
  reason?: undefined;
@@ -250,7 +250,6 @@ export declare function screenMemoryMcpToolDefinitions(): ({
250
250
  type: string;
251
251
  required: string[];
252
252
  properties: {
253
- count?: undefined;
254
253
  query?: undefined;
255
254
  minutes?: undefined;
256
255
  limit?: undefined;
@@ -264,6 +263,7 @@ export declare function screenMemoryMcpToolDefinitions(): ({
264
263
  description: string;
265
264
  };
266
265
  chapterId?: undefined;
266
+ count?: undefined;
267
267
  startAt?: undefined;
268
268
  endAt?: undefined;
269
269
  includeMicrophone?: undefined;
@@ -314,13 +314,13 @@ export declare function screenMemoryMcpToolDefinitions(): ({
314
314
  type: string;
315
315
  required: string[];
316
316
  properties: {
317
- count?: undefined;
318
317
  query?: undefined;
319
318
  minutes?: undefined;
320
319
  limit?: undefined;
321
320
  clientHint?: undefined;
322
321
  timestamp?: undefined;
323
322
  chapterId?: undefined;
323
+ count?: undefined;
324
324
  startAt: {
325
325
  type: string;
326
326
  description: string;
@@ -349,13 +349,13 @@ export declare function screenMemoryMcpToolDefinitions(): ({
349
349
  type: string;
350
350
  required: string[];
351
351
  properties: {
352
- count?: undefined;
353
352
  query?: undefined;
354
353
  minutes?: undefined;
355
354
  limit?: undefined;
356
355
  clientHint?: undefined;
357
356
  timestamp?: undefined;
358
357
  chapterId?: undefined;
358
+ count?: undefined;
359
359
  startAt?: undefined;
360
360
  endAt?: undefined;
361
361
  reason?: undefined;
@@ -16,18 +16,18 @@ export declare function createNotificationsHandler(): import("h3").EventHandlerW
16
16
  error?: undefined;
17
17
  ok?: undefined;
18
18
  } | {
19
- count?: undefined;
20
19
  updated: number;
21
20
  error?: undefined;
22
21
  ok?: undefined;
23
- } | {
24
22
  count?: undefined;
23
+ } | {
25
24
  updated?: undefined;
26
25
  error: string;
27
26
  ok?: undefined;
28
- } | {
29
27
  count?: undefined;
28
+ } | {
30
29
  updated?: undefined;
31
30
  error?: undefined;
32
31
  ok: boolean;
32
+ count?: undefined;
33
33
  }>>;
@@ -52,10 +52,10 @@ export declare const setWorkspaceAppDefaultVisibilityHandler: import("h3").Event
52
52
  }>>;
53
53
  /** POST /_agent-native/org — create a new organization */
54
54
  export declare const createOrgHandler: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
55
- name?: undefined;
56
55
  success: boolean;
57
- role?: undefined;
58
56
  id?: undefined;
57
+ name?: undefined;
58
+ role?: undefined;
59
59
  } | {
60
60
  success?: undefined;
61
61
  id: string;
@@ -60,17 +60,17 @@ export declare function createWriteSecretHandler(): import("h3").EventHandlerWit
60
60
  ok?: undefined;
61
61
  status?: undefined;
62
62
  } | {
63
- error?: undefined;
64
63
  ok: boolean;
65
64
  status: string;
65
+ error?: undefined;
66
66
  } | {
67
67
  ok?: undefined;
68
68
  error: string;
69
69
  removed?: 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
  error: string;
82
82
  note?: 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
  }>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.181.0-nightly-20260916101515",
3
+ "version": "0.181.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": {
@@ -484,9 +484,9 @@
484
484
  "yaml": "^2.9.0",
485
485
  "yjs": "^13.6.32",
486
486
  "zod": "^4.3.6",
487
- "@agent-native/toolkit": "^0.20.2-nightly-20260916101515",
488
- "@agent-native/recap-cli": "0.5.31",
489
- "@agent-native/agentkit": "^0.2.2-nightly-20260916101515"
487
+ "@agent-native/recap-cli": "0.5.32",
488
+ "@agent-native/agentkit": "^0.2.2",
489
+ "@agent-native/toolkit": "^0.20.2"
490
490
  },
491
491
  "devDependencies": {
492
492
  "@ai-sdk/anthropic": "^3.0.71",