@agent-native/core 0.72.4 → 0.73.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 (91) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +28 -0
  3. package/corpus/core/docs/content/skills-guide.md +14 -0
  4. package/corpus/core/docs/content/template-clips.md +7 -1
  5. package/corpus/core/package.json +1 -1
  6. package/corpus/core/src/agent/durable-background.ts +25 -12
  7. package/corpus/core/src/cli/create.ts +1 -1
  8. package/corpus/core/src/cli/skills.ts +450 -19
  9. package/corpus/core/src/server/auth.ts +7 -0
  10. package/corpus/core/src/server/onboarding-html.ts +95 -9
  11. package/corpus/core/src/templates/default/AGENTS.md +4 -0
  12. package/corpus/core/src/templates/default/package.json +2 -1
  13. package/corpus/core/src/templates/headless/AGENTS.md +4 -0
  14. package/corpus/core/src/templates/headless/package.json +1 -0
  15. package/corpus/core/src/templates/workspace-root/AGENTS.md +4 -0
  16. package/corpus/core/src/templates/workspace-root/README.md +4 -0
  17. package/corpus/core/src/templates/workspace-root/package.json +1 -0
  18. package/corpus/templates/analytics/actions/update-dashboard.ts +3 -4
  19. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +144 -40
  20. package/corpus/templates/analytics/app/global.css +15 -13
  21. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +9 -32
  22. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +0 -26
  23. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +0 -23
  24. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/pivot.ts +65 -2
  25. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +3 -4
  26. package/corpus/templates/analytics/changelog/2026-06-24-dashboard-charts-now-fill-sparse-template-time-series-suppor.md +6 -0
  27. package/corpus/templates/analytics/changelog/2026-06-24-dashboard-rows-now-auto-fit-panels-so-one-two-or-three-chart.md +6 -0
  28. package/corpus/templates/analytics/changelog/2026-06-24-dashboard-traffic-tables-now-show-top-urls-and-shared-clips-.md +6 -0
  29. package/corpus/templates/analytics/changelog/2026-06-24-first-party-signup-and-pageview-panels-now-honor-dashboard-filters.md +5 -0
  30. package/corpus/templates/analytics/changelog/2026-06-24-first-party-template-dashboards-now-include-repeat-users-ret.md +6 -0
  31. package/corpus/templates/analytics/changelog/2026-06-24-retention-charts-now-break-out-1-day-and-7-day-return-rates-.md +6 -0
  32. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +256 -44
  33. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +7 -2
  34. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +35 -8
  35. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +287 -42
  36. package/corpus/templates/calendar/changelog/2026-06-23-added-a-heads-up-explaining-google-s-app-not-verified-screen.md +1 -1
  37. package/corpus/templates/calendar/server/plugins/auth.ts +12 -0
  38. package/corpus/templates/clips/.agents/skills/recording/SKILL.md +7 -7
  39. package/corpus/templates/clips/AGENTS.md +6 -2
  40. package/corpus/templates/clips/app/components/capture-install-options.tsx +20 -4
  41. package/corpus/templates/clips/app/components/player/player-controls.tsx +62 -32
  42. package/corpus/templates/clips/app/lib/capture-install-options.ts +39 -5
  43. package/corpus/templates/clips/app/routes/download.tsx +2 -2
  44. package/corpus/templates/clips/app/routes/share.$shareId.tsx +1 -1
  45. package/corpus/templates/clips/changelog/2026-06-24-inline-slack-playback-controls-no-longer-shift-when-adjustin.md +6 -0
  46. package/corpus/templates/clips/changelog/2026-06-24-shared-clips-now-expose-their-full-console-log-stream-all-le.md +6 -0
  47. package/corpus/templates/clips/changelog/2026-06-24-shared-clips-now-expose-their-full-fetch-xhr-network-request.md +6 -0
  48. package/corpus/templates/clips/changelog/2026-06-24-the-chrome-extension-option-now-only-appears-on-supported-hosts.md +5 -0
  49. package/corpus/templates/clips/chrome-extension/STORE_DRAFT.md +13 -8
  50. package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -1
  51. package/corpus/templates/clips/chrome-extension/scripts/package.ts +15 -2
  52. package/corpus/templates/clips/chrome-extension/src/overlay.css +4 -25
  53. package/corpus/templates/clips/chrome-extension/src/overlay.ts +1 -3
  54. package/corpus/templates/clips/server/lib/public-agent-context.ts +67 -24
  55. package/corpus/templates/mail/server/plugins/auth.ts +4 -1
  56. package/corpus/templates/plan/app/pages/PlansPage.tsx +271 -197
  57. package/corpus/templates/plan/server/plan-content.ts +45 -2
  58. package/dist/agent/durable-background.d.ts +9 -4
  59. package/dist/agent/durable-background.d.ts.map +1 -1
  60. package/dist/agent/durable-background.js +24 -11
  61. package/dist/agent/durable-background.js.map +1 -1
  62. package/dist/cli/create.js +1 -1
  63. package/dist/cli/create.js.map +1 -1
  64. package/dist/cli/skills.d.ts.map +1 -1
  65. package/dist/cli/skills.js +361 -19
  66. package/dist/cli/skills.js.map +1 -1
  67. package/dist/server/auth.d.ts +7 -0
  68. package/dist/server/auth.d.ts.map +1 -1
  69. package/dist/server/auth.js +1 -0
  70. package/dist/server/auth.js.map +1 -1
  71. package/dist/server/onboarding-html.d.ts +15 -0
  72. package/dist/server/onboarding-html.d.ts.map +1 -1
  73. package/dist/server/onboarding-html.js +73 -9
  74. package/dist/server/onboarding-html.js.map +1 -1
  75. package/dist/templates/default/AGENTS.md +4 -0
  76. package/dist/templates/default/package.json +2 -1
  77. package/dist/templates/headless/AGENTS.md +4 -0
  78. package/dist/templates/headless/package.json +1 -0
  79. package/dist/templates/workspace-root/AGENTS.md +4 -0
  80. package/dist/templates/workspace-root/README.md +4 -0
  81. package/dist/templates/workspace-root/package.json +1 -0
  82. package/docs/content/skills-guide.md +14 -0
  83. package/docs/content/template-clips.md +7 -1
  84. package/package.json +1 -1
  85. package/src/templates/default/AGENTS.md +4 -0
  86. package/src/templates/default/package.json +2 -1
  87. package/src/templates/headless/AGENTS.md +4 -0
  88. package/src/templates/headless/package.json +1 -0
  89. package/src/templates/workspace-root/AGENTS.md +4 -0
  90. package/src/templates/workspace-root/README.md +4 -0
  91. package/src/templates/workspace-root/package.json +1 -0
