@agent-native/core 0.146.7 → 0.147.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 (167) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +18 -6
  3. package/corpus/templates/analytics/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  4. package/corpus/templates/analytics/DEVELOPING.md +59 -0
  5. package/corpus/templates/analytics/app/routes/status.$slug.tsx +4 -2
  6. package/corpus/templates/analytics/package.json +1 -0
  7. package/corpus/templates/analytics/scripts/first-party-analytics-bigquery-backfill.ts +889 -0
  8. package/corpus/templates/analytics/server/jobs/analytics-bigquery-backfill.ts +70 -0
  9. package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +117 -12
  10. package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +18 -6
  11. package/corpus/templates/assets/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  12. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +9 -0
  13. package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +18 -6
  14. package/corpus/templates/brain/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  15. package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +18 -6
  16. package/corpus/templates/calendar/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  17. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +9 -0
  18. package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -6
  19. package/corpus/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  20. package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +18 -6
  21. package/corpus/templates/clips/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  22. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +16 -4
  23. package/corpus/templates/clips/app/routes/share.meeting.$meetingId.tsx +14 -5
  24. package/corpus/templates/clips/package.json +1 -0
  25. package/corpus/templates/clips/react-router.config.ts +7 -0
  26. package/corpus/templates/clips/server/plugins/auth.ts +6 -1
  27. package/corpus/templates/clips/shared/prerendered-public-paths.ts +21 -0
  28. package/corpus/templates/clips/shared/share-meta.ts +8 -3
  29. package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +18 -6
  30. package/corpus/templates/content/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  31. package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +18 -6
  32. package/corpus/templates/crm/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  33. package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +18 -6
  34. package/corpus/templates/design/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  35. package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +18 -6
  36. package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  37. package/corpus/templates/dispatch/app/chat-first-pages.ts +747 -0
  38. package/corpus/templates/dispatch/app/i18n-data.ts +181 -0
  39. package/corpus/templates/dispatch/app/routes/settings.tsx +62 -1
  40. package/corpus/templates/dispatch/changelog/2026-08-08-chat-first-navigation-keeps-conversations-central-while-open.md +6 -0
  41. package/corpus/templates/factory/.agents/skills/adding-a-feature/SKILL.md +9 -0
  42. package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +18 -6
  43. package/corpus/templates/factory/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  44. package/corpus/templates/factory/actions/run-factory-automation.ts +1 -0
  45. package/corpus/templates/factory/app/routes/factory.tsx +108 -76
  46. package/corpus/templates/factory/changelog/2026-08-08-scheduler-health-moves-to-settings.md +6 -0
  47. package/corpus/templates/factory/netlify.toml +1 -1
  48. package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +18 -6
  49. package/corpus/templates/forms/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  50. package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +18 -6
  51. package/corpus/templates/macros/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  52. package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +18 -6
  53. package/corpus/templates/mail/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  54. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +9 -0
  55. package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +18 -6
  56. package/corpus/templates/plan/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  57. package/corpus/templates/plan/app/lib/plan-document-title.ts +3 -1
  58. package/corpus/templates/plan/app/root.tsx +1 -0
  59. package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +18 -6
  60. package/corpus/templates/slides/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  61. package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +9 -0
  62. package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +18 -6
  63. package/corpus/templates/tasks/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  64. package/dist/agent/engine/builder-engine.d.ts +11 -1
  65. package/dist/agent/engine/builder-engine.js +11 -4
  66. package/dist/chat-threads/store.d.ts +2 -0
  67. package/dist/chat-threads/store.js +1 -1
  68. package/dist/cli/agent-plugin.d.ts +5 -2
  69. package/dist/cli/agent-plugin.js +17 -9
  70. package/dist/cli/code-agent-executor.js +25 -5
  71. package/dist/cli/code-agent-mcp-config.d.ts +21 -0
  72. package/dist/cli/code-agent-mcp-config.js +103 -0
  73. package/dist/client/NewWorkspaceAppFlow.js +4 -1
  74. package/dist/client/agent-chat/index.d.ts +4 -1
  75. package/dist/client/agent-chat/index.js +4 -1
  76. package/dist/client/agent-page/AgentTabsPage.d.ts +1 -0
  77. package/dist/client/agent-page/AgentTabsPage.js +4 -3
  78. package/dist/client/app-providers.d.ts +3 -1
  79. package/dist/client/app-providers.js +50 -5
  80. package/dist/client/chat/runtime.js +63 -0
  81. package/dist/client/chat-first/agents-pane.d.ts +2 -0
  82. package/dist/client/chat-first/agents-pane.js +6 -0
  83. package/dist/client/chat-first/app-pane.d.ts +2 -0
  84. package/dist/client/chat-first/app-pane.js +6 -0
  85. package/dist/client/chat-first/apps-rail.d.ts +2 -0
  86. package/dist/client/chat-first/apps-rail.js +103 -0
  87. package/dist/client/chat-first/browser-pane.d.ts +2 -0
  88. package/dist/client/chat-first/browser-pane.js +64 -0
  89. package/dist/client/chat-first/chat-history.d.ts +12 -0
  90. package/dist/client/chat-first/chat-history.js +10 -0
  91. package/dist/client/chat-first/copy.d.ts +2 -0
  92. package/dist/client/chat-first/copy.js +117 -0
  93. package/dist/client/chat-first/index.d.ts +13 -0
  94. package/dist/client/chat-first/index.js +12 -0
  95. package/dist/client/chat-first/primary-nav.d.ts +8 -0
  96. package/dist/client/chat-first/primary-nav.js +6 -0
  97. package/dist/client/chat-first/session-watch-pane.d.ts +2 -0
  98. package/dist/client/chat-first/session-watch-pane.js +9 -0
  99. package/dist/client/chat-first/surface-panel.d.ts +9 -0
  100. package/dist/client/chat-first/surface-panel.js +9 -0
  101. package/dist/client/chat-first/surface-tabs.d.ts +9 -0
  102. package/dist/client/chat-first/surface-tabs.js +74 -0
  103. package/dist/client/chat-first/types.d.ts +74 -0
  104. package/dist/client/chat-first/types.js +1 -0
  105. package/dist/client/chat-first-agent-activity.d.ts +11 -0
  106. package/dist/client/chat-first-agent-activity.js +51 -0
  107. package/dist/client/chat-first-surface-panel-toggle.d.ts +5 -0
  108. package/dist/client/chat-first-surface-panel-toggle.js +6 -0
  109. package/dist/client/chat-first.d.ts +208 -0
  110. package/dist/client/chat-first.js +816 -0
  111. package/dist/client/extensions/ExtensionViewer.js +8 -1
  112. package/dist/client/resources/McpIntegrationDialog.js +3 -2
  113. package/dist/client/resources/McpServerDetail.js +6 -11
  114. package/dist/client/resources/index.d.ts +1 -0
  115. package/dist/client/resources/index.js +1 -0
  116. package/dist/client/resources/use-mcp-servers.d.ts +20 -0
  117. package/dist/client/resources/use-mcp-servers.js +82 -46
  118. package/dist/client/settings/index.d.ts +1 -0
  119. package/dist/client/settings/index.js +1 -0
  120. package/dist/collab/awareness.d.ts +2 -2
  121. package/dist/collab/routes.d.ts +1 -1
  122. package/dist/jobs/background-automation-runner.js +19 -2
  123. package/dist/jobs/scheduler-health.d.ts +20 -0
  124. package/dist/jobs/scheduler-health.js +86 -1
  125. package/dist/jobs/scheduler.js +38 -1
  126. package/dist/mcp-client/routes.d.ts +3 -0
  127. package/dist/mcp-client/routes.js +14 -0
  128. package/dist/notifications/routes.d.ts +1 -1
  129. package/dist/provider-api/actions/provider-api.d.ts +2 -2
  130. package/dist/server/agents-bundle.d.ts +2 -0
  131. package/dist/server/agents-bundle.js +31 -2
  132. package/dist/server/credential-provider.d.ts +8 -2
  133. package/dist/server/credential-provider.js +13 -9
  134. package/dist/shared/chat-first-app-creation.d.ts +19 -0
  135. package/dist/shared/chat-first-app-creation.js +75 -0
  136. package/dist/shared/document-title.d.ts +7 -0
  137. package/dist/shared/document-title.js +29 -0
  138. package/dist/shared/index.d.ts +2 -0
  139. package/dist/shared/index.js +2 -0
  140. package/dist/styles/chat-history-list.css +16 -0
  141. package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +9 -0
  142. package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -6
  143. package/dist/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  144. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +9 -0
  145. package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +18 -6
  146. package/dist/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  147. package/dist/templates/default/react-router.config.ts +18 -0
  148. package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +18 -6
  149. package/dist/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  150. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +9 -0
  151. package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +18 -6
  152. package/dist/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  153. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +7 -0
  154. package/package.json +4 -3
  155. package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +9 -0
  156. package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -6
  157. package/src/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  158. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +9 -0
  159. package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +18 -6
  160. package/src/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  161. package/src/templates/default/react-router.config.ts +18 -0
  162. package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +18 -6
  163. package/src/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  164. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +9 -0
  165. package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +18 -6
  166. package/src/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +8 -1
  167. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +7 -0
