@agent-native/core 0.165.0 → 0.165.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.
Files changed (58) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/CHANGELOG.md +37 -3
  3. package/corpus/templates/analytics/changelog/2026-08-20-staged-data-limit-recovery.md +5 -0
  4. package/corpus/templates/assets/CHANGELOG.md +36 -2
  5. package/corpus/templates/brain/CHANGELOG.md +33 -3
  6. package/corpus/templates/calendar/CHANGELOG.md +45 -2
  7. package/corpus/templates/chat/CHANGELOG.md +29 -3
  8. package/corpus/templates/clips/CHANGELOG.md +55 -2
  9. package/corpus/templates/clips/app/i18n/en-US.ts +0 -9
  10. package/corpus/templates/clips/app/root.tsx +2 -1
  11. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +3 -3
  12. package/corpus/templates/clips/changelog/2026-08-20-cross-tab-recording-controls.md +5 -0
  13. package/corpus/templates/clips/changelog/2026-08-20-overlay-follow-review-fixes.md +5 -0
  14. package/corpus/templates/clips/changelog/2026-08-20-provider-key-recovery.md +5 -0
  15. package/corpus/templates/clips/chrome-extension/PERMISSIONS.md +29 -46
  16. package/corpus/templates/clips/chrome-extension/STORE_DRAFT.md +1 -1
  17. package/corpus/templates/clips/chrome-extension/public/manifest.json +9 -2
  18. package/corpus/templates/clips/chrome-extension/src/background.ts +65 -46
  19. package/corpus/templates/clips/chrome-extension/src/content-script.ts +25 -17
  20. package/corpus/templates/clips/chrome-extension/src/overlay-follow.ts +25 -0
  21. package/corpus/templates/content/CHANGELOG.md +45 -2
  22. package/corpus/templates/crm/CHANGELOG.md +28 -16
  23. package/corpus/templates/design/CHANGELOG.md +54 -2
  24. package/corpus/templates/dispatch/CHANGELOG.md +51 -2
  25. package/corpus/templates/dispatch/changelog/2026-08-20-dispatch-chat-loads-openrouter-provider-reliably.md +6 -0
  26. package/corpus/templates/dispatch/package.json +2 -0
  27. package/corpus/templates/factory/CHANGELOG.md +28 -2
  28. package/corpus/templates/forms/CHANGELOG.md +39 -3
  29. package/corpus/templates/macros/CHANGELOG.md +30 -2
  30. package/corpus/templates/macros/netlify.toml +2 -0
  31. package/corpus/templates/mail/CHANGELOG.md +34 -3
  32. package/corpus/templates/plan/CHANGELOG.md +34 -3
  33. package/corpus/templates/slides/CHANGELOG.md +73 -2
  34. package/corpus/templates/tasks/CHANGELOG.md +35 -0
  35. package/corpus/templates/tasks/app/root.tsx +8 -1
  36. package/dist/changelog/parse.d.ts +12 -4
  37. package/dist/changelog/parse.js +61 -23
  38. package/dist/cli/changelog.js +9 -11
  39. package/dist/client/chat/run-recovery.js +8 -3
  40. package/dist/client/integrations/IntegrationsPanel.js +12 -1
  41. package/dist/collab/routes.d.ts +1 -1
  42. package/dist/mcp/screen-memory-stdio.d.ts +7 -7
  43. package/dist/mcp-client/oauth-routes.d.ts +1 -0
  44. package/dist/mcp-client/oauth-routes.js +37 -9
  45. package/dist/mcp-client/remote-store.d.ts +12 -0
  46. package/dist/mcp-client/remote-store.js +71 -0
  47. package/dist/notifications/routes.d.ts +3 -3
  48. package/dist/provider-api/actions/provider-api.js +16 -4
  49. package/dist/resources/handlers.d.ts +2 -2
  50. package/dist/templates/chat/CHANGELOG.md +29 -3
  51. package/package.json +1 -1
  52. package/src/templates/chat/CHANGELOG.md +29 -3
  53. package/corpus/templates/.retired/issues/package.json +0 -7
  54. package/corpus/templates/.retired/meeting-notes/package.json +0 -7
  55. package/corpus/templates/.retired/recruiting/package.json +0 -7
  56. package/corpus/templates/.retired/scheduling/package.json +0 -7
  57. package/corpus/templates/.retired/voice/package.json +0 -7
  58. package/corpus/templates/voice/.agents/skills/upgrade-agent-native/SKILL.md +0 -87