package/corpus/README.md CHANGED
@@ -28,4 +28,4 @@ rg -n "defineAction|useActionQuery" node_modules/@agent-native/core/corpus
28
28
  ## Generated Counts
29
29
 
30
30
  - core files: 1160
31
- - template files: 4012
31
+ - template files: 4022
@@ -1,5 +1,33 @@
1
1
  # @agent-native/core
2
2
 
3
+ ## 0.73.0
4
+
5
+ ### Minor Changes
6
+
7
+ - d684bbf: Durable background agent runs are now **on by default** for hosted apps. Previously the `AGENT_CHAT_DURABLE_BACKGROUND` flag was opt-in (off unless set truthy); it is now opt-out — unset means enabled, and an app disables it with an explicit falsy value (`AGENT_CHAT_DURABLE_BACKGROUND=false`).
8
+
9
+ The gate still composes with the existing guards, so a run only goes durable when the runtime is hosted/serverless **and** `A2A_SECRET` is configured — local dev and unconfigured apps stay on the synchronous inline path unchanged. Default-on uses the server-driven agnostic continuation path (verified in prod: long multi-step runs complete past the 40s soft-timeout with no thrash and no int4 overflow). The Netlify 15-min `-background` function emit (`isDurableBackgroundDeployEnabled`) remains opt-in until its path is separately verified.
10
+
11
+ ### Patch Changes
12
+
13
+ - d684bbf: Clarify the Clips "agent-readable clips" docs so the "see and hear" promise is
14
+ accurate: frame-viewing works in any image-capable agent (ChatGPT, Claude Code,
15
+ Cursor, Codex, MCP-connected agents), while text-only web chats fall back to the
16
+ transcript and can take an uploaded frame. Verified empirically — ChatGPT fetches
17
+ the JPEG frame URLs and describes the screen; claude.ai's web chat reads the
18
+ transcript only. Docs-only copy change; the agent-context/frame APIs are
19
+ unchanged.
20
+ - d684bbf: Add scaffold skill refresh commands for generated Agent Native apps and workspaces, plus public `@agent-native/skills` status/update forwarding.
21
+ - d684bbf: Redesign the Google sign-in preflight notice on the onboarding/sign-in screen
22
+ to match the in-app connect popover: an amber warning-icon chip beside a bold
23
+ heading and muted body copy, with the close affordance moved to the top-right.
24
+ The `googleSignInNotice.body` already accepts a string array, so reassurance
25
+ like "It's safe to continue." now renders on its own line. The Continue /
26
+ Run-locally action buttons no longer wrap their labels (`white-space: nowrap`).
27
+ Purely presentational — the host-gating, Continue, and Run-locally behaviors are
28
+ unchanged.
29
+ - d684bbf: Add a secondary hosted-app signup notice linking to the Agent-Native Terms and Privacy Policy.
30
+
3
31
  ## 0.72.4
