@agent-native/core 0.165.1 → 0.165.3
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/corpus/templates/analytics/CHANGELOG.md +37 -3
- package/corpus/templates/analytics/changelog/2026-08-20-staged-data-limit-recovery.md +6 -0
- package/corpus/templates/assets/CHANGELOG.md +36 -2
- package/corpus/templates/brain/CHANGELOG.md +33 -3
- package/corpus/templates/calendar/CHANGELOG.md +45 -2
- package/corpus/templates/chat/CHANGELOG.md +29 -3
- package/corpus/templates/clips/CHANGELOG.md +55 -2
- package/corpus/templates/clips/app/i18n/en-US.ts +6 -11
- package/corpus/templates/clips/app/root.tsx +2 -1
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +3 -3
- package/corpus/templates/clips/app/routes/download.tsx +111 -17
- package/corpus/templates/clips/changelog/2026-08-20-cross-tab-recording-controls.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-20-overlay-follow-review-fixes.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-20-provider-key-recovery.md +6 -0
- package/corpus/templates/clips/chrome-extension/PERMISSIONS.md +29 -46
- package/corpus/templates/clips/chrome-extension/STORE_DRAFT.md +1 -1
- package/corpus/templates/clips/chrome-extension/public/manifest.json +9 -2
- package/corpus/templates/clips/chrome-extension/src/background.ts +65 -46
- package/corpus/templates/clips/chrome-extension/src/content-script.ts +25 -17
- package/corpus/templates/clips/chrome-extension/src/overlay-follow.ts +25 -0
- package/corpus/templates/clips/server/routes/api/clips-latest.json.get.ts +109 -46
- package/corpus/templates/content/CHANGELOG.md +45 -2
- package/corpus/templates/crm/CHANGELOG.md +28 -16
- package/corpus/templates/design/CHANGELOG.md +54 -2
- package/corpus/templates/dispatch/CHANGELOG.md +51 -2
- package/corpus/templates/factory/CHANGELOG.md +28 -2
- package/corpus/templates/forms/CHANGELOG.md +39 -3
- package/corpus/templates/macros/CHANGELOG.md +30 -2
- package/corpus/templates/mail/CHANGELOG.md +34 -3
- package/corpus/templates/plan/CHANGELOG.md +34 -3
- package/corpus/templates/slides/CHANGELOG.md +73 -2
- package/corpus/templates/tasks/CHANGELOG.md +35 -0
- package/corpus/templates/tasks/app/root.tsx +8 -1
- package/dist/changelog/parse.d.ts +12 -4
- package/dist/changelog/parse.js +61 -23
- package/dist/cli/changelog.js +9 -11
- package/dist/client/blocks/library/diagram.js +1 -1
- package/dist/client/chat/run-recovery.js +8 -3
- package/dist/collab/routes.d.ts +1 -1
- package/dist/deploy/workspace-deploy.js +7 -0
- package/dist/mcp-client/oauth-routes.d.ts +1 -0
- package/dist/mcp-client/oauth-routes.js +15 -2
- package/dist/mcp-client/remote-store.js +83 -43
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +5 -5
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/provider-api.js +16 -4
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/google-oauth-credentials.js +14 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/settings/index.d.ts +1 -1
- package/dist/settings/index.js +1 -1
- package/dist/settings/store.d.ts +7 -1
- package/dist/settings/store.js +25 -3
- package/dist/settings/user-settings.d.ts +2 -0
- package/dist/settings/user-settings.js +65 -2
- package/dist/templates/chat/CHANGELOG.md +29 -3
- package/docs/content/deployment.mdx +89 -14
- package/package.json +3 -3
- package/src/templates/chat/CHANGELOG.md +29 -3
- package/corpus/templates/.retired/issues/package.json +0 -7
- package/corpus/templates/.retired/meeting-notes/package.json +0 -7
- package/corpus/templates/.retired/recruiting/package.json +0 -7
- package/corpus/templates/.retired/scheduling/package.json +0 -7
- package/corpus/templates/.retired/voice/package.json +0 -7
- package/corpus/templates/voice/.agents/skills/upgrade-agent-native/SKILL.md +0 -87
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
createError,
|
|
3
|
+
defineEventHandler,
|
|
4
|
+
getQuery,
|
|
5
|
+
setResponseHeaders,
|
|
6
|
+
} from "h3";
|
|
2
7
|
|
|
3
8
|
/**
|
|
4
9
|
* Same-origin endpoint that tells the download page which user-facing
|
|
@@ -12,14 +17,13 @@ import { defineEventHandler, setResponseHeaders, createError } from "h3";
|
|
|
12
17
|
* /download want the raw installers (.dmg / .msi / .AppImage).
|
|
13
18
|
*
|
|
14
19
|
* This route therefore hits GitHub's REST API, paginates through
|
|
15
|
-
* releases until it finds the most recent published
|
|
16
|
-
* and returns its asset list plus metadata.
|
|
20
|
+
* releases until it finds the most recent published release for the requested
|
|
21
|
+
* channel, and returns its asset list plus metadata.
|
|
17
22
|
*
|
|
18
|
-
* The
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* same build by default.
|
|
23
|
+
* The channel's pointer release is still the release-channel hint: when it
|
|
24
|
+
* has a signed updater manifest, we resolve that manifest's version back to
|
|
25
|
+
* the matching versioned release before scanning. That keeps the manual
|
|
26
|
+
* download page and the in-app updater pointed at the same build by default.
|
|
23
27
|
*
|
|
24
28
|
* ## Rate-limit hardening
|
|
25
29
|
*
|
|
@@ -38,14 +42,30 @@ import { defineEventHandler, setResponseHeaders, createError } from "h3";
|
|
|
38
42
|
|
|
39
43
|
const RELEASES_URL_BASE =
|
|
40
44
|
"https://api.github.com/repos/BuilderIO/agent-native/releases";
|
|
41
|
-
const UPDATER_MANIFEST_URL =
|
|
42
|
-
"https://github.com/BuilderIO/agent-native/releases/download/clips-latest/clips-latest.json";
|
|
43
45
|
const PER_PAGE = 100;
|
|
44
|
-
// Up to 10 pages = 1000 releases. If
|
|
45
|
-
// something else is wrong and the 404 is correct.
|
|
46
|
+
// Up to 10 pages = 1000 releases. If the requested channel has not appeared
|
|
47
|
+
// by then, something else is wrong and the 404 is correct.
|
|
46
48
|
const MAX_PAGES = 10;
|
|
47
49
|
const CACHE_TTL_MS = 5 * 60_000;
|
|
48
50
|
|
|
51
|
+
export type ClipsReleaseChannel = "production" | "nightly";
|
|
52
|
+
|
|
53
|
+
const RELEASE_CHANNEL_CONFIG: Record<
|
|
54
|
+
ClipsReleaseChannel,
|
|
55
|
+
{ releasePrefix: string; updaterManifestUrl: string }
|
|
56
|
+
> = {
|
|
57
|
+
production: {
|
|
58
|
+
releasePrefix: "clips-v",
|
|
59
|
+
updaterManifestUrl:
|
|
60
|
+
"https://github.com/BuilderIO/agent-native/releases/download/clips-latest/clips-latest.json",
|
|
61
|
+
},
|
|
62
|
+
nightly: {
|
|
63
|
+
releasePrefix: "clips-nightly-v",
|
|
64
|
+
updaterManifestUrl:
|
|
65
|
+
"https://github.com/BuilderIO/agent-native/releases/download/clips-nightly-latest/clips-nightly-latest.json",
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
|
|
49
69
|
interface GhAsset {
|
|
50
70
|
name: string;
|
|
51
71
|
browser_download_url: string;
|
|
@@ -121,7 +141,9 @@ export function classifyClipsAsset(
|
|
|
121
141
|
}
|
|
122
142
|
|
|
123
143
|
function parseClipsVersion(tagName: string): number[] | null {
|
|
124
|
-
const match = /^clips
|
|
144
|
+
const match = /^clips(?:-nightly)?-v(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/.exec(
|
|
145
|
+
tagName,
|
|
146
|
+
);
|
|
125
147
|
if (!match) return null;
|
|
126
148
|
return match.slice(1, 4).map((part) => Number(part));
|
|
127
149
|
}
|
|
@@ -139,6 +161,22 @@ export function compareClipsReleaseTags(a: string, b: string): number {
|
|
|
139
161
|
return 0;
|
|
140
162
|
}
|
|
141
163
|
|
|
164
|
+
export function isClipsReleaseForChannel(
|
|
165
|
+
release: GhRelease,
|
|
166
|
+
channel: ClipsReleaseChannel,
|
|
167
|
+
): boolean {
|
|
168
|
+
if (release.draft || !hasInstallerAssets(release)) return false;
|
|
169
|
+
if (channel === "production") {
|
|
170
|
+
return (
|
|
171
|
+
!release.prerelease && /^clips-v\d+\.\d+\.\d+$/.test(release.tag_name)
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
return (
|
|
175
|
+
release.prerelease &&
|
|
176
|
+
/^clips-nightly-v\d+\.\d+\.\d+(?:[-+].*)?$/.test(release.tag_name)
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
|
|
142
180
|
function isBetterRelease(candidate: GhRelease, current: GhRelease | null) {
|
|
143
181
|
if (!current) return true;
|
|
144
182
|
const versionOrder = compareClipsReleaseTags(
|
|
@@ -158,8 +196,11 @@ function hasInstallerAssets(release: GhRelease) {
|
|
|
158
196
|
);
|
|
159
197
|
}
|
|
160
198
|
|
|
161
|
-
|
|
162
|
-
|
|
199
|
+
const cache = new Map<
|
|
200
|
+
ClipsReleaseChannel,
|
|
201
|
+
{ data: DownloadManifest; ts: number }
|
|
202
|
+
>();
|
|
203
|
+
const inFlight = new Map<ClipsReleaseChannel, Promise<DownloadManifest>>();
|
|
163
204
|
|
|
164
205
|
class UpstreamError extends Error {
|
|
165
206
|
statusCode: number;
|
|
@@ -215,8 +256,10 @@ function isUpdaterManifestLike(value: unknown): value is UpdaterManifest {
|
|
|
215
256
|
return typeof obj.version === "string" && obj.version.length > 0;
|
|
216
257
|
}
|
|
217
258
|
|
|
218
|
-
async function fetchUpdaterManifest(
|
|
219
|
-
|
|
259
|
+
async function fetchUpdaterManifest(
|
|
260
|
+
channel: ClipsReleaseChannel,
|
|
261
|
+
): Promise<UpdaterManifest> {
|
|
262
|
+
const res = await fetch(RELEASE_CHANNEL_CONFIG[channel].updaterManifestUrl, {
|
|
220
263
|
headers: {
|
|
221
264
|
accept: "application/json",
|
|
222
265
|
"user-agent": "clips-download-page",
|
|
@@ -236,35 +279,38 @@ async function fetchUpdaterManifest(): Promise<UpdaterManifest> {
|
|
|
236
279
|
return json;
|
|
237
280
|
}
|
|
238
281
|
|
|
239
|
-
async function findUpdaterPinnedRelease(
|
|
282
|
+
async function findUpdaterPinnedRelease(
|
|
283
|
+
channel: ClipsReleaseChannel,
|
|
284
|
+
): Promise<GhRelease | null> {
|
|
240
285
|
try {
|
|
241
|
-
const manifest = await fetchUpdaterManifest();
|
|
242
|
-
const
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
286
|
+
const manifest = await fetchUpdaterManifest(channel);
|
|
287
|
+
const releasePrefix = RELEASE_CHANNEL_CONFIG[channel].releasePrefix;
|
|
288
|
+
const version = manifest.version
|
|
289
|
+
.replace(/^clips(?:-nightly)?-v/, "")
|
|
290
|
+
.replace(/^v/, "");
|
|
291
|
+
const release = await fetchReleaseByTag(`${releasePrefix}${version}`);
|
|
292
|
+
return release && isClipsReleaseForChannel(release, channel)
|
|
293
|
+
? release
|
|
294
|
+
: null;
|
|
249
295
|
} catch {
|
|
250
296
|
return null;
|
|
251
297
|
}
|
|
252
298
|
}
|
|
253
299
|
|
|
254
|
-
async function findLatestClipsRelease(
|
|
255
|
-
|
|
300
|
+
async function findLatestClipsRelease(
|
|
301
|
+
channel: ClipsReleaseChannel,
|
|
302
|
+
): Promise<GhRelease | null> {
|
|
303
|
+
// Start with the updater's channel pointer so fresh manual installs and
|
|
256
304
|
// auto-updates agree about the channel's current version. Then scan the
|
|
257
305
|
// versioned releases as a fallback/guard and prefer the highest semver
|
|
258
306
|
// tag; a republished older tag must not beat a newer build just because
|
|
259
307
|
// it has a later `published_at`.
|
|
260
|
-
let best: GhRelease | null = await findUpdaterPinnedRelease();
|
|
308
|
+
let best: GhRelease | null = await findUpdaterPinnedRelease(channel);
|
|
261
309
|
for (let page = 1; page <= MAX_PAGES; page++) {
|
|
262
310
|
const batch = await fetchPage(page);
|
|
263
311
|
if (batch.length === 0) break;
|
|
264
312
|
for (const r of batch) {
|
|
265
|
-
if (r
|
|
266
|
-
if (!r.tag_name.startsWith("clips-v")) continue;
|
|
267
|
-
if (!hasInstallerAssets(r)) continue;
|
|
313
|
+
if (!isClipsReleaseForChannel(r, channel)) continue;
|
|
268
314
|
if (isBetterRelease(r, best)) {
|
|
269
315
|
best = r;
|
|
270
316
|
}
|
|
@@ -274,16 +320,21 @@ async function findLatestClipsRelease(): Promise<GhRelease | null> {
|
|
|
274
320
|
return best;
|
|
275
321
|
}
|
|
276
322
|
|
|
277
|
-
async function buildManifest(
|
|
278
|
-
|
|
323
|
+
async function buildManifest(
|
|
324
|
+
channel: ClipsReleaseChannel,
|
|
325
|
+
): Promise<DownloadManifest> {
|
|
326
|
+
const latest = await findLatestClipsRelease(channel);
|
|
279
327
|
if (!latest) {
|
|
280
328
|
throw createError({
|
|
281
329
|
statusCode: 404,
|
|
282
|
-
statusMessage:
|
|
330
|
+
statusMessage:
|
|
331
|
+
channel === "nightly"
|
|
332
|
+
? "No published clips-nightly-v* release found"
|
|
333
|
+
: "No published clips-v* release found",
|
|
283
334
|
});
|
|
284
335
|
}
|
|
285
336
|
return {
|
|
286
|
-
version: latest.tag_name.replace(/^clips
|
|
337
|
+
version: latest.tag_name.replace(/^clips(?:-nightly)?-v/, ""),
|
|
287
338
|
tag: latest.tag_name,
|
|
288
339
|
pub_date: latest.published_at,
|
|
289
340
|
notes: latest.body,
|
|
@@ -296,31 +347,43 @@ async function buildManifest(): Promise<DownloadManifest> {
|
|
|
296
347
|
};
|
|
297
348
|
}
|
|
298
349
|
|
|
299
|
-
async function getManifest(
|
|
350
|
+
async function getManifest(
|
|
351
|
+
channel: ClipsReleaseChannel = "production",
|
|
352
|
+
): Promise<DownloadManifest> {
|
|
300
353
|
const now = Date.now();
|
|
301
|
-
|
|
302
|
-
if (
|
|
303
|
-
|
|
354
|
+
const cached = cache.get(channel);
|
|
355
|
+
if (cached && now - cached.ts < CACHE_TTL_MS) return cached.data;
|
|
356
|
+
const pending = inFlight.get(channel);
|
|
357
|
+
if (pending) return pending;
|
|
358
|
+
const request = (async () => {
|
|
304
359
|
try {
|
|
305
|
-
const data = await buildManifest();
|
|
306
|
-
cache
|
|
360
|
+
const data = await buildManifest(channel);
|
|
361
|
+
cache.set(channel, { data, ts: Date.now() });
|
|
307
362
|
return data;
|
|
308
363
|
} catch (err) {
|
|
309
364
|
// Stale-while-error: if we have an older payload, serve it. Only
|
|
310
365
|
// bubble the error if the cache is empty.
|
|
311
|
-
if (
|
|
366
|
+
if (cached) return cached.data;
|
|
312
367
|
throw err;
|
|
313
368
|
} finally {
|
|
314
|
-
inFlight
|
|
369
|
+
inFlight.delete(channel);
|
|
315
370
|
}
|
|
316
371
|
})();
|
|
317
|
-
|
|
372
|
+
inFlight.set(channel, request);
|
|
373
|
+
return request;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
export function normalizeClipsReleaseChannel(
|
|
377
|
+
value: unknown,
|
|
378
|
+
): ClipsReleaseChannel {
|
|
379
|
+
return value === "nightly" ? "nightly" : "production";
|
|
318
380
|
}
|
|
319
381
|
|
|
320
382
|
export default defineEventHandler(async (event) => {
|
|
383
|
+
const channel = normalizeClipsReleaseChannel(getQuery(event).channel);
|
|
321
384
|
let manifest: DownloadManifest;
|
|
322
385
|
try {
|
|
323
|
-
manifest = await getManifest();
|
|
386
|
+
manifest = await getManifest(channel);
|
|
324
387
|
} catch (err) {
|
|
325
388
|
const e = err as {
|
|
326
389
|
statusCode?: number;
|
|
@@ -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
|
-
|
|
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
|
-
-
|
|
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
|
-
|
|
3
|
+
Older updates live in [the changelog folder](./changelog/) and are included in the in-app "What's new" view.
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
-
|
|
9
|
+
- Full-page chat composers stay at a focused 750px width.
|
|
18
10
|
|
|
19
11
|
### Fixed
|
|
20
12
|
|
|
21
|
-
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|
-
|
|
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
|
-
-
|
|
59
|
+
- Chat-first navigation keeps conversations central while opening workspace apps and watched sessions beside them.
|
|
@@ -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
|
-
|
|
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
|
-
-
|
|
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
|
-
|
|
6
|
+
Older updates live in [the changelog folder](./changelog/) and are included in the in-app "What's new" view.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
## 2026-08-11
|
|
9
9
|
|
|
10
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
38
|
+
- New Agent page: see and manage your agent's context, files, connections, jobs, and external access in one place
|
|
@@ -3,8 +3,39 @@
|
|
|
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
|
-
|
|
6
|
+
Older updates live in [the changelog folder](./changelog/) and are included in the in-app "What's new" view.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
## 2026-08-18
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Pinned labels now keep loading until matching inbox messages are found.
|
|
13
|
+
|
|
14
|
+
## 2026-08-17
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Gmail signatures now preserve images and support paste or upload in Mail
|
|
19
|
+
- Mail now updates durable drafting preferences without opening a draft
|
|
20
|
+
|
|
21
|
+
## 2026-08-12
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Agent-sent messages appear in Mail immediately after Gmail sends them.
|
|
26
|
+
|
|
27
|
+
## 2026-08-11
|
|
28
|
+
|
|
29
|
+
### Improved
|
|
30
|
+
|
|
31
|
+
- Google sign-in now opens the Gmail connection flow directly
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- Chrome no longer offers to install Mail as a desktop app.
|
|
36
|
+
|
|
37
|
+
## 2026-08-06
|
|
38
|
+
|
|
39
|
+
### Improved
|
|
40
|
+
|
|
41
|
+
- Long-running mail requests now continue in the background instead of stopping at the foreground time limit.
|