@agent-native/core 0.77.10 → 0.77.12

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 (60) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +12 -0
  3. package/corpus/core/package.json +3 -3
  4. package/corpus/core/src/cli/create.ts +65 -15
  5. package/corpus/core/src/cli/sync-builder-starter-manifest.ts +261 -65
  6. package/corpus/core/src/collab/awareness.ts +12 -9
  7. package/corpus/core/src/collab/client.ts +4 -2
  8. package/corpus/templates/clips/actions/finalize-recording.ts +1 -1
  9. package/corpus/templates/clips/chrome-extension/package.json +1 -1
  10. package/corpus/templates/clips/desktop/src/app.tsx +35 -19
  11. package/corpus/templates/clips/desktop/src/overlays/toolbar.tsx +38 -1
  12. package/corpus/templates/clips/desktop/src/styles.css +35 -0
  13. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +343 -14
  14. package/corpus/templates/content/actions/list-trashed-content-databases.ts +36 -2
  15. package/corpus/templates/content/actions/move-document.ts +79 -33
  16. package/corpus/templates/content/actions/restore-content-database.ts +40 -3
  17. package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +84 -2
  18. package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +177 -49
  19. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +393 -219
  20. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +632 -467
  21. package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +114 -14
  22. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +56 -15
  23. package/corpus/templates/content/app/components/editor/extensions/NotionExtensions.tsx +6 -5
  24. package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +12 -4
  25. package/corpus/templates/content/app/global.css +9 -0
  26. package/corpus/templates/content/app/hooks/use-create-page.ts +36 -7
  27. package/corpus/templates/content/app/i18n-data.ts +140 -10
  28. package/corpus/templates/content/changelog/2026-06-25-comment-cards-now-track-their-highlighted-text-while-scrolli.md +6 -0
  29. package/corpus/templates/content/changelog/2026-06-25-comments-now-scroll-with-the-document-and-stay-below-the-pag.md +6 -0
  30. package/corpus/templates/content/changelog/2026-06-25-creating-a-database-from-the-slash-menu-no-longer-leaves-sta.md +6 -0
  31. package/corpus/templates/content/changelog/2026-06-25-sidebar-hover-controls-no-longer-leave-a-lingering-fade-when.md +6 -0
  32. package/corpus/templates/content/changelog/2026-06-25-sidebar-page-actions-are-now-easier-to-see-when-hovering-ina.md +6 -0
  33. package/corpus/templates/content/changelog/2026-06-25-text-selections-in-the-editor-no-longer-show-white-gaps-when.md +6 -0
  34. package/corpus/templates/content/changelog/2026-06-25-the-editor-toolbar-now-has-a-one-click-page-link-copy-button.md +6 -0
  35. package/corpus/templates/content/changelog/2026-06-25-the-editor-toolbar-now-shows-page-breadcrumbs-and-the-latest.md +6 -0
  36. package/corpus/templates/content/changelog/2026-06-25-the-page-command-now-leaves-a-notion-style-page-reference-an.md +6 -0
  37. package/corpus/templates/content/shared/nfm.ts +16 -0
  38. package/dist/cli/create.d.ts.map +1 -1
  39. package/dist/cli/create.js +53 -15
  40. package/dist/cli/create.js.map +1 -1
  41. package/dist/cli/sync-builder-starter-manifest.d.ts +36 -2
  42. package/dist/cli/sync-builder-starter-manifest.d.ts.map +1 -1
  43. package/dist/cli/sync-builder-starter-manifest.js +180 -37
  44. package/dist/cli/sync-builder-starter-manifest.js.map +1 -1
  45. package/dist/collab/awareness.d.ts +1 -1
  46. package/dist/collab/awareness.d.ts.map +1 -1
  47. package/dist/collab/awareness.js +12 -8
  48. package/dist/collab/awareness.js.map +1 -1
  49. package/dist/collab/client.d.ts.map +1 -1
  50. package/dist/collab/client.js +4 -3
  51. package/dist/collab/client.js.map +1 -1
  52. package/dist/collab/routes.d.ts +1 -1
  53. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  54. package/dist/notifications/routes.d.ts +2 -2
  55. package/dist/observability/routes.d.ts +5 -5
  56. package/dist/progress/routes.d.ts +1 -1
  57. package/dist/resources/handlers.d.ts +3 -3
  58. package/dist/server/agent-engine-api-key-route.d.ts +2 -2
  59. package/dist/server/transcribe-voice.d.ts +1 -1
  60. package/package.json +3 -3