4
32
 
5
33
  ### Patch Changes
@@ -264,3 +264,17 @@ npx @agent-native/core@latest skills update visual-plan
264
264
  the copied folder hash to the latest bundled skill, and rewrites stale folders in
265
265
  place. Newly copied Agent Native skills include an `agent-native-skill.json`
266
266
  marker so future status output can identify the source and hash.
267
+
268
+ Generated Agent Native apps and workspaces also include framework-provided
269
+ skills under `.agents/skills` (or `packages/shared/.agents/skills` in a
270
+ workspace). Refresh those scaffolded skills from the current/latest CLI with:
271
+
272
+ ```bash
273
+ npm run skills:update
274
+ # or, without relying on the local package script:
275
+ npx @agent-native/core@latest skills update scaffold --project
276
+ ```
277
+
278
+ `AGENTS.md` and `.agents/skills` stay canonical. The update command also repairs
279
+ Claude compatibility links (`CLAUDE.md` and `.claude/skills`) so Claude Code sees
280
+ the same instructions without maintaining a second copy.
@@ -15,7 +15,7 @@ A capture-everything app: screen recordings, meeting notes from your calendar, a
15
15
  }
16
16
  ```
17
17
 
18
- Think along the lines of Loom + Granola + Wispr Flow rolled into one app — but the agent is a first-class editor across every surface, and the recordings, meetings, and dictations are yours, not a SaaS vendor's. Clips also makes shared recordings agent-readable: paste a normal Clips share link into an agent, and it can "hear" the transcript and "see" timestamped frames even when the underlying model cannot ingest raw video or audio.
18
+ Think along the lines of Loom + Granola + Wispr Flow rolled into one app — but the agent is a first-class editor across every surface, and the recordings, meetings, and dictations are yours, not a SaaS vendor's. Clips also makes shared recordings agent-readable: paste a normal Clips share link into an agent and it can "hear" the transcript as text and "see" timestamped screen frames as images — no raw video needed. Frame-viewing works in any image-capable agent (ChatGPT, Claude Code, Cursor, Codex); text-only web chats still get the full transcript and can take a frame you upload.
19
19
 
20
20
  ```an-diagram title="Capture, transcribe, reuse" summary="Three capture types land in one library; the agent transcribes, titles, and summarizes, then every transcript is searchable and shareable."
