@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.
Files changed (42) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/CHANGELOG.md +3 -0
  3. package/corpus/templates/analytics/actions/query-dbt-semantic-metric.ts +3 -1
  4. package/corpus/templates/clips/CHANGELOG.md +9 -0
  5. package/corpus/templates/community/qr/AGENTS.md +24 -0
  6. package/corpus/templates/community/qr/README.md +18 -0
  7. package/corpus/templates/community/qr/actions/generate-qr-code.ts +159 -0
  8. package/corpus/templates/community/qr/actions/run.ts +4 -0
  9. package/corpus/templates/community/qr/agent-native.json +9 -0
  10. package/corpus/templates/community/qr/package.json +38 -0
  11. package/corpus/templates/community/qr/server/db/index.ts +6 -0
  12. package/corpus/templates/community/qr/server/db/schema.ts +16 -0
  13. package/corpus/templates/community/qr/server/plugins/db.ts +28 -0
  14. package/corpus/templates/community/qr/tsconfig.json +7 -0
  15. package/corpus/templates/content/CHANGELOG.md +12 -0
  16. package/corpus/templates/design/CHANGELOG.md +4 -0
  17. package/corpus/templates/dispatch/app/i18n-data.ts +302 -1
  18. package/corpus/templates/dispatch/server/lib/org-apps-directory.ts +17 -237
  19. package/corpus/templates/dispatch/server/plugins/labs.ts +4 -0
  20. package/corpus/templates/dispatch/server/plugins/org-apps-directory.ts +147 -69
  21. package/corpus/templates/factory/.agents/skills/review-latest-feedback/SKILL.md +4 -2
  22. package/corpus/templates/factory/.agents/skills/review-prs/SKILL.md +5 -2
  23. package/corpus/templates/mail/CHANGELOG.md +2 -0
  24. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +6 -0
  25. package/corpus/templates/slides/CHANGELOG.md +8 -0
  26. package/package.json +1 -1
  27. package/corpus/templates/analytics/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  28. package/corpus/templates/assets/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  29. package/corpus/templates/brain/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  30. package/corpus/templates/calendar/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  31. package/corpus/templates/chat/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  32. package/corpus/templates/clips/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  33. package/corpus/templates/content/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  34. package/corpus/templates/crm/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  35. package/corpus/templates/design/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  36. package/corpus/templates/design/.generated/bridge/native-builtin-metadata.generated.ts +0 -301
  37. package/corpus/templates/design/.generated/bridge/native-worker-source.generated.ts +0 -6
  38. package/corpus/templates/dispatch/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  39. package/corpus/templates/forms/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  40. package/corpus/templates/mail/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  41. package/corpus/templates/plan/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
  42. package/corpus/templates/slides/.deploy-tmp/agent-native-provided-plugins.mjs +0 -10
package/corpus/README.md CHANGED
@@ -32,4 +32,4 @@ rg -n "defineAction|useActionQuery" node_modules/@agent-native/core-corpus/corpu
32
32
 
33
33
  ## Generated Counts
34
34
 
35
- - template files: 13681
35
+ - template files: 13642
@@ -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 !== "PENDING" && status !== "RUNNING") {
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,4 @@
1
+ /** CLI dispatcher for `pnpm action ...`; it is not an exposed app action. */
2
+ import { runScript } from "@agent-native/core/scripts";
3
+
4
+ runScript();
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 1,
3
+ "onboarding": {
4
+ "firstRun": "off"
5
+ },
6
+ "doctor": {
7
+ "failOnBuild": true
8
+ }
9
+ }
@@ -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,6 @@
1
+ import { createGetDb } from "@agent-native/core/db";
2
+
3
+ import * as schema from "./schema.js";
4
+
5
+ export const getDb = createGetDb(schema);
6
+ export { schema };
@@ -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
+ );
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "@agent-native/core/tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "types": ["node"]
5
+ },
6
+ "include": ["actions/**/*", "server/**/*", "shared/**/*"]
7
+ }
@@ -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.