@agent-native/core 0.102.1 → 0.103.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 (295) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +15 -0
  3. package/corpus/core/docs/content/local-file-mode.mdx +99 -489
  4. package/corpus/core/docs/content/locales/ar-SA/local-file-mode.mdx +35 -490
  5. package/corpus/core/docs/content/locales/ar-SA/template-content.mdx +10 -24
  6. package/corpus/core/docs/content/locales/de-DE/local-file-mode.mdx +37 -491
  7. package/corpus/core/docs/content/locales/de-DE/template-content.mdx +10 -24
  8. package/corpus/core/docs/content/locales/es-ES/local-file-mode.mdx +35 -493
  9. package/corpus/core/docs/content/locales/es-ES/template-content.mdx +10 -24
  10. package/corpus/core/docs/content/locales/fr-FR/local-file-mode.mdx +38 -491
  11. package/corpus/core/docs/content/locales/fr-FR/template-content.mdx +10 -24
  12. package/corpus/core/docs/content/locales/hi-IN/local-file-mode.mdx +33 -492
  13. package/corpus/core/docs/content/locales/hi-IN/template-content.mdx +10 -24
  14. package/corpus/core/docs/content/locales/ja-JP/local-file-mode.mdx +36 -492
  15. package/corpus/core/docs/content/locales/ja-JP/template-content.mdx +10 -24
  16. package/corpus/core/docs/content/locales/ko-KR/local-file-mode.mdx +35 -490
  17. package/corpus/core/docs/content/locales/ko-KR/template-content.mdx +10 -24
  18. package/corpus/core/docs/content/locales/pt-BR/local-file-mode.mdx +35 -493
  19. package/corpus/core/docs/content/locales/pt-BR/template-content.mdx +10 -24
  20. package/corpus/core/docs/content/locales/zh-CN/local-file-mode.mdx +31 -489
  21. package/corpus/core/docs/content/locales/zh-CN/template-content.mdx +9 -24
  22. package/corpus/core/docs/content/locales/zh-TW/local-file-mode.mdx +31 -489
  23. package/corpus/core/docs/content/locales/zh-TW/template-content.mdx +9 -24
  24. package/corpus/core/docs/content/template-content.mdx +26 -42
  25. package/corpus/core/package.json +1 -1
  26. package/corpus/core/src/cli/content-local.ts +86 -18
  27. package/corpus/core/src/cli/index.ts +2 -2
  28. package/corpus/core/src/cli/skills-content/content-skill.ts +36 -25
  29. package/corpus/core/src/cli/skills.ts +47 -13
  30. package/corpus/core/src/client/AgentPanel.tsx +7 -0
  31. package/corpus/core/src/client/AssistantChat.tsx +7 -0
  32. package/corpus/core/src/client/agent-chat-adapter.ts +7 -1
  33. package/corpus/core/src/client/chat/message-components.tsx +17 -3
  34. package/corpus/core/src/client/composer/ComposerPlusMenu.tsx +96 -6
  35. package/corpus/core/src/client/composer/asset-picker-url.ts +80 -0
  36. package/corpus/core/src/client/error-format.ts +24 -0
  37. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +8 -1
  38. package/corpus/core/src/local-artifacts/index.ts +65 -0
  39. package/corpus/templates/assets/app/components/library/GenerationPresetsPanel.tsx +325 -0
  40. package/corpus/templates/assets/app/hooks/use-navigation-state.ts +12 -0
  41. package/corpus/templates/assets/app/i18n/zh-TW.ts +21 -0
  42. package/corpus/templates/assets/app/i18n-data.ts +215 -0
  43. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +19 -479
  44. package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +1 -1
  45. package/corpus/templates/assets/app/routes/brand-kits.$id_.settings.tsx +446 -0
  46. package/corpus/templates/assets/app/routes/library.tsx +69 -0
  47. package/corpus/templates/assets/changelog/2026-07-15-fixed-top-level-image-picker-selections-returning-to-the-com.md +6 -0
  48. package/corpus/templates/clips/actions/disconnect-calendar.ts +57 -9
  49. package/corpus/templates/clips/actions/generate-workflow.ts +102 -59
  50. package/corpus/templates/clips/actions/get-recording-player-data.ts +64 -1
  51. package/corpus/templates/clips/actions/regenerate-summary.ts +7 -0
  52. package/corpus/templates/clips/actions/regenerate-title.ts +29 -11
  53. package/corpus/templates/clips/app/components/editor/editor-layout.tsx +34 -13
  54. package/corpus/templates/clips/app/components/editor/thumbnail-picker.tsx +87 -9
  55. package/corpus/templates/clips/app/components/editor/trim-handles.tsx +15 -0
  56. package/corpus/templates/clips/app/components/editor/waveform.tsx +21 -8
  57. package/corpus/templates/clips/app/components/library/folder-tree.tsx +52 -0
  58. package/corpus/templates/clips/app/components/player/settings-panel.tsx +116 -58
  59. package/corpus/templates/clips/app/components/player/share-dialog.tsx +43 -37
  60. package/corpus/templates/clips/app/components/player/video-player.tsx +50 -2
  61. package/corpus/templates/clips/app/components/recorder/microphone-visualizer.tsx +22 -3
  62. package/corpus/templates/clips/app/i18n/ar-SA.ts +5 -2
  63. package/corpus/templates/clips/app/i18n/de-DE.ts +6 -2
  64. package/corpus/templates/clips/app/i18n/en-US.ts +5 -2
  65. package/corpus/templates/clips/app/i18n/es-ES.ts +6 -2
  66. package/corpus/templates/clips/app/i18n/fr-FR.ts +5 -2
  67. package/corpus/templates/clips/app/i18n/hi-IN.ts +5 -2
  68. package/corpus/templates/clips/app/i18n/ja-JP.ts +6 -1
  69. package/corpus/templates/clips/app/i18n/ko-KR.ts +5 -2
  70. package/corpus/templates/clips/app/i18n/pt-BR.ts +6 -2
  71. package/corpus/templates/clips/app/i18n/zh-CN.ts +5 -2
  72. package/corpus/templates/clips/app/i18n/zh-TW.ts +5 -2
  73. package/corpus/templates/clips/app/lib/timestamp-mapping.ts +14 -0
  74. package/corpus/templates/clips/app/routes/_app.library._index.tsx +1 -2
  75. package/corpus/templates/clips/app/routes/_index.tsx +1 -2
  76. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +98 -32
  77. package/corpus/templates/clips/app/routes/share.$shareId.tsx +4 -1
  78. package/corpus/templates/clips/changelog/2026-07-15-ai-workflow-generation-now-stays-visible-avoids-duplicate-re.md +6 -0
  79. package/corpus/templates/clips/changelog/2026-07-15-clip-playback-and-cta-controls-remain-interactive-through-ed.md +6 -0
  80. package/corpus/templates/clips/changelog/2026-07-15-clip-titles-no-longer-describe-the-product-as-a-loom-alterna.md +6 -0
  81. package/corpus/templates/clips/changelog/2026-07-15-description-regeneration-now-opens-the-agent-chat-so-progres.md +6 -0
  82. package/corpus/templates/clips/changelog/2026-07-15-direct-recording-urls-now-respect-share-link-and-password-ac.md +6 -0
  83. package/corpus/templates/clips/changelog/2026-07-15-disconnecting-a-calendar-now-clears-unrecorded-synced-meetin.md +6 -0
  84. package/corpus/templates/clips/changelog/2026-07-15-folders-now-expose-rename-and-delete-actions-directly-in-the.md +6 -0
  85. package/corpus/templates/clips/changelog/2026-07-15-recording-pages-now-explain-sign-in-access-and-avoid-showing.md +6 -0
  86. package/corpus/templates/clips/changelog/2026-07-15-the-clips-extension-quick-actions-toolbar-can-be-moved-out-o.md +6 -0
  87. package/corpus/templates/clips/changelog/2026-07-15-the-editor-now-skips-cut-sections-during-preview-and-keeps-t.md +6 -0
  88. package/corpus/templates/clips/changelog/2026-07-15-thumbnail-capture-now-updates-previews-while-scrubbing-and-l.md +6 -0
  89. package/corpus/templates/clips/changelog/2026-07-15-windows-permission-links-open-the-matching-settings-page.md +6 -0
  90. package/corpus/templates/clips/chrome-extension/src/content-script.ts +117 -2
  91. package/corpus/templates/clips/chrome-extension/src/overlay.ts +27 -0
  92. package/corpus/templates/clips/desktop/src-tauri/tauri.conf.json +1 -1
  93. package/corpus/templates/clips/server/lib/calendar-event-meetings.ts +139 -101
  94. package/corpus/templates/clips/server/lib/recording-page-access.ts +35 -0
  95. package/corpus/templates/clips/server/lib/share-password.ts +6 -3
  96. package/corpus/templates/content/.agents/skills/content/SKILL.md +26 -39
  97. package/corpus/templates/content/AGENTS.md +25 -30
  98. package/corpus/templates/content/actions/_builder-docs-client.ts +23 -0
  99. package/corpus/templates/content/actions/_content-database-source-adapters.ts +21 -3
  100. package/corpus/templates/content/actions/_content-files.ts +338 -0
  101. package/corpus/templates/content/actions/_content-space-access.ts +135 -0
  102. package/corpus/templates/content/actions/_content-spaces.ts +640 -0
  103. package/corpus/templates/content/actions/_database-source-utils.ts +90 -7
  104. package/corpus/templates/content/actions/_database-utils.ts +7 -1
  105. package/corpus/templates/content/actions/_local-file-documents.ts +0 -9
  106. package/corpus/templates/content/actions/_local-folder-source.ts +53 -0
  107. package/corpus/templates/content/actions/_property-utils.ts +9 -4
  108. package/corpus/templates/content/actions/add-database-item.ts +108 -65
  109. package/corpus/templates/content/actions/backfill-content-files.ts +22 -0
  110. package/corpus/templates/content/actions/connect-local-folder-source.ts +221 -0
  111. package/corpus/templates/content/actions/create-content-database.ts +129 -3
  112. package/corpus/templates/content/actions/create-document.ts +65 -55
  113. package/corpus/templates/content/actions/create-inline-content-database.ts +6 -1
  114. package/corpus/templates/content/actions/delete-content-database.ts +3 -0
  115. package/corpus/templates/content/actions/delete-document.ts +7 -11
  116. package/corpus/templates/content/actions/disconnect-local-folder-source.ts +175 -0
  117. package/corpus/templates/content/actions/duplicate-database-item.ts +10 -0
  118. package/corpus/templates/content/actions/duplicate-database-items.ts +13 -0
  119. package/corpus/templates/content/actions/edit-document.ts +2 -28
  120. package/corpus/templates/content/actions/ensure-content-spaces.ts +26 -0
  121. package/corpus/templates/content/actions/export-content-source.ts +47 -9
  122. package/corpus/templates/content/actions/get-document.ts +0 -14
  123. package/corpus/templates/content/actions/import-content-source.ts +43 -3
  124. package/corpus/templates/content/actions/list-content-spaces.ts +103 -0
  125. package/corpus/templates/content/actions/list-documents.ts +12 -9
  126. package/corpus/templates/content/actions/move-document.ts +3 -14
  127. package/corpus/templates/content/actions/pull-document.ts +0 -23
  128. package/corpus/templates/content/actions/remove-local-file-source.ts +50 -29
  129. package/corpus/templates/content/actions/resolve-local-folder-conflict.ts +442 -0
  130. package/corpus/templates/content/actions/reveal-local-source-file.ts +6 -17
  131. package/corpus/templates/content/actions/search-documents.ts +0 -34
  132. package/corpus/templates/content/actions/share-local-file-document.ts +25 -1
  133. package/corpus/templates/content/actions/submit-content-database-form.ts +12 -0
  134. package/corpus/templates/content/actions/sync-local-folder-source.ts +731 -0
  135. package/corpus/templates/content/actions/sync-manifest-local-folder-source.ts +123 -0
  136. package/corpus/templates/content/actions/update-content-database-view.ts +10 -1
  137. package/corpus/templates/content/actions/update-document.ts +0 -15
  138. package/corpus/templates/content/actions/view-screen.ts +2 -50
  139. package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +76 -62
  140. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +70 -22
  141. package/corpus/templates/content/app/components/editor/database/grouping.ts +2 -1
  142. package/corpus/templates/content/app/components/editor/database/settings.tsx +23 -20
  143. package/corpus/templates/content/app/components/editor/database/shared.tsx +2 -0
  144. package/corpus/templates/content/app/components/editor/database/sidebar.tsx +330 -0
  145. package/corpus/templates/content/app/components/editor/database/types.ts +1 -0
  146. package/corpus/templates/content/app/components/editor/database/view-config.ts +3 -1
  147. package/corpus/templates/content/app/components/layout/Layout.tsx +25 -1
  148. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +209 -113
  149. package/corpus/templates/content/app/components/sidebar/select-content-space.ts +31 -0
  150. package/corpus/templates/content/app/hooks/use-content-database.ts +16 -0
  151. package/corpus/templates/content/app/hooks/use-content-spaces.ts +39 -0
  152. package/corpus/templates/content/app/i18n/zh-TW.ts +11 -0
  153. package/corpus/templates/content/app/i18n-data.ts +75 -0
  154. package/corpus/templates/content/app/routes/_app.local-files.tsx +174 -65
  155. package/corpus/templates/content/changelog/2026-07-16-content-callouts-can-now-be-reviewed-and-published-to-builder.md +6 -0
  156. package/corpus/templates/content/changelog/2026-07-16-heading-5-and-heading-6-are-available-from-the-editor-slash-.md +6 -0
  157. package/corpus/templates/content/changelog/2026-07-16-organize-every-workspace-through-a-customizable-files-databa.md +6 -0
  158. package/corpus/templates/content/parity/matrix.md +2 -1
  159. package/corpus/templates/content/parity/matrix.ts +37 -1
  160. package/corpus/templates/content/scripts/dev-database.mjs +7 -5
  161. package/corpus/templates/content/server/db/schema.ts +113 -40
  162. package/corpus/templates/content/server/lib/document-context.ts +15 -1
  163. package/corpus/templates/content/server/lib/notion-sync.ts +6 -0
  164. package/corpus/templates/content/server/plugins/db.ts +153 -0
  165. package/corpus/templates/content/shared/api.ts +17 -3
  166. package/corpus/templates/content/shared/builder-mdx.ts +163 -16
  167. package/corpus/templates/design/.agents/skills/design-templates/SKILL.md +59 -0
  168. package/corpus/templates/design/AGENTS.md +6 -1
  169. package/corpus/templates/design/actions/create-design-from-template.ts +19 -7
  170. package/corpus/templates/design/actions/list-design-templates.ts +69 -21
  171. package/corpus/templates/design/actions/navigate.ts +2 -2
  172. package/corpus/templates/design/actions/view-screen.ts +15 -2
  173. package/corpus/templates/design/agent-native.app-skill.json +5 -0
  174. package/corpus/templates/design/app/components/design/design-canvas/external-preview.ts +7 -3
  175. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +281 -56
  176. package/corpus/templates/design/app/components/templates/TemplatePreview.tsx +14 -2
  177. package/corpus/templates/design/app/hooks/use-navigation-state.ts +3 -2
  178. package/corpus/templates/design/app/i18n/zh-TW.ts +3 -3
  179. package/corpus/templates/design/app/i18n-data.ts +21 -2
  180. package/corpus/templates/design/app/i18n-template-feature.ts +218 -10
  181. package/corpus/templates/design/app/pages/Index.tsx +195 -24
  182. package/corpus/templates/design/app/pages/Templates.tsx +144 -55
  183. package/corpus/templates/design/app/pages/design-editor/generation-prompt-directives.ts +12 -1
  184. package/corpus/templates/design/changelog/2026-07-14-templates-now-appear-in-the-new-design-picker-with-previews-.md +6 -0
  185. package/corpus/templates/design/changelog/2026-07-15-prototype-print-and-download-buttons-now-work-in-preview.md +6 -0
  186. package/corpus/templates/design/changelog/2026-07-15-templates-now-open-immediately-after-copying-even-while-the-.md +6 -0
  187. package/corpus/templates/design/server/plugins/agent-chat.ts +1 -1
  188. package/corpus/templates/mail/AGENTS.md +23 -18
  189. package/corpus/templates/mail/actions/bulk-archive.ts +32 -28
  190. package/corpus/templates/mail/actions/mark-read.ts +131 -20
  191. package/corpus/templates/mail/actions/mark-thread-read.ts +1 -1
  192. package/corpus/templates/mail/actions/move-email.ts +30 -24
  193. package/corpus/templates/mail/actions/send-email.ts +73 -68
  194. package/corpus/templates/mail/changelog/2026-07-15-unread-inbox-cleanup-now-completes-reliably.md +6 -0
  195. package/corpus/templates/mail/server/handlers/emails.ts +218 -209
  196. package/corpus/templates/mail/server/lib/bulk-mark-read.ts +30 -0
  197. package/corpus/templates/mail/server/lib/email-state.ts +198 -113
  198. package/corpus/templates/mail/server/lib/google-auth.ts +218 -25
  199. package/corpus/templates/mail/server/lib/jobs.ts +69 -74
  200. package/corpus/templates/mail/server/lib/local-email-store.ts +265 -0
  201. package/corpus/templates/mail/server/plugins/agent-chat.ts +6 -0
  202. package/corpus/templates/slides/actions/extract-pdf.ts +1 -1
  203. package/corpus/templates/slides/actions/import-file.ts +4 -1
  204. package/corpus/templates/slides/app/components/editor/ImageGenPanel.tsx +1 -1
  205. package/corpus/templates/slides/app/components/editor/ImageSearchPanel.tsx +9 -12
  206. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +29 -21
  207. package/corpus/templates/slides/app/i18n/ar-SA.ts +1 -0
  208. package/corpus/templates/slides/app/i18n/de-DE.ts +1 -0
  209. package/corpus/templates/slides/app/i18n/en-US.ts +1 -0
  210. package/corpus/templates/slides/app/i18n/es-ES.ts +1 -0
  211. package/corpus/templates/slides/app/i18n/fr-FR.ts +1 -0
  212. package/corpus/templates/slides/app/i18n/hi-IN.ts +1 -0
  213. package/corpus/templates/slides/app/i18n/ja-JP.ts +1 -0
  214. package/corpus/templates/slides/app/i18n/ko-KR.ts +1 -0
  215. package/corpus/templates/slides/app/i18n/pt-BR.ts +1 -0
  216. package/corpus/templates/slides/app/i18n/zh-CN.ts +1 -0
  217. package/corpus/templates/slides/app/i18n/zh-TW.ts +1 -0
  218. package/corpus/templates/slides/changelog/2026-07-15-image-search-and-generation-controls-now-use-the-registered-.md +6 -0
  219. package/corpus/templates/slides/changelog/2026-07-15-pdf-deck-references-can-be-imported-for-slide-inspiration-ag.md +6 -0
  220. package/corpus/templates/slides/changelog/2026-07-15-stable-style-inspector-dock.md +6 -0
  221. package/dist/cli/content-local.d.ts +1 -0
  222. package/dist/cli/content-local.d.ts.map +1 -1
  223. package/dist/cli/content-local.js +75 -17
  224. package/dist/cli/content-local.js.map +1 -1
  225. package/dist/cli/index.js +2 -2
  226. package/dist/cli/index.js.map +1 -1
  227. package/dist/cli/skills-content/content-skill.d.ts +1 -1
  228. package/dist/cli/skills-content/content-skill.d.ts.map +1 -1
  229. package/dist/cli/skills-content/content-skill.js +36 -25
  230. package/dist/cli/skills-content/content-skill.js.map +1 -1
  231. package/dist/cli/skills.d.ts.map +1 -1
  232. package/dist/cli/skills.js +47 -14
  233. package/dist/cli/skills.js.map +1 -1
  234. package/dist/client/AgentPanel.d.ts.map +1 -1
  235. package/dist/client/AgentPanel.js +5 -0
  236. package/dist/client/AgentPanel.js.map +1 -1
  237. package/dist/client/AssistantChat.d.ts.map +1 -1
  238. package/dist/client/AssistantChat.js +7 -0
  239. package/dist/client/AssistantChat.js.map +1 -1
  240. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  241. package/dist/client/agent-chat-adapter.js +8 -1
  242. package/dist/client/agent-chat-adapter.js.map +1 -1
  243. package/dist/client/chat/message-components.d.ts +4 -0
  244. package/dist/client/chat/message-components.d.ts.map +1 -1
  245. package/dist/client/chat/message-components.js +10 -3
  246. package/dist/client/chat/message-components.js.map +1 -1
  247. package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
  248. package/dist/client/composer/ComposerPlusMenu.js +58 -6
  249. package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
  250. package/dist/client/composer/asset-picker-url.d.ts +16 -0
  251. package/dist/client/composer/asset-picker-url.d.ts.map +1 -0
  252. package/dist/client/composer/asset-picker-url.js +64 -0
  253. package/dist/client/composer/asset-picker-url.js.map +1 -0
  254. package/dist/client/error-format.d.ts.map +1 -1
  255. package/dist/client/error-format.js +17 -0
  256. package/dist/client/error-format.js.map +1 -1
  257. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  258. package/dist/client/resources/McpIntegrationDialog.js +6 -1
  259. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  260. package/dist/collab/awareness.d.ts +2 -2
  261. package/dist/collab/awareness.d.ts.map +1 -1
  262. package/dist/collab/struct-routes.d.ts +1 -1
  263. package/dist/local-artifacts/index.d.ts +10 -0
  264. package/dist/local-artifacts/index.d.ts.map +1 -1
  265. package/dist/local-artifacts/index.js +39 -0
  266. package/dist/local-artifacts/index.js.map +1 -1
  267. package/dist/notifications/routes.d.ts +1 -1
  268. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  269. package/dist/resources/handlers.d.ts +3 -3
  270. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  271. package/dist/server/transcribe-voice.d.ts +1 -1
  272. package/docs/content/local-file-mode.mdx +99 -489
  273. package/docs/content/locales/ar-SA/local-file-mode.mdx +35 -490
  274. package/docs/content/locales/ar-SA/template-content.mdx +10 -24
  275. package/docs/content/locales/de-DE/local-file-mode.mdx +37 -491
  276. package/docs/content/locales/de-DE/template-content.mdx +10 -24
  277. package/docs/content/locales/es-ES/local-file-mode.mdx +35 -493
  278. package/docs/content/locales/es-ES/template-content.mdx +10 -24
  279. package/docs/content/locales/fr-FR/local-file-mode.mdx +38 -491
  280. package/docs/content/locales/fr-FR/template-content.mdx +10 -24
  281. package/docs/content/locales/hi-IN/local-file-mode.mdx +33 -492
  282. package/docs/content/locales/hi-IN/template-content.mdx +10 -24
  283. package/docs/content/locales/ja-JP/local-file-mode.mdx +36 -492
  284. package/docs/content/locales/ja-JP/template-content.mdx +10 -24
  285. package/docs/content/locales/ko-KR/local-file-mode.mdx +35 -490
  286. package/docs/content/locales/ko-KR/template-content.mdx +10 -24
  287. package/docs/content/locales/pt-BR/local-file-mode.mdx +35 -493
  288. package/docs/content/locales/pt-BR/template-content.mdx +10 -24
  289. package/docs/content/locales/zh-CN/local-file-mode.mdx +31 -489
  290. package/docs/content/locales/zh-CN/template-content.mdx +9 -24
  291. package/docs/content/locales/zh-TW/local-file-mode.mdx +31 -489
  292. package/docs/content/locales/zh-TW/template-content.mdx +9 -24
  293. package/docs/content/template-content.mdx +26 -42
  294. package/package.json +1 -1
  295. package/corpus/templates/assets/app/components/library/EditLibraryDialog.tsx +0 -126