@@ -6,6 +6,10 @@ import {
6
6
  shouldReconcilePersistedRecording,
7
7
  type OffscreenRecordingState,
8
8
  } from "./native-recording-state";
9
+ import {
10
+ sendWithInjectionFallback,
11
+ shouldFollowOverlay,
12
+ } from "./overlay-follow";
9
13
  import { captureExtensionError, initExtensionSentry } from "./sentry";
10
14
 
11
15
  initExtensionSentry("background");
@@ -276,16 +280,11 @@ let overlayBaseEpochMs = 0;
276
280
  // up, for both camera-only AND screen+camera recording (recordingShowsBubble).
277
281
  let overlayShowsBubble = false;
278
282
  let recordingShowsBubble = false;
279
- // Cross-tab follow: when true, the overlay is pushed to whatever tab the user
280
- // switches to mid-recording. That requires "<all_urls>" + a declarative content
281
- // script, which triggers Chrome's broad-host in-depth review. Shipped OFF
282
- // (activeTab-only: the overlay lives on the launch tab the user invoked the
283
- // extension from). Capture is unaffected — it runs in the offscreen document via
284
- // getDisplayMedia regardless. See PERMISSIONS.md to re-enable.
285
- // Typed `boolean` (not inferred literal `false`) so the cross-tab branches below
286
- // don't read as unreachable code; flip the value to re-enable. See PERMISSIONS.md.
287
- const CROSS_TAB_FOLLOW: boolean = false;
288
- // The tab the recording was launched from — the only tab activeTab lets us touch.
283
+ // Cross-tab follow stays enabled for the next release. It needs the manifest's
284
+ // broad-host review path (`<all_urls>` + declarative content script coverage) so
285
+ // the face bubble and controls keep following the user across tabs and reloads.
286
+ const CROSS_TAB_FOLLOW: boolean = true;
287
+ // The launch tab stays the anchor for the explicit reload recovery path.
289
288
  let overlayTabId: number | null = null;
290
289
  let countdownEndsAtMs = 0;
291
290
  let armingNativeRecordingSessionId: string | null = null;