@@ -1163,6 +1163,11 @@ const editorToolbarMessages = {
1163
1163
  conflictResolvedFromNotion: "Conflict resolved from Notion.",
1164
1164
  connectNotionWorkspaceToLink:
1165
1165
  "Connect a Notion workspace to link this document.",
1166
+ copiedPageLink: "Copied page link",
1167
+ copyPageLink: "Copy page link",
1168
+ couldNotCopyLink: "Could not copy link",
1169
+ clipboardAccessUnavailable:
1170
+ "Clipboard access is not available in this browser.",
1166
1171
  edited: "Edited",
1167
1172
  export: "Export",
1168
1173
  exportFailed: "Export failed",
@@ -1197,6 +1202,7 @@ const editorToolbarMessages = {
1197
1202
  openInNotion: "Open in Notion",
1198
1203
  orgCanFindAndView: "Anyone in your organization can find and view",
1199
1204
  orgLinkCanView: "Anyone in your organization with the link can view",
1205
+ pageBreadcrumb: "Page breadcrumb",
1200
1206
  printDialogOpened: "Print dialog opened",
1201
1207
  printDialogOpenedDescription: "Choose Save as PDF to finish the export.",
1202
1208
  pulledFromNotion: "Pulled from Notion.",
@@ -1443,6 +1449,7 @@ const enUS = {
1443
1449
  describeWhatToGenerate: "Describe what to generate...",
1444
1450
  enterToSubmit: "Enter to submit",
1445
1451
  failedToCreateDatabase: "Failed to create database",
1452
+ failedToCreatePage: "Failed to create page",
1446
1453
  generateWithAi: "Generate with AI",
1447
1454
  dropMedia: "Drop media",
1448
1455
  editLink: "Edit link",
@@ -7524,21 +7531,130 @@ export const messagesByLocale = {
7524
7531
  } satisfies Record<LocaleCode, Messages>;
7525
7532
 
7526
7533
  const contentExactEnglishTranslations = {
7527
- "zh-CN": { editor: { versionRestoreQuestion: "恢复此版本?" } },
7528
- "es-ES": { editor: { versionRestoreQuestion: "¿Restaurar esta versión?" } },
7529
- "fr-FR": { editor: { versionRestoreQuestion: "Restaurer cette version ?" } },
7534
+ "zh-CN": {
7535
+ editor: {
7536
+ failedToCreatePage: "创建页面失败",
7537
+ toolbar: {
7538
+ copiedPageLink: "已复制页面链接",
7539
+ copyPageLink: "复制页面链接",
7540
+ couldNotCopyLink: "无法复制链接",
7541
+ clipboardAccessUnavailable: "此浏览器无法访问剪贴板。",
7542
+ pageBreadcrumb: "页面面包屑",
7543
+ },
7544
+ versionRestoreQuestion: "恢复此版本?",
7545
+ },
7546
+ },
7547
+ "es-ES": {
7548
+ editor: {
7549
+ failedToCreatePage: "No se pudo crear la página",
7550
+ toolbar: {
7551
+ copiedPageLink: "Enlace de página copiado",
7552
+ copyPageLink: "Copiar enlace de página",
7553
+ couldNotCopyLink: "No se pudo copiar el enlace",
7554
+ clipboardAccessUnavailable:
7555
+ "El acceso al portapapeles no está disponible en este navegador.",
7556
+ pageBreadcrumb: "Ruta de la página",
7557
+ },
7558
+ versionRestoreQuestion: "¿Restaurar esta versión?",
7559
+ },
7560
+ },
7561
+ "fr-FR": {
7562
+ editor: {
7563
+ failedToCreatePage: "Impossible de créer la page",
7564
+ toolbar: {
7565
+ copiedPageLink: "Lien de la page copié",
7566
+ copyPageLink: "Copier le lien de la page",
7567
+ couldNotCopyLink: "Impossible de copier le lien",
7568
+ clipboardAccessUnavailable:
7569
+ "L'accès au presse-papiers n'est pas disponible dans ce navigateur.",
7570
+ pageBreadcrumb: "Fil d'Ariane de la page",
7571
+ },
7572
+ versionRestoreQuestion: "Restaurer cette version ?",
7573
+ },
7574
+ },
7530
7575
  "de-DE": {
7531
- editor: { versionRestoreQuestion: "Diese Version wiederherstellen?" },
7576
+ editor: {
7577
+ failedToCreatePage: "Seite konnte nicht erstellt werden",
7578
+ toolbar: {
7579
+ copiedPageLink: "Seitenlink kopiert",
7580
+ copyPageLink: "Seitenlink kopieren",
7581
+ couldNotCopyLink: "Link konnte nicht kopiert werden",
7582
+ clipboardAccessUnavailable:
7583
+ "Der Zugriff auf die Zwischenablage ist in diesem Browser nicht verfügbar.",
7584
+ pageBreadcrumb: "Seitenpfad",
7585
+ },
7586
+ versionRestoreQuestion: "Diese Version wiederherstellen?",
7587
+ },
7532
7588
  },
7533
7589
  "ja-JP": {
7534
- editor: { versionRestoreQuestion: "このバージョンを復元しますか?" },
7590
+ editor: {
7591
+ failedToCreatePage: "ページを作成できませんでした",
7592
+ toolbar: {
7593
+ copiedPageLink: "ページリンクをコピーしました",
7594
+ copyPageLink: "ページリンクをコピー",
7595
+ couldNotCopyLink: "リンクをコピーできませんでした",
7596
+ clipboardAccessUnavailable:
7597
+ "このブラウザではクリップボードにアクセスできません。",
7598
+ pageBreadcrumb: "ページのパンくずリスト",
7599
+ },
7600
+ versionRestoreQuestion: "このバージョンを復元しますか?",
7601
+ },
7602
+ },
7603
+ "ko-KR": {
7604
+ editor: {
7605
+ failedToCreatePage: "페이지를 만들지 못했습니다",
7606
+ toolbar: {
7607
+ copiedPageLink: "페이지 링크를 복사했습니다",
7608
+ copyPageLink: "페이지 링크 복사",
7609
+ couldNotCopyLink: "링크를 복사하지 못했습니다",
7610
+ clipboardAccessUnavailable:
7611
+ "이 브라우저에서는 클립보드에 접근할 수 없습니다.",
7612
+ pageBreadcrumb: "페이지 이동 경로",
7613
+ },
7614
+ versionRestoreQuestion: "이 버전을 복원할까요?",
7615
+ },
7616
+ },
7617
+ "pt-BR": {
7618
+ editor: {
7619
+ failedToCreatePage: "Não foi possível criar a página",
7620
+ toolbar: {
7621
+ copiedPageLink: "Link da página copiado",
7622
+ copyPageLink: "Copiar link da página",
7623
+ couldNotCopyLink: "Não foi possível copiar o link",
7624
+ clipboardAccessUnavailable:
7625
+ "O acesso à área de transferência não está disponível neste navegador.",
7626
+ pageBreadcrumb: "Caminho da página",
7627
+ },
7628
+ versionRestoreQuestion: "Restaurar esta versão?",
7629
+ },
7535
7630
  },
7536
- "ko-KR": { editor: { versionRestoreQuestion: "이 버전을 복원할까요?" } },
7537
- "pt-BR": { editor: { versionRestoreQuestion: "Restaurar esta versão?" } },
7538
7631
  "hi-IN": {
7539
- editor: { versionRestoreQuestion: "यह संस्करण पुनर्स्थापित करें?" },
7632
+ editor: {
7633
+ failedToCreatePage: "पेज नहीं बनाया जा सका",
7634
+ toolbar: {
7635
+ copiedPageLink: "पेज लिंक कॉपी किया गया",
7636
+ copyPageLink: "पेज लिंक कॉपी करें",
7637
+ couldNotCopyLink: "लिंक कॉपी नहीं किया जा सका",
7638
+ clipboardAccessUnavailable: "इस ब्राउज़र में क्लिपबोर्ड एक्सेस उपलब्ध नहीं है।",
7639
+ pageBreadcrumb: "पेज ब्रेडक्रंब",
7640
+ },
7641
+ versionRestoreQuestion: "यह संस्करण पुनर्स्थापित करें?",
7642
+ },
7643
+ },
7644
+ "ar-SA": {
7645
+ editor: {
7646
+ failedToCreatePage: "تعذر إنشاء الصفحة",
7647
+ toolbar: {
7648
+ copiedPageLink: "تم نسخ رابط الصفحة",
7649
+ copyPageLink: "نسخ رابط الصفحة",
7650
+ couldNotCopyLink: "تعذر نسخ الرابط",
7651
+ clipboardAccessUnavailable:
7652
+ "الوصول إلى الحافظة غير متاح في هذا المتصفح.",
7653
+ pageBreadcrumb: "مسار الصفحة",
7654
+ },
7655
+ versionRestoreQuestion: "استعادة هذا الإصدار؟",
7656
+ },
7540
7657
  },
7541
- "ar-SA": { editor: { versionRestoreQuestion: "استعادة هذا الإصدار؟" } },
7542
7658
  } satisfies Partial<Record<LocaleCode, PartialMessages>>;
7543
7659
 
7544
7660
  for (const [locale, overrides] of Object.entries(
@@ -7549,7 +7665,21 @@ for (const [locale, overrides] of Object.entries(
7549
7665
  for (const [group, groupOverrides] of Object.entries(overrides)) {
7550
7666
  const target = (messages as Record<string, Record<string, unknown>>)[group];
7551
7667
  if (target && groupOverrides && typeof groupOverrides === "object") {
7552
- Object.assign(target, groupOverrides);
7668
+ for (const [key, value] of Object.entries(groupOverrides)) {
7669
+ const nestedTarget = target[key];
7670
+ if (
7671
+ nestedTarget &&
7672
+ value &&
7673
+ typeof nestedTarget === "object" &&
7674
+ typeof value === "object" &&
7675
+ !Array.isArray(nestedTarget) &&
7676
+ !Array.isArray(value)
7677
+ ) {
7678
+ Object.assign(nestedTarget, value);
7679
+ } else {
7680
+ target[key] = value;
7681
+ }
7682
+ }
7553
7683
  }
7554
7684
  }
7555
7685
  }
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-25
4
+ ---
5
+
6
+ Comment cards now track their highlighted text while scrolling and no longer stay open after you click away.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-25
4
+ ---
5
+
6
+ Comments now scroll with the document and stay below the page toolbar.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-25
4
+ ---
5
+
6
+ Creating a database from the slash menu no longer leaves stale command text or a purple selected strip when returning to the page.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-25
4
+ ---
5
+
6
+ Sidebar hover controls no longer leave a lingering fade when moving between pages.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-25
4
+ ---
5
+
6
+ Sidebar page actions are now easier to see when hovering inactive pages.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-25
4
+ ---
5
+
6
+ Text selections in the editor no longer show white gaps when the formatting toolbar appears.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-06-25
4
+ ---
5
+
6
+ The editor toolbar now has a one-click page link copy button next to Share.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-06-25
4
+ ---
5
+
6
+ The editor toolbar now shows page breadcrumbs and the latest edit time like Notion.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-25
4
+ ---
5
+
6
+ The /page command now leaves a Notion-style page reference and clears stale cursor labels when you return.
@@ -1798,3 +1798,19 @@ function parseLeafTag(
1798
1798
  export function canonicalizeNfm(nfm: string | null | undefined): string {
1799
1799
  return docToNfm(nfmToDoc(nfm ?? ""));
1800
1800
  }
1801
+
1802
+ export function collapseExactRepeatedNfm(
1803
+ nfm: string,
1804
+ options: { requiredText: string },
1805
+ ): string {
1806
+ if (!options.requiredText || !nfm.includes(options.requiredText)) return nfm;
1807
+
1808
+ const lines = nfm.split("\n");
1809
+ if (lines.length < 2 || lines.length % 2 !== 0) return nfm;
1810
+
1811
+ const midpoint = lines.length / 2;
1812
+ for (let index = 0; index < midpoint; index += 1) {
1813
+ if (lines[index] !== lines[index + midpoint]) return nfm;
1814
+ }
1815
+ return lines.slice(0, midpoint).join("\n");
1816
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/cli/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/cli/create.ts"],"names":[],"mappings":"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"}
@@ -16,19 +16,7 @@ const STANDALONE_EXACT_DEPENDENCY_OVERRIDES = {
16
16
  "@react-router/fs-routes": "8.0.1",
17
17
  "react-router": "8.0.1",
18
18
  };
19
- const SENTRY_MINIMUM_RELEASE_AGE_EXCLUDES = [
20
- '"@sentry/browser"',
21
- '"@sentry/browser-utils"',
22
- '"@sentry/conventions"',
23
- '"@sentry/core"',
24
- '"@sentry/feedback"',
25
- '"@sentry/node"',
26
- '"@sentry/node-core"',
27
- '"@sentry/opentelemetry"',
28
- '"@sentry/replay"',
29
- '"@sentry/replay-canvas"',
30
- '"@sentry/server-utils"',
31
- ];
19
+ const SENTRY_MINIMUM_RELEASE_AGE_EXCLUDES = ['"@sentry/*"'];
32
20
  const FIRST_PARTY_TARBALL_SYMLINK_EXCLUDES = [
33
21
  "*/CLAUDE.md",
34
22
  "*/.claude/skills",
@@ -792,6 +780,7 @@ function postProcessStandalone(name, targetDir, templateName) {
792
780
  const appTitle = appTitleForScaffold(name);
793
781
  replacePlaceholders(targetDir, name, appTitle);
794
782
  rewriteTrackingAppId(targetDir, name, templateName);
783
+ rewriteAgentChatAppId(targetDir, name, templateName);
795
784
  fixPackageJsonName(targetDir, name, templateName);
796
785
  fixWebManifestName(targetDir, name, templateName);
797
786
  rewriteNetlifyToml(targetDir, name, "standalone");
@@ -885,8 +874,37 @@ function postProcessStandalone(name, targetDir, templateName) {
885
874
  }
886
875
  }
887
876
  catch { }
877
+ fixStandaloneTsconfig(targetDir, templateName);
888
878
  setupAgentSymlinks(targetDir);
889
879
  }
880
+ function fixStandaloneTsconfig(targetDir, templateName) {
881
+ const tsconfigPath = path.join(targetDir, "tsconfig.json");
882
+ if (!fs.existsSync(tsconfigPath))
883
+ return;
884
+ try {
885
+ const tsconfig = JSON.parse(fs.readFileSync(tsconfigPath, "utf-8"));
886
+ tsconfig.compilerOptions ??= {};
887
+ const hasUiApp = templateName !== "headless" && fs.existsSync(path.join(targetDir, "app"));
888
+ const paths = {
889
+ ...(tsconfig.compilerOptions.paths ?? {}),
890
+ };
891
+ paths["*"] ??= ["./*"];
892
+ if (hasUiApp) {
893
+ paths["@/*"] ??= ["./app/*"];
894
+ paths["@shared/*"] ??= ["./shared/*"];
895
+ // Child baseUrl anchors @/* for apps extending legacy core tsconfig bases
896
+ // that still ship baseUrl. Headless scaffolds omit it so raw tsgo --noEmit
897
+ // keeps working under TS 6.
898
+ tsconfig.compilerOptions.baseUrl = ".";
899
+ }
900
+ else {
901
+ delete tsconfig.compilerOptions.baseUrl;
902
+ }
903
+ tsconfig.compilerOptions.paths = paths;
904
+ fs.writeFileSync(tsconfigPath, `${JSON.stringify(tsconfig, null, 2)}\n`);
905
+ }
906
+ catch { }
907
+ }
890
908
  /* ─────────────────────────────────────────────────────────────────────────
891
909
  * Prompting helpers
892
910
  * ───────────────────────────────────────────────────────────────────────── */
@@ -1396,7 +1414,7 @@ function rewriteNetlifyToml(appDir, appName, mode) {
1396
1414
  return;
1397
1415
  try {
1398
1416
  let content = fs.readFileSync(netlifyPath, "utf-8");
1399
- const originalCommand = content.match(/^ command = "([^"]*)"$/m)?.[1];
1417
+ const originalCommand = content.match(/^\s*command = "([^"]*)"$/m)?.[1];
1400
1418
  const usesUnpooledDatabase = originalCommand?.includes("NETLIFY_DATABASE_URL_UNPOOLED") ?? false;
1401
1419
  const buildCommand = mode === "workspace"
1402
1420
  ? `APP_BASE_PATH=/${appName} VITE_APP_BASE_PATH=/${appName} NITRO_PRESET=netlify pnpm --filter ${appName} build`
@@ -1411,7 +1429,7 @@ function rewriteNetlifyToml(appDir, appName, mode) {
1411
1429
  ? `apps/${appName}/.netlify/functions-internal`
1412
1430
  : ".netlify/functions-internal";
1413
1431
  content = content
1414
- .replace(/^ command = ".*"$/m, ` command = "${command}"`)
1432
+ .replace(/^(\s*)command = ".*"$/m, `$1command = "${command}"`)
1415
1433
  .replace(/publish = "templates\/[^"]+\/dist"/g, `publish = "${publishPath}"`)
1416
1434
  .replace(/functions = "templates\/[^"]+\/\.netlify\/functions-internal"/g, `functions = "${functionsPath}"`)
1417
1435
  // Strip the `ignore` script line: it references a monorepo script path
@@ -1425,6 +1443,26 @@ function rewriteNetlifyToml(appDir, appName, mode) {
1425
1443
  }
1426
1444
  catch { }
1427
1445
  }
1446
+ function rewriteAgentChatAppId(appDir, appName, templateName) {
1447
+ const pluginPath = path.join(appDir, "server", "plugins", "agent-chat.ts");
1448
+ if (!fs.existsSync(pluginPath))
1449
+ return;
1450
+ try {
1451
+ const content = fs.readFileSync(pluginPath, "utf-8");
1452
+ const sourceAppIds = ["chat", "starter"];
1453
+ if (templateName && templateName !== appName) {
1454
+ sourceAppIds.push(templateName);
1455
+ }
1456
+ const pattern = new RegExp(`(appId:\\s*)(["'])(${sourceAppIds.map(escapeRegExp).join("|")})\\2`);
1457
+ if (!pattern.test(content))
1458
+ return;
1459
+ const next = content.replace(pattern, (_match, prefix, quote) => `${prefix}${quote}${appName}${quote}`);
1460
+ if (next !== content) {
1461
+ fs.writeFileSync(pluginPath, next);
1462
+ }
1463
+ }
1464
+ catch { }
1465
+ }
1428
1466
  function rewriteTrackingAppId(appDir, appName, templateName) {
1429
1467
  const rootPath = path.join(appDir, "app", "root.tsx");
1430
1468
  if (!fs.existsSync(rootPath))