@@ -0,0 +1,325 @@
1
+ import { useActionMutation, useT } from "@agent-native/core/client";
2
+ import {
3
+ ASPECT_RATIOS,
4
+ IMAGE_CATEGORIES,
5
+ type AspectRatio,
6
+ type ImageCategory,
7
+ } from "@shared/api";
8
+ import { IconTrash } from "@tabler/icons-react";
9
+ import { useState } from "react";
10
+ import { Link } from "react-router";
11
+ import { toast } from "sonner";
12
+
13
+ import {
14
+ AlertDialog,
15
+ AlertDialogAction,
16
+ AlertDialogCancel,
17
+ AlertDialogContent,
18
+ AlertDialogDescription,
19
+ AlertDialogFooter,
20
+ AlertDialogHeader,
21
+ AlertDialogTitle,
22
+ } from "@/components/ui/alert-dialog";
23
+ import { Badge } from "@/components/ui/badge";
24
+ import { Button } from "@/components/ui/button";
25
+ import { Checkbox } from "@/components/ui/checkbox";
26
+ import {
27
+ Dialog,
28
+ DialogContent,
29
+ DialogDescription,
30
+ DialogFooter,
31
+ DialogHeader,
32
+ DialogTitle,
33
+ } from "@/components/ui/dialog";
34
+ import { Input } from "@/components/ui/input";
35
+ import { Label } from "@/components/ui/label";
36
+ import {
37
+ Select,
38
+ SelectContent,
39
+ SelectItem,
40
+ SelectTrigger,
41
+ SelectValue,
42
+ } from "@/components/ui/select";
43
+ import { Textarea } from "@/components/ui/textarea";
44
+
45
+ export function GenerationPresetsPanel({
46
+ libraryId,
47
+ presets,
48
+ }: {
49
+ libraryId: string;
50
+ presets: any[];
51
+ }) {
52
+ const t = useT();
53
+ const createPreset = useActionMutation("create-generation-preset");
54
+ const deletePreset = useActionMutation("delete-generation-preset");
55
+ const [open, setOpen] = useState(false);
56
+ const [confirmPresetId, setConfirmPresetId] = useState<string | null>(null);
57
+ const [title, setTitle] = useState("");
58
+ const [category, setCategory] = useState<ImageCategory>("social");
59
+ const [aspectRatio, setAspectRatio] = useState<AspectRatio>("1:1");
60
+ const [promptTemplate, setPromptTemplate] = useState("");
61
+ const [textPolicy, setTextPolicy] = useState(t("library.defaultTextPolicy"));
62
+ const [includeLogo, setIncludeLogo] = useState(false);
63
+
64
+ function reset() {
65
+ setTitle("");
66
+ setCategory("social");
67
+ setAspectRatio("1:1");
68
+ setPromptTemplate("");
69
+ setTextPolicy(t("library.defaultTextPolicy"));
70
+ setIncludeLogo(false);
71
+ }
72
+
73
+ function submit() {
74
+ const trimmed = title.trim();
75
+ if (!trimmed) return;
76
+ createPreset.mutate(
77
+ {
78
+ libraryId,
79
+ title: trimmed,
80
+ category,
81
+ aspectRatio,
82
+ imageSize: "2K",
83
+ promptTemplate: promptTemplate.trim() || undefined,
84
+ textPolicy,
85
+ referencePolicy: "auto",
86
+ includeLogo,
87
+ },
88
+ {
89
+ onSuccess: () => {
90
+ toast.success(t("brandKitDetail.generationPresetCreated"));
91
+ reset();
92
+ setOpen(false);
93
+ },
94
+ onError: (error: Error) => {
95
+ toast.error(
96
+ error.message || t("brandKitDetail.couldNotCreatePreset"),
97
+ );
98
+ },
99
+ },
100
+ );
101
+ }
102
+
103
+ return (
104
+ <div className="rounded-lg border border-border p-4">
105
+ <div className="flex items-center justify-between gap-3">
106
+ <div>
107
+ <h3 className="text-sm font-semibold">
108
+ {t("brandKitDetail.generationPresets")}
109
+ </h3>
110
+ <p className="mt-1 text-sm text-muted-foreground">
111
+ {t("brandKitDetail.generationPresetsDescription")}
112
+ </p>
113
+ </div>
114
+ <Button variant="outline" size="sm" onClick={() => setOpen(true)}>
115
+ {t("brandKitDetail.new")}
116
+ </Button>
117
+ </div>
118
+ <div className="mt-3 space-y-2">
119
+ {presets.map((preset) => (
120
+ <div
121
+ key={preset.id}
122
+ className="flex items-start justify-between gap-3 rounded-md border border-border bg-background p-3"
123
+ >
124
+ <div className="min-w-0">
125
+ <div className="flex flex-wrap items-center gap-2">
126
+ <Link
127
+ to={`/brand-kits/${libraryId}/presets/${preset.id}`}
128
+ className="truncate text-sm font-medium underline-offset-4 hover:underline"
129
+ >
130
+ {preset.title}
131
+ </Link>
132
+ <Badge variant="outline">{preset.aspectRatio}</Badge>
133
+ {preset.includeLogo ? (
134
+ <Badge variant="secondary">{t("brandKitDetail.logo")}</Badge>
135
+ ) : null}
136
+ </div>
137
+ <p className="mt-1 line-clamp-2 text-xs text-muted-foreground">
138
+ {preset.textPolicy || preset.description || preset.category}
139
+ </p>
140
+ </div>
141
+ <div className="flex shrink-0 items-center gap-1">
142
+ <Button variant="ghost" size="sm" asChild>
143
+ <Link to={`/brand-kits/${libraryId}/presets/${preset.id}`}>
144
+ {t("brandKitDetail.edit")}
145
+ </Link>
146
+ </Button>
147
+ <Button
148
+ variant="ghost"
149
+ size="icon"
150
+ className="h-8 w-8 text-muted-foreground hover:text-destructive"
151
+ aria-label={`${t("brandKitDetail.delete")} ${preset.title}`}
152
+ onClick={() => setConfirmPresetId(preset.id)}
153
+ >
154
+ <IconTrash className="h-4 w-4" />
155
+ </Button>
156
+ </div>
157
+ </div>
158
+ ))}
159
+ {!presets.length ? (
160
+ <p className="rounded-md border border-dashed border-border p-3 text-sm text-muted-foreground">
161
+ {t("brandKitDetail.noPresetsYet")}
162
+ </p>
163
+ ) : null}
164
+ </div>
165
+
166
+ <AlertDialog
167
+ open={confirmPresetId !== null}
168
+ onOpenChange={(isOpen) => {
169
+ if (!isOpen) setConfirmPresetId(null);
170
+ }}
171
+ >
172
+ <AlertDialogContent>
173
+ <AlertDialogHeader>
174
+ <AlertDialogTitle>
175
+ {t("brandKitDetail.deleteGenerationPreset")}
176
+ </AlertDialogTitle>
177
+ <AlertDialogDescription>
178
+ {t("brandKitDetail.deleteGenerationPresetDescription")}
179
+ </AlertDialogDescription>
180
+ </AlertDialogHeader>
181
+ <AlertDialogFooter>
182
+ <AlertDialogCancel>{t("brandKitDetail.cancel")}</AlertDialogCancel>
183
+ <AlertDialogAction
184
+ className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
185
+ disabled={!confirmPresetId || deletePreset.isPending}
186
+ onClick={(event) => {
187
+ event.preventDefault();
188
+ if (!confirmPresetId) return;
189
+ deletePreset.mutate(
190
+ { id: confirmPresetId },
191
+ {
192
+ onSuccess: () => {
193
+ setConfirmPresetId(null);
194
+ toast.success(
195
+ t("brandKitDetail.generationPresetDeleted"),
196
+ );
197
+ },
198
+ onError: (error: Error) => {
199
+ toast.error(
200
+ error.message ||
201
+ t("brandKitDetail.couldNotDeletePreset"),
202
+ );
203
+ },
204
+ },
205
+ );
206
+ }}
207
+ >
208
+ {t("assetDetail.delete")}
209
+ </AlertDialogAction>
210
+ </AlertDialogFooter>
211
+ </AlertDialogContent>
212
+ </AlertDialog>
213
+
214
+ <Dialog open={open} onOpenChange={setOpen}>
215
+ <DialogContent className="sm:max-w-lg">
216
+ <DialogHeader>
217
+ <DialogTitle>{t("brandKitDetail.newGenerationPreset")}</DialogTitle>
218
+ <DialogDescription>
219
+ {t("brandKitDetail.newGenerationPresetDescription")}
220
+ </DialogDescription>
221
+ </DialogHeader>
222
+ <div className="grid gap-4">
223
+ <div className="grid gap-2">
224
+ <Label htmlFor="preset-title">{t("brandKitDetail.name")}</Label>
225
+ <Input
226
+ id="preset-title"
227
+ value={title}
228
+ onChange={(event) => setTitle(event.target.value)}
229
+ placeholder={t("brandKitDetail.campaignLaunch")}
230
+ />
231
+ </div>
232
+ <div className="grid grid-cols-2 gap-3">
233
+ <div className="grid gap-2">
234
+ <Label>{t("brandKitDetail.category")}</Label>
235
+ <Select
236
+ value={category}
237
+ onValueChange={(value) => setCategory(value as ImageCategory)}
238
+ >
239
+ <SelectTrigger>
240
+ <SelectValue />
241
+ </SelectTrigger>
242
+ <SelectContent>
243
+ {IMAGE_CATEGORIES.map((item) => (
244
+ <SelectItem key={item} value={item}>
245
+ {item}
246
+ </SelectItem>
247
+ ))}
248
+ </SelectContent>
249
+ </Select>
250
+ </div>
251
+ <div className="grid gap-2">
252
+ <Label>{t("brandKitDetail.aspectRatio")}</Label>
253
+ <Select
254
+ value={aspectRatio}
255
+ onValueChange={(value) =>
256
+ setAspectRatio(value as AspectRatio)
257
+ }
258
+ >
259
+ <SelectTrigger>
260
+ <SelectValue />
261
+ </SelectTrigger>
262
+ <SelectContent>
263
+ {ASPECT_RATIOS.map((ratio) => (
264
+ <SelectItem key={ratio} value={ratio}>
265
+ {ratio}
266
+ </SelectItem>
267
+ ))}
268
+ </SelectContent>
269
+ </Select>
270
+ </div>
271
+ </div>
272
+ <div className="grid gap-2">
273
+ <Label htmlFor="preset-template">
274
+ {t("brandKitDetail.promptTemplate")}
275
+ </Label>
276
+ <Textarea
277
+ id="preset-template"
278
+ value={promptTemplate}
279
+ onChange={(event) => setPromptTemplate(event.target.value)}
280
+ placeholder={t("library.promptTemplatePlaceholder")}
281
+ />
282
+ </div>
283
+ <div className="grid gap-2">
284
+ <Label htmlFor="preset-text-policy">
285
+ {t("brandKitDetail.textPolicy")}
286
+ </Label>
287
+ <Textarea
288
+ id="preset-text-policy"
289
+ value={textPolicy}
290
+ onChange={(event) => setTextPolicy(event.target.value)}
291
+ />
292
+ </div>
293
+ <label
294
+ htmlFor="preset-include-logo"
295
+ className="flex items-start gap-3 rounded-md border border-border p-3"
296
+ >
297
+ <Checkbox
298
+ id="preset-include-logo"
299
+ checked={includeLogo}
300
+ onCheckedChange={(checked) => setIncludeLogo(checked === true)}
301
+ className="mt-0.5"
302
+ />
303
+ <span className="grid gap-1">
304
+ <span className="text-sm font-medium leading-none">
305
+ {t("brandKitDetail.compositeCanonicalLogo")}
306
+ </span>
307
+ <span className="text-xs text-muted-foreground">
308
+ {t("brandKitDetail.compositeCanonicalLogoHint")}
309
+ </span>
310
+ </span>
311
+ </label>
312
+ </div>
313
+ <DialogFooter>
314
+ <Button variant="outline" onClick={() => setOpen(false)}>
315
+ {t("brandKitDetail.cancel")}
316
+ </Button>
317
+ <Button disabled={!title.trim()} onClick={submit}>
318
+ {t("brandKitDetail.create")}
319
+ </Button>
320
+ </DialogFooter>
321
+ </DialogContent>
322
+ </Dialog>
323
+ </div>
324
+ );
325
+ }
@@ -47,6 +47,15 @@ function navigationFromPath(pathname: string, search = "") {
47
47
  presetId: decodePathParam(preset[2]),
48
48
  };
