@agent-native/core 0.136.0 → 0.136.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/README.md +1 -1
- package/corpus/templates/analytics/.agents/skills/analysis-workspace/SKILL.md +31 -5
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +7 -0
- package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +52 -19
- package/corpus/templates/analytics/.agents/skills/provider-api/SKILL.md +25 -3
- package/corpus/templates/analytics/AGENTS.md +6 -7
- package/corpus/templates/analytics/actions/gong-calls.ts +3 -3
- package/corpus/templates/analytics/actions/provider-api-catalog.ts +1 -1
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +1 -1
- package/corpus/templates/analytics/app/i18n-data.ts +46 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +67 -1
- package/corpus/templates/analytics/app/pages/settings/settings-search.ts +6 -0
- package/corpus/templates/analytics/changelog/2026-08-03-dashboard-builds-now-finish-without-an-extra-confirmation.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-03-error-alert-emails-are-opt-in.md +6 -0
- package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +10 -9
- package/corpus/templates/analytics/server/lib/error-capture.ts +38 -10
- package/corpus/templates/analytics/server/lib/gong.ts +27 -4
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +64 -4
- package/corpus/templates/analytics/shared/analytics-user-prefs.ts +7 -0
- package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +15 -6
- package/corpus/templates/clips/actions/apply-rewind-extension.ts +9 -0
- package/corpus/templates/clips/actions/cleanup-dictation.ts +2 -2
- package/corpus/templates/clips/actions/cleanup-transcript.ts +8 -11
- package/corpus/templates/clips/actions/clear-edits.ts +15 -2
- package/corpus/templates/clips/actions/create-recording-agent-link.ts +10 -0
- package/corpus/templates/clips/actions/finalize-meeting.ts +6 -6
- package/corpus/templates/clips/actions/finalize-recording.ts +33 -8
- package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +1 -3
- package/corpus/templates/clips/actions/list-recordings.ts +39 -24
- package/corpus/templates/clips/actions/list-transactional-email-ai-requests.ts +4 -1
- package/corpus/templates/clips/actions/regenerate-title.ts +2 -2
- package/corpus/templates/clips/actions/stitch-recordings.ts +36 -7
- package/corpus/templates/clips/app/components/editor/rewind-extension-dialog.tsx +1 -4
- package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +3 -1
- package/corpus/templates/clips/app/components/library/recording-card.tsx +9 -0
- package/corpus/templates/clips/app/components/player/recording-views-badge.tsx +52 -7
- package/corpus/templates/clips/app/hooks/use-library.ts +1 -0
- package/corpus/templates/clips/app/hooks/use-transactional-email-bridge.ts +17 -10
- package/corpus/templates/clips/app/i18n/en-US.ts +3 -0
- package/corpus/templates/clips/app/lib/timestamp-mapping.ts +5 -0
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +1 -0
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +2 -0
- package/corpus/templates/clips/changelog/2026-07-31-agent-views-now-show-the-agent-s-name-from-the-link-it-was-g.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-31-clip-cards-and-the-watch-share-page-header-now-show-agent-vi.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-01-recordings-stored-in-private-s3-compatible-buckets-finalize-.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-03-clip-cleanup-titles-and-meeting-summaries-now-use-luna-by-de.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-03-get-a-monthly-recap-email-showing-how-many-people-and-ai-age.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-03-get-an-email-the-first-time-an-ai-agent-reads-one-of-your-cl.md +6 -0
- package/corpus/templates/clips/learnings.defaults.md +2 -2
- package/corpus/templates/clips/package.json +1 -1
- package/corpus/templates/clips/scripts/send-real-recap.ts +165 -0
- package/corpus/templates/clips/scripts/send-test-emails.ts +60 -0
- package/corpus/templates/clips/server/db/schema.ts +4 -0
- package/corpus/templates/clips/server/jobs/transactional-emails.ts +256 -0
- package/corpus/templates/clips/server/lib/agent-views.ts +38 -11
- package/corpus/templates/clips/server/lib/media-storage-provenance.ts +16 -0
- package/corpus/templates/clips/server/lib/public-agent-context.ts +3 -1
- package/corpus/templates/clips/server/lib/recap-metrics.ts +373 -0
- package/corpus/templates/clips/server/lib/s3-upload-provider.ts +84 -4
- package/corpus/templates/clips/server/lib/transactional-email-store.ts +41 -2
- package/corpus/templates/clips/server/lib/transactional-email-templates.ts +245 -3
- package/corpus/templates/clips/server/plugins/db.ts +16 -0
- package/corpus/templates/clips/server/register-secrets.ts +2 -2
- package/corpus/templates/clips/server/routes/api/public-recording.get.ts +7 -2
- package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +42 -1
- package/corpus/templates/design/actions/take-design-screenshot.ts +5 -3
- package/corpus/templates/design/package.json +1 -1
- package/corpus/templates/design/server/lib/playwright-runtime.ts +13 -5
- package/corpus/templates/mail/actions/get-automation-settings.ts +4 -12
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +1 -1
- package/corpus/templates/mail/changelog/2026-08-03-inbox-automations-now-prefer-the-lowest-cost-luna-model-when.md +6 -0
- package/corpus/templates/mail/server/lib/automation-engine.ts +19 -14
- package/corpus/templates/mail/server/lib/automation-model.ts +110 -0
- package/corpus/templates/mail/server/plugins/agent-chat.ts +1 -1
- package/corpus/templates/slides/actions/generate-slides-ai.ts +92 -24
- package/corpus/templates/slides/changelog/2026-08-03-legacy-slide-outlines-now-prefer-the-lowest-cost-luna-model-.md +6 -0
- package/corpus/templates/tasks/package.json +2 -2
- package/dist/agent/production-agent.d.ts +2 -2
- package/dist/agent/production-agent.js +1 -1
- package/dist/catalog.json +2 -0
- package/dist/client/AgentTaskCard.js +4 -2
- package/dist/client/i18n.js +3 -0
- package/dist/client/settings/VoiceTranscriptionSection.js +2 -2
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/localization/default-messages.d.ts +5 -0
- package/dist/localization/default-messages.js +5 -0
- package/dist/mcp/oauth-client-metadata.d.ts +7 -0
- package/dist/mcp/oauth-client-metadata.js +47 -0
- package/dist/mcp/oauth-route.js +7 -3
- package/dist/mcp/oauth-store.d.ts +2 -0
- package/dist/mcp/oauth-store.js +25 -3
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/observability/routes.d.ts +3 -3
- package/dist/observability/traces.d.ts +1 -1
- package/dist/observability/traces.js +2 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/index.js +29 -1
- package/dist/secrets/routes.d.ts +6 -6
- package/dist/server/agent-access.d.ts +3 -1
- package/dist/server/agent-access.js +2 -1
- package/dist/server/agent-chat/browser-team-tools.d.ts +1 -0
- package/dist/server/agent-chat/browser-team-tools.js +5 -4
- package/dist/server/agent-chat/context-tools.js +2 -2
- package/dist/server/agent-chat-plugin.js +13 -6
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/agent-teams-run-queue.d.ts +2 -0
- package/dist/server/agent-teams.d.ts +2 -0
- package/dist/server/agent-teams.js +45 -2
- package/dist/server/request-context.d.ts +2 -0
- package/dist/server/short-lived-token.d.ts +7 -0
- package/dist/server/short-lived-token.js +7 -1
- package/dist/server/ssr-handler.js +19 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/server/transcribe-voice.js +24 -16
- package/dist/vite/client.d.ts +37 -1
- package/dist/vite/client.js +110 -1
- package/docs/content/template-assets.mdx +14 -4
- package/package.json +3 -4
|
@@ -46,6 +46,7 @@ const MAX_TRANSCRIPT_CHARS = 150_000;
|
|
|
46
46
|
// Public Builder transcription model id. The Builder gateway maps this to
|
|
47
47
|
// Gemini 3.1 Flash-Lite.
|
|
48
48
|
const BUILDER_GEMINI_TRANSCRIPTION_MODEL = "gemini-3-1-flash-lite";
|
|
49
|
+
const BUILDER_CLEANUP_MODEL = "gpt-5-6-luna";
|
|
49
50
|
// Gemini Flash Lite BYOK path when GEMINI_API_KEY is configured.
|
|
50
51
|
// Gemini accepts inline audio; we just give it the bytes and a "transcribe
|
|
51
52
|
// this" prompt and it replies with text. 2.5x faster TTFT than 2.5 Flash
|
|
@@ -492,7 +493,14 @@ async function cleanupTranscriptText({ event, text, instructions, contextPack, p
|
|
|
492
493
|
};
|
|
493
494
|
}
|
|
494
495
|
try {
|
|
495
|
-
const cleaned = await withRequestContext(() => cleanupWithBuilder({
|
|
496
|
+
const cleaned = await withRequestContext(() => cleanupWithBuilder({
|
|
497
|
+
text: original,
|
|
498
|
+
instructions,
|
|
499
|
+
clientAbortSignal,
|
|
500
|
+
model: providerPref === "builder-gemini"
|
|
501
|
+
? BUILDER_GEMINI_TRANSCRIPTION_MODEL
|
|
502
|
+
: undefined,
|
|
503
|
+
}));
|
|
496
504
|
return { text: finalizeText(cleaned || original) };
|
|
497
505
|
}
|
|
498
506
|
catch (err) {
|
|
@@ -562,12 +570,13 @@ async function cleanupTranscriptText({ event, text, instructions, contextPack, p
|
|
|
562
570
|
// Fall through to BYOK providers, then raw text.
|
|
563
571
|
}
|
|
564
572
|
}
|
|
565
|
-
const
|
|
566
|
-
if (
|
|
573
|
+
const openaiKey = await resolveApiKey("OPENAI_API_KEY");
|
|
574
|
+
if (openaiKey) {
|
|
567
575
|
try {
|
|
568
|
-
const cleaned = await
|
|
576
|
+
const cleaned = await cleanupWithChatProvider({
|
|
577
|
+
provider: "openai",
|
|
569
578
|
text: original,
|
|
570
|
-
apiKey:
|
|
579
|
+
apiKey: openaiKey,
|
|
571
580
|
instructions,
|
|
572
581
|
clientAbortSignal,
|
|
573
582
|
});
|
|
@@ -578,13 +587,12 @@ async function cleanupTranscriptText({ event, text, instructions, contextPack, p
|
|
|
578
587
|
// Fall through.
|
|
579
588
|
}
|
|
580
589
|
}
|
|
581
|
-
const
|
|
582
|
-
if (
|
|
590
|
+
const geminiKey = await resolveApiKey("GEMINI_API_KEY");
|
|
591
|
+
if (geminiKey) {
|
|
583
592
|
try {
|
|
584
|
-
const cleaned = await
|
|
585
|
-
provider: "groq",
|
|
593
|
+
const cleaned = await cleanupWithGemini({
|
|
586
594
|
text: original,
|
|
587
|
-
apiKey:
|
|
595
|
+
apiKey: geminiKey,
|
|
588
596
|
instructions,
|
|
589
597
|
clientAbortSignal,
|
|
590
598
|
});
|
|
@@ -595,13 +603,13 @@ async function cleanupTranscriptText({ event, text, instructions, contextPack, p
|
|
|
595
603
|
// Fall through.
|
|
596
604
|
}
|
|
597
605
|
}
|
|
598
|
-
const
|
|
599
|
-
if (
|
|
606
|
+
const groqKey = await resolveApiKey("GROQ_API_KEY");
|
|
607
|
+
if (groqKey) {
|
|
600
608
|
try {
|
|
601
609
|
const cleaned = await cleanupWithChatProvider({
|
|
602
|
-
provider: "
|
|
610
|
+
provider: "groq",
|
|
603
611
|
text: original,
|
|
604
|
-
apiKey:
|
|
612
|
+
apiKey: groqKey,
|
|
605
613
|
instructions,
|
|
606
614
|
clientAbortSignal,
|
|
607
615
|
});
|
|
@@ -614,7 +622,7 @@ async function cleanupTranscriptText({ event, text, instructions, contextPack, p
|
|
|
614
622
|
}
|
|
615
623
|
return { text: finalizeText(original) };
|
|
616
624
|
}
|
|
617
|
-
async function cleanupWithBuilder({ text, instructions, clientAbortSignal, }) {
|
|
625
|
+
async function cleanupWithBuilder({ text, instructions, clientAbortSignal, model, }) {
|
|
618
626
|
const engine = createBuilderEngine();
|
|
619
627
|
const controller = new AbortController();
|
|
620
628
|
const timeout = setTimeout(() => controller.abort(), 8_000);
|
|
@@ -623,7 +631,7 @@ async function cleanupWithBuilder({ text, instructions, clientAbortSignal, }) {
|
|
|
623
631
|
let terminalError;
|
|
624
632
|
try {
|
|
625
633
|
for await (const event of engine.stream({
|
|
626
|
-
model:
|
|
634
|
+
model: model ?? BUILDER_CLEANUP_MODEL,
|
|
627
635
|
systemPrompt: buildCleanupSystemPrompt(instructions),
|
|
628
636
|
messages: [
|
|
629
637
|
{
|
package/dist/vite/client.d.ts
CHANGED
|
@@ -17,6 +17,42 @@ import { type AgentNativeRouteWarmupConfigInput } from "../shared/route-warmup-c
|
|
|
17
17
|
* this has no effect outside `vite dev`.
|
|
18
18
|
*/
|
|
19
19
|
declare function debounceNitroFullReloadHotUpdate(plugin: Plugin): Plugin;
|
|
20
|
+
/**
|
|
21
|
+
* Invalidate every React Router virtual module in every Vite environment, and
|
|
22
|
+
* tell each affected server environment's runner to re-import.
|
|
23
|
+
*
|
|
24
|
+
* Returns the environment names that had something to invalidate.
|
|
25
|
+
*/
|
|
26
|
+
declare function mirrorReactRouterVirtualInvalidation(server: any, now?: () => number): string[];
|
|
27
|
+
/**
|
|
28
|
+
* Mirror React Router's dev-time virtual-module invalidation into the
|
|
29
|
+
* environment that actually serves requests.
|
|
30
|
+
*
|
|
31
|
+
* `@react-router/dev`'s framework-mode plugin invalidates its virtual modules
|
|
32
|
+
* through `server.moduleGraph` — Vite's deprecated back-compat graph, which
|
|
33
|
+
* proxies only the `client` and `ssr` environments. Agent Native serves SSR
|
|
34
|
+
* from Nitro's `nitro` environment, so that invalidation never reaches the
|
|
35
|
+
* `virtual:react-router/server-build` the request path evaluates, and the route
|
|
36
|
+
* table stays frozen at whatever it was when the dev server booted. A new route
|
|
37
|
+
* file then 404s forever, and a deleted one makes the stale manifest import a
|
|
38
|
+
* file that no longer exists — which fails the whole build, so EVERY page 500s
|
|
39
|
+
* with "Failed to load url … Does the file exist?" until the process restarts.
|
|
40
|
+
* Editing a route's contents hides all of this, because that path goes through
|
|
41
|
+
* Vite's normal HMR pipeline, which is environment-aware.
|
|
42
|
+
*
|
|
43
|
+
* Hooking React Router's call rather than the file watcher is what makes this
|
|
44
|
+
* ordering-safe: it awaits `updatePluginContext()` before invalidating, so by
|
|
45
|
+
* the time we mirror, the freshly resolved routes are already in place.
|
|
46
|
+
*
|
|
47
|
+
* React Router's RSC plugin already iterates `environments`; only the classic
|
|
48
|
+
* plugin still uses the back-compat graph (still true in 8.3.0). Delete this
|
|
49
|
+
* once upstream's classic path is environment-aware.
|
|
50
|
+
*/
|
|
51
|
+
declare function installReactRouterVirtualInvalidationMirror(server: any, { debounceMs, now, warn, }?: {
|
|
52
|
+
debounceMs?: number;
|
|
53
|
+
now?: () => number;
|
|
54
|
+
warn?: (message: string) => void;
|
|
55
|
+
}): boolean;
|
|
20
56
|
/**
|
|
21
57
|
* Build the `resolve.dedupe` list dynamically. Reads core's package.json and
|
|
22
58
|
* collects every peerDependency that the consuming app also declares. This
|
|
@@ -179,5 +215,5 @@ export declare function agentNative(options?: AgentNativeVitePluginOptions): Plu
|
|
|
179
215
|
* preset. This compatibility wrapper remains for existing templates.
|
|
180
216
|
*/
|
|
181
217
|
export declare function defineConfig(options?: ClientConfigOptions): UserConfig;
|
|
182
|
-
export { getClientDedupe as _getClientDedupe, getDefaultOptimizeDeps as _getDefaultOptimizeDeps, findCorePackageRoot as _findCorePackageRoot, getReactRouterAliases as _getReactRouterAliases, nitroStartupGate as _nitroStartupGate, nitroStartupRecovery as _nitroStartupRecovery, nitroModuleGraphSignature as _nitroModuleGraphSignature, debounceNitroFullReloadHotUpdate as _debounceNitroFullReloadHotUpdate, };
|
|
218
|
+
export { getClientDedupe as _getClientDedupe, getDefaultOptimizeDeps as _getDefaultOptimizeDeps, findCorePackageRoot as _findCorePackageRoot, getReactRouterAliases as _getReactRouterAliases, nitroStartupGate as _nitroStartupGate, nitroStartupRecovery as _nitroStartupRecovery, nitroModuleGraphSignature as _nitroModuleGraphSignature, debounceNitroFullReloadHotUpdate as _debounceNitroFullReloadHotUpdate, installReactRouterVirtualInvalidationMirror as _installReactRouterVirtualInvalidationMirror, mirrorReactRouterVirtualInvalidation as _mirrorReactRouterVirtualInvalidation, };
|
|
183
219
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/vite/client.js
CHANGED
|
@@ -285,6 +285,114 @@ function debounceNitroFullReloadHotUpdate(plugin) {
|
|
|
285
285
|
}
|
|
286
286
|
return { ...plugin, hotUpdate: wrappedHotUpdate };
|
|
287
287
|
}
|
|
288
|
+
/** Prefix Vite gives React Router's virtual modules. */
|
|
289
|
+
const REACT_ROUTER_VIRTUAL_ID_PREFIX = "\0virtual:react-router/";
|
|
290
|
+
/**
|
|
291
|
+
* Debounce window for coalescing mirrored route-table reloads.
|
|
292
|
+
*
|
|
293
|
+
* A coding agent that rewrites a route tree emits one watcher event per file,
|
|
294
|
+
* and React Router re-resolves its config for each one. Keep this independent
|
|
295
|
+
* of `NITRO_FULL_RELOAD_DEBOUNCE_MS`: that one throttles Nitro's own reload
|
|
296
|
+
* broadcasts, this one throttles ours, and tuning either must not silently
|
|
297
|
+
* retune the other.
|
|
298
|
+
*/
|
|
299
|
+
const REACT_ROUTER_INVALIDATION_MIRROR_DEBOUNCE_MS = 300;
|
|
300
|
+
/**
|
|
301
|
+
* Invalidate every React Router virtual module in every Vite environment, and
|
|
302
|
+
* tell each affected server environment's runner to re-import.
|
|
303
|
+
*
|
|
304
|
+
* Returns the environment names that had something to invalidate.
|
|
305
|
+
*/
|
|
306
|
+
function mirrorReactRouterVirtualInvalidation(server, now = Date.now) {
|
|
307
|
+
const timestamp = now();
|
|
308
|
+
const touched = [];
|
|
309
|
+
for (const [name, environment] of Object.entries(server?.environments ?? {})) {
|
|
310
|
+
const moduleGraph = environment?.moduleGraph;
|
|
311
|
+
if (!moduleGraph?.idToModuleMap)
|
|
312
|
+
continue;
|
|
313
|
+
const seen = new Set();
|
|
314
|
+
let invalidated = 0;
|
|
315
|
+
for (const id of [...moduleGraph.idToModuleMap.keys()]) {
|
|
316
|
+
if (!id.startsWith(REACT_ROUTER_VIRTUAL_ID_PREFIX))
|
|
317
|
+
continue;
|
|
318
|
+
const mod = moduleGraph.getModuleById(id);
|
|
319
|
+
if (!mod)
|
|
320
|
+
continue;
|
|
321
|
+
moduleGraph.invalidateModule(mod, seen, timestamp, true);
|
|
322
|
+
invalidated += 1;
|
|
323
|
+
}
|
|
324
|
+
if (invalidated === 0)
|
|
325
|
+
continue;
|
|
326
|
+
touched.push(name);
|
|
327
|
+
// Server environments evaluate the build inside a runner that keeps its own
|
|
328
|
+
// module cache; graph invalidation alone never reaches it. Client
|
|
329
|
+
// environments get their update through React Router's own HMR handling.
|
|
330
|
+
if (environment?.config?.consumer !== "client") {
|
|
331
|
+
environment?.hot?.send?.({ type: "full-reload" });
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return touched;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Mirror React Router's dev-time virtual-module invalidation into the
|
|
338
|
+
* environment that actually serves requests.
|
|
339
|
+
*
|
|
340
|
+
* `@react-router/dev`'s framework-mode plugin invalidates its virtual modules
|
|
341
|
+
* through `server.moduleGraph` — Vite's deprecated back-compat graph, which
|
|
342
|
+
* proxies only the `client` and `ssr` environments. Agent Native serves SSR
|
|
343
|
+
* from Nitro's `nitro` environment, so that invalidation never reaches the
|
|
344
|
+
* `virtual:react-router/server-build` the request path evaluates, and the route
|
|
345
|
+
* table stays frozen at whatever it was when the dev server booted. A new route
|
|
346
|
+
* file then 404s forever, and a deleted one makes the stale manifest import a
|
|
347
|
+
* file that no longer exists — which fails the whole build, so EVERY page 500s
|
|
348
|
+
* with "Failed to load url … Does the file exist?" until the process restarts.
|
|
349
|
+
* Editing a route's contents hides all of this, because that path goes through
|
|
350
|
+
* Vite's normal HMR pipeline, which is environment-aware.
|
|
351
|
+
*
|
|
352
|
+
* Hooking React Router's call rather than the file watcher is what makes this
|
|
353
|
+
* ordering-safe: it awaits `updatePluginContext()` before invalidating, so by
|
|
354
|
+
* the time we mirror, the freshly resolved routes are already in place.
|
|
355
|
+
*
|
|
356
|
+
* React Router's RSC plugin already iterates `environments`; only the classic
|
|
357
|
+
* plugin still uses the back-compat graph (still true in 8.3.0). Delete this
|
|
358
|
+
* once upstream's classic path is environment-aware.
|
|
359
|
+
*/
|
|
360
|
+
function installReactRouterVirtualInvalidationMirror(server, { debounceMs = REACT_ROUTER_INVALIDATION_MIRROR_DEBOUNCE_MS, now = Date.now, warn = console.warn, } = {}) {
|
|
361
|
+
const backCompatGraph = server?.moduleGraph;
|
|
362
|
+
const original = backCompatGraph?.invalidateModule;
|
|
363
|
+
if (typeof original !== "function") {
|
|
364
|
+
warn("[agent-native] Vite's server.moduleGraph.invalidateModule is unavailable, " +
|
|
365
|
+
"so React Router route additions and deletions cannot be mirrored into " +
|
|
366
|
+
"the Nitro dev environment. Adding or deleting a route file will need a " +
|
|
367
|
+
"dev server restart to take effect.");
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
370
|
+
let pending;
|
|
371
|
+
backCompatGraph.invalidateModule = function patchedInvalidateModule(mod, ...rest) {
|
|
372
|
+
const result = original.call(this, mod, ...rest);
|
|
373
|
+
if (!mod?.id?.startsWith(REACT_ROUTER_VIRTUAL_ID_PREFIX))
|
|
374
|
+
return result;
|
|
375
|
+
if (pending)
|
|
376
|
+
clearTimeout(pending);
|
|
377
|
+
pending = setTimeout(() => {
|
|
378
|
+
pending = undefined;
|
|
379
|
+
mirrorReactRouterVirtualInvalidation(server, now);
|
|
380
|
+
}, debounceMs);
|
|
381
|
+
// Never hold the process open just for a pending reload.
|
|
382
|
+
pending.unref?.();
|
|
383
|
+
return result;
|
|
384
|
+
};
|
|
385
|
+
return true;
|
|
386
|
+
}
|
|
387
|
+
function reactRouterVirtualInvalidationMirrorPlugin() {
|
|
388
|
+
return {
|
|
389
|
+
name: "agent-native-react-router-invalidation-mirror",
|
|
390
|
+
apply: "serve",
|
|
391
|
+
configureServer(server) {
|
|
392
|
+
installReactRouterVirtualInvalidationMirror(server);
|
|
393
|
+
},
|
|
394
|
+
};
|
|
395
|
+
}
|
|
288
396
|
/**
|
|
289
397
|
* Sync discovery for the workspace-core in an enterprise monorepo.
|
|
290
398
|
*
|
|
@@ -2408,6 +2516,7 @@ function createAgentNativePlugins(options, { command, includeReactTransform, use
|
|
|
2408
2516
|
baseRedirectGuard(),
|
|
2409
2517
|
portExposer(),
|
|
2410
2518
|
nitroStartupGate(),
|
|
2519
|
+
reactRouterVirtualInvalidationMirrorPlugin(),
|
|
2411
2520
|
silenceConnectionResets(),
|
|
2412
2521
|
rolldownInputFix(),
|
|
2413
2522
|
// Nitro Vite plugin for dev-mode API route serving and HMR.
|
|
@@ -2778,5 +2887,5 @@ export function defineConfig(options = {}) {
|
|
|
2778
2887
|
}),
|
|
2779
2888
|
};
|
|
2780
2889
|
}
|
|
2781
|
-
export { getClientDedupe as _getClientDedupe, getDefaultOptimizeDeps as _getDefaultOptimizeDeps, findCorePackageRoot as _findCorePackageRoot, getReactRouterAliases as _getReactRouterAliases, nitroStartupGate as _nitroStartupGate, nitroStartupRecovery as _nitroStartupRecovery, nitroModuleGraphSignature as _nitroModuleGraphSignature, debounceNitroFullReloadHotUpdate as _debounceNitroFullReloadHotUpdate, };
|
|
2890
|
+
export { getClientDedupe as _getClientDedupe, getDefaultOptimizeDeps as _getDefaultOptimizeDeps, findCorePackageRoot as _findCorePackageRoot, getReactRouterAliases as _getReactRouterAliases, nitroStartupGate as _nitroStartupGate, nitroStartupRecovery as _nitroStartupRecovery, nitroModuleGraphSignature as _nitroModuleGraphSignature, debounceNitroFullReloadHotUpdate as _debounceNitroFullReloadHotUpdate, installReactRouterVirtualInvalidationMirror as _installReactRouterVirtualInvalidationMirror, mirrorReactRouterVirtualInvalidation as _mirrorReactRouterVirtualInvalidation, };
|
|
2782
2891
|
//# sourceMappingURL=client.js.map
|
|
@@ -5,7 +5,7 @@ description: "An agent-native digital asset manager and cross-agent generation s
|
|
|
5
5
|
|
|
6
6
|
# Assets
|
|
7
7
|
|
|
8
|
-
Assets is a workspace for creating and managing brand-consistent media
|
|
8
|
+
Assets is a workspace for creating and managing brand-consistent media, especially when image or video models have a clear advantage. It organizes uploads and generated results into libraries and folders, lets teams collect approved references for product shots, logos, social images, photorealistic scenes, and other media to use in a Design composition or elsewhere, then routes generation through the agent chat so every asset can be reviewed and refined.
|
|
9
9
|
|
|
10
10
|
<WireframeBlock id="doc-block-assets1">
|
|
11
11
|
<Screen
|
|
@@ -81,6 +81,14 @@ When you open the app, the selected library, prompt, references, and generated c
|
|
|
81
81
|
|
|
82
82
|
</Diagram>
|
|
83
83
|
|
|
84
|
+
## Assets vs Design
|
|
85
|
+
|
|
86
|
+
Use **Design** for most visual work. Start there for landing pages, ads, diagrams, and other compositions when you need HTML/CSS, precise layout, editable structure, or design-tool import/export.
|
|
87
|
+
|
|
88
|
+
Use **Assets** when image or video models are better suited to the job and the result can be used as media rather than edited piece by piece. This includes photorealistic or pixel-based imagery, product shots, social images, and video. Hand-drawn or Excalidraw-style diagrams can be an exception when you want the generated image as-is.
|
|
89
|
+
|
|
90
|
+
The intended workflow is to start in Design and let the Design agent delegate supporting image generation to Assets when a PNG or other media asset is the right fit. Use the result in the Design composition or in another app.
|
|
91
|
+
|
|
84
92
|
## When to pick it
|
|
85
93
|
|
|
86
94
|
- **Your team needs reusable visual direction**, not one-off generic media prompts — collect approved logos, product shots, and style examples so generations stay on brand.
|
|
@@ -104,9 +112,11 @@ Live demo: [assets.agent-native.com](https://assets.agent-native.com).
|
|
|
104
112
|
want to manage.
|
|
105
113
|
2. **Upload references.** Add approved logos, product shots, style examples, or
|
|
106
114
|
existing videos so the agent has concrete material to work from.
|
|
107
|
-
3. **Generate from chat or a library.** Ask for a
|
|
108
|
-
|
|
109
|
-
|
|
115
|
+
3. **Generate a media asset from chat or a library.** Ask for a product shot,
|
|
116
|
+
social image, photorealistic scene, image-based diagram, or video variant.
|
|
117
|
+
For a landing page, ad, or other editable composition, start in Design and
|
|
118
|
+
use Assets for supporting media. Assets stores the prompt, references,
|
|
119
|
+
model, status, and lineage for review.
|
|
110
120
|
4. **Use the asset elsewhere.** Copy the export, embed the picker in another
|
|
111
121
|
app, or let another agent call Assets over A2A.
|
|
112
122
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.136.
|
|
3
|
+
"version": "0.136.3",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -400,7 +400,7 @@
|
|
|
400
400
|
"y-protocols": "^1.0.7",
|
|
401
401
|
"yjs": "^13.6.31",
|
|
402
402
|
"zod": "^4.3.6",
|
|
403
|
-
"@agent-native/recap-cli": "0.5.
|
|
403
|
+
"@agent-native/recap-cli": "0.5.3",
|
|
404
404
|
"@agent-native/toolkit": "^0.12.2"
|
|
405
405
|
},
|
|
406
406
|
"devDependencies": {
|
|
@@ -441,7 +441,7 @@
|
|
|
441
441
|
"express": "^5.2.1",
|
|
442
442
|
"mermaid": "11.15.0",
|
|
443
443
|
"node-pty": "^1.1.0",
|
|
444
|
-
"playwright": "
|
|
444
|
+
"playwright": "1.61.1",
|
|
445
445
|
"react": "^19.2.7",
|
|
446
446
|
"react-dom": "^19.2.7",
|
|
447
447
|
"react-router": "^8.1.0",
|
|
@@ -579,7 +579,6 @@
|
|
|
579
579
|
"jszip": "^3.10.1",
|
|
580
580
|
"mammoth": "^1.12.0",
|
|
581
581
|
"officeparser": "^7.3.0",
|
|
582
|
-
"playwright": "^1.61.1",
|
|
583
582
|
"sharp": "^0.35.3"
|
|
584
583
|
},
|
|
585
584
|
"engines": {
|