@@ -1,5 +1,6 @@
1
1
  import { type LocaleCode } from "@agent-native/core/client/i18n";
2
2
 
3
+ import { chatFirstPageTranslations } from "./chat-first-pages";
3
4
  import zhTW from "./i18n/zh-TW";
4
5
 
5
6
  const enUS = {
@@ -37,6 +38,16 @@ const enUS = {
37
38
  deliveryDescription:
38
39
  "Manage message destinations and check the outbound delivery queue.",
39
40
  openDelivery: "Open delivery",
41
+ chatFirstTitle: "Chat-first workspace",
42
+ chatFirstDescription:
43
+ "Keep chats at the center and open workspace apps in a contextual pane beside them. This preference only changes your local Dispatch shell.",
44
+ chatFirstAriaLabel: "Use chat-first navigation",
45
+ chatFirstSessionWatchDescription:
46
+ "Session watch and follow-up messaging work in this browser pane too. Local CLI subscription detection stays in the Electron app; Dispatch uses workspace/provider credentials.",
47
+ chatFirstStorageUnavailable:
48
+ "This browser is not allowing local preferences, so Chat-first mode cannot be persisted.",
49
+ chatFirstStorageBlocked:
50
+ "This browser blocked local preferences, so Chat-first mode was not changed.",
40
51
  agentTitle: "Manage agent",
41
52
  agentDescription:
42
53
  "Manage the agent's model, API keys, voice, and other controls. Use the Automations page for scheduled and event-triggered jobs.",
@@ -379,6 +390,77 @@ const enUS = {
379
390
  threadDebugRefreshThreads: "Refresh threads",
380
391
  threadDebugNoThreads: "No threads found.",
381
392
  threadDebugSelectPrompt: "Select a failed run or thread to inspect.",
393
+ chatFirstWorkspaceApps: "Workspace apps",
394
+ chatFirstCreateWorkspaceApp: "Create workspace app",
395
+ chatFirstOpenApp: "Open {{name}}",
396
+ chatFirstAppsLoadError: "Workspace apps could not be loaded",
397
+ chatFirstNoWorkspaceApps: "No workspace apps yet.",
398
+ chatFirstCreateApp: "Create app",
399
+ chatFirstRetry: "Retry",
400
+ chatFirstUnpinApp: "Unpin {{name}}",
401
+ chatFirstPinApp: "Pin {{name}}",
402
+ chatFirstRemovePinned: "Remove from pinned apps",
403
+ chatFirstPinTop: "Pin app to the top",
404
+ chatFirstOpenSideSurfaces: "Open side surfaces",
405
+ chatFirstCloseTab: "Close {{name}}",
406
+ chatFirstClose: "Close",
407
+ chatFirstCloseOthers: "Close others",
408
+ chatFirstCloseToRight: "Close to the right",
409
+ chatFirstCloseAll: "Close all",
410
+ chatFirstBrowserAgentHint: "Ask the agent to open a web URL.",
411
+ chatFirstUnavailable: "This surface is not available here.",
412
+ chatFirstOpenActivity: "Open activity",
413
+ chatFirstDeferred: "Deferred",
414
+ chatFirstSurfaceBrowserLabel: "Browser",
415
+ chatFirstSurfaceBrowserDescription:
416
+ "Open a regular web page with address-bar controls.",
417
+ chatFirstSurfaceBrowserReason: "Ask the agent to open a web URL.",
418
+ chatFirstSurfaceTerminalLabel: "Terminal",
419
+ chatFirstSurfaceTerminalDescription:
420
+ "Run commands beside the conversation.",
421
+ chatFirstSurfaceTerminalReason:
422
+ "Deferred in this release: the existing terminal is a standalone host surface; an embedded pane needs a shared PTY lifecycle.",
423
+ chatFirstSurfaceFilesLabel: "Files",
424
+ chatFirstSurfaceFilesDescription: "Browse the active workspace tree.",
425
+ chatFirstSurfaceFilesReason:
426
+ "Deferred in this release: this shared pane contract does not expose a bounded workspace tree yet.",
427
+ chatFirstSurfaceDiffLabel: "Diff",
428
+ chatFirstSurfaceDiffDescription: "Review the current changeset.",
429
+ chatFirstSurfaceDiffReason:
430
+ "Deferred in this release: diff blocks remain available in chat while a shared changed-file source is defined.",
431
+ chatFirstSurfaceSideChatLabel: "Side chat",
432
+ chatFirstSurfaceSideChatDescription:
433
+ "Watch and message another session beside the main chat.",
434
+ chatFirstSurfaceAgentsLabel: "Agents",
435
+ chatFirstSurfaceAgentsDescription:
436
+ "Review agent sessions and watch one beside the conversation.",
437
+ chatFirstSurfaceSideChatReason:
438
+ "Choose Watch and message from any chat row.",
439
+ chatFirstSurfaceAgentsReason:
440
+ "Review recent runs or watch one beside this conversation.",
441
+ chatFirstAppView: "Contextual app view",
442
+ chatFirstContextualView: "Contextual view · {{view}}",
443
+ chatFirstWorkspaceApp: "Workspace app",
444
+ chatFirstCloseAppPane: "Close app pane",
445
+ chatFirstAppUnavailable: "This workspace app is no longer available.",
446
+ chatFirstLoadingApp: "Loading app",
447
+ chatFirstBrowserBack: "Back",
448
+ chatFirstBrowserForward: "Forward",
449
+ chatFirstBrowserReload: "Reload page",
450
+ chatFirstBrowserAddress: "Browser address",
451
+ chatFirstBrowserOpenExternal: "Open in external browser",
452
+ chatFirstBrowserClose: "Close browser",
453
+ chatFirstBrowserPage: "Browser page",
454
+ chatFirstBrowserInvalidUrl: "Enter a full http(s) URL to navigate.",
455
+ chatFirstWatchingSession: "Watching {{name}}",
456
+ chatFirstSession: "session",
457
+ chatFirstStopWatchingSession: "Stop watching session",
458
+ chatFirstStopWatching: "Stop watching",
459
+ chatFirstWatchedSession: "Watched session",
460
+ chatFirstSessionMessagePlaceholder: "Message this session…",
461
+ chatFirstAgentsTitle: "Subagents",
462
+ chatFirstUntitledAgentSession: "Untitled agent session",
463
+ chatFirstAgentChatSession: "Agent chat session",
382
464
  },
383
465
  },
384
466
  };