49
49
  }
50
+ const brandKitSettings = pathname.match(/^\/brand-kits\/([^/]+)\/settings/);
51
+ if (brandKitSettings) {
52
+ return {
53
+ view: "library",
54
+ selection: decodePathParam(brandKitSettings[1]),
55
+ libraryId: decodePathParam(brandKitSettings[1]),
56
+ activeTab: "settings",
57
+ };
58
+ }
50
59
  // The "library" view is the unified Library workspace. Keep the internal
51
60
  // detail key stable for agent/MCP callers that already navigate by brand-kit
52
61
  // id, while the URL is now /library/:id.
@@ -115,6 +124,9 @@ function pathFromCommand(command: any): string | null {
115
124
  if (!command) return null;
116
125
  if (typeof command.path === "string") return command.path;
117
126
  if (command.view === "library" && command.libraryId) {
127
+ if (command.activeTab === "settings") {
128
+ return `/brand-kits/${encodeURIComponent(command.libraryId)}/settings`;
129
+ }
118
130
  const params = new URLSearchParams();
119
131
  if (typeof command.activeTab === "string") {
120
132
  params.set("tab", command.activeTab);
@@ -698,6 +698,27 @@ const messages = {
698
698
  "清除即時候選面板並刪除所有未儲存的候選行。",
699
699
  couldNotClearLiveCandidates: "無法清除即時候選項。",
700
700
  liveCandidatesActions: "即時候選項操作",
701
+ settingsTitle: "品牌套件設定",
702
+ unsavedChangesTitle: "未儲存的變更",
703
+ unsavedChangesDescription:
704
+ "此品牌套件有未儲存的變更。要放棄變更還是繼續編輯?",
705
+ discardChanges: "放棄變更",
706
+ keepEditing: "繼續編輯",
707
+ setupGuide: "設定指南",
708
+ setupGuideDescription:
709
+ "為了從此套件獲得最一致、最符合品牌調性的生成結果的建議。",
710
+ setupGuideReferences: "上傳參考素材",
711
+ setupGuideReferencesHint:
712
+ "將 3-5 個強而有力的範例標記為參考,讓分析品牌能從真實作品中學習調色板和視覺特徵,而非猜測。",
713
+ setupGuideStyleDescription: "撰寫具體的風格描述",
714
+ setupGuideStyleDescriptionHint:
715
+ "使用具體特徵(光線、構圖、質感)而非模糊的形容詞,讓每次生成都符合品牌調性。",
716
+ setupGuideInstructions: "使用自訂指令來設定硬性限制",
717
+ setupGuideInstructionsHint:
718
+ "將必須始終成立的事項(標誌位置、禁用顏色、法律文字)放在此處,讓代理永遠不會忘記。",
719
+ setupGuidePresets: "為每種常用格式建立一個預設",
720
+ setupGuidePresetsHint:
721
+ "將長寬比、模型和骨架/參考設定儲存為預設,讓每次都重複使用相同的輸出形式。",
701
722
  },
702
723
  brandKits: {
703
724
  title: "品牌套件",
@@ -456,6 +456,27 @@ const brandKitDetailEnUS = {
456
456
  "Clears the live candidates panel and deletes any unsaved candidate rows.",
457
457
  couldNotClearLiveCandidates: "Could not clear live candidates.",
458
458
  liveCandidatesActions: "Live candidates actions",
459
+ settingsTitle: "Brand Kit Settings",
460
+ unsavedChangesTitle: "Unsaved changes",
461
+ unsavedChangesDescription:
462
+ "You have unsaved changes to this brand kit. Discard them or keep editing?",
463
+ discardChanges: "Discard changes",
464
+ keepEditing: "Keep editing",
465
+ setupGuide: "Setup guide",
466
+ setupGuideDescription:
467
+ "Recommendations for the most consistent, on-brand generations from this kit.",
468
+ setupGuideReferences: "Upload reference assets",
469
+ setupGuideReferencesHint:
470
+ "Mark 3-5 strong examples as References so Analyze brand can learn palette and visual traits from real work, not guesses.",
471
+ setupGuideStyleDescription: "Write a specific style description",
472
+ setupGuideStyleDescriptionHint:
473
+ "Name concrete traits (lighting, composition, texture) instead of vague adjectives so every generation stays on-brand.",
474
+ setupGuideInstructions: "Use custom instructions for hard constraints",
475
+ setupGuideInstructionsHint:
476
+ "Put things that must always be true (logo placement, banned colors, legal copy) here so the agent never forgets them.",
477
+ setupGuidePresets: "Create a preset per recurring format",
478
+ setupGuidePresetsHint:
479
+ "Save aspect ratio, model, and skeleton/reference setup as a preset so the same output shape is reused every time.",
459
480
  } satisfies Record<string, string>;
460
481
 
461
482
  const assetPickerEnUS = {
@@ -1322,6 +1343,27 @@ const brandKitDetailArSA = {
1322
1343
  videoPromptPlaceholder:
1323
1344
  "يتم الكشف عن المنتج خلال ثماني ثوانٍ مع دفع بطيء للكاميرا",
1324
1345
  viewDetails: "عرض التفاصيل",
1346
+ settingsTitle: "إعدادات مجموعة العلامة التجارية",
1347
+ unsavedChangesTitle: "تغييرات غير محفوظة",
1348
+ unsavedChangesDescription:
1349
+ "لديك تغييرات غير محفوظة على مجموعة العلامة التجارية هذه. هل تريد التراجع عنها أم متابعة التحرير؟",
1350
+ discardChanges: "التراجع عن التغييرات",
1351
+ keepEditing: "متابعة التحرير",
1352
+ setupGuide: "دليل الإعداد",
1353
+ setupGuideDescription:
1354
+ "توصيات للحصول على أكثر النتائج اتساقًا وتوافقًا مع العلامة التجارية من هذه المجموعة.",
1355
+ setupGuideReferences: "تحميل أصول مرجعية",
1356
+ setupGuideReferencesHint:
1357
+ "حدد 3-5 أمثلة قوية كمراجع حتى يتمكن تحليل العلامة التجارية من تعلم لوحة الألوان والسمات المرئية من عمل حقيقي، وليس تخمينات.",
1358
+ setupGuideStyleDescription: "اكتب وصفًا محددًا للأسلوب",
1359
+ setupGuideStyleDescriptionHint:
1360
+ "حدد سمات ملموسة (الإضاءة، التكوين، الملمس) بدلاً من صفات غامضة حتى يبقى كل إنتاج متوافقًا مع العلامة التجارية.",
1361
+ setupGuideInstructions: "استخدم تعليمات مخصصة للقيود الصارمة",
1362
+ setupGuideInstructionsHint:
1363
+ "ضع هنا الأشياء التي يجب أن تكون صحيحة دائمًا (موضع الشعار، الألوان المحظورة، النص القانوني) حتى لا ينساها الوكيل أبدًا.",
1364
+ setupGuidePresets: "أنشئ إعدادًا مسبقًا لكل تنسيق متكرر",
1365
+ setupGuidePresetsHint:
1366
+ "احفظ نسبة العرض إلى الارتفاع والنموذج وإعداد الهيكل/المرجع كإعداد مسبق بحيث يُعاد استخدام نفس شكل الناتج في كل مرة.",
1325
1367
  } satisfies Partial<Messages["brandKitDetail"]>;
1326
1368
 
1327
1369
  const brandKitDetailDeDE = {
@@ -1565,6 +1607,29 @@ const brandKitDetailDeDE = {
1565
1607
  videoPromptPlaceholder:
1566
1608
  "Acht Sekunden lange Produktpräsentation mit langsamem Einfahren der Kamera",
1567
1609
  viewDetails: "Details anzeigen",
1610
+ settingsTitle: "Brand-Kit-Einstellungen",
1611
+ unsavedChangesTitle: "Ungespeicherte Änderungen",
1612
+ unsavedChangesDescription:
1613
+ "Sie haben ungespeicherte Änderungen an diesem Brand Kit. Verwerfen oder weiter bearbeiten?",
1614
+ discardChanges: "Änderungen verwerfen",
1615
+ keepEditing: "Weiter bearbeiten",
1616
+ setupGuide: "Einrichtungsleitfaden",
1617
+ setupGuideDescription:
1618
+ "Empfehlungen für die konsistentesten, markenkonformen Generierungen aus diesem Kit.",
1619
+ setupGuideReferences: "Referenz-Assets hochladen",
1620
+ setupGuideReferencesHint:
1621
+ "Markieren Sie 3-5 starke Beispiele als Referenzen, damit die Markenanalyse Palette und visuelle Merkmale aus echter Arbeit lernen kann, nicht aus Vermutungen.",
1622
+ setupGuideStyleDescription: "Eine konkrete Stilbeschreibung schreiben",
1623
+ setupGuideStyleDescriptionHint:
1624
+ "Benennen Sie konkrete Merkmale (Beleuchtung, Komposition, Textur) statt vager Adjektive, damit jede Generierung markenkonform bleibt.",
1625
+ setupGuideInstructions:
1626
+ "Benutzerdefinierte Anweisungen für feste Vorgaben verwenden",
1627
+ setupGuideInstructionsHint:
1628
+ "Legen Sie hier Dinge fest, die immer gelten müssen (Logoplatzierung, verbotene Farben, rechtliche Texte), damit der Agent sie nie vergisst.",
1629
+ setupGuidePresets:
1630
+ "Für jedes wiederkehrende Format eine Voreinstellung erstellen",
1631
+ setupGuidePresetsHint:
1632
+ "Speichern Sie Seitenverhältnis, Modell und Skelett-/Referenz-Setup als Voreinstellung, damit dieselbe Ausgabeform jedes Mal wiederverwendet wird.",
1568
1633
  } satisfies Partial<Messages["brandKitDetail"]>;
1569
1634
 
1570
1635
  const brandKitDetailEsES = {
@@ -1810,6 +1875,28 @@ const brandKitDetailEsES = {
1810
1875
  videoPromptPlaceholder:
1811
1876
  "Revelación de producto de ocho segundos con cámara lenta",
1812
1877
  viewDetails: "Ver detalles",
1878
+ settingsTitle: "Configuración del kit de marca",
1879
+ unsavedChangesTitle: "Cambios sin guardar",
1880
+ unsavedChangesDescription:
1881
+ "Tienes cambios sin guardar en este kit de marca. ¿Descartarlos o seguir editando?",
1882
+ discardChanges: "Descartar cambios",
1883
+ keepEditing: "Seguir editando",
1884
+ setupGuide: "Guía de configuración",
1885
+ setupGuideDescription:
1886
+ "Recomendaciones para obtener las generaciones más coherentes y fieles a la marca a partir de este kit.",
1887
+ setupGuideReferences: "Subir activos de referencia",
1888
+ setupGuideReferencesHint:
1889
+ "Marca de 3 a 5 ejemplos sólidos como Referencias para que Analizar marca pueda aprender la paleta y los rasgos visuales de trabajo real, no de suposiciones.",
1890
+ setupGuideStyleDescription: "Escribe una descripción de estilo específica",
1891
+ setupGuideStyleDescriptionHint:
1892
+ "Indica rasgos concretos (iluminación, composición, textura) en lugar de adjetivos vagos para que cada generación se mantenga fiel a la marca.",
1893
+ setupGuideInstructions:
1894
+ "Usa instrucciones personalizadas para restricciones estrictas",
1895
+ setupGuideInstructionsHint:
1896
+ "Pon aquí lo que siempre debe cumplirse (ubicación del logotipo, colores prohibidos, textos legales) para que el agente nunca lo olvide.",
1897
+ setupGuidePresets: "Crea un preajuste por cada formato recurrente",
1898
+ setupGuidePresetsHint:
1899
+ "Guarda la relación de aspecto, el modelo y la configuración de esqueleto/referencia como un preajuste para reutilizar la misma forma de salida cada vez.",
1813
1900
  } satisfies Partial<Messages["brandKitDetail"]>;
1814
1901
 
1815
1902
  const brandKitDetailFrFR = {
@@ -2054,6 +2141,28 @@ const brandKitDetailFrFR = {
2054
2141
  videoPromptPlaceholder:
2055
2142
  "Révélation du produit en huit secondes avec introduction lente de la caméra",
2056
2143
  viewDetails: "Afficher les détails",
2144
+ settingsTitle: "Paramètres du kit de marque",
2145
+ unsavedChangesTitle: "Modifications non enregistrées",
2146
+ unsavedChangesDescription:
2147
+ "Vous avez des modifications non enregistrées sur ce kit de marque. Les abandonner ou continuer à modifier ?",
2148
+ discardChanges: "Abandonner les modifications",
2149
+ keepEditing: "Continuer à modifier",
2150
+ setupGuide: "Guide de configuration",
2151
+ setupGuideDescription:
2152
+ "Recommandations pour obtenir les générations les plus cohérentes et fidèles à la marque à partir de ce kit.",
2153
+ setupGuideReferences: "Importer des ressources de référence",
2154
+ setupGuideReferencesHint:
2155
+ "Marquez 3 à 5 exemples solides comme références afin qu'Analyser la marque puisse apprendre la palette et les traits visuels à partir d'un travail réel, pas de suppositions.",
2156
+ setupGuideStyleDescription: "Rédigez une description de style précise",
2157
+ setupGuideStyleDescriptionHint:
2158
+ "Nommez des traits concrets (éclairage, composition, texture) plutôt que des adjectifs vagues afin que chaque génération reste fidèle à la marque.",
2159
+ setupGuideInstructions:
2160
+ "Utilisez des instructions personnalisées pour les contraintes strictes",
2161
+ setupGuideInstructionsHint:
2162
+ "Placez ici les éléments qui doivent toujours être respectés (emplacement du logo, couleurs interdites, mentions légales) pour que l'agent ne les oublie jamais.",
2163
+ setupGuidePresets: "Créez un préréglage par format récurrent",
2164
+ setupGuidePresetsHint:
2165
+ "Enregistrez le format d'image, le modèle et la configuration squelette/référence comme préréglage afin de réutiliser la même forme de sortie à chaque fois.",
2057
2166
  } satisfies Partial<Messages["brandKitDetail"]>;
2058
2167
 
2059
2168
  const brandKitDetailHiIN = {
@@ -2287,6 +2396,27 @@ const brandKitDetailHiIN = {
2287
2396
  videoCandidate: "वीडियो उम्मीदवार",
2288
2397
  videoPromptPlaceholder: "धीमे कैमरा पुश-इन के साथ आठ सेकंड का उत्पाद प्रकट होता है",
2289
2398
  viewDetails: "विवरण देखें",
2399
+ settingsTitle: "ब्रांड किट सेटिंग्स",
2400
+ unsavedChangesTitle: "असहेजे गए परिवर्तन",
2401
+ unsavedChangesDescription:
2402
+ "इस ब्रांड किट में आपके असहेजे गए परिवर्तन हैं। इन्हें छोड़ें या संपादन जारी रखें?",
2403
+ discardChanges: "परिवर्तन छोड़ें",
2404
+ keepEditing: "संपादन जारी रखें",
2405
+ setupGuide: "सेटअप गाइड",
2406
+ setupGuideDescription:
2407
+ "इस किट से सबसे सुसंगत, ब्रांड के अनुरूप जनरेशन पाने के लिए सिफारिशें।",
2408
+ setupGuideReferences: "संदर्भ एसेट अपलोड करें",
2409
+ setupGuideReferencesHint:
2410
+ "3-5 मजबूत उदाहरणों को संदर्भ के रूप में चिह्नित करें ताकि ब्रांड विश्लेषण वास्तविक कार्य से पैलेट और दृश्य विशेषताएँ सीख सके, अनुमानों से नहीं।",
2411
+ setupGuideStyleDescription: "एक विशिष्ट शैली विवरण लिखें",
2412
+ setupGuideStyleDescriptionHint:
2413
+ "अस्पष्ट विशेषणों के बजाय ठोस विशेषताएँ (प्रकाश व्यवस्था, संरचना, बनावट) नाम दें ताकि हर जनरेशन ब्रांड के अनुरूप बनी रहे।",
2414
+ setupGuideInstructions: "कठोर बाधाओं के लिए कस्टम निर्देशों का उपयोग करें",
2415
+ setupGuideInstructionsHint:
2416
+ "जो चीज़ें हमेशा सत्य होनी चाहिए (लोगो प्लेसमेंट, प्रतिबंधित रंग, कानूनी टेक्स्ट) उन्हें यहाँ रखें ताकि एजेंट उन्हें कभी न भूले।",
2417
+ setupGuidePresets: "प्रत्येक बार-बार आने वाले फ़ॉर्मेट के लिए एक प्रीसेट बनाएं",
2418
+ setupGuidePresetsHint:
2419
+ "पहलू अनुपात, मॉडल और स्केलेटन/संदर्भ सेटअप को प्रीसेट के रूप में सहेजें ताकि हर बार वही आउटपुट आकार पुन: उपयोग हो सके।",
2290
2420
  } satisfies Partial<Messages["brandKitDetail"]>;
2291
2421
 
2292
2422
  const brandKitDetailJaJP = {
@@ -2528,6 +2658,27 @@ const brandKitDetailJaJP = {
2528
2658
  videoPromptPlaceholder:
2529
2659
  "ゆっくりとしたカメラの押し込みによる 8 秒間の製品表示",
2530
2660
  viewDetails: "詳細を見る",
2661
+ settingsTitle: "ブランドキット設定",
2662
+ unsavedChangesTitle: "未保存の変更",
2663
+ unsavedChangesDescription:
2664
+ "このブランドキットには未保存の変更があります。破棄しますか、それとも編集を続けますか?",
2665
+ discardChanges: "変更を破棄",
2666
+ keepEditing: "編集を続ける",
2667
+ setupGuide: "セットアップガイド",
2668
+ setupGuideDescription:
2669
+ "このキットから最も一貫性のある、ブランドに沿った生成を得るための推奨事項です。",
2670
+ setupGuideReferences: "参照アセットをアップロード",
2671
+ setupGuideReferencesHint:
2672
+ "強力な例を3〜5点「参照」としてマークすると、ブランド分析が推測ではなく実際の作品からパレットと視覚的特徴を学習できます。",
2673
+ setupGuideStyleDescription: "具体的なスタイル説明を書く",
2674
+ setupGuideStyleDescriptionHint:
2675
+ "曖昧な形容詞ではなく、具体的な特徴(照明、構図、質感)を指定して、すべての生成がブランドに沿うようにします。",
2676
+ setupGuideInstructions: "厳格な制約にはカスタム指示を使用する",
2677
+ setupGuideInstructionsHint:
2678
+ "常に守るべき事項(ロゴの配置、禁止色、法的表記)をここに記載し、エージェントが忘れないようにします。",
2679
+ setupGuidePresets: "繰り返し使う形式ごとにプリセットを作成",
2680
+ setupGuidePresetsHint:
2681
+ "アスペクト比、モデル、スケルトン/参照設定をプリセットとして保存し、毎回同じ出力形式を再利用できるようにします。",
2531
2682
  } satisfies Partial<Messages["brandKitDetail"]>;
2532
2683
 
2533
2684
  const brandKitDetailKoKR = {
@@ -2763,6 +2914,27 @@ const brandKitDetailKoKR = {
2763
2914
  videoCandidate: "영상후보",
2764
2915
  videoPromptPlaceholder: "느린 카메라 푸시인으로 8초 동안 제품 공개",
2765
2916
  viewDetails: "세부정보 보기",
2917
+ settingsTitle: "브랜드 키트 설정",
2918
+ unsavedChangesTitle: "저장되지 않은 변경 사항",
2919
+ unsavedChangesDescription:
2920
+ "이 브랜드 키트에 저장되지 않은 변경 사항이 있습니다. 취소하시겠습니까, 아니면 계속 편집하시겠습니까?",
2921
+ discardChanges: "변경 사항 취소",
2922
+ keepEditing: "계속 편집",
2923
+ setupGuide: "설정 가이드",
2924
+ setupGuideDescription:
2925
+ "이 키트에서 가장 일관되고 브랜드에 맞는 생성을 얻기 위한 권장 사항입니다.",
2926
+ setupGuideReferences: "참조 자산 업로드",
2927
+ setupGuideReferencesHint:
2928
+ "강력한 예시 3~5개를 참조로 표시하면 브랜드 분석이 추측이 아닌 실제 작업에서 팔레트와 시각적 특성을 학습할 수 있습니다.",
2929
+ setupGuideStyleDescription: "구체적인 스타일 설명 작성",
2930
+ setupGuideStyleDescriptionHint:
2931
+ "모호한 형용사 대신 구체적인 특성(조명, 구도, 질감)을 명시하여 모든 생성이 브랜드에 맞게 유지되도록 하세요.",
2932
+ setupGuideInstructions: "엄격한 제약 조건에는 사용자 지정 지침을 사용하세요",
2933
+ setupGuideInstructionsHint:
2934
+ "항상 지켜야 하는 사항(로고 배치, 금지 색상, 법적 문구)을 여기에 입력하면 에이전트가 이를 잊지 않습니다.",
2935
+ setupGuidePresets: "반복되는 형식마다 프리셋을 만드세요",
2936
+ setupGuidePresetsHint:
2937
+ "가로세로 비율, 모델, 스켈레톤/참조 설정을 프리셋으로 저장하여 매번 동일한 출력 형태를 재사용하세요.",
2766
2938
  } satisfies Partial<Messages["brandKitDetail"]>;
2767
2939
 
2768
2940
  const brandKitDetailPtBR = {
@@ -3008,6 +3180,28 @@ const brandKitDetailPtBR = {
3008
3180
  videoPromptPlaceholder:
3009
3181
  "Revelação do produto em oito segundos com câmera lenta",
3010
3182
  viewDetails: "Ver detalhes",
3183
+ settingsTitle: "Configurações do kit de marca",
3184
+ unsavedChangesTitle: "Alterações não salvas",
3185
+ unsavedChangesDescription:
3186
+ "Você tem alterações não salvas neste kit de marca. Descartá-las ou continuar editando?",
3187
+ discardChanges: "Descartar alterações",
3188
+ keepEditing: "Continuar editando",
3189
+ setupGuide: "Guia de configuração",
3190
+ setupGuideDescription:
3191
+ "Recomendações para obter as gerações mais consistentes e fiéis à marca a partir deste kit.",
3192
+ setupGuideReferences: "Enviar ativos de referência",
3193
+ setupGuideReferencesHint:
3194
+ "Marque de 3 a 5 exemplos fortes como Referências para que a análise de marca aprenda a paleta e os traços visuais a partir de trabalho real, não de suposições.",
3195
+ setupGuideStyleDescription: "Escreva uma descrição de estilo específica",
3196
+ setupGuideStyleDescriptionHint:
3197
+ "Indique traços concretos (iluminação, composição, textura) em vez de adjetivos vagos para que cada geração permaneça fiel à marca.",
3198
+ setupGuideInstructions:
3199
+ "Use instruções personalizadas para restrições rígidas",
3200
+ setupGuideInstructionsHint:
3201
+ "Coloque aqui o que deve sempre ser verdade (posicionamento do logotipo, cores proibidas, textos legais) para que o agente nunca esqueça.",
3202
+ setupGuidePresets: "Crie uma predefinição para cada formato recorrente",
3203
+ setupGuidePresetsHint:
3204
+ "Salve a proporção, o modelo e a configuração de esqueleto/referência como predefinição para reutilizar a mesma forma de saída sempre.",
3011
3205
  } satisfies Partial<Messages["brandKitDetail"]>;
3012
3206
 
3013
3207
  const assetDetailDeDE = {
@@ -4228,6 +4422,27 @@ export const messagesByLocale = {
4228
4422
  "清除实时候选面板并删除所有未保存的候选行。",
4229
4423
  couldNotClearLiveCandidates: "无法清除实时候选项。",
4230
4424
  liveCandidatesActions: "实时候选项操作",
4425
+ settingsTitle: "品牌套件设置",
4426
+ unsavedChangesTitle: "未保存的更改",
4427
+ unsavedChangesDescription:
4428
+ "此品牌套件有未保存的更改。放弃更改还是继续编辑?",
4429
+ discardChanges: "放弃更改",
4430
+ keepEditing: "继续编辑",
4431
+ setupGuide: "设置指南",
4432
+ setupGuideDescription:
4433
+ "为了从此套件获得最一致、最符合品牌调性的生成结果的建议。",
4434
+ setupGuideReferences: "上传参考素材",
4435
+ setupGuideReferencesHint:
4436
+ "将 3-5 个强有力的示例标记为参考,以便品牌分析能从真实作品中学习调色板和视觉特征,而不是猜测。",
4437
+ setupGuideStyleDescription: "撰写具体的风格描述",
4438
+ setupGuideStyleDescriptionHint:
4439
+ "使用具体特征(光线、构图、质感)而不是模糊的形容词,以便每次生成都符合品牌调性。",
4440
+ setupGuideInstructions: "使用自定义指令来设定硬性约束",
4441
+ setupGuideInstructionsHint:
4442
+ "将必须始终成立的事项(徽标位置、禁用颜色、法律文本)放在此处,以便代理永远不会忘记。",
4443
+ setupGuidePresets: "为每种常用格式创建一个预设",
4444
+ setupGuidePresetsHint:
4445
+ "将宽高比、模型和骨架/参考设置保存为预设,以便每次都重复使用相同的输出形式。",
4231
4446
  },
4232
4447
  create: {
4233
4448
  imageModel: "图像模型",