21
21
  {
@@ -69,6 +69,12 @@ a compact agent context URL, and that context points to the transcript and frame
69
69
  APIs, so models that only accept text or still images can still understand what
70
70
  happened in the recording.
71
71
 
72
+ Any agent that can fetch an image URL into its vision — ChatGPT, Claude Code,
73
+ Cursor, Codex, and MCP-connected agents — reads the transcript and sees the
74
+ frames. A few text-only web chats read the transcript but won't pull frame images
75
+ in on their own; there, upload a key frame or open the clip in an image-capable
76
+ agent.
77
+
72
78
  | Endpoint | What agents get |
73
79
  | ------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
74
80
  | `/api/agent-context.json?id=<recordingId>` | Clip metadata, transcript status, chapters, CTAs, recommended frames, and links to the transcript/frame APIs |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.72.4",
3
+ "version": "0.73.0",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=22"
@@ -17,8 +17,10 @@
17
17
  *
18
18
  * GUARDRAIL: when `isAgentChatDurableBackgroundEnabled()` returns false, the
19
19
  * agent-chat handler must behave byte-for-byte like the current synchronous
20
- * path. The flag is only ever true when ALL of these hold:
21
- * 1. `AGENT_CHAT_DURABLE_BACKGROUND` env is a truthy value.
20
+ * path. The gate is true only when ALL of these hold:
21
+ * 1. `AGENT_CHAT_DURABLE_BACKGROUND` env is not explicitly disabled. It is
22
+ * DEFAULT-ON: unset/empty counts as enabled; set it to a falsy value
23
+ * (`false`/`0`/`no`/`off`) to opt a specific app back out.
22
24
  * 2. The runtime is hosted/serverless (local dev keeps the inline path so SSE
23
25
  * stays a single live stream and no second function is needed).
24
26
  * 3. `A2A_SECRET` is configured (the HMAC handoff is required to authenticate
@@ -41,7 +43,10 @@ import {
41
43
  export const AGENT_CHAT_PROCESS_RUN_PATH =
42
44
  "/_agent-native/agent-chat/_process-run";
43
45
 
44
- /** Env flag (off by default) that opts an app into durable background runs. */
46
+ /**
47
+ * Env flag for durable background runs. DEFAULT-ON: unset means enabled; an app
48
+ * opts OUT with an explicit falsy value (`false`/`0`/`no`/`off`).
49
+ */
45
50
  export const AGENT_CHAT_DURABLE_BACKGROUND_ENV =
46
51
  "AGENT_CHAT_DURABLE_BACKGROUND";
47
52
 
@@ -87,21 +92,29 @@ function isFlagEnabled(): boolean {
87
92
  // Read the literal key (not `process.env[CONST]`) so guard:no-env-credentials
88
93
  // can statically verify it against the allowlisted `AGENT_*` prefix. Keep this
89
94
  // in sync with AGENT_CHAT_DURABLE_BACKGROUND_ENV.
95
+ //
96
+ // DEFAULT-ON: durable background runs are the desired behavior for every
97
+ // hosted app (verified in prod — long multi-step runs complete past the 40s
98
+ // soft-timeout with no thrash). So an unset flag means ON; an app opts OUT
99
+ // only with an explicit falsy value. This still composes with the hosted +
100
+ // A2A_SECRET gates below, so non-hosted / unconfigured apps stay synchronous.
90
101
  const raw = process.env.AGENT_CHAT_DURABLE_BACKGROUND;
91
- if (raw == null) return false;
102
+ if (raw == null) return true;
92
103
  const normalized = raw.trim().toLowerCase();
93
- return (
94
- normalized === "1" ||
95
- normalized === "true" ||
96
- normalized === "yes" ||
97
- normalized === "on"
104
+ return !(
105
+ normalized === "0" ||
106
+ normalized === "false" ||
107
+ normalized === "no" ||
108
+ normalized === "off"
98
109
  );
99
110
  }
100
111
 
101
112
  /**
102
- * The single gate. True only when the flag is on AND the runtime is hosted AND
103
- * A2A_SECRET is configured. False otherwise — and false means the current
104
- * synchronous behavior is used, unchanged.
113
+ * The single gate. True when the flag is not explicitly disabled (default-on)
114
+ * AND the runtime is hosted AND A2A_SECRET is configured. False otherwise — and
115
+ * false means the current synchronous behavior is used, unchanged. So a local /
116
+ * non-hosted / unconfigured app stays synchronous even with the flag defaulting
117
+ * on; durable only engages where the runtime actually supports it.
105
118
  */
106
119
  export function isAgentChatDurableBackgroundEnabled(): boolean {
107
120
  return (
@@ -1893,7 +1893,7 @@ function copyDir(src: string, dest: string, root?: string): void {
1893
1893
 
1894
1894
  function shouldSkipScaffoldEntry(name: string, srcPath?: string): boolean {
1895
1895
  if (
1896
- name === "settings.json" &&
1896
+ /^settings(?:\..*)?\.json$/.test(name) &&
1897
1897
  srcPath?.split(path.sep).includes(".claude")
1898
1898
  ) {
1899
1899
  return true;