@agent-native/core-corpus 0.212.0-nightly-20261021093329 → 0.212.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.
- package/corpus/README.md +1 -1
- package/corpus/templates/analytics/CHANGELOG.md +3 -0
- package/corpus/templates/analytics/actions/query-dbt-semantic-metric.ts +3 -1
- package/corpus/templates/clips/CHANGELOG.md +9 -0
- package/corpus/templates/community/qr/AGENTS.md +24 -0
- package/corpus/templates/community/qr/README.md +18 -0
- package/corpus/templates/community/qr/actions/generate-qr-code.ts +159 -0
- package/corpus/templates/community/qr/actions/run.ts +4 -0
- package/corpus/templates/community/qr/agent-native.json +9 -0
- package/corpus/templates/community/qr/package.json +38 -0
- package/corpus/templates/community/qr/server/db/index.ts +6 -0
- package/corpus/templates/community/qr/server/db/schema.ts +16 -0
- package/corpus/templates/community/qr/server/plugins/db.ts +28 -0
- package/corpus/templates/community/qr/tsconfig.json +7 -0
- package/corpus/templates/content/CHANGELOG.md +12 -0
- package/corpus/templates/design/CHANGELOG.md +4 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +302 -1
- package/corpus/templates/dispatch/server/lib/org-apps-directory.ts +17 -237
- package/corpus/templates/dispatch/server/plugins/labs.ts +4 -0
- package/corpus/templates/dispatch/server/plugins/org-apps-directory.ts +147 -69
- package/corpus/templates/factory/.agents/skills/review-latest-feedback/SKILL.md +4 -2
- package/corpus/templates/factory/.agents/skills/review-prs/SKILL.md +5 -2
- package/corpus/templates/mail/CHANGELOG.md +2 -0
- package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +6 -0
- package/corpus/templates/slides/CHANGELOG.md +8 -0
- package/package.json +1 -1
- package/corpus/templates/analytics/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/assets/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/brain/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/calendar/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/chat/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/clips/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/content/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/crm/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/design/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/design/.generated/bridge/native-builtin-metadata.generated.ts +0 -301
- package/corpus/templates/design/.generated/bridge/native-worker-source.generated.ts +0 -6
- package/corpus/templates/dispatch/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/forms/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/mail/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/plan/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
- package/corpus/templates/slides/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
package/corpus/README.md
CHANGED
|
@@ -62,6 +62,7 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
62
62
|
|
|
63
63
|
### Added
|
|
64
64
|
|
|
65
|
+
- In Edit mode, rename or delete a multi-select filter's group from its dropdown while that group is selected.
|
|
65
66
|
- The Content dashboard can show signups per blog article, collected once a day behind a BigQuery cost cap that a dry run measures first
|
|
66
67
|
- Click a table row to see its numbers broken down by app, or another column, in a side panel.
|
|
67
68
|
- Connect a personal Sigma account to import its dashboards
|
|
@@ -69,6 +70,7 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
69
70
|
|
|
70
71
|
### Improved
|
|
71
72
|
|
|
73
|
+
- Data notes under charts without a date axis now follow the dashboard's time range, so a 90-day view lists a note from two months ago and a 30-day view drops it.
|
|
72
74
|
- Analytics preserves requested organization grain and guides supported ratio query retries
|
|
73
75
|
- Charts that compute their window from today's date can now reuse BigQuery's cached results within the day instead of rerunning the full query on every load.
|
|
74
76
|
- Dashboard callouts and descriptions support Markdown links
|
|
@@ -82,6 +84,7 @@ time from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
82
84
|
|
|
83
85
|
### Fixed
|
|
84
86
|
|
|
87
|
+
- A key-date marker opens its card on hover even where a chart's hovered point sits on top of it.
|
|
85
88
|
- Alert polls enforce a query byte limit and report evaluations that exceed it as errors.
|
|
86
89
|
- All-time dashboard panels keep their historical label when you edit a title or description
|
|
87
90
|
- Analytics answers owner-defined dbt metrics through the Semantic Layer and say when dbt is not ready, instead of reading warehouse tables as the approved definition.
|
|
@@ -51,6 +51,8 @@ const READ_METRIC_QUERY = `query AnalyticsMetricResult($environmentId: BigInt!,
|
|
|
51
51
|
|
|
52
52
|
const MAX_POLL_ATTEMPTS = 8;
|
|
53
53
|
const POLL_INTERVAL_MS = 400;
|
|
54
|
+
// dbt reports COMPILED while MetricFlow is still preparing the query.
|
|
55
|
+
const IN_PROGRESS_QUERY_STATUSES = new Set(["COMPILED", "PENDING", "RUNNING"]);
|
|
54
56
|
const MAX_METADATA_PAGES = 10;
|
|
55
57
|
const MAX_METRIC_QUERY_ROWS = 1_000;
|
|
56
58
|
const MAX_METRIC_QUERY_DAYS = 366;
|
|
@@ -1648,7 +1650,7 @@ export default defineAction({
|
|
|
1648
1650
|
source: "dbt-semantic-layer",
|
|
1649
1651
|
};
|
|
1650
1652
|
}
|
|
1651
|
-
if (status
|
|
1653
|
+
if (!IN_PROGRESS_QUERY_STATUSES.has(status)) {
|
|
1652
1654
|
throw new DbtSemanticLayerError(
|
|
1653
1655
|
"provider_error",
|
|
1654
1656
|
status
|
|
@@ -9,6 +9,10 @@ from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
9
9
|
|
|
10
10
|
- Locally saved desktop recordings now appear in the recovery list with upload and storage setup actions.
|
|
11
11
|
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Clips asks you to connect storage before recording when no storage destination is available.
|
|
15
|
+
|
|
12
16
|
## 2026-10-19
|
|
13
17
|
|
|
14
18
|
### Fixed
|
|
@@ -67,6 +71,11 @@ from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
67
71
|
|
|
68
72
|
### Fixed
|
|
69
73
|
|
|
74
|
+
- If permanently deleting a Clip fails, the Clip and its video are left intact.
|
|
75
|
+
- Rewind now deletes history past its time limit even while it's off or paused.
|
|
76
|
+
- The Replace transcript dialog keeps showing the file name while it closes.
|
|
77
|
+
- Tooltips no longer pop up on their own after a menu, popover, or dialog closes.
|
|
78
|
+
- Video posters load again when your own storage runs on a private network address.
|
|
70
79
|
- Recordings uploaded by a connected agent can now use free Clips storage, like recordings made in the app.
|
|
71
80
|
- An agent upload too large for free hosted storage is now refused before it starts, with the size limit that applies.
|
|
72
81
|
- Agents connected to Clips over MCP can now import a transcript file, instead of getting an unknown-tool error.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# QR Codes Agent Guide
|
|
2
|
+
|
|
3
|
+
Generate QR code images from user-provided URLs or text. The app is a headless
|
|
4
|
+
Agent-Native template: callable actions are the product surface.
|
|
5
|
+
|
|
6
|
+
## Safety and data
|
|
7
|
+
|
|
8
|
+
- Generated PNG and SVG artifacts are public to anyone who has the returned
|
|
9
|
+
HTTPS URL. Tell the user this when returning an image link.
|
|
10
|
+
- Do not save the encoded content or image URL in shared resources. History is
|
|
11
|
+
saved only for an authenticated user and is scoped to that user's email.
|
|
12
|
+
- Image files are uploaded through the configured file provider with
|
|
13
|
+
`recordAsset: false` and a random filename. Never put encoded content in a
|
|
14
|
+
filename.
|
|
15
|
+
- Do not add third-party credentials, customer data, or Builder-specific
|
|
16
|
+
branding to this template.
|
|
17
|
+
|
|
18
|
+
## Agent operations
|
|
19
|
+
|
|
20
|
+
Use `generate-qr-code` for PNG or SVG output. It accepts URLs or text up to
|
|
21
|
+
4096 characters, image sizes from 100 to 2048 pixels, margins from 0 to 16 QR
|
|
22
|
+
modules, and six-digit foreground/background colors.
|
|
23
|
+
|
|
24
|
+
Run local actions from this app directory with `pnpm action <name> [args]`.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# QR Codes
|
|
2
|
+
|
|
3
|
+
An Agent-Native headless app that generates PNG and SVG QR code images for
|
|
4
|
+
URLs or text. It uses the configured file provider for public HTTPS artifacts
|
|
5
|
+
and keeps generated history scoped to the authenticated user.
|
|
6
|
+
|
|
7
|
+
## Provenance and license
|
|
8
|
+
|
|
9
|
+
This sanitized template is maintained in the Agent-Native Framework repository
|
|
10
|
+
and is distributed under the MIT license included here. It contains no personal
|
|
11
|
+
or customer data, credentials, or product branding. The QR action and app
|
|
12
|
+
profile are versioned together.
|
|
13
|
+
|
|
14
|
+
## Local use
|
|
15
|
+
|
|
16
|
+
Install dependencies, connect a file storage provider, then run
|
|
17
|
+
`pnpm action generate-qr-code --content https://example.com`. The returned
|
|
18
|
+
artifact URL is public to anyone who has it.
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
import { defineAction, fail } from "@agent-native/core/action";
|
|
4
|
+
import { uploadFile } from "@agent-native/core/file-upload";
|
|
5
|
+
import QRCode from "qrcode";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
|
|
8
|
+
import { getDb, schema } from "../server/db/index.js";
|
|
9
|
+
|
|
10
|
+
const hexColor = z
|
|
11
|
+
.string()
|
|
12
|
+
.regex(/^#[\da-f]{6}$/i, "Use a six-digit hex color");
|
|
13
|
+
|
|
14
|
+
export default defineAction({
|
|
15
|
+
description:
|
|
16
|
+
"Generate a public PNG or SVG QR code image for a URL or text and return its HTTPS URL. Anyone with the URL can view the image.",
|
|
17
|
+
schema: z.object({
|
|
18
|
+
content: z
|
|
19
|
+
.string()
|
|
20
|
+
.trim()
|
|
21
|
+
.min(1)
|
|
22
|
+
.max(4096)
|
|
23
|
+
.describe("URL or text to encode; up to 4096 characters"),
|
|
24
|
+
format: z
|
|
25
|
+
.enum(["png", "svg"])
|
|
26
|
+
.default("png")
|
|
27
|
+
.describe('Image format: "png" or "svg"; defaults to "png"'),
|
|
28
|
+
size: z.coerce
|
|
29
|
+
.number()
|
|
30
|
+
.int()
|
|
31
|
+
.min(100)
|
|
32
|
+
.max(2048)
|
|
33
|
+
.default(256)
|
|
34
|
+
.describe("Image width in pixels, from 100 to 2048; defaults to 256"),
|
|
35
|
+
margin: z.coerce
|
|
36
|
+
.number()
|
|
37
|
+
.int()
|
|
38
|
+
.min(0)
|
|
39
|
+
.max(16)
|
|
40
|
+
.default(2)
|
|
41
|
+
.describe("Quiet-zone margin in QR modules, from 0 to 16; defaults to 2"),
|
|
42
|
+
fgColor: hexColor
|
|
43
|
+
// guard:allow-raw-color — QR foreground output defaults to black for reliable scanning.
|
|
44
|
+
.default("#000000")
|
|
45
|
+
// guard:allow-raw-color — the documented QR foreground format includes its default value.
|
|
46
|
+
.describe("Foreground color as #RRGGBB; defaults to #000000"),
|
|
47
|
+
bgColor: hexColor
|
|
48
|
+
// guard:allow-raw-color — QR background output defaults to white for reliable scanning.
|
|
49
|
+
.default("#ffffff")
|
|
50
|
+
// guard:allow-raw-color — the documented QR background format includes its default value.
|
|
51
|
+
.describe("Background color as #RRGGBB; defaults to #ffffff"),
|
|
52
|
+
}),
|
|
53
|
+
http: { method: "POST" },
|
|
54
|
+
requiresAuth: true,
|
|
55
|
+
readOnly: false,
|
|
56
|
+
run: async (args, ctx) => {
|
|
57
|
+
const options = {
|
|
58
|
+
width: args.size,
|
|
59
|
+
margin: args.margin,
|
|
60
|
+
color: { dark: args.fgColor, light: args.bgColor },
|
|
61
|
+
errorCorrectionLevel: "H" as const,
|
|
62
|
+
};
|
|
63
|
+
let data: Buffer;
|
|
64
|
+
let mimeType: string;
|
|
65
|
+
|
|
66
|
+
try {
|
|
67
|
+
if (args.format === "svg") {
|
|
68
|
+
const svg = await QRCode.toString(args.content, {
|
|
69
|
+
...options,
|
|
70
|
+
type: "svg",
|
|
71
|
+
});
|
|
72
|
+
data = Buffer.from(svg, "utf8");
|
|
73
|
+
mimeType = "image/svg+xml";
|
|
74
|
+
} else {
|
|
75
|
+
data = await QRCode.toBuffer(args.content, options);
|
|
76
|
+
mimeType = "image/png";
|
|
77
|
+
}
|
|
78
|
+
} catch {
|
|
79
|
+
fail("The supplied content could not be encoded as a QR code.", {
|
|
80
|
+
errorCode: "invalid_qr_content",
|
|
81
|
+
statusCode: 400,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const ownerEmail = ctx?.userEmail?.trim() || undefined;
|
|
86
|
+
const upload = await uploadFile({
|
|
87
|
+
data,
|
|
88
|
+
filename: `${randomUUID()}.${args.format}`,
|
|
89
|
+
mimeType,
|
|
90
|
+
...(ownerEmail ? { ownerEmail } : {}),
|
|
91
|
+
recordAsset: false,
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
if (!upload) {
|
|
95
|
+
fail(
|
|
96
|
+
"File storage is not configured. Connect a file upload provider and try again.",
|
|
97
|
+
{
|
|
98
|
+
errorCode: "file_storage_unavailable",
|
|
99
|
+
statusCode: 503,
|
|
100
|
+
},
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
let publicUrl: URL;
|
|
105
|
+
try {
|
|
106
|
+
publicUrl = new URL(upload.url);
|
|
107
|
+
} catch {
|
|
108
|
+
fail("The file upload provider returned an invalid artifact URL.", {
|
|
109
|
+
errorCode: "invalid_artifact_url",
|
|
110
|
+
statusCode: 502,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
if (
|
|
114
|
+
publicUrl.protocol !== "https:" ||
|
|
115
|
+
publicUrl.username.length > 0 ||
|
|
116
|
+
publicUrl.password.length > 0
|
|
117
|
+
) {
|
|
118
|
+
fail(
|
|
119
|
+
"The file upload provider must return a public HTTPS artifact URL.",
|
|
120
|
+
{
|
|
121
|
+
errorCode: "invalid_artifact_url",
|
|
122
|
+
statusCode: 502,
|
|
123
|
+
},
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const historySaved = Boolean(ownerEmail);
|
|
128
|
+
if (ownerEmail) {
|
|
129
|
+
await getDb()
|
|
130
|
+
.insert(schema.qrHistory)
|
|
131
|
+
.values({
|
|
132
|
+
id: randomUUID(),
|
|
133
|
+
ownerEmail,
|
|
134
|
+
label: args.content.slice(0, 40),
|
|
135
|
+
content: args.content,
|
|
136
|
+
fgColor: args.fgColor,
|
|
137
|
+
bgColor: args.bgColor,
|
|
138
|
+
format: args.format,
|
|
139
|
+
size: args.size,
|
|
140
|
+
margin: args.margin,
|
|
141
|
+
createdAt: new Date().toISOString(),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return {
|
|
146
|
+
message: `Generated a public ${args.format.toUpperCase()} QR code image: ${upload.url}. Anyone with the URL can fetch it.`,
|
|
147
|
+
url: upload.url,
|
|
148
|
+
mimeType,
|
|
149
|
+
format: args.format,
|
|
150
|
+
fgColor: args.fgColor,
|
|
151
|
+
bgColor: args.bgColor,
|
|
152
|
+
size: args.size,
|
|
153
|
+
margin: args.margin,
|
|
154
|
+
byteSize: data.byteLength,
|
|
155
|
+
content: args.content,
|
|
156
|
+
historySaved,
|
|
157
|
+
};
|
|
158
|
+
},
|
|
159
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "qr",
|
|
3
|
+
"displayName": "QR Codes",
|
|
4
|
+
"private": true,
|
|
5
|
+
"description": "Create PNG and SVG QR code images for URLs or text.",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"action": "agent-native action",
|
|
9
|
+
"agent": "agent-native agent",
|
|
10
|
+
"agent-native:doctor": "agent-native doctor",
|
|
11
|
+
"typecheck": "tsc --noEmit"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@agent-native/core": "^0.210.2",
|
|
15
|
+
"postgres": "^3.4.9",
|
|
16
|
+
"qrcode": "^1.5.4",
|
|
17
|
+
"zod": "^4.6.7"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@types/node": "^26.6.5",
|
|
21
|
+
"@types/qrcode": "^1.5.6",
|
|
22
|
+
"tsx": "^4.23.15",
|
|
23
|
+
"typescript": "^7.0.2"
|
|
24
|
+
},
|
|
25
|
+
"packageManager": "pnpm@10.29.1",
|
|
26
|
+
"agent-native": {
|
|
27
|
+
"aliases": [
|
|
28
|
+
"QR code",
|
|
29
|
+
"QR codes",
|
|
30
|
+
"QR image"
|
|
31
|
+
],
|
|
32
|
+
"whenToUse": [
|
|
33
|
+
"Create a QR code image for a URL or text to share in a message.",
|
|
34
|
+
"Create a QR code image for insertion into a slide or document.",
|
|
35
|
+
"Create a QR code image for a clip or other share link."
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { integer, now, table, text } from "@agent-native/core/db/schema";
|
|
2
|
+
|
|
3
|
+
export const qrHistory = table("qr_history", {
|
|
4
|
+
id: text("id").primaryKey(),
|
|
5
|
+
ownerEmail: text("owner_email").notNull().default(""),
|
|
6
|
+
label: text("label").notNull(),
|
|
7
|
+
content: text("content").notNull(),
|
|
8
|
+
// guard:allow-raw-color — persisted QR output default must remain black.
|
|
9
|
+
fgColor: text("fg_color").notNull().default("#000000"),
|
|
10
|
+
// guard:allow-raw-color — persisted QR output default must remain white.
|
|
11
|
+
bgColor: text("bg_color").notNull().default("#ffffff"),
|
|
12
|
+
format: text("format").notNull().default("png"),
|
|
13
|
+
size: integer("size").notNull().default(256),
|
|
14
|
+
margin: integer("margin").notNull().default(2),
|
|
15
|
+
createdAt: text("created_at").notNull().default(now()),
|
|
16
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { runMigrations } from "@agent-native/core/db";
|
|
2
|
+
|
|
3
|
+
export default runMigrations(
|
|
4
|
+
[
|
|
5
|
+
{
|
|
6
|
+
version: 1,
|
|
7
|
+
sql: `CREATE TABLE IF NOT EXISTS qr_history (
|
|
8
|
+
id TEXT PRIMARY KEY,
|
|
9
|
+
owner_email TEXT NOT NULL DEFAULT '',
|
|
10
|
+
label TEXT NOT NULL,
|
|
11
|
+
content TEXT NOT NULL,
|
|
12
|
+
/* guard:allow-raw-color — persisted QR output default must remain black. */
|
|
13
|
+
fg_color TEXT NOT NULL DEFAULT '#000000',
|
|
14
|
+
/* guard:allow-raw-color — persisted QR output default must remain white. */
|
|
15
|
+
bg_color TEXT NOT NULL DEFAULT '#ffffff',
|
|
16
|
+
format TEXT NOT NULL DEFAULT 'png',
|
|
17
|
+
size INTEGER NOT NULL DEFAULT 256,
|
|
18
|
+
margin INTEGER NOT NULL DEFAULT 2,
|
|
19
|
+
created_at TEXT NOT NULL DEFAULT (now())
|
|
20
|
+
)`,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
version: 2,
|
|
24
|
+
sql: `CREATE INDEX IF NOT EXISTS qr_history_owner_created_idx ON qr_history(owner_email, created_at DESC)`,
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
{ table: "qr_migrations" },
|
|
28
|
+
);
|
|
@@ -7,6 +7,7 @@ time from the command menu (Cmd+K → "What's new").
|
|
|
7
7
|
|
|
8
8
|
### Improved
|
|
9
9
|
|
|
10
|
+
- You can comment on text in any Blocks field tab; each tab shows its open comments, and the Comments panel groups and filters them by tab
|
|
10
11
|
- Database views can filter one property more than once, number filters add ≥ and ≤, and filter chips name their operator, like "Status: is not done".
|
|
11
12
|
|
|
12
13
|
### Fixed
|
|
@@ -21,8 +22,13 @@ time from the command menu (Cmd+K → "What's new").
|
|
|
21
22
|
|
|
22
23
|
## 2026-10-18
|
|
23
24
|
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- Connected AI assistants can link a new collection to a GitHub folder: each Markdown file becomes a view-only page, and a sync brings in the latest pushes
|
|
28
|
+
|
|
24
29
|
### Improved
|
|
25
30
|
|
|
31
|
+
- Collections linked to a GitHub folder bring in pushes on their own within about a minute, and open pages update in place for everyone reading them
|
|
26
32
|
- Collection pages with more than one Blocks field show each field as a tab you can rename or delete
|
|
27
33
|
- Block text and background colors use Content's own palette, and colored backgrounds are now readable in dark mode
|
|
28
34
|
|
|
@@ -46,6 +52,12 @@ time from the command menu (Cmd+K → "What's new").
|
|
|
46
52
|
- Typing steadily in one tab no longer makes another open tab show "This page changed elsewhere" after its edits saved.
|
|
47
53
|
- Reopening a page after someone else renamed it no longer adds a copy of your edits to Version History
|
|
48
54
|
|
|
55
|
+
## 2026-10-15
|
|
56
|
+
|
|
57
|
+
### Fixed
|
|
58
|
+
|
|
59
|
+
- The comment @ menu lists each AI model once, instead of once per provider when Builder.io and a provider key are both connected.
|
|
60
|
+
|
|
49
61
|
## 2026-10-12
|
|
50
62
|
|
|
51
63
|
### Improved
|
|
@@ -7,6 +7,7 @@ from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
7
7
|
|
|
8
8
|
### Fixed
|
|
9
9
|
|
|
10
|
+
- Design generation now counts file renames and type changes as saved output.
|
|
10
11
|
- Design reports uncertain generation outcomes clearly and confirms completed file deletions
|
|
11
12
|
- Generation offers a retry when a completed run saved no design files
|
|
12
13
|
|
|
@@ -14,10 +15,13 @@ from the command menu (Cmd+K → "What's new") or from Settings.
|
|
|
14
15
|
|
|
15
16
|
### Improved
|
|
16
17
|
|
|
18
|
+
- Phones now see a page that shares or emails the link to a larger screen, instead of an editor that isn't built for small screens.
|
|
17
19
|
- Suggested prompts and the quieter Skip prompt action now share one row.
|
|
18
20
|
|
|
19
21
|
### Fixed
|
|
20
22
|
|
|
23
|
+
- Public Design previews no longer show spurious export errors
|
|
24
|
+
- Screen image uploads no longer overwrite edits made during the upload.
|
|
21
25
|
- Failed Design generations now show an error and retry action instead of appearing complete
|
|
22
26
|
- Finished design output stays available when a generation run stops unexpectedly.
|
|
23
27
|
- Reopening a design no longer reports completed generation as stopped.
|