@@ -438,20 +437,19 @@ async function restoreRuntimeState(): Promise<void> {
438
437
  function sendTabMessage(
439
438
  tabId: number,
440
439
  message: Record<string, unknown>,
441
- ): Promise<void> {
440
+ ): Promise<boolean> {
442
441
  return new Promise((resolve) => {
443
442
  try {
444
443
  chrome.tabs.sendMessage(tabId, message, () => {
445
- void chrome.runtime.lastError;
446
- resolve();
444
+ resolve(!chrome.runtime.lastError);
447
445
  });
448
446
  } catch {
449
- resolve();
447
+ resolve(false);
450
448
  }
451
449
  });
452
450
  }
453
451
 
454
- async function ensureContentScript(tabId: number): Promise<void> {
452
+ async function injectContentScript(tabId: number): Promise<boolean> {
455
453
  const scripting = (
456
454
  chrome as typeof chrome & {
457
455
  scripting?: {
@@ -462,18 +460,32 @@ async function ensureContentScript(tabId: number): Promise<void> {
462
460
  };
463
461
  }
464
462
  ).scripting;
465
- if (!scripting) return;
466
- await scripting
467
- .executeScript({ target: { tabId }, files: ["assets/content-script.js"] })
468
- .catch(() => undefined);
463
+ if (!scripting) return false;
464
+ try {
465
+ await scripting.executeScript({
466
+ target: { tabId },
467
+ files: ["assets/content-script.js"],
468
+ });
469
+ return true;
470
+ } catch {
471
+ // Unsupported pages (chrome://, the Chrome Web Store, and similar) reject
472
+ // injection. They still need to record without an in-page overlay.
473
+ return false;
474
+ }
469
475
  }
470
476
 
471
- async function mountOverlayOnTab(tabId: number): Promise<void> {
472
- await ensureContentScript(tabId);
473
- await sendTabMessage(tabId, {
474
- type: "CLIPS_OVERLAY_MOUNT",
475
- parts: desiredParts(),
476
- });
477
+ async function mountOverlayOnTab(
478
+ tabId: number,
479
+ parts: OverlayPart[] = desiredParts(),
480
+ ): Promise<boolean> {
481
+ return sendWithInjectionFallback(
482
+ () =>
483
+ sendTabMessage(tabId, {
484
+ type: "CLIPS_OVERLAY_MOUNT",
485
+ parts,
486
+ }),
487
+ () => injectContentScript(tabId),
488
+ );
477
489
  }
478
490
 
479
491
  function allTabs(): Promise<chrome.tabs.Tab[]> {
@@ -483,9 +495,8 @@ function allTabs(): Promise<chrome.tabs.Tab[]> {
483
495
  }
484
496
 
485
497
  async function broadcastMount(): Promise<void> {
486
- // activeTab-only: keep the overlay on the launch tab (re-ensures the injected
487
- // content script too, so it survives a worker suspend). Cross-tab broadcast is
488
- // gated behind CROSS_TAB_FOLLOW because it needs broad host access.
498
+ // Cross-tab follow uses the declarative content script path, so every mounted
499
+ // tab can receive the current overlay parts and survive reloads.
489
500
  if (!CROSS_TAB_FOLLOW) {
490
501
  if (overlayTabId !== null) await mountOverlayOnTab(overlayTabId);
491
502
  return;
@@ -548,12 +559,9 @@ async function startPreview(wantsCamera: boolean): Promise<void> {
548
559
  if (!tab || typeof tab.id !== "number") return;
549
560
  if (previewTabId !== null && previewTabId !== tab.id) await stopPreview();
550
561
  previewTabId = tab.id;
551
- await ensureContentScript(tab.id);
552
- // Injection / send fail silently on unsupported pages (chrome://, etc.).
553
- await sendTabMessage(tab.id, {
554
- type: "CLIPS_OVERLAY_MOUNT",
555
- parts: ["bubble"],
556
- });
562
+ // Message delivery reuses the declarative script; fallback injection fails
563
+ // silently on unsupported pages (chrome://, the Web Store, and similar).
564
+ await mountOverlayOnTab(tab.id, ["bubble"]);
557
565
  }
558
566
 
559
567
  async function stopPreview(): Promise<void> {
@@ -2560,29 +2568,40 @@ async function dispatchRuntimeMessage(message: unknown): Promise<unknown> {
2560
2568
  }
2561
2569
  }
2562
2570
 
2563
- // While a recording is active, keep the overlay following the user as they
2564
- // switch tabs (programmatic injection covers tabs opened before the extension
2565
- // loaded; declared content scripts cover navigations).
2571
+ // While a recording is active or arming, keep the overlay following the user as
2572
+ // they switch tabs. The message-first path reuses declarative scripts and only
2573
+ // injects for tabs that predate the extension or otherwise have no receiver.
2566
2574
  chrome.tabs.onActivated.addListener((info) => {
2567
- if (!CROSS_TAB_FOLLOW) return; // activeTab-only: overlay stays on the launch tab
2575
+ if (!CROSS_TAB_FOLLOW) return;
2568
2576
  void (async () => {
2569
2577
  await ensureRestored();
2570
- if (overlayPhase === "idle" || !activeNativeRecording) return;
2578
+ if (
2579
+ !shouldFollowOverlay(
2580
+ overlayPhase,
2581
+ Boolean(activeNativeRecording),
2582
+ Boolean(armingNativeRecordingSessionId),
2583
+ )
2584
+ )
2585
+ return;
2571
2586
  await mountOverlayOnTab(info.tabId);
2572
2587
  })();
2573
2588
  });
2574
2589
 
2575
- // The overlay content script is injected on demand (activeTab), so reloading the
2576
- // launch tab wipes it — the camera bubble and toolbar would vanish for the rest
2577
- // of the recording even though capture keeps running in the offscreen document.
2578
- // Re-inject and re-mount once the launch tab finishes reloading while a recording
2579
- // is active. Scoped to the launch tab (the only tab activeTab lets us touch); a
2580
- // same-URL reload keeps that grant.
2590
+ // Keep the launch tab in sync after a reload. Declarative follow covers the
2591
+ // other tabs; this is the explicit recovery path for the tab that originally
2592
+ // started the recording.
2581
2593
  chrome.tabs.onUpdated.addListener((tabId, changeInfo) => {
2582
2594
  if (changeInfo.status !== "complete") return;
2583
2595
  void (async () => {
2584
2596
  await ensureRestored();
2585
- if (overlayPhase === "idle" || !activeNativeRecording) return;
2597
+ if (
2598
+ !shouldFollowOverlay(
2599
+ overlayPhase,
2600
+ Boolean(activeNativeRecording),
2601
+ Boolean(armingNativeRecordingSessionId),
2602
+ )
2603
+ )
2604
+ return;
2586
2605
  if (tabId !== overlayTabId) return;
2587
2606
  await mountOverlayOnTab(tabId);
2588
2607
  broadcastOverlayState();
@@ -1,12 +1,10 @@
1
- // Loom-style in-page overlay host. The background service worker injects this
2
- // into the LAUNCH TAB on demand via chrome.scripting.executeScript (covered by
3
- // the activeTab permission the user grants when they click the extension), NOT
4
- // declaratively on every page — that would need broad "<all_urls>" host access
5
- // and Chrome's in-depth review. So the overlay lives on the tab the recording
6
- // was started from; it does not follow across tabs unless CROSS_TAB_FOLLOW is
7
- // re-enabled in background.ts (see PERMISSIONS.md). Wrapped in an IIFE so it
8
- // emits a single self-contained classic script with no module imports/exports
9
- // and leaks no names into the shared global scope. Its only job is to
1
+ // Loom-style in-page overlay host. The next release declares this on every page
2
+ // so the face bubble and controls can survive tab switches and navigations; the
3
+ // background worker can also inject it into the launch tab for immediate and
4
+ // reload recovery. That broad "<all_urls>" host access is the Chrome Web Store
5
+ // in-depth review boundary. Wrapped in an IIFE so it emits a single self-contained
6
+ // classic script with no module imports/exports and leaks no names into the shared
7
+ // global scope. Its only job is to
10
8
  // mount/unmount the overlay iframes; all UI and control logic lives inside the
11
9
  // extension-origin overlay pages (src/overlay.html). The worker is the source of
12
10
  // truth for which "parts" are visible and pushes them here.
@@ -18,6 +16,12 @@
18
16
  const ALL_PARTS: OverlayPart[] = ["bubble", "countdown", "toolbar", "saving"];
19
17
  const flags = window as unknown as { __clipsOverlayHostReady?: boolean };
20
18
 
19
+ // Declarative and recovery injection can target the same document. Return
20
+ // before any side effects so global listeners remain one-per-page.
21
+ if (flags.__clipsOverlayHostReady) return;
22
+ flags.__clipsOverlayHostReady = true;
23
+ let recordingActive = false;
24
+
21
25
  function errorPayload(error: unknown): {
22
26
  name: string;
23
27
  message: string;
@@ -40,6 +44,7 @@
40
44
  error: unknown,
41
45
  context: Record<string, unknown> = {},
42
46
  ): void {
47
+ if (!recordingActive) return;
43
48
  try {
44
49
  chrome.runtime.sendMessage(
45
50
  {
@@ -73,6 +78,15 @@
73
78
  });
74
79
  });
75
80
 
81
+ try {
82
+ chrome.storage.onChanged.addListener((changes, areaName) => {
83
+ if (areaName !== "local" || !changes.clipsRecordingActive) return;
84
+ recordingActive = changes.clipsRecordingActive.newValue === true;
85
+ });
86
+ } catch {
87
+ /* storage unavailable */
88
+ }
89
+
76
90
  // ----- Draggable, resizable camera bubble ---------------------------------
77
91
  // Size + position persist in storage so the bubble stays where the user put it
78
92
  // across pages and recordings (like the desktop app). The iframe can't move or
@@ -339,7 +353,8 @@
339
353
  try {
340
354
  chrome.storage.local.get("clipsRecordingActive", (value) => {
341
355
  if (chrome.runtime.lastError) return;
342
- if (value && value.clipsRecordingActive) requestState();
356
+ recordingActive = value?.clipsRecordingActive === true;
357
+ if (recordingActive) requestState();
343
358
  });
344
359
  } catch {
345
360
  /* ignore */
@@ -593,13 +608,6 @@
593
608
  lastWantedParts = wanted;
594
609
  }
595
610
 
596
- // Guard against rare double-injection (SPA soft-reloads re-running the script).
597
- if (flags.__clipsOverlayHostReady) {
598
- syncIfRecording();
599
- return;
600
- }
601
- flags.__clipsOverlayHostReady = true;
602
-
603
611
  chrome.runtime.onMessage.addListener((message) => {
604
612
  if (!message || typeof message !== "object") return;
605
613
  const type = (message as { type?: unknown }).type;
@@ -0,0 +1,25 @@
1
+ export type OverlayFollowPhase =
2
+ | "idle"
3
+ | "countdown"
4
+ | "recording"
5
+ | "paused"
6
+ | "saving";
7
+
8
+ export function shouldFollowOverlay(
9
+ phase: OverlayFollowPhase,
10
+ hasActiveNativeRecording: boolean,
11
+ hasArmingNativeRecording: boolean,
12
+ ): boolean {
13
+ return (
14
+ phase !== "idle" && (hasActiveNativeRecording || hasArmingNativeRecording)
15
+ );
16
+ }
17
+
18
+ export async function sendWithInjectionFallback(
19
+ sendMessage: () => Promise<boolean>,
20
+ injectContentScript: () => Promise<boolean>,
21
+ ): Promise<boolean> {
22
+ if (await sendMessage()) return true;
23
+ if (!(await injectContentScript())) return false;
24
+ return sendMessage();
25
+ }
@@ -3,8 +3,51 @@
3
3
  All notable user-facing changes to Agent-Native Content are documented here. Open it any
4
4
  time from the command menu (Cmd+K → "What's new").
5
5
 
6
- ## 2026-06-23
6
+ Older updates live in [the changelog folder](./changelog/) and are included in the in-app "What's new" view.
7
+
8
+ ## 2026-08-14
9
+
10
+ ### Fixed
11
+
12
+ - Images fill the page width by default and remain visible when more images are added
13
+ - Images inserted from the slash command stay saved after upload
14
+ - SVG files can be selected reliably from the image picker
15
+
16
+ ## 2026-08-13
17
+
18
+ ### Fixed
19
+
20
+ - Blocks field conflicts now keep the newer saved version visible instead of leaving a rejected edit on screen
21
+
22
+ ## 2026-08-12
23
+
24
+ ### Improved
25
+
26
+ - Toggle blocks now follow Notion-style Enter and Shift-Tab behavior while preserving summaries and nested paragraphs.
27
+ - Shared Content documents now keep viewers read-only and let commenters add comments without editing the document.
28
+
29
+ ### Fixed
30
+
31
+ - Image uploads now confirm the image can be displayed before reporting success
32
+
33
+ ## 2026-08-11
34
+
35
+ ### Improved
36
+
37
+ - Content opens your last page on return and gives new users a private welcome page.
38
+
39
+ ### Fixed
40
+
41
+ - Chrome no longer offers to install Content as a desktop app.
42
+ - Content mutations delegated from verified Slack DMs now use the member's exact Personal scope and return verified row receipts.
43
+
44
+ ## 2026-08-10
7
45
 
8
46
  ### Added
9
47
 
10
- - See what's new right inside Agent-Native Content — a changelog now lives in the command menu (Cmd+K).
48
+ - Agents can safely insert, update, upsert, delete, and reorder one stable block in a database Blocks field.
49
+
50
+ ### Improved
51
+
52
+ - Database Blocks fields now keep logical block identity through editing, reordering, deletion recovery, and reloads
53
+ - Database row actions now validate exact schemas and safe retries before changing data.
@@ -1,25 +1,37 @@
1
1
  # CRM changelog
2
2
 
3
- ## 2026-07-26
3
+ Older updates live in [the changelog folder](./changelog/) and are included in the in-app "What's new" view.
4
4
 
5
- ### Added
6
-
7
- - CRM connects to HubSpot for scoped account intelligence, saved views, follow-up tasks, evidence, and approval-gated write proposals.
8
- - CRM can prepare a record-scoped, default-off Clips review recipe while keeping media and transcripts in Clips.
9
- - CRM can now find and review evidence-grounded call signals without storing transcripts or media.
10
- - Approved sales automations can now update routine local CRM fields while provider changes remain reviewable proposals.
11
- - CRM can now run as a standalone Native SQL system for accounts, people, opportunities, views, tasks, and cadence without an external provider.
12
- - Pipeline now gives each CRM user a live, permission-aware view of opportunity value by stage.
13
- - CRM can now connect to Salesforce alongside HubSpot for scoped account intelligence and follow-up work.
5
+ ## 2026-08-11
14
6
 
15
7
  ### Improved
16
8
 
17
- - CRM can now manage keyword and smart call-signal trackers from Intelligence settings.
9
+ - Full-page chat composers stay at a focused 750px width.
18
10
 
19
11
  ### Fixed
20
12
 
21
- - Pipeline dashboards now install correctly from the CRM action CLI.
22
- - CRM field validation now explains which fields cannot be edited instead of showing a generic error.
23
- - Fixed HubSpot contact syncs missing records updated after the sync cursor.
24
- - Fixed Pipeline dashboard panels so their opportunity data loads reliably.
25
- - Full-page chat keeps the active conversation when moving to and from the sidebar.
13
+ - Chrome no longer offers to install CRM as a desktop app.
14
+
15
+ ## 2026-08-10
16
+
17
+ ### Improved
18
+
19
+ - Full-page chat now uses the available width up to 1000px for more comfortable prompts and responses.
20
+
21
+ ## 2026-08-07
22
+
23
+ ### Improved
24
+
25
+ - CRM settings show stable skeleton placeholders while lists, fields, connections, and intelligence trackers load.
26
+
27
+ ## 2026-08-06
28
+
29
+ ### Improved
30
+
31
+ - CRM starts faster after a deploy or idle period — one-time data backfills now run once as tracked migrations instead of on every cold start.
32
+
33
+ ## 2026-07-29
34
+
35
+ ### Improved
36
+
37
+ - Sidebar footers now keep Feedback, Search, and Collapse together, with language preferences available in Settings.
@@ -3,8 +3,60 @@
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-06-23
6
+ Older updates live in [the changelog folder](./changelog/) and are included in the in-app "What's new" view.
7
+
8
+ ## 2026-08-18
9
+
10
+ ### Improved
11
+
12
+ - Design chat keeps context out of the composer and uses shorter completion summaries.
13
+
14
+ ### Changed
15
+
16
+ - Advanced Design editor panels are hidden by default while they are refined.
17
+
18
+ ## 2026-08-13
7
19
 
8
20
  ### Added
9
21
 
10
- - See what's new right inside Design — a changelog now lives in the command menu (Cmd+K) and in Settings.
22
+ - The design audit now catches a screen that renders behind a full-frame Alpine overlay — the failure a screenshot cannot show, because the capture waits for Alpine to settle and the overlay is gone by then.
23
+ - The design audit now reports when a screen uses none of its linked design system's fonts, colors, or token names.
24
+
25
+ ### Improved
26
+
27
+ - Attach a UI screenshot and the design is reproduced from it instead of being reinterpreted as three alternative directions.
28
+ - The design system preview now shows how many named tokens were captured, so a large imported system no longer looks like a handful of colors.
29
+
30
+ ### Fixed
31
+
32
+ - A screen whose Alpine overlay would cover it on load — `x-cloak` without its hiding rule, or a broken Alpine script URL — is now caught when it is saved instead of shipping as a blank or covered design.
33
+ - Linking a design system means you never get generic direction cards: exploring variants without real HTML is now refused for that design rather than rendering placeholder screens that ignore your tokens.
34
+ - Your design system, original prompt, and reference screenshots now reach the turn that actually generates the design, instead of being spent on the questions step.
35
+
36
+ ## 2026-08-12
37
+
38
+ ### Improved
39
+
40
+ - Shared designs now keep viewers read-only and let commenters add review comments without editing the design.
41
+
42
+ ## 2026-08-11
43
+
44
+ ### Improved
45
+
46
+ - Design sharing now identifies viewers who can add review comments
47
+ - New designs now skip the intake questions and follow your existing work when Creative Context already holds closely related pieces.
48
+
49
+ ### Fixed
50
+
51
+ - Chrome no longer offers to install Design as a desktop app.
52
+ - Design agent prompts copy successfully in the desktop app.
53
+
54
+ ## 2026-08-10
55
+
56
+ ### Improved
57
+
58
+ - The frame tool draws a plain frame by default, with Screen available in its dropdown
59
+
60
+ ### Fixed
61
+
62
+ - Marquee-selecting layers far down a tall screen now selects the layers you dragged over
@@ -3,8 +3,57 @@
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-06-23
6
+ Older updates live in [the changelog folder](./changelog/) and are included in the in-app "What's new" view.
7
+
8
+ ## 2026-08-20
9
+
10
+ ### Fixed
11
+
12
+ - Dispatch chat now loads its OpenRouter provider reliably in production.
13
+
14
+ ## 2026-08-12
15
+
16
+ ### Improved
17
+
18
+ - Search and pin workspace apps from the app catalog
19
+ - Workspace integration access now shows exactly which apps can reuse each connection.
20
+
21
+ ### Fixed
22
+
23
+ - Dispatch now appears in authorized workspace app directories for fleet-wide administration
24
+
25
+ ## 2026-08-11
26
+
27
+ ### Added
28
+
29
+ - Dispatch shows usage trends, recent prompts, and an agent review path
30
+
31
+ ### Improved
32
+
33
+ - Dispatch no longer shows the generic Chat starter among default app launchers
34
+ - Dispatch settings now link directly to Admin
35
+ - New apps accept human-friendly names and convert them to URL-safe IDs automatically.
36
+ - Integrations and scheduled work open as first-class Electron pages without a duplicate Dispatch navigation shell.
37
+ - Sidebar text is slightly easier to read in light and dark mode.
38
+
39
+ ### Fixed
40
+
41
+ - Chrome no longer offers to install Dispatch as a desktop app.
42
+ - Clicking the Dispatch logo returns to the Overview page
43
+ - Dispatch omits its own app entry from the app switcher.
44
+
45
+ ## 2026-08-10
46
+
47
+ ### Added
48
+
49
+ - Desktop workspace sign-in can now be rolled out gradually while ordinary app sign-in remains unchanged by default.
50
+
51
+ ### Improved
52
+
53
+ - Full-page chat now uses the available width up to 1000px for more comfortable prompts and responses.
54
+
55
+ ## 2026-08-08
7
56
 
8
57
  ### Added
9
58
 
10
- - See what's new right inside Agent-Native Dispatch — a changelog now lives in the command menu (Cmd+K).
59
+ - Chat-first navigation keeps conversations central while opening workspace apps and watched sessions beside them.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-08-20
4
+ ---
5
+
6
+ Dispatch chat now loads its OpenRouter provider reliably in production.
@@ -19,9 +19,11 @@
19
19
  "@agent-native/toolkit": "workspace:*",
20
20
  "@fontsource-variable/inter": "^5.2.8",
21
21
  "@libsql/client": "^0.15.8",
22
+ "@openrouter/ai-sdk-provider": "^2.9.1",
22
23
  "@radix-ui/react-tooltip": "^1.2.7",
23
24
  "@tabler/icons-react": "catalog:",
24
25
  "@tanstack/react-query": "^5.99.2",
26
+ "ai": "6.0.258",
25
27
  "h3": "catalog:",
26
28
  "isbot": "^5",
27
29
  "next-themes": "^0.4.6",
@@ -3,8 +3,34 @@
3
3
  All notable user-facing changes to Chat are documented here. Open it any
4
4
  time from the command menu (Cmd+K → "What's new").
5
5
 
6
- ## 2026-06-23
6
+ Older updates live in [the changelog folder](./changelog/) and are included in the in-app "What's new" view.
7
+
8
+ ## 2026-08-11
9
+
10
+ ### Fixed
11
+
12
+ - Chrome no longer offers to install Factory as a desktop app.
13
+
14
+ ## 2026-08-10
15
+
16
+ ### Improved
17
+
18
+ - Full-page chat now uses the available width up to 1000px for more comfortable prompts and responses.
19
+
20
+ ## 2026-08-08
21
+
22
+ ### Improved
23
+
24
+ - Scheduler health now stays in Settings until diagnostics are needed.
25
+
26
+ ## 2026-08-07
7
27
 
8
28
  ### Added
9
29
 
10
- - See what's new right inside Chat — a changelog now lives in the command menu (Cmd+K).
30
+ - Factory can keep Builder bot pull requests moving by requesting fixes for review feedback, CI failures, and merge conflicts.
31
+
32
+ ## 2026-08-05
33
+
34
+ ### Improved
35
+
36
+ - Factory now keeps production automations running, shows scheduler health and run errors, and can email failure diagnostics.
@@ -3,8 +3,44 @@
3
3
  All notable user-facing changes to Agent-Native Forms are documented here. Open it any
4
4
  time from the command menu (Cmd+K → "What's new").
5
5
 
6
- ## 2026-06-23
6
+ Older updates live in [the changelog folder](./changelog/) and are included in the in-app "What's new" view.
7
7
 
8
- ### Added
8
+ ## 2026-08-11
9
9
 
10
- - See what's new right inside Agent-Native Forms — a changelog now lives in the command menu (Cmd+K).
10
+ ### Improved
11
+
12
+ - Full-page chat composers stay at a focused 750px width.
13
+
14
+ ### Fixed
15
+
16
+ - Chrome no longer offers to install Forms as a desktop app.
17
+ - Fixed public forms so conditional questions stay hidden until relevant and submissions retain a safe page link.
18
+
19
+ ## 2026-08-10
20
+
21
+ ### Improved
22
+
23
+ - Full-page chat now uses the available width up to 1000px for more comfortable prompts and responses.
24
+
25
+ ### Fixed
26
+
27
+ - Forms now keep agent-applied field changes visible after an edit
28
+ - Published form links always use the working public form URL
29
+
30
+ ## 2026-08-06
31
+
32
+ ### Improved
33
+
34
+ - Long-running form requests now continue in the background instead of stopping at the foreground time limit.
35
+
36
+ ## 2026-08-05
37
+
38
+ ### Fixed
39
+
40
+ - Form links can now be Cmd-clicked to open in a new tab
41
+
42
+ ## 2026-07-31
43
+
44
+ ### Improved
45
+
46
+ - The Agent Native logo stays visible when the sidebar is collapsed and toggles the sidebar when clicked.
@@ -3,8 +3,36 @@
3
3
  All notable user-facing changes to Agent-Native Macros are documented here. Open it any
4
4
  time from the command menu (Cmd+K → "What's new").
5
5
 
6
- ## 2026-06-23
6
+ Older updates live in [the changelog folder](./changelog/) and are included in the in-app "What's new" view.
7
+
8
+ ## 2026-07-29
9
+
10
+ ### Improved
11
+
12
+ - Sidebar footers now keep Feedback, Search, and Collapse together without a separate language shortcut.
13
+
14
+ ## 2026-07-25
15
+
16
+ ### Improved
17
+
18
+ - App branding now uses the product name without the Agent-Native prefix.
19
+ - Settings navigation now keeps Manage agent as a dedicated linked destination at the bottom.
20
+
21
+ ## 2026-07-24
22
+
23
+ ### Improved
24
+
25
+ - Secondary controls and dashboard surfaces now use quieter borderless styling.
26
+ - Sidebar utility controls now follow a consistent footer order.
27
+
28
+ ## 2026-07-22
29
+
30
+ ### Improved
31
+
32
+ - Manage agent navigation now uses the connected-nodes icon.
33
+
34
+ ## 2026-07-13
7
35
 
8
36
  ### Added
9
37
 
10
- - See what's new right inside Agent-Native Macros — a changelog now lives in the command menu (Cmd+K).
38
+ - New Agent page: see and manage your agent's context, files, connections, jobs, and external access in one place