@@ -504,6 +586,16 @@ export const messagesByLocale = {
504
586
  deliveryTitle: "投递",
505
587
  deliveryDescription: "管理消息目的地并查看出站投递队列。",
506
588
  openDelivery: "打开投递",
589
+ chatFirstTitle: "聊天优先工作区",
590
+ chatFirstDescription:
591
+ "让聊天保持中心位置,并在旁边的上下文面板中打开工作区应用。此偏好只会更改你在 Dispatch 中的本地界面。",
592
+ chatFirstAriaLabel: "使用聊天优先导航",
593
+ chatFirstSessionWatchDescription:
594
+ "会话监看和后续消息也可在此浏览器面板中使用。本地 CLI 订阅检测保留在 Electron 应用中;Dispatch 使用工作区/提供商凭据。",
595
+ chatFirstStorageUnavailable:
596
+ "此浏览器不允许使用本地偏好设置,因此无法保存聊天优先模式。",
597
+ chatFirstStorageBlocked:
598
+ "此浏览器阻止了本地偏好设置,因此未更改聊天优先模式。",
507
599
  agentTitle: "管理代理",
508
600
  agentDescription:
509
601
  "管理代理的模型、API 密钥、语音和其他控制项。定时与事件触发的任务请使用自动化页面。",
@@ -737,6 +829,7 @@ export const messagesByLocale = {
737
829
  agent: "代理",
738
830
  },
739
831
  pages: {
832
+ ...chatFirstPageTranslations["zh-CN"],
740
833
  adminDescription: "工作区控制与运营",
741
834
  adminNavigation: "管理导航",
742
835
  adminWelcome: "工作区控制中心",
@@ -873,6 +966,16 @@ export const messagesByLocale = {
873
966
  deliveryDescription:
874
967
  "Gestiona destinos de mensajes y revisa la cola de entrega saliente.",
875
968
  openDelivery: "Abrir entrega",
969
+ chatFirstTitle: "Espacio de trabajo centrado en el chat",
970
+ chatFirstDescription:
971
+ "Deja los chats en el centro y abre las apps del espacio de trabajo en un panel contextual junto a ellos. Esta preferencia solo cambia tu shell local de Dispatch.",
972
+ chatFirstAriaLabel: "Usar navegación centrada en el chat",
973
+ chatFirstSessionWatchDescription:
974
+ "Puedes observar sesiones y enviar mensajes de seguimiento desde este panel del navegador. La detección de suscripciones CLI locales permanece en la app de Electron; Dispatch usa credenciales del espacio de trabajo/proveedor.",
975
+ chatFirstStorageUnavailable:
976
+ "Este navegador no permite las preferencias locales, por lo que el modo centrado en el chat no se puede guardar.",
977
+ chatFirstStorageBlocked:
978
+ "Este navegador bloqueó las preferencias locales, por lo que no se cambió el modo centrado en el chat.",
876
979
  agentTitle: "Gestionar agente",
877
980
  agentDescription:
878
981
  "Gestiona el modelo del agente, claves API, voz y otros controles. Usa la página de Automatizaciones para trabajos programados y activados por eventos.",
@@ -1129,6 +1232,7 @@ export const messagesByLocale = {
1129
1232
  agent: "Agente",
1130
1233
  },
1131
1234
  pages: {
1235
+ ...chatFirstPageTranslations["es-ES"],
1132
1236
  adminDescription: "Controles y operaciones del espacio de trabajo",
1133
1237
  adminNavigation: "Navegación de administración",
1134
1238
  adminWelcome: "Panel de control del espacio de trabajo",
@@ -1278,6 +1382,16 @@ export const messagesByLocale = {
1278
1382
  deliveryDescription:
1279
1383
  "Gérez les destinations de messages et consultez la file d’attente sortante.",
1280
1384
  openDelivery: "Ouvrir la livraison",
1385
+ chatFirstTitle: "Espace de travail axé sur le chat",
1386
+ chatFirstDescription:
1387
+ "Gardez les chats au centre et ouvrez les apps de l’espace de travail dans un panneau contextuel à côté. Cette préférence ne modifie que votre interface locale Dispatch.",
1388
+ chatFirstAriaLabel: "Utiliser la navigation axée sur le chat",
1389
+ chatFirstSessionWatchDescription:
1390
+ "Le suivi des sessions et les messages de suivi fonctionnent aussi dans ce panneau du navigateur. La détection des abonnements CLI locaux reste dans l’app Electron ; Dispatch utilise les identifiants de l’espace de travail/fournisseur.",
1391
+ chatFirstStorageUnavailable:
1392
+ "Ce navigateur n’autorise pas les préférences locales ; le mode axé sur le chat ne peut donc pas être conservé.",
1393
+ chatFirstStorageBlocked:
1394
+ "Ce navigateur a bloqué les préférences locales ; le mode axé sur le chat n’a pas été modifié.",
1281
1395
  agentTitle: "Gérer l’agent",
1282
1396
  agentDescription:
1283
1397
  "Gérez le modèle de l’agent, les clés API, la voix et les autres contrôles. Utilisez la page Automatisations pour les tâches planifiées et déclenchées par des événements.",
@@ -1534,6 +1648,7 @@ export const messagesByLocale = {
1534
1648
  agent: "Agent",
1535
1649
  },
1536
1650
  pages: {
1651
+ ...chatFirstPageTranslations["fr-FR"],
1537
1652
  adminDescription: "Contrôles et opérations de l’espace de travail",
1538
1653
  adminNavigation: "Navigation d’administration",
1539
1654
  adminWelcome: "Centre de contrôle de l’espace de travail",
@@ -1684,6 +1799,16 @@ export const messagesByLocale = {
1684
1799
  deliveryDescription:
1685
1800
  "Nachrichtenziele verwalten und die ausgehende Zustellungswarteschlange prüfen.",
1686
1801
  openDelivery: "Zustellung öffnen",
1802
+ chatFirstTitle: "Chat-zentrierter Arbeitsbereich",
1803
+ chatFirstDescription:
1804
+ "Chats bleiben im Mittelpunkt, während Workspace-Apps in einem kontextbezogenen Bereich daneben geöffnet werden. Diese Einstellung ändert nur deine lokale Dispatch-Oberfläche.",
1805
+ chatFirstAriaLabel: "Chat-zentrierte Navigation verwenden",
1806
+ chatFirstSessionWatchDescription:
1807
+ "Sessions können auch in diesem Browserbereich beobachtet und mit Folgemeldungen versehen werden. Die Erkennung lokaler CLI-Abos bleibt in der Electron-App; Dispatch verwendet Workspace-/Anbieter-Anmeldedaten.",
1808
+ chatFirstStorageUnavailable:
1809
+ "Dieser Browser lässt lokale Einstellungen nicht zu. Der chat-zentrierte Modus kann daher nicht gespeichert werden.",
1810
+ chatFirstStorageBlocked:
1811
+ "Dieser Browser hat lokale Einstellungen blockiert. Der chat-zentrierte Modus wurde nicht geändert.",
1687
1812
  agentTitle: "Agent verwalten",
1688
1813
  agentDescription:
1689
1814
  "Verwalte das Modell, die API-Schlüssel, Sprache und weitere Steuerungen des Agents. Für geplante und ereignisgesteuerte Jobs die Automatisierungen-Seite verwenden.",
@@ -1929,6 +2054,7 @@ export const messagesByLocale = {
1929
2054
  agent: "Agent",
1930
2055
  },
1931
2056
  pages: {
2057
+ ...chatFirstPageTranslations["de-DE"],
1932
2058
  adminDescription: "Arbeitsbereichssteuerung und -betrieb",
1933
2059
  adminNavigation: "Administrationsnavigation",
1934
2060
  adminWelcome: "Arbeitsbereichsleitstelle",
@@ -2075,6 +2201,16 @@ export const messagesByLocale = {
2075
2201
  deliveryDescription:
2076
2202
  "メッセージの送信先を管理し、送信キューを確認します。",
2077
2203
  openDelivery: "配信を開く",
2204
+ chatFirstTitle: "チャット中心のワークスペース",
2205
+ chatFirstDescription:
2206
+ "チャットを中心に保ち、ワークスペースアプリを隣のコンテキストパネルで開きます。この設定で変わるのはローカルの Dispatch シェルだけです。",
2207
+ chatFirstAriaLabel: "チャット中心のナビゲーションを使用",
2208
+ chatFirstSessionWatchDescription:
2209
+ "このブラウザパネルでもセッションの監視とフォローアップメッセージを利用できます。ローカル CLI サブスクリプションの検出は Electron アプリに残り、Dispatch はワークスペース/プロバイダーの認証情報を使用します。",
2210
+ chatFirstStorageUnavailable:
2211
+ "このブラウザではローカル設定が許可されないため、チャット中心モードを保存できません。",
2212
+ chatFirstStorageBlocked:
2213
+ "このブラウザがローカル設定をブロックしたため、チャット中心モードは変更されませんでした。",
2078
2214
  agentTitle: "エージェントを管理",
2079
2215
  agentDescription:
2080
2216
  "エージェントのモデル、API キー、音声などを管理します。スケジュールおよびイベント駆動のジョブは自動化ページを使用してください。",
@@ -2318,6 +2454,7 @@ export const messagesByLocale = {
2318
2454
  agent: "エージェント",
2319
2455
  },
2320
2456
  pages: {
2457
+ ...chatFirstPageTranslations["ja-JP"],
2321
2458
  adminDescription: "ワークスペースの管理と運用",
2322
2459
  adminNavigation: "管理ナビゲーション",
2323
2460
  adminWelcome: "ワークスペースのコントロールプレーン",
@@ -2462,6 +2599,16 @@ export const messagesByLocale = {
2462
2599
  deliveryDescription:
2463
2600
  "메시지 대상을 관리하고 발신 전달 대기열을 확인합니다.",
2464
2601
  openDelivery: "전달 열기",
2602
+ chatFirstTitle: "채팅 중심 작업공간",
2603
+ chatFirstDescription:
2604
+ "채팅을 중심에 두고 작업공간 앱을 옆의 컨텍스트 패널에서 엽니다. 이 설정은 로컬 Dispatch 셸만 변경합니다.",
2605
+ chatFirstAriaLabel: "채팅 중심 탐색 사용",
2606
+ chatFirstSessionWatchDescription:
2607
+ "이 브라우저 패널에서도 세션을 지켜보고 후속 메시지를 보낼 수 있습니다. 로컬 CLI 구독 감지는 Electron 앱에 남아 있으며, Dispatch는 작업공간/공급자 자격 증명을 사용합니다.",
2608
+ chatFirstStorageUnavailable:
2609
+ "이 브라우저에서는 로컬 환경설정을 허용하지 않아 채팅 중심 모드를 저장할 수 없습니다.",
2610
+ chatFirstStorageBlocked:
2611
+ "이 브라우저가 로컬 환경설정을 차단하여 채팅 중심 모드가 변경되지 않았습니다.",
2465
2612
  agentTitle: "에이전트 관리",
2466
2613
  agentDescription:
2467
2614
  "에이전트의 모델, API 키, 음성 및 기타 제어를 관리합니다. 예약 및 이벤트 트리거 작업은 자동화 페이지를 사용하세요.",
@@ -2702,6 +2849,7 @@ export const messagesByLocale = {
2702
2849
  agent: "에이전트",
2703
2850
  },
2704
2851
  pages: {
2852
+ ...chatFirstPageTranslations["ko-KR"],
2705
2853
  adminDescription: "워크스페이스 제어 및 운영",
2706
2854
  adminNavigation: "관리 탐색",
2707
2855
  adminWelcome: "워크스페이스 제어 센터",
@@ -2842,6 +2990,16 @@ export const messagesByLocale = {
2842
2990
  deliveryDescription:
2843
2991
  "Gerencie destinos de mensagens e verifique a fila de entrega de saída.",
2844
2992
  openDelivery: "Abrir entrega",
2993
+ chatFirstTitle: "Espaço de trabalho com foco no chat",
2994
+ chatFirstDescription:
2995
+ "Mantenha os chats no centro e abra os apps do workspace em um painel contextual ao lado. Esta preferência altera apenas o shell local do Dispatch.",
2996
+ chatFirstAriaLabel: "Usar navegação com foco no chat",
2997
+ chatFirstSessionWatchDescription:
2998
+ "O acompanhamento de sessões e as mensagens de acompanhamento também funcionam neste painel do navegador. A detecção de assinaturas CLI locais continua no app Electron; o Dispatch usa credenciais do workspace/provedor.",
2999
+ chatFirstStorageUnavailable:
3000
+ "Este navegador não permite preferências locais, então o modo com foco no chat não pode ser salvo.",
3001
+ chatFirstStorageBlocked:
3002
+ "Este navegador bloqueou as preferências locais, então o modo com foco no chat não foi alterado.",
2845
3003
  agentTitle: "Gerenciar agente",
2846
3004
  agentDescription:
2847
3005
  "Gerencie o modelo do agente, chaves de API, voz e outros controles. Use a página de Automações para trabalhos agendados e acionados por eventos.",
@@ -3094,6 +3252,7 @@ export const messagesByLocale = {
3094
3252
  agent: "Agente",
3095
3253
  },
3096
3254
  pages: {
3255
+ ...chatFirstPageTranslations["pt-BR"],
3097
3256
  adminDescription: "Controles e operações do espaço de trabalho",
3098
3257
  adminNavigation: "Navegação de administração",
3099
3258
  adminWelcome: "Central de controle do espaço de trabalho",
@@ -3238,6 +3397,16 @@ export const messagesByLocale = {
3238
3397
  deliveryTitle: "डिलीवरी",
3239
3398
  deliveryDescription: "संदेश गंतव्य प्रबंधित करें और आउटबाउंड डिलीवरी कतार जांचें।",
3240
3399
  openDelivery: "डिलीवरी खोलें",
3400
+ chatFirstTitle: "चैट-केंद्रित कार्यक्षेत्र",
3401
+ chatFirstDescription:
3402
+ "चैट को केंद्र में रखें और कार्यक्षेत्र ऐप्स को बगल के संदर्भ पैनल में खोलें। यह प्राथमिकता केवल आपके स्थानीय Dispatch शेल को बदलती है।",
3403
+ chatFirstAriaLabel: "चैट-केंद्रित नेविगेशन का उपयोग करें",
3404
+ chatFirstSessionWatchDescription:
3405
+ "इस ब्राउज़र पैनल में भी सत्र देखना और फ़ॉलो-अप संदेश भेजना काम करता है। स्थानीय CLI सदस्यता पहचान Electron ऐप में रहती है; Dispatch कार्यक्षेत्र/प्रदाता क्रेडेंशियल का उपयोग करता है।",
3406
+ chatFirstStorageUnavailable:
3407
+ "यह ब्राउज़र स्थानीय प्राथमिकताओं की अनुमति नहीं देता, इसलिए चैट-केंद्रित मोड सहेजा नहीं जा सकता।",
3408
+ chatFirstStorageBlocked:
3409
+ "इस ब्राउज़र ने स्थानीय प्राथमिकताओं को ब्लॉक कर दिया, इसलिए चैट-केंद्रित मोड बदला नहीं गया।",
3241
3410
  agentTitle: "एजेंट प्रबंधित करें",
3242
3411
  agentDescription:
3243
3412
  "एजेंट के मॉडल, API कुंजियों, आवाज़ और अन्य नियंत्रणों को प्रबंधित करें। शेड्यूल और इवेंट-ट्रिगर जॉब्स के लिए ऑटोमेशन पेज का उपयोग करें।",
@@ -3475,6 +3644,7 @@ export const messagesByLocale = {
3475
3644
  agent: "एजेंट",
3476
3645
  },
3477
3646
  pages: {
3647
+ ...chatFirstPageTranslations["hi-IN"],
3478
3648
  adminDescription: "वर्कस्पेस नियंत्रण और संचालन",
3479
3649
  adminNavigation: "व्यवस्थापक नेविगेशन",
3480
3650
  adminWelcome: "वर्कस्पेस नियंत्रण केंद्र",
@@ -3611,6 +3781,16 @@ export const messagesByLocale = {
3611
3781
  deliveryDescription:
3612
3782
  "إدارة وجهات الرسائل وفحص قائمة انتظار التسليم الصادرة.",
3613
3783
  openDelivery: "فتح التسليم",
3784
+ chatFirstTitle: "مساحة عمل تركز على الدردشة",
3785
+ chatFirstDescription:
3786
+ "أبقِ الدردشات في المركز وافتح تطبيقات مساحة العمل في لوحة سياقية بجانبها. يغيّر هذا التفضيل واجهة Dispatch المحلية فقط.",
3787
+ chatFirstAriaLabel: "استخدام التنقل المتمحور حول الدردشة",
3788
+ chatFirstSessionWatchDescription:
3789
+ "تعمل مراقبة الجلسات وإرسال رسائل المتابعة أيضًا في لوحة المتصفح هذه. يبقى اكتشاف اشتراكات CLI المحلية في تطبيق Electron؛ ويستخدم Dispatch بيانات اعتماد مساحة العمل/الموفر.",
3790
+ chatFirstStorageUnavailable:
3791
+ "لا يسمح هذا المتصفح بالتفضيلات المحلية، لذلك لا يمكن حفظ وضع التركيز على الدردشة.",
3792
+ chatFirstStorageBlocked:
3793
+ "حظر هذا المتصفح التفضيلات المحلية، لذلك لم يتم تغيير وضع التركيز على الدردشة.",
3614
3794
  agentTitle: "إدارة الوكيل",
3615
3795
  agentDescription:
3616
3796
  "أدر نموذج الوكيل ومفاتيح API والصوت وعناصر التحكم الأخرى. استخدم صفحة الأتمتة للمهام المجدولة والمُشغَّلة بالأحداث.",
@@ -3887,6 +4067,7 @@ export const messagesByLocale = {
3887
4067
  agent: "الوكيل",
3888
4068
  },
3889
4069
  pages: {
4070
+ ...chatFirstPageTranslations["ar-SA"],
3890
4071
  adminDescription: "عناصر التحكم في مساحة العمل وعملياتها",
3891
4072
  adminNavigation: "تنقل الإدارة",
3892
4073
  adminWelcome: "مركز التحكم في مساحة العمل",
@@ -1,3 +1,8 @@
1
+ import {
2
+ CHAT_FIRST_MODE_CHANGED_EVENT,
3
+ readChatFirstModeState,
4
+ writeChatFirstMode,
5
+ } from "@agent-native/core/client/agent-chat";
1
6
  import { ChangelogSettingsCard } from "@agent-native/core/client/changelog";
2
7
  import { LanguagePicker, useT } from "@agent-native/core/client/i18n";
3
8
  import { TeamPage } from "@agent-native/core/client/org";
@@ -10,7 +15,8 @@ import {
10
15
  type SettingsSearchEntry,
11
16
  } from "@agent-native/core/client/settings";
12
17
  import { Button } from "@agent-native/dispatch/components/ui/button";
13
- import { useMemo } from "react";
18
+ import { Switch } from "@agent-native/dispatch/components/ui/switch";
19
+ import { useMemo, useState } from "react";
14
20
  import { Link } from "react-router";
15
21
 
16
22
  import { messagesByLocale } from "@/i18n-data";
@@ -24,6 +30,32 @@ export function meta() {
24
30
  export default function SettingsRoute() {
25
31
  const t = useT();
26
32
  const agentSettingsTabs = useAgentSettingsTabs();
33
+ const [chatFirstModeState] = useState(() => readChatFirstModeState());
34
+ const [chatFirstMode, setChatFirstMode] = useState(
35
+ () => chatFirstModeState.enabled,
36
+ );
37
+ const [chatFirstStorageNotice, setChatFirstStorageNotice] = useState<
38
+ string | null
39
+ >(
40
+ chatFirstModeState.availability === "unavailable"
41
+ ? t("settings.chatFirstStorageUnavailable")
42
+ : null,
43
+ );
44
+
45
+ function updateChatFirstMode(enabled: boolean) {
46
+ const result = writeChatFirstMode(enabled);
47
+ if (!result.ok) {
48
+ setChatFirstStorageNotice(t("settings.chatFirstStorageBlocked"));
49
+ return;
50
+ }
51
+ setChatFirstStorageNotice(null);
52
+ setChatFirstMode(enabled);
53
+ window.dispatchEvent(
54
+ new CustomEvent(CHAT_FIRST_MODE_CHANGED_EVENT, {
55
+ detail: { enabled },
56
+ }),
57
+ );
58
+ }
27
59
 
28
60
  const generalSearchEntries = useMemo<SettingsSearchEntry[]>(
29
61
  () => [
@@ -39,6 +71,12 @@ export default function SettingsRoute() {
39
71
  keywords: "workspace resources integrations vault destinations",
40
72
  hash: "workspace-resources",
41
73
  },
74
+ {
75
+ id: "dispatch-chat-first",
76
+ label: t("settings.chatFirstTitle"),
77
+ keywords: "chat first codex t3 apps pane navigation",
78
+ hash: "chat-first",
79
+ },
42
80
  ],
43
81
  [t],
44
82
  );
@@ -78,6 +116,29 @@ export default function SettingsRoute() {
78
116
  }
79
117
  />
80
118
  </SettingsGroup>
119
+
120
+ <SettingsGroup id="chat-first">
121
+ <SettingsRow
122
+ label={t("settings.chatFirstTitle")}
123
+ description={t("settings.chatFirstDescription")}
124
+ control={
125
+ <Switch
126
+ aria-label={t("settings.chatFirstAriaLabel")}
127
+ checked={chatFirstMode}
128
+ onCheckedChange={updateChatFirstMode}
129
+ />
130
+ }
131
+ >
132
+ <p className="text-sm leading-6 text-muted-foreground">
133
+ {t("settings.chatFirstSessionWatchDescription")}
134
+ </p>
135
+ {chatFirstStorageNotice ? (
136
+ <p className="text-sm text-destructive" role="alert">
137
+ {chatFirstStorageNotice}
138
+ </p>
139
+ ) : null}
140
+ </SettingsRow>
141
+ </SettingsGroup>
81
142
  </div>
82
143
  }
83
144
  team={
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: added
3
+ date: 2026-08-08
4
+ ---
5
+
6
+ Chat-first navigation keeps conversations central while opening workspace apps and watched sessions beside them.
@@ -81,6 +81,13 @@ or other file-like payloads, design the upload path in the same change:
81
81
  provider upload first, then URL/id/blob handle in SQL. Do not add base64/binary
82
82
  columns or stuff files into `application_state`.
83
83
 
84
+ If the feature adds a server-side dependency carrying a native binary or heavy
85
+ runtime — headless browser, ffmpeg, image/video processing, ML runtime — read
86
+ the `performance` skill §9 before adding it. A deployed app has one `/*` page
87
+ function that every visitor's cache miss wakes, and it ships whatever the server
88
+ bundle depends on. Run that work from a background function or a job so the page
89
+ function never carries the weight.
90
+
84
91
  **If the action produces or lists a navigable resource**, add a `link` builder that returns `{ url: buildDeepLink({ app, view, params }), label }`. External coding agents and MCP hosts (Claude / ChatGPT / Claude Code / Cowork / Codex, over MCP/A2A) then surface an "Open in … →" deep link that drops the user back into the running UI focused on the record — for free. If a compatible MCP host should render an inline review/edit surface, also add `mcpApp` with `embedApp()` so the action embeds the real React app route instead of a one-off HTML UI. The `link` builder and `mcpApp` metadata must be pure and synchronous (no I/O). Any external-agent read/ingest action must be `http: { method: "GET" }` + `readOnly: true` + `publicAgent: { expose: true, readOnly: true, requiresAuth: true }`. See the `external-agents` skill.
85
92
 
86
93
  ### 3. Skills / Instructions
@@ -195,4 +202,6 @@ TL;DR: declare the vocabulary once with `defineAppRoles({ appId, roles, defaultR
195
202
  - **create-skill** — How to create skills for new patterns (area 3 in detail)
196
203
  - **storing-data** — Where to store the feature's data
197
204
  - **real-time-sync** — How the UI stays in sync when the agent writes data
205
+ - **performance** — Query/load cost, and (§9) cold-start artifact size when a
206
+ feature adds a server-side dependency
198
207
  - **internationalization** — How to update localized UI copy and catalogs
@@ -3,8 +3,9 @@ name: turn-into-app
3
3
  description: >-
4
4
  Turn visible project context, a proven thread, skill, or workflow into a
5
5
  runnable Agent-Native app with simple buttons, visible agent steps, preview,
6
- and deployment handoff. Use when a user invokes `/turn-into-app` or asks to
7
- make a workflow into an app, including from Claude or ChatGPT on the web.
6
+ and deployment handoff. Use when a user invokes `/turn-into-app`,
7
+ `/make-into-app`, or asks to make a workflow into an app, including from
8
+ Claude or ChatGPT on the web.
8
9
  user-invocable: true
9
10
  scope: both
10
11
  metadata:
@@ -38,6 +39,15 @@ The build location depends on the host. Treat this as a hard routing rule:
38
39
  workspace, follow the local implementation steps below. The local agent may
39
40
  scaffold, edit, run, and verify the app there.
40
41
 
42
+ Once the source brief is sufficient to identify a repeatable workflow, the
43
+ handoff is non-interactive. Do not ask the user for visual, product, copy,
44
+ layout, template, integration, or implementation choices that can be resolved
45
+ from the source. Select the source's recommended option; otherwise choose the
46
+ most direct conventional default and record the assumption for later review.
47
+ Only stop for a genuine hard blocker such as missing authorization, a
48
+ destructive external action, an ambiguous target workspace, or no identifiable
49
+ workflow at all.
50
+
41
51
  ## Default behavior
42
52
 
43
53
  For a local code-agent runtime this is an end-to-end build skill, not a request
@@ -104,14 +114,16 @@ before creating the app. Read the host-provided context in this order:
104
114
  Record the brief with these headings before handoff: source and provenance,
105
115
  project goal, configuration and constraints, knowledge sources, repeatable
106
116
  workflow, inputs and outputs, judgment and review points, representative runs,
107
- integrations and permissions, and unknowns. This is the compact contract for
117
+ integrations and permissions, and unknowns and assumptions. This is the compact contract for
108
118
  the app. It keeps the new app useful without pretending that hidden Project
109
119
  history was imported. See [the fresh Project reference](references/fresh-project.md)
110
120
  for the host setup and brief template.
111
121
 
112
- If the visible Project context has no concrete repeatable job, ask for one
113
- focused clarification or a representative artifact. Do not fall back to a
114
- generic “what app do you want to make?” builder.
122
+ If the visible Project context has no concrete repeatable job and no primary
123
+ goal can be inferred, ask for one focused clarification or a representative
124
+ artifact. Otherwise use the project's primary goal and source conventions; do
125
+ not ask a questionnaire and do not fall back to a generic “what app do you
126
+ want to make?” builder.
115
127
 
116
128
  ## Source selection guard
117
129
 
@@ -36,7 +36,7 @@ Inputs and outputs:
36
36
  Judgment and review points:
37
37
  Representative runs: none, or 1-3 selected examples
38
38
  Integrations and permissions:
39
- Unknowns and follow-up:
39
+ Unknowns and assumptions:
40
40
  ```
41
41
 
42
42
  Keep source references bounded. Prefer a file name, URL, resource ID, or short
@@ -69,6 +69,13 @@ do not fall back to a local sandbox build. Claude Code and Codex Code are the
69
69
  local-agent exception and may follow the implementation steps in the main
70
70
  skill.
71
71
 
72
+ The brief is an implementation authorization, not a questionnaire. After a
73
+ repeatable workflow is identifiable, choose any source-recommended option
74
+ automatically. For unresolved non-blocking choices, use the most direct
75
+ conventional default, record it under assumptions, and continue. Ask only when
76
+ there is no identifiable workflow, no authorized target workspace, or a
77
+ destructive/credential boundary genuinely prevents the handoff.
78
+
72
79
  In a new Project chat, say:
73
80
 
74
81
  ```text
@@ -35,6 +35,7 @@ export default defineAction({
35
35
  return queueAutomationRunNow({
36
36
  userEmail,
37
37
  orgId,
38
+ appId: "factory",
38
39
  scope: "organization",
39
40
  name: definition.name,
40
41
  });