@agent-native/core 0.79.11 → 0.79.15

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 (289) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +25 -0
  3. package/corpus/core/docs/content/locales/zh-TW/a2a-protocol.md +68 -68
  4. package/corpus/core/docs/content/locales/zh-TW/actions.md +82 -82
  5. package/corpus/core/docs/content/locales/zh-TW/agent-mentions.md +22 -22
  6. package/corpus/core/docs/content/locales/zh-TW/agent-surfaces.md +82 -82
  7. package/corpus/core/docs/content/locales/zh-TW/agent-teams.md +29 -29
  8. package/corpus/core/docs/content/locales/zh-TW/agent-web-surfaces.md +11 -11
  9. package/corpus/core/docs/content/locales/zh-TW/audit-log.md +16 -16
  10. package/corpus/core/docs/content/locales/zh-TW/authentication.md +32 -32
  11. package/corpus/core/docs/content/locales/zh-TW/automations.md +32 -32
  12. package/corpus/core/docs/content/locales/zh-TW/blueprint-installer.md +19 -19
  13. package/corpus/core/docs/content/locales/zh-TW/cli-adapters.md +17 -17
  14. package/corpus/core/docs/content/locales/zh-TW/client.md +62 -62
  15. package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.md +32 -32
  16. package/corpus/core/docs/content/locales/zh-TW/code-agents-ui.md +91 -91
  17. package/corpus/core/docs/content/locales/zh-TW/components.md +51 -51
  18. package/corpus/core/docs/content/locales/zh-TW/context-awareness.md +66 -66
  19. package/corpus/core/docs/content/locales/zh-TW/creating-templates.md +39 -39
  20. package/corpus/core/docs/content/locales/zh-TW/cross-app-sso.md +29 -29
  21. package/corpus/core/docs/content/locales/zh-TW/database.md +21 -21
  22. package/corpus/core/docs/content/locales/zh-TW/deployment.md +37 -37
  23. package/corpus/core/docs/content/locales/zh-TW/dispatch.md +43 -43
  24. package/corpus/core/docs/content/locales/zh-TW/drop-in-agent.md +34 -34
  25. package/corpus/core/docs/content/locales/zh-TW/durable-resume.md +18 -18
  26. package/corpus/core/docs/content/locales/zh-TW/embedding-sdk.md +73 -73
  27. package/corpus/core/docs/content/locales/zh-TW/evals.md +16 -16
  28. package/corpus/core/docs/content/locales/zh-TW/extensions.md +81 -81
  29. package/corpus/core/docs/content/locales/zh-TW/external-agents.md +146 -146
  30. package/corpus/core/docs/content/locales/zh-TW/faq.md +43 -43
  31. package/corpus/core/docs/content/locales/zh-TW/file-uploads.md +11 -11
  32. package/corpus/core/docs/content/locales/zh-TW/frames.md +33 -33
  33. package/corpus/core/docs/content/locales/zh-TW/getting-started.md +28 -28
  34. package/corpus/core/docs/content/locales/zh-TW/harness-agents.md +78 -78
  35. package/corpus/core/docs/content/locales/zh-TW/human-approval.md +27 -27
  36. package/corpus/core/docs/content/locales/zh-TW/internationalization.md +19 -19
  37. package/corpus/core/docs/content/locales/zh-TW/key-concepts.md +68 -68
  38. package/corpus/core/docs/content/locales/zh-TW/local-file-mode.md +50 -50
  39. package/corpus/core/docs/content/locales/zh-TW/mcp-apps.md +38 -38
  40. package/corpus/core/docs/content/locales/zh-TW/mcp-clients.md +67 -67
  41. package/corpus/core/docs/content/locales/zh-TW/mcp-protocol.md +50 -50
  42. package/corpus/core/docs/content/locales/zh-TW/messaging.md +99 -99
  43. package/corpus/core/docs/content/locales/zh-TW/migration-workbench.md +6 -6
  44. package/corpus/core/docs/content/locales/zh-TW/multi-app-workspace.md +39 -39
  45. package/corpus/core/docs/content/locales/zh-TW/multi-tenancy.md +7 -7
  46. package/corpus/core/docs/content/locales/zh-TW/native-chat-ui.md +38 -38
  47. package/corpus/core/docs/content/locales/zh-TW/notifications.md +23 -23
  48. package/corpus/core/docs/content/locales/zh-TW/observability.md +49 -49
  49. package/corpus/core/docs/content/locales/zh-TW/observational-memory.md +23 -23
  50. package/corpus/core/docs/content/locales/zh-TW/onboarding.md +40 -40
  51. package/corpus/core/docs/content/locales/zh-TW/plan-plugin.md +37 -37
  52. package/corpus/core/docs/content/locales/zh-TW/pr-visual-recap.md +72 -72
  53. package/corpus/core/docs/content/locales/zh-TW/processors.md +17 -17
  54. package/corpus/core/docs/content/locales/zh-TW/progress.md +15 -15
  55. package/corpus/core/docs/content/locales/zh-TW/pure-agent-apps.md +10 -10
  56. package/corpus/core/docs/content/locales/zh-TW/real-time-collaboration.md +103 -103
  57. package/corpus/core/docs/content/locales/zh-TW/recurring-jobs.md +19 -19
  58. package/corpus/core/docs/content/locales/zh-TW/routing.md +9 -9
  59. package/corpus/core/docs/content/locales/zh-TW/sandbox-adapters.md +48 -48
  60. package/corpus/core/docs/content/locales/zh-TW/security.md +49 -49
  61. package/corpus/core/docs/content/locales/zh-TW/server.md +47 -47
  62. package/corpus/core/docs/content/locales/zh-TW/sharing.md +22 -22
  63. package/corpus/core/docs/content/locales/zh-TW/skills-guide.md +46 -46
  64. package/corpus/core/docs/content/locales/zh-TW/template-analytics.md +40 -40
  65. package/corpus/core/docs/content/locales/zh-TW/template-assets.md +69 -69
  66. package/corpus/core/docs/content/locales/zh-TW/template-brain.md +81 -81
  67. package/corpus/core/docs/content/locales/zh-TW/template-calendar.md +40 -40
  68. package/corpus/core/docs/content/locales/zh-TW/template-chat.md +27 -27
  69. package/corpus/core/docs/content/locales/zh-TW/template-clips.md +85 -85
  70. package/corpus/core/docs/content/locales/zh-TW/template-content.md +65 -66
  71. package/corpus/core/docs/content/locales/zh-TW/template-design.md +29 -29
  72. package/corpus/core/docs/content/locales/zh-TW/template-dispatch.md +51 -51
  73. package/corpus/core/docs/content/locales/zh-TW/template-forms.md +25 -25
  74. package/corpus/core/docs/content/locales/zh-TW/template-mail.md +71 -71
  75. package/corpus/core/docs/content/locales/zh-TW/template-plan.md +92 -92
  76. package/corpus/core/docs/content/locales/zh-TW/template-slides.md +52 -52
  77. package/corpus/core/docs/content/locales/zh-TW/template-videos.md +30 -30
  78. package/corpus/core/docs/content/locales/zh-TW/tracking.md +29 -29
  79. package/corpus/core/docs/content/locales/zh-TW/using-your-agent.md +18 -18
  80. package/corpus/core/docs/content/locales/zh-TW/voice-input.md +19 -19
  81. package/corpus/core/docs/content/locales/zh-TW/what-is-agent-native.md +61 -61
  82. package/corpus/core/docs/content/locales/zh-TW/workspace-connections.md +41 -41
  83. package/corpus/core/docs/content/locales/zh-TW/workspace-management.md +27 -27
  84. package/corpus/core/docs/content/locales/zh-TW/workspace.md +58 -58
  85. package/corpus/core/docs/content/locales/zh-TW/writing-agent-instructions.md +41 -41
  86. package/corpus/core/docs/content/template-clips.md +48 -2
  87. package/corpus/core/package.json +2 -1
  88. package/corpus/core/src/client/AgentPanel.tsx +27 -3
  89. package/corpus/core/src/deploy/build.ts +738 -57
  90. package/corpus/core/src/deploy/route-discovery.ts +1 -1
  91. package/corpus/core/src/server/edge.ts +50 -0
  92. package/corpus/core/src/styles/agent-native.css +93 -0
  93. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +44 -44
  94. package/corpus/core/src/vite/client.ts +1 -0
  95. package/corpus/templates/analytics/app/components/layout/Layout.tsx +5 -3
  96. package/corpus/templates/analytics/app/i18n/zh-TW.ts +69 -70
  97. package/corpus/templates/analytics/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  98. package/corpus/templates/assets/app/components/layout/Layout.tsx +3 -3
  99. package/corpus/templates/assets/app/i18n/zh-TW.ts +82 -82
  100. package/corpus/templates/assets/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  101. package/corpus/templates/brain/app/components/layout/Layout.tsx +6 -4
  102. package/corpus/templates/brain/app/i18n/zh-TW.ts +90 -90
  103. package/corpus/templates/brain/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  104. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +1 -1
  105. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +1 -1
  106. package/corpus/templates/calendar/app/i18n/zh-TW.ts +57 -57
  107. package/corpus/templates/calendar/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  108. package/corpus/templates/calendar/server/lib/booking-og-fonts.ts +20 -6
  109. package/corpus/templates/calendar/server/lib/booking-og-image.ts +17 -9
  110. package/corpus/templates/chat/app/components/layout/Layout.tsx +5 -3
  111. package/corpus/templates/chat/app/i18n/zh-TW.ts +3 -3
  112. package/corpus/templates/chat/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  113. package/corpus/templates/clips/AGENTS.md +6 -0
  114. package/corpus/templates/clips/actions/delete-recording-permanent.ts +7 -1
  115. package/corpus/templates/clips/actions/get-recording-player-data.ts +44 -2
  116. package/corpus/templates/clips/actions/navigate.ts +2 -0
  117. package/corpus/templates/clips/actions/save-bug-report-context.ts +173 -0
  118. package/corpus/templates/clips/actions/view-screen.ts +58 -7
  119. package/corpus/templates/clips/app/components/recorder/storage-setup-card.tsx +9 -3
  120. package/corpus/templates/clips/app/hooks/use-navigation-state.ts +17 -0
  121. package/corpus/templates/clips/app/i18n/ar-SA.ts +31 -0
  122. package/corpus/templates/clips/app/i18n/de-DE.ts +32 -0
  123. package/corpus/templates/clips/app/i18n/en-US.ts +32 -0
  124. package/corpus/templates/clips/app/i18n/es-ES.ts +32 -0
  125. package/corpus/templates/clips/app/i18n/fr-FR.ts +32 -0
  126. package/corpus/templates/clips/app/i18n/hi-IN.ts +32 -0
  127. package/corpus/templates/clips/app/i18n/ja-JP.ts +31 -0
  128. package/corpus/templates/clips/app/i18n/ko-KR.ts +32 -0
  129. package/corpus/templates/clips/app/i18n/pt-BR.ts +32 -0
  130. package/corpus/templates/clips/app/i18n/zh-CN.ts +30 -0
  131. package/corpus/templates/clips/app/i18n/zh-TW.ts +461 -451
  132. package/corpus/templates/clips/app/routes/bug-report.done.tsx +126 -0
  133. package/corpus/templates/clips/app/routes/bug-report.tsx +222 -0
  134. package/corpus/templates/clips/app/routes/record.tsx +104 -12
  135. package/corpus/templates/clips/changelog/2026-06-26-brief-network-blips-no-longer-block-recording-or-wrongly-pro.md +6 -0
  136. package/corpus/templates/clips/changelog/2026-06-26-bug-report-recordings-can-keep-redacted-host-app-context-wit.md +6 -0
  137. package/corpus/templates/clips/changelog/2026-06-26-bug-report-widgets-can-launch-clips-recordings-from-embedded.md +6 -0
  138. package/corpus/templates/clips/changelog/2026-06-26-desktop-recording-keeps-connected-users-out-of-the-storage-s.md +6 -0
  139. package/corpus/templates/clips/changelog/2026-06-26-if-a-recording-can-t-be-uploaded-the-chrome-extension-now-sa.md +6 -0
  140. package/corpus/templates/clips/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  141. package/corpus/templates/clips/chrome-extension/public/manifest.json +9 -2
  142. package/corpus/templates/clips/chrome-extension/src/background.ts +43 -0
  143. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +111 -6
  144. package/corpus/templates/clips/chrome-extension/src/popup.ts +18 -7
  145. package/corpus/templates/clips/desktop/src/app.tsx +53 -19
  146. package/corpus/templates/clips/server/db/schema.ts +26 -0
  147. package/corpus/templates/clips/server/lib/public-agent-context.ts +51 -0
  148. package/corpus/templates/clips/server/plugins/auth.ts +1 -0
  149. package/corpus/templates/clips/server/plugins/db.ts +28 -0
  150. package/corpus/templates/clips/server/routes/api/agent-context.json.get.ts +4 -1
  151. package/corpus/templates/clips/shared/bug-report.ts +161 -0
  152. package/corpus/templates/content/app/components/layout/Layout.tsx +10 -8
  153. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -1
  154. package/corpus/templates/content/app/i18n/zh-TW.ts +67 -66
  155. package/corpus/templates/content/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  156. package/corpus/templates/design/app/components/layout/Layout.tsx +3 -3
  157. package/corpus/templates/design/app/i18n/zh-TW.ts +44 -44
  158. package/corpus/templates/design/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  159. package/corpus/templates/dispatch/app/i18n/zh-TW.ts +5 -4
  160. package/corpus/templates/dispatch/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  161. package/corpus/templates/forms/app/components/layout/Layout.tsx +4 -2
  162. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +1 -1
  163. package/corpus/templates/forms/app/i18n/zh-TW.ts +48 -48
  164. package/corpus/templates/forms/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  165. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +3 -3
  166. package/corpus/templates/macros/app/i18n/zh-TW.ts +5 -5
  167. package/corpus/templates/macros/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  168. package/corpus/templates/mail/app/i18n/zh-TW.ts +83 -83
  169. package/corpus/templates/mail/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  170. package/corpus/templates/plan/app/components/layout/Layout.tsx +5 -3
  171. package/corpus/templates/plan/app/i18n/zh-TW.ts +69 -69
  172. package/corpus/templates/plan/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  173. package/corpus/templates/slides/app/components/layout/Layout.tsx +3 -3
  174. package/corpus/templates/slides/app/i18n/zh-TW.ts +64 -64
  175. package/corpus/templates/slides/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  176. package/corpus/templates/videos/app/components/layout/Layout.tsx +2 -2
  177. package/corpus/templates/videos/app/i18n/zh-TW.ts +54 -54
  178. package/corpus/templates/videos/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
  179. package/dist/client/AgentPanel.d.ts.map +1 -1
  180. package/dist/client/AgentPanel.js +14 -4
  181. package/dist/client/AgentPanel.js.map +1 -1
  182. package/dist/collab/routes.d.ts +1 -1
  183. package/dist/deploy/build.d.ts +29 -2
  184. package/dist/deploy/build.d.ts.map +1 -1
  185. package/dist/deploy/build.js +587 -51
  186. package/dist/deploy/build.js.map +1 -1
  187. package/dist/deploy/route-discovery.d.ts +1 -1
  188. package/dist/deploy/route-discovery.js +1 -1
  189. package/dist/deploy/route-discovery.js.map +1 -1
  190. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  191. package/dist/notifications/routes.d.ts +2 -2
  192. package/dist/observability/routes.d.ts +7 -7
  193. package/dist/resources/handlers.d.ts +2 -2
  194. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  195. package/dist/server/edge.d.ts +11 -0
  196. package/dist/server/edge.d.ts.map +1 -0
  197. package/dist/server/edge.js +11 -0
  198. package/dist/server/edge.js.map +1 -0
  199. package/dist/styles/agent-native.css +93 -0
  200. package/dist/templates/default/app/i18n/zh-TW.ts +44 -44
  201. package/dist/vite/client.d.ts.map +1 -1
  202. package/dist/vite/client.js +1 -0
  203. package/dist/vite/client.js.map +1 -1
  204. package/docs/content/locales/zh-TW/a2a-protocol.md +68 -68
  205. package/docs/content/locales/zh-TW/actions.md +82 -82
  206. package/docs/content/locales/zh-TW/agent-mentions.md +22 -22
  207. package/docs/content/locales/zh-TW/agent-surfaces.md +82 -82
  208. package/docs/content/locales/zh-TW/agent-teams.md +29 -29
  209. package/docs/content/locales/zh-TW/agent-web-surfaces.md +11 -11
  210. package/docs/content/locales/zh-TW/audit-log.md +16 -16
  211. package/docs/content/locales/zh-TW/authentication.md +32 -32
  212. package/docs/content/locales/zh-TW/automations.md +32 -32
  213. package/docs/content/locales/zh-TW/blueprint-installer.md +19 -19
  214. package/docs/content/locales/zh-TW/cli-adapters.md +17 -17
  215. package/docs/content/locales/zh-TW/client.md +62 -62
  216. package/docs/content/locales/zh-TW/cloneable-saas.md +32 -32
  217. package/docs/content/locales/zh-TW/code-agents-ui.md +91 -91
  218. package/docs/content/locales/zh-TW/components.md +51 -51
  219. package/docs/content/locales/zh-TW/context-awareness.md +66 -66
  220. package/docs/content/locales/zh-TW/creating-templates.md +39 -39
  221. package/docs/content/locales/zh-TW/cross-app-sso.md +29 -29
  222. package/docs/content/locales/zh-TW/database.md +21 -21
  223. package/docs/content/locales/zh-TW/deployment.md +37 -37
  224. package/docs/content/locales/zh-TW/dispatch.md +43 -43
  225. package/docs/content/locales/zh-TW/drop-in-agent.md +34 -34
  226. package/docs/content/locales/zh-TW/durable-resume.md +18 -18
  227. package/docs/content/locales/zh-TW/embedding-sdk.md +73 -73
  228. package/docs/content/locales/zh-TW/evals.md +16 -16
  229. package/docs/content/locales/zh-TW/extensions.md +81 -81
  230. package/docs/content/locales/zh-TW/external-agents.md +146 -146
  231. package/docs/content/locales/zh-TW/faq.md +43 -43
  232. package/docs/content/locales/zh-TW/file-uploads.md +11 -11
  233. package/docs/content/locales/zh-TW/frames.md +33 -33
  234. package/docs/content/locales/zh-TW/getting-started.md +28 -28
  235. package/docs/content/locales/zh-TW/harness-agents.md +78 -78
  236. package/docs/content/locales/zh-TW/human-approval.md +27 -27
  237. package/docs/content/locales/zh-TW/internationalization.md +19 -19
  238. package/docs/content/locales/zh-TW/key-concepts.md +68 -68
  239. package/docs/content/locales/zh-TW/local-file-mode.md +50 -50
  240. package/docs/content/locales/zh-TW/mcp-apps.md +38 -38
  241. package/docs/content/locales/zh-TW/mcp-clients.md +67 -67
  242. package/docs/content/locales/zh-TW/mcp-protocol.md +50 -50
  243. package/docs/content/locales/zh-TW/messaging.md +99 -99
  244. package/docs/content/locales/zh-TW/migration-workbench.md +6 -6
  245. package/docs/content/locales/zh-TW/multi-app-workspace.md +39 -39
  246. package/docs/content/locales/zh-TW/multi-tenancy.md +7 -7
  247. package/docs/content/locales/zh-TW/native-chat-ui.md +38 -38
  248. package/docs/content/locales/zh-TW/notifications.md +23 -23
  249. package/docs/content/locales/zh-TW/observability.md +49 -49
  250. package/docs/content/locales/zh-TW/observational-memory.md +23 -23
  251. package/docs/content/locales/zh-TW/onboarding.md +40 -40
  252. package/docs/content/locales/zh-TW/plan-plugin.md +37 -37
  253. package/docs/content/locales/zh-TW/pr-visual-recap.md +72 -72
  254. package/docs/content/locales/zh-TW/processors.md +17 -17
  255. package/docs/content/locales/zh-TW/progress.md +15 -15
  256. package/docs/content/locales/zh-TW/pure-agent-apps.md +10 -10
  257. package/docs/content/locales/zh-TW/real-time-collaboration.md +103 -103
  258. package/docs/content/locales/zh-TW/recurring-jobs.md +19 -19
  259. package/docs/content/locales/zh-TW/routing.md +9 -9
  260. package/docs/content/locales/zh-TW/sandbox-adapters.md +48 -48
  261. package/docs/content/locales/zh-TW/security.md +49 -49
  262. package/docs/content/locales/zh-TW/server.md +47 -47
  263. package/docs/content/locales/zh-TW/sharing.md +22 -22
  264. package/docs/content/locales/zh-TW/skills-guide.md +46 -46
  265. package/docs/content/locales/zh-TW/template-analytics.md +40 -40
  266. package/docs/content/locales/zh-TW/template-assets.md +69 -69
  267. package/docs/content/locales/zh-TW/template-brain.md +81 -81
  268. package/docs/content/locales/zh-TW/template-calendar.md +40 -40
  269. package/docs/content/locales/zh-TW/template-chat.md +27 -27
  270. package/docs/content/locales/zh-TW/template-clips.md +85 -85
  271. package/docs/content/locales/zh-TW/template-content.md +65 -66
  272. package/docs/content/locales/zh-TW/template-design.md +29 -29
  273. package/docs/content/locales/zh-TW/template-dispatch.md +51 -51
  274. package/docs/content/locales/zh-TW/template-forms.md +25 -25
  275. package/docs/content/locales/zh-TW/template-mail.md +71 -71
  276. package/docs/content/locales/zh-TW/template-plan.md +92 -92
  277. package/docs/content/locales/zh-TW/template-slides.md +52 -52
  278. package/docs/content/locales/zh-TW/template-videos.md +30 -30
  279. package/docs/content/locales/zh-TW/tracking.md +29 -29
  280. package/docs/content/locales/zh-TW/using-your-agent.md +18 -18
  281. package/docs/content/locales/zh-TW/voice-input.md +19 -19
  282. package/docs/content/locales/zh-TW/what-is-agent-native.md +61 -61
  283. package/docs/content/locales/zh-TW/workspace-connections.md +41 -41
  284. package/docs/content/locales/zh-TW/workspace-management.md +27 -27
  285. package/docs/content/locales/zh-TW/workspace.md +58 -58
  286. package/docs/content/locales/zh-TW/writing-agent-instructions.md +41 -41
  287. package/docs/content/template-clips.md +48 -2
  288. package/package.json +2 -1
  289. package/src/templates/default/app/i18n/zh-TW.ts +44 -44
@@ -1,16 +1,16 @@
1
1
  ---
2
- title: "元件API"
3
- description: "用於自訂代理 UI、聊天欄位、對話呈現、實時狀態、共用、進度和丰富編輯器的公開 React 建置塊。"
2
+ title: "元件 API"
3
+ description: "用於自訂代理 UI、聊天欄位、對話呈現、即時狀態、共用、進度和豐富編輯器的公開 React 建置塊。"
4
4
  ---
5
5
 
6
- # 元件API
6
+ # 元件 API
7
7
 
8
8
  Agent-Native 附帶了完整的側邊欄,但側邊欄不是合同。
9
- 合約是執行時:聊天流、線程狀態、actions、上下文,
10
- 附件、模型選取、執行和 SQL 支持的同步。使用庫存
11
- 當你需要定制產品UI時,可以選取元件,並下拉一層。
9
+ 合約是執行時:聊天流、對話串狀態、actions、脈絡,
10
+ 附件、模型選取、執行和 SQL 支援的同步。使用庫存
11
+ 當你需要定制產品 UI 時,可以選取元件,並下拉一層。
12
12
 
13
- 從聚焦的用戶端子路徑匯入瀏覽器UI:
13
+ 從聚焦的用戶端子路徑匯入瀏覽器 UI:
14
14
 
15
15
  ```tsx
16
16
  import { AgentSidebar } from "@agent-native/core/client";
@@ -25,23 +25,23 @@ import { ResourcesPanel } from "@agent-native/core/client/resources";
25
25
  `@agent-native/core/client` 或聚焦的 `@agent-native/core/client/*` 子路徑
26
26
  因此捆綁商選取瀏覽器安全的條目。
27
27
 
28
- ```an-diagram title="下拉一層,不脫離框架" summary="每個層都保持相同的執行時 - 操作、線程狀態和 SQL-backed 同步 - 同時讓您更好地控制鑲邊。"
28
+ ```an-diagram title="下拉一層,不脫離框架" summary="每個層都保持相同的執行時 - 操作、對話串狀態和 SQL-backed 同步 - 同時讓您更好地控制鑲邊。"
29
29
  {
30
30
  "html": "<div class=\"diagram-layers\"><div class=\"diagram-card layer\"><span class=\"diagram-pill accent\">&lt;AgentSidebar&gt;</span><small class=\"diagram-muted\">圍繞應用的完整側邊欄。80% 的常見場景。</small></div><div class=\"diagram-card layer l2\"><span class=\"diagram-pill\">&lt;AgentPanel&gt; &middot; &lt;AgentChatSurface&gt;</span><small class=\"diagram-muted\">你自己布局中的面板或聊天頁面。</small></div><div class=\"diagram-card layer l3\"><span class=\"diagram-pill\">&lt;AssistantChat&gt; + runtime</span><small class=\"diagram-muted\">Own the chrome; optionally pass a BYO AgentChatRuntime.</small></div><div class=\"diagram-card layer l4\"><span class=\"diagram-pill\">&lt;PromptComposer&gt; &middot; &lt;AgentConversation&gt;</span><small class=\"diagram-muted\">撰寫r and transcript primitives only.</small></div><div class=\"diagram-rail\" data-rough>同一 runtime: actions &middot; thread state &middot; SQL-backed sync</div></div>",
31
31
  "css": ".diagram-layers{display:flex;flex-direction:column;gap:10px}.diagram-layers .layer{display:flex;flex-direction:column;gap:4px;padding:12px 14px}.diagram-layers .l2{margin-inline-start:24px}.diagram-layers .l3{margin-inline-start:48px}.diagram-layers .l4{margin-inline-start:72px}.diagram-layers .diagram-rail{margin-top:6px;padding:10px 14px;text-align:center}"
32
32
  }
33
33
  ```
34
34
 
35
- ## 代理並聊天UI {#agent-chat-ui}
35
+ ## 代理並聊天 UI {#agent-chat-ui}
36
36
 
37
37
  | API | 匯入路徑 | 何時使用 |
38
38
  | ------------------------------------ | --------------------------------------------- | ----------------------------------------------------------- |
39
39
  | `<AgentSidebar>` | `@agent-native/core/client` 或 `/client/chat` | 您希望應用程式週圍有完整的側邊欄。 |
40
40
  | `<AgentToggleButton>` | `@agent-native/core/client` 或 `/client/chat` | 您為側邊欄渲染自己的標題按鈕。 |
41
- | `<AgentPanel>` | `@agent-native/core/client` 或 `/client/chat` | 您希望在自己的布局、路線、對話框或側欄中顯示完整面板。 |
41
+ | `<AgentPanel>` | `@agent-native/core/client` 或 `/client/chat` | 您希望在自己的布局、路由、對話框或側欄中顯示完整面板。 |
42
42
  | `<AgentChatSurface>` | `@agent-native/core/client` 或 `/client/chat` | 您希望在面板或頁面模式下聊天,而不需要側邊欄包裝。 |
43
- | `<AssistantChat>` | `@agent-native/core/client`或`/client/chat` | 您希望擁有週圍的鑲邊,同時保持標準對話和作曲家執行時。 |
44
- | `<MultiTabAssistantChat>` | `@agent-native/core/client` 或 `/client/chat` | 您希望框架的線程分頁沒有 `AgentPanel` chrome。 |
43
+ | `<AssistantChat>` | `@agent-native/core/client`或`/client/chat` | 您希望擁有週圍的鑲邊,同時保持標準對話和撰寫器執行時。 |
44
+ | `<MultiTabAssistantChat>` | `@agent-native/core/client` 或 `/client/chat` | 您希望框架的對話串分頁沒有 `AgentPanel` chrome。 |
45
45
  | `createHttpAgentChatRuntime()` | `@agent-native/core/client` 或 `/client/chat` | 您有一個 BYO 代理端點,用於流式傳輸規範化的聊天事件。 |
46
46
  | `createOpenAIAgentsChatRuntime()` | `@agent-native/core/client` 或 `/client/chat` | 您有一個 OpenAI 代理 SDK 流,並希望圍繞它進行標準聊天 UI。 |
47
47
  | `createOpenAIResponsesChatRuntime()` | `@agent-native/core/client` 或 `/client/chat` | 您有一個 OpenAI 回應事件流,並希望將其規範化到聊天 UI 中。 |
@@ -49,20 +49,20 @@ import { ResourcesPanel } from "@agent-native/core/client/resources";
49
49
  | `createClaudeAgentChatRuntime()` | `@agent-native/core/client`或`/client/chat` | 您有一個 Claude 代理 SDK 流,並希望將其規範化到聊天 UI 中。 |
50
50
  | `createVercelAiChatRuntime()` | `@agent-native/core/client` 或 `/client/chat` | 您有一個 Vercel AI SDK 流,並希望將其規範化到聊天 UI 中。 |
51
51
  | `createAgentChatRuntimeAdapter()` | `@agent-native/core/client` 或 `/client/chat` | 需要自己將一個`AgentChatRuntime`適配成assistant-ui。 |
52
- | `createAgentChatAdapter()` | `@agent-native/core/client` 或 `/client/chat` | 您需要內置 Agent-Native SSE 傳輸作為低級助手 UI 適配器。 |
53
- | `useChatThreads()` | `@agent-native/core/client`或`/client/chat` | 您需要自訂話題列表、歷史紀錄選取器或範圍聊天 UI。 |
52
+ | `createAgentChatAdapter()` | `@agent-native/core/client` 或 `/client/chat` | 您需要內建 Agent-Native SSE 傳輸作為低階助手 UI 轉接器。 |
53
+ | `useChatThreads()` | `@agent-native/core/client`或`/client/chat` | 您需要自訂話題清單、歷史紀錄選取器或範圍聊天 UI。 |
54
54
  | `sendToAgentChat()` | `@agent-native/core/client` 或 `/client/chat` | 產品操作應該將工作交給代理聊天。 |
55
55
 
56
- `AgentChatRuntime` 是標準聊天 shell 的 BYO 代理合約。通過
56
+ `AgentChatRuntime` 是標準聊天 shell 的 BYO 代理合約。透過
57
57
  當外部代理應該為 `runtime` 到 `<AssistantChat>` 供電時
58
- Agent-Native 保留作曲家、文字紀錄、工具卡和
59
- 本機小部件渲染。上面的連線器是API面;執行時
58
+ Agent-Native 保留撰寫器、文字紀錄、工具卡和
59
+ 本機小工具渲染。上面的連線器是 API 面;執行時
60
60
  合同和事件形狀在中教授
61
61
  [Native 聊天介面 — BYO agent runtimes](/docs/native-chat-ui#byo-agent-runtimes).
62
- 如果您在無頭代理、丰富聊天、嵌入式 sidecar 之間進行選取
62
+ 如果您在無頭代理、豐富聊天、嵌入式 sidecar 之間進行選取
63
63
  完整的應用形狀,請參閱 [Agent Surfaces](/docs/agent-surfaces)。
64
64
 
65
- 最短的自訂路線仍然是預接線表面:
65
+ 最短的自訂路由仍然是預接線表面:
66
66
 
67
67
  ```tsx
68
68
  import { AgentChatSurface } from "@agent-native/core/client/chat";
@@ -100,18 +100,18 @@ function CustomChat({ projectSlug }: { projectSlug: string }) {
100
100
  連線器使用情況、標準化事件流以及何時到達
101
101
  `createHttpAgentChatRuntime()` 與特定於協議的連線器。
102
102
 
103
- ## 聊天欄位和作曲家 {#composer}
103
+ ## 聊天欄位和撰寫器 {#composer}
104
104
 
105
105
  當您需要進行相同的聊天時,請使用`@agent-native/core/client/composer`
106
- 自訂UI內的側邊欄使用的欄位。
106
+ 自訂 UI 內的側邊欄使用的欄位。
107
107
 
108
108
  | API | 何時使用 |
109
109
  | --------------------------------- | -------------------------------------------------------------------------------------------------------------- |
110
- | `<PromptComposer>` | 您需要一個隨時可以提交的聊天欄位,其中包含附件、斜線指令、參考、貼上文本處理、草稿持久性、語音輸入和提交語義。 |
110
+ | `<PromptComposer>` | 您需要一個隨時可以提交的聊天欄位,其中包含附件、斜線指令、參考、貼上文字處理、草稿持久性、語音輸入和提交語義。 |
111
111
  | `<AgentComposerFrame>` | 您需要自訂 撰寫r 主體週圍的標準視覺外殼。 |
112
- | `<TiptapComposer>` | 您需要最低級別的丰富聊天欄位。它必須在 Assistant-ui `ThreadPrimitive.Root` / 撰寫r 執行時內呈現。 |
113
- | `buildPromptComposerSubmission()` | 在調用您自己的提交處理程序之前,您需要相同的附件和貼上文本規範化。 |
114
- | `formatPromptWithAttachments()` | 您需要將隱藏的附件元資料呈現到提示字串中。 |
112
+ | `<TiptapComposer>` | 您需要最低階別的豐富聊天欄位。它必須在 Assistant-ui `ThreadPrimitive.Root` / 撰寫r 執行時內呈現。 |
113
+ | `buildPromptComposerSubmission()` | 在呼叫您自己的提交處理常式之前,您需要相同的附件和貼上文字規範化。 |
114
+ | `formatPromptWithAttachments()` | 您需要將隱藏的附件中繼資料呈現到提示字串中。 |
115
115
 
116
116
  大多數自訂 UI 應以 `PromptComposer` 開頭:
117
117
 
@@ -136,19 +136,19 @@ import { PromptComposer } from "@agent-native/core/client/composer";
136
136
 
137
137
  | API | 何時使用 |
138
138
  | ----------------------------------------------- | ------------------------------------ |
139
- | `<AgentConversation>` | 呈現標準化代理訊息列表。 |
139
+ | `<AgentConversation>` | 呈現標準化代理訊息清單。 |
140
140
  | `<AgentConversationMessageView>` | 渲染一條標準化訊息。 |
141
141
  | `normalizeCodeAgentTranscriptForConversation()` | 將程式碼代理轉錄事件轉換為對話訊息。 |
142
- | `useNearBottomAutoscroll()` | 在流式傳輸時將自訂腳本固定在底部。 |
142
+ | `useNearBottomAutoscroll()` | 在流式傳輸時將自訂指令碼固定在底部。 |
143
143
 
144
144
  這一層有意做到資料優先:您擁有訊息的來源,並且
145
145
  渲染器擁有一致的降價、附件、通知、工件和
146
- 工具調用顯示。
146
+ 工具呼叫顯示。
147
147
 
148
- ## 本機工具小部件 {#native-tool-widgets}
148
+ ## 本機工具小工具 {#native-tool-widgets}
149
149
 
150
- 當操作結果應呈現為應用品質 UI 時,請使用本機工具小部件
151
- 內部聊天而不是普通的 JSON。內置可重複使用的輸出包括
150
+ 當操作結果應呈現為應用品質 UI 時,請使用本機工具小工具
151
+ 內部聊天而不是普通的 JSON。內建可重複使用的輸出包括
152
152
  `DataTableWidget`、`DataChartWidget` 和 `DataWidgetResult`;它們被匯出
153
153
  來自 `@agent-native/core/client/chat` 和根用戶端條目。請參閱
154
154
  [Native 聊天介面](/docs/native-chat-ui) 表示操作結果合約。
@@ -162,23 +162,23 @@ import { PromptComposer } from "@agent-native/core/client/composer";
162
162
  | `registerToolRenderer()` | 您需要特定於產品的本機渲染器來獲得非核心工具結果。 |
163
163
  | `registerReservedToolRenderer()` | 框架程式碼需要一個保留的渲染器,該渲染器在範本渲染器之前獲勝。 |
164
164
 
165
- ## 實時協作和線上狀態 {#collab-presence}
165
+ ## 即時協作和線上狀態 {#collab-presence}
166
166
 
167
167
  使用 `@agent-native/core/client/collab` 實現 Liveblocks 式的呈現效果
168
168
  協作檔案掛鉤。
169
169
 
170
170
  | API | 何時使用 |
171
171
  | --------------------------------------------------- | ----------------------------------------------------------------- |
172
- | `useCollaborativeDoc()` | 將富文本編輯器或自訂 Yjs 介面綁定到 `/_agent-native/collab`。 |
173
- | `usePresence()` | 發布並渲染任意感知欄位:光標、選取、視口、模式。 |
172
+ | `useCollaborativeDoc()` | 將富文字編輯器或自訂 Yjs 介面綁定到 `/_agent-native/collab`。 |
173
+ | `usePresence()` | 發布並渲染任意感知欄位:游標、選取、視口、模式。 |
174
174
  | `<PresenceBar>` | 顯示活躍的人類和代理協作者。 |
175
- | `<LiveCursorOverlay>` | 在定位的容器上渲染遠端光標標籤。 |
175
+ | `<LiveCursorOverlay>` | 在定位的容器上渲染遠端游標標籤。 |
176
176
  | `<RemoteSelectionRings>` | 在 DOM 元素上渲染遠端選取輪廓。 |
177
177
  | `useFollowUser()` | 跟隨其他參與者的視口或選取。 |
178
- | `useCollaborativeMap()` / `useCollaborativeArray()` | 當富文本內文協作不合適時,使用結構化 Y.Map/Y.Array 狀態進行實驗。 |
178
+ | `useCollaborativeMap()` / `useCollaborativeArray()` | 當富文字內文協作不合適時,使用結構化 Y.Map/Y.Array 狀態進行實驗。 |
179
179
  | `dedupeCollabUsersByEmail()` | 為同一使用者建置一個沒有重複分頁的自訂頭像堆堆疊。 |
180
180
 
181
- ```an-diagram title="存在:人類和智能體共用一個意識層" summary="useCollaborativeDoc 擁有感知執行個體;用戶端掛鉤發布光標和選取;伺服器助手讓代理操作顯示為實時參與者。"
181
+ ```an-diagram title="存在:人類和智慧體共用一個意識層" summary="useCollaborativeDoc 擁有感知執行個體;用戶端掛鉤發布游標和選取;伺服器助手讓代理操作顯示為即時參與者。"
182
182
  {
183
183
  "html": "<div class=\"diagram-presence\"><div class=\"diagram-col\"><div class=\"diagram-node\">Humans<br><small class=\"diagram-muted\">usePresence &middot; cursors, selection</small></div><div class=\"diagram-node diagram-accent\">Agent 操作<br><small class=\"diagram-muted\">agentUpdateSelection()</small></div></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&rarr;</div><div class=\"diagram-panel center\" data-rough><span class=\"diagram-pill accent\">useCollaborativeDoc</span><small class=\"diagram-muted\">awareness layer</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&rarr;</div><div class=\"diagram-box\">&lt;PresenceBar&gt; &middot; &lt;LiveCursorOverlay&gt;<br><small class=\"diagram-muted\">渲染所有人,包括代理</small></div></div>",
184
184
  "css": ".diagram-presence{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.diagram-presence .diagram-col{display:flex;flex-direction:column;gap:10px}.diagram-presence .center{display:flex;flex-direction:column;align-items:center;gap:4px;padding:14px}.diagram-presence .diagram-arrow{font-size:22px;line-height:1}"
@@ -186,7 +186,7 @@ import { PromptComposer } from "@agent-native/core/client/composer";
186
186
  ```
187
187
 
188
188
  想要作為現場參與者出現的伺服器端代理 actions 使用
189
- 較低級別的 `@agent-native/core/collab` 代理存在助手:
189
+ 較低階別的 `@agent-native/core/collab` 代理存在助手:
190
190
 
191
191
  ```ts
192
192
  import {
@@ -196,7 +196,7 @@ import {
196
196
  } from "@agent-native/core/collab";
197
197
  ```
198
198
 
199
- ## 丰富的編輯器 {#rich-editor}
199
+ ## 豐富的編輯器 {#rich-editor}
200
200
 
201
201
  當需要共用markdown編輯器時使用`@agent-native/core/client/editor`
202
202
  計畫、內容、資源和協作檔案使用的表面
@@ -205,11 +205,11 @@ import {
205
205
  | API | 何時使用 |
206
206
  | -------------------------------- | ------------------------------------------------------------------------- |
207
207
  | `<SharedRichEditor>` | 您需要具有 Markdown 序列化、可選 Yjs 和應用附加功能的目前可設定編輯器。 |
208
- | `<RichMarkdownEditor>` | 您需要共用丰富編輯器的向後兼容別名。 |
208
+ | `<RichMarkdownEditor>` | 您需要共用豐富編輯器的向後相容別名。 |
209
209
  | `createSharedEditorExtensions()` | 您正在建置自己的 Tiptap 編輯器,但需要框架架構和 Markdown 方言。 |
210
210
  | `<SlashCommandMenu>` | 您需要共用斜線指令 UI 來建立自訂 Tiptap 表面。 |
211
- | `<BubbleToolbar>` | 您需要用於標記、連結和自訂內聯 actions 的共用選取工具列。 |
212
- | `createRegistryBlockNode()` | 您需要在丰富的編輯器中提供註冊表支持的塊節點。 |
211
+ | `<BubbleToolbar>` | 您需要用於標記、連結和自訂行內 actions 的共用選取工具列。 |
212
+ | `createRegistryBlockNode()` | 您需要在豐富的編輯器中提供註冊表支援的塊節點。 |
213
213
  | `uploadEditorImage()` | 您希望框架上傳圖片操作位於編輯器的共用圖片塊後面。 |
214
214
  | `useCollabReconcile()` | 您正在將自訂編輯器介面綁定到 Yjs 檔案,同時將 Markdown 保留為已儲存狀態。 |
215
215
 
@@ -226,7 +226,7 @@ import { SharedRichEditor } from "@agent-native/core/client/editor";
226
226
  />;
227
227
  ```
228
228
 
229
- 對於實時編輯,請將其與協作子路徑配對:
229
+ 對於即時編輯,請將其與協作子路徑配對:
230
230
 
231
231
  ```tsx
232
232
  import {
@@ -257,7 +257,7 @@ const collab = useCollaborativeDoc({
257
257
  ## 工作區資源 {#resources}
258
258
 
259
259
  當您想要公開相同的內容時,請使用 `@agent-native/core/client/resources`
260
- 為代理面板的“工作空間”分頁提供支持的工作空間資源模型。
260
+ 為代理面板的“工作空間”分頁提供支援的工作空間資源模型。
261
261
 
262
262
  | API | 何時使用 |
263
263
  | --------------------------------------------------------------------- | ---------------------------------------------------- |
@@ -265,9 +265,9 @@ const collab = useCollaborativeDoc({
265
265
  | `<ResourceTree>` | 您想要圍繞框架資料渲染您自己的資源瀏覽器。 |
266
266
  | `<ResourceEditor>` | 您需要所選資源的框架編輯器。 |
267
267
  | `useResourceTree()` | 您需要一個用於個人、共用或工作區資源的作用域樹。 |
268
- | `useResource()` | 您需要一項選定資源的內容和元資料。 |
268
+ | `useResource()` | 您需要一項選定資源的內容和中繼資料。 |
269
269
  | `useCreateResource()` / `useUpdateResource()` / `useDeleteResource()` | 您需要圍繞資源生命週期進行自訂控制。 |
270
- | `useUploadResource()` | 您需要將檔案上傳到框架資源存儲中。 |
270
+ | `useUploadResource()` | 您需要將檔案上傳到框架資源儲存中。 |
271
271
 
272
272
  完整的面板不需要道具:
273
273
 
@@ -320,7 +320,7 @@ function WorkspaceResources() {
320
320
  }
321
321
  ```
322
322
 
323
- ## 其他公開UI {#other-ui}
323
+ ## 其他公開 UI {#other-ui}
324
324
 
325
325
  | 區域 | APIs | 匯入路徑 |
326
326
  | ------------ | ----------------------------------------------------- | ----------------------------------------- |
@@ -330,13 +330,13 @@ function WorkspaceResources() {
330
330
  | 入職 | `useOnboarding()`,入門面板掛鉤 | `@agent-native/core/client/onboarding` |
331
331
  | 可觀察性 | `<ObservabilityDashboard>`, `<ThumbsFeedback>` | `@agent-native/core/client/observability` |
332
332
  | 資源 | `<ResourcesPanel>`、`<ResourceTree>`、資源掛鉤 | `@agent-native/core/client/resources` |
333
- | 丰富的編輯器 | `<SharedRichEditor>`,斜杠指令,塊節點掛鉤 | `@agent-native/core/client/editor` |
333
+ | 豐富的編輯器 | `<SharedRichEditor>`,斜杠指令,塊節點掛鉤 | `@agent-native/core/client/editor` |
334
334
 
335
- ## 一次性文本完成 {#one-off-text-completion}
335
+ ## 一次性文字完成 {#one-off-text-completion}
336
336
 
337
- 如果您確實需要原始文本輸入/文本輸出,請將其保留在伺服器端並使用
337
+ 如果您確實需要原始文字輸入/文字輸出,請將其保留在伺服器端並使用
338
338
  `completeText()` 來自 `@agent-native/core/server`。將面向使用者的用法包裝在
339
- 采取行動,使 UI 和代理共用相同的功能。
339
+ 採取行動,使 UI 和代理共用相同的功能。
340
340
 
341
341
  ```an-callout
342
342
  {
@@ -1,56 +1,56 @@
1
1
  ---
2
2
  title: "情境意識"
3
- description: "代理如何知道使用者正在檢視的內容:導覽狀態、選取上下文、視圖螢幕、sendToAgentChat 切換、導覽指令和抖動預防。"
3
+ description: "代理如何知道使用者正在檢視的內容:導覽狀態、選取脈絡、檢視螢幕、sendToAgentChat 切換、導覽指令和抖動預防。"
4
4
  ---
5
5
 
6
6
  # 情境意識
7
7
 
8
- > **開發人員頁面。** 此頁面供開發人員連線應用程式的上下文層。對於最終使用者體驗 - 代理如何在對話中使用該上下文 - 請參閱 [Using Your Agent](/docs/using-your-agent)。
8
+ > **開發人員頁面。** 此頁面供開發人員連線應用程式的脈絡層。對於最終使用者體驗 - 代理如何在對話中使用該脈絡 - 請參閱 [Using Your Agent](/docs/using-your-agent)。
9
9
 
10
- 代理如何知道使用者正在看什么——以及代理如何控制使用者看到的內容。
10
+ 代理如何知道使用者正在看什麼——以及代理如何控制使用者看到的內容。
11
11
 
12
12
  ## 概述 {#overview}
13
13
 
14
- 如果沒有上下文感知,代理就是盲目的。它詢問“哪個電子郵件?”當使用者盯著一個時。它無法作用於目前的選取,無法提供相關建議,也無法修改使用者所看到的內容。借助上下文感知,使用者可以點選一行、突出顯示一個段落、選取一個幻燈片元素或按 Cmd+I,然後說“總結一下”,然後代理就已經知道“這個”的含義。
14
+ 如果沒有脈絡感知,代理就是盲目的。它詢問“哪個電子郵件?”當使用者盯著一個時。它無法作用於目前的選取,無法提供相關建議,也無法修改使用者所看到的內容。借助脈絡感知,使用者可以點選一行、突出顯示一個段落、選取一個幻燈片元素或按 Cmd+I,然後說“總結一下”,然後代理就已經知道“這個”的含義。
15
15
 
16
- 要了解在哪個曲面中放置什么內容(AGENTS.md、skills、application_state),請參閱 [Writing Agent Instructions — The four surfaces the agent sees](/docs/writing-agent-instructions#four-surfaces)。
16
+ 要了解在哪個曲面中放置什麼內容(AGENTS.md、skills、application_state),請參閱 [Writing Agent Instructions — The four surfaces the agent sees](/docs/writing-agent-instructions#four-surfaces)。
17
17
 
18
18
  六種模式解決了這個問題:
19
19
 
20
- 1. **導覽狀態**——UI 在每次路線更改時將 `navigation` 金鑰寫入應用程式狀態
20
+ 1. **導覽狀態**——UI 在每次路由更改時將 `navigation` 金鑰寫入應用程式狀態
21
21
  2. **目前 URL** - 框架寫入 `__url__`,因此查詢參數對代理可見且可編輯
22
22
  3. **選取狀態**——當使用者聚焦、選取或多選有意義的內容時,UI 會寫入 `selection` 鍵
23
- 4. **`view-screen`**——讀取應用程式狀態、獲取上下文資料並返回使用者所見內容的快照的操作
24
- 5. **提示切換** -- 當點擊應成為代理輪次時,UI 控件調用 `sendToAgentChat()`
23
+ 4. **`view-screen`**——讀取應用程式狀態、取得脈絡資料並返回使用者所見內容的快照的操作
24
+ 5. **提示切換** -- 當點選應成為代理輪次時,UI 控制項呼叫 `sendToAgentChat()`
25
25
  6. **`navigate`**——來自代理的一次性指令,告訴 UI 去哪裡
26
26
 
27
- ```an-diagram title="代理如何看到您所看到的內容" summary="UI編寫輕量級狀態鍵;螢幕將它們轉化為真實的紀錄;代理可以編寫導覽返回來行動 UI。"
27
+ ```an-diagram title="代理如何看到您所看到的內容" summary="UI 編寫輕量級狀態鍵;螢幕將它們轉化為真實的紀錄;代理可以編寫導覽返回來行動 UI。"
28
28
  {
29
- "html": "<div class=\"diagram-ctx\"><div class=\"diagram-card col\"><span class=\"diagram-pill\">UI 寫入</span><div class=\"diagram-node\">navigation<br><small class=\"diagram-muted\">視圖、開啟的 ID</small></div><div class=\"diagram-node\">__url__<br><small class=\"diagram-muted\">shareable filters</small></div><div class=\"diagram-node\">selection<br><small class=\"diagram-muted\">行、塊、形狀</small></div></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&rarr;</div><div class=\"diagram-panel center\" data-rough><span class=\"diagram-pill accent\">view-screen</span><small class=\"diagram-muted\">reads state &middot; fetches records</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&rarr;</div><div class=\"diagram-box\">代理執行<br><small class=\"diagram-muted\">on the real object</small></div><div class=\"diagram-arrow diagram-accent\" aria-hidden=\"true\">&#8635;</div><div class=\"diagram-box diagram-accent\">navigate<br><small class=\"diagram-muted\">代理行動 UI</small></div></div>",
29
+ "html": "<div class=\"diagram-ctx\"><div class=\"diagram-card col\"><span class=\"diagram-pill\">UI 寫入</span><div class=\"diagram-node\">navigation<br><small class=\"diagram-muted\">檢視、開啟的 ID</small></div><div class=\"diagram-node\">__url__<br><small class=\"diagram-muted\">shareable filters</small></div><div class=\"diagram-node\">selection<br><small class=\"diagram-muted\">行、塊、形狀</small></div></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&rarr;</div><div class=\"diagram-panel center\" data-rough><span class=\"diagram-pill accent\">view-screen</span><small class=\"diagram-muted\">reads state &middot; fetches records</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&rarr;</div><div class=\"diagram-box\">代理執行<br><small class=\"diagram-muted\">on the real object</small></div><div class=\"diagram-arrow diagram-accent\" aria-hidden=\"true\">&#8635;</div><div class=\"diagram-box diagram-accent\">navigate<br><small class=\"diagram-muted\">代理行動 UI</small></div></div>",
30
30
  "css": ".diagram-ctx{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.diagram-ctx .col{display:flex;flex-direction:column;gap:8px;padding:14px}.diagram-ctx .center{display:flex;flex-direction:column;align-items:center;gap:4px;padding:14px}.diagram-ctx .diagram-arrow{font-size:22px;line-height:1}"
31
31
  }
32
32
  ```
33
33
 
34
- ## 上下文層 {#context-layers}
34
+ ## 脈絡層 {#context-layers}
35
35
 
36
- 針對不同的作業使用不同的上下文通道:
36
+ 針對不同的作業使用不同的脈絡通道:
37
37
 
38
38
  | 層 | 所有者 | 用它來 |
39
39
  | ---------------------------------------- | ----------------- | ------------------------------------------------------------ |
40
- | `navigation` 應用狀態金鑰 | UI | 語義路由狀態:目前視圖、開啟的紀錄、活動分頁、穩定 ID |
41
- | `__url__` 應用狀態金鑰 | 框架UI | 目前路徑名、搜尋字串、哈希和解析的 URL 查詢參數 |
40
+ | `navigation` 應用狀態金鑰 | UI | 語義路由狀態:目前檢視、開啟的紀錄、活動分頁、穩定 ID |
41
+ | `__url__` 應用狀態金鑰 | 框架 UI | 目前路徑名、搜尋字串、哈希和解析的 URL 查詢參數 |
42
42
  | `__set_url__` 應用狀態金鑰 | 代理/框架 | 對 `set-search-params` 和 `set-url-path` 進行一次性 URL 編輯 |
43
43
  | `selection` 應用狀態金鑰 | UI | 持久的語義選取:行、塊、形狀、資產、訊息 |
44
- | `pending-selection-context` 應用狀態金鑰 | UI / `AgentPanel` | 一次性選取的文本附加到下一個聊天回合,通常來自 Cmd+I |
44
+ | `pending-selection-context` 應用狀態金鑰 | UI / `AgentPanel` | 一次性選取的文字附加到下一個聊天回合,通常來自 Cmd+I |
45
45
  | `view-screen` 動作 | 代理 | 將應用狀態鍵融入真實紀錄和螢幕摘要 |
46
- | `sendToAgentChat()` | UI | 將點擊、指令、評論圖釘或所選專案轉變為聊天提示 |
47
- | `navigate` 應用狀態金鑰 | 代理 | 要求UI行動到另一條路線或聚焦另一個物體 |
46
+ | `sendToAgentChat()` | UI | 將點選、指令、評論圖釘或所選專案轉變為聊天提示 |
47
+ | `navigate` 應用狀態金鑰 | 代理 | 要求 UI 行動到另一條路由或聚焦另一個物體 |
48
48
 
49
- 簡短版本:URL 查詢參數是可共用過濾器的真實來源,`navigation` 存儲語義 ID 和視圖名稱,`view-screen` 將這些狀態層轉換為有用的資料,而當使用者點選指令時,`sendToAgentChat()` 將 UI 意圖轉換為聊天訊息。
49
+ 簡短版本:URL 查詢參數是可共用過濾器的真實來源,`navigation` 儲存語義 ID 和檢視名稱,`view-screen` 將這些狀態層轉換為有用的資料,而當使用者點選指令時,`sendToAgentChat()` 將 UI 意圖轉換為聊天訊息。
50
50
 
51
51
  ## 導覽狀態 {#navigation-state}
52
52
 
53
- UI 在每次路由更改時將 `navigation` 金鑰寫入應用程式狀態。這告訴代理使用者正在使用哪個視圖、開啟哪個專案以及哪個語義 UI 狀態很重要。
53
+ UI 在每次路由更改時將 `navigation` 金鑰寫入應用程式狀態。這告訴代理使用者正在使用哪個檢視、開啟哪個專案以及哪個語義 UI 狀態很重要。
54
54
 
55
55
  ```json
56
56
  {
@@ -68,7 +68,7 @@ UI 在每次路由更改時將 `navigation` 金鑰寫入應用程式狀態。這
68
68
  - 語義別名 - 活動分頁、標籤名稱或其他有助於代理推理的穩定應用概念
69
69
  - 輕焦點狀態 - 聚焦行、活動分頁、目前面板
70
70
 
71
- 保持 `navigation` 小且語義化。它應該識別目前螢幕,而不是複製整個紀錄或鏡像每個查詢參數。獲取 `view-screen` 中的紀錄,以便代理始終獲取最新資料。
71
+ 保持 `navigation` 小且語義化。它應該識別目前螢幕,而不是複製整個紀錄或鏡像每個查詢參數。取得 `view-screen` 中的紀錄,以便代理始終取得最新資料。
72
72
 
73
73
  代理在行動前閱讀以下內容:
74
74
 
@@ -79,9 +79,9 @@ const navigation = await readAppState("navigation");
79
79
  // { view: "inbox", threadId: "thread-123", label: "important" }
80
80
  ```
81
81
 
82
- ## 目前URL和過濾器 {#current-url}
82
+ ## 目前 URL 和過濾器 {#current-url}
83
83
 
84
- `AgentPanel` 自動將目前 React 路由器 URL 同步到 `__url__` 應用程式狀態金鑰中。內置代理每次都會將其包含為 `<current-url>` 塊:
84
+ `AgentPanel` 自動將目前 React 路由器 URL 同步到 `__url__` 應用程式狀態金鑰中。內建代理每次都會將其包含為 `<current-url>` 塊:
85
85
 
86
86
  ```text
87
87
  <current-url>
@@ -93,15 +93,15 @@ searchParams:
93
93
  </current-url>
94
94
  ```
95
95
 
96
- 這是可共用過濾器狀態的規範層。如果使用者可以複製 URL 並返回到相同的過濾列表,則該過濾器屬於查詢字串。代理可以使用內置的 `set-search-params` 工具更改這些過濾器:
96
+ 這是可共用過濾器狀態的規範層。如果使用者可以複製 URL 並返回到相同的過濾清單,則該過濾器屬於查詢字串。代理可以使用內建的 `set-search-params` 工具更改這些過濾器:
97
97
 
98
98
  ```text
99
99
  set-search-params({ "params": { "f_region": "east", "q": null } })
100
100
  ```
101
101
 
102
- 僅將 `navigation` 用於幫助 `view-screen` 獲取或匯總正確資料的語義別名。儀表板可能保留 `navigation.dashboardId`,而 `__url__.searchParams` 擁有 `f_region`、`f_dateStart` 和 `q`。
102
+ 僅將 `navigation` 用於幫助 `view-screen` 取得或匯總正確資料的語義別名。儀表板可能保留 `navigation.dashboardId`,而 `__url__.searchParams` 擁有 `f_region`、`f_dateStart` 和 `q`。
103
103
 
104
- 當`view-screen`返回更丰富的快照時,它可以將重要的URL過濾器複製到友好的`activeFilters`物件中:
104
+ 當`view-screen`返回更豐富的快照時,它可以將重要的 URL 過濾器複製到友好的`activeFilters`物件中:
105
105
 
106
106
  ```ts
107
107
  const url = (await readAppState("__url__")) as {
@@ -119,9 +119,9 @@ if (url?.searchParams) {
119
119
 
120
120
  ## 選取狀態 {#selection-state}
121
121
 
122
- 選取是語義 UI 狀態。這就是“我點選的圖表”、“這三行”、“這張幻燈片標題”或“目前電子郵件草稿範圍”如何成為模型可見上下文的方式。
122
+ 選取是語義 UI 狀態。這就是“我點選的圖表”、“這三行”、“這張幻燈片標題”或“目前電子郵件草稿範圍”如何成為模型可見脈絡的方式。
123
123
 
124
- 使用 `selection` 應用狀態鍵進行持久選取,該選取應該在導覽、空聊天建議或稍後的 `view-screen` 調用中保留下來:
124
+ 使用 `selection` 應用狀態鍵進行持久選取,該選取應該在導覽、空聊天建議或稍後的 `view-screen` 呼叫中保留下來:
125
125
 
126
126
  ```json
127
127
  {
@@ -154,21 +154,21 @@ async function syncSelection(selection: unknown | null) {
154
154
 
155
155
  - 代理可以在 actions 中使用的穩定 ID,例如 `threadId`、`slideId` 或 `assetId`
156
156
  - 簡短的人工標籤,以便提示和建議易於閱讀
157
- - 足夠的文本或元資料來消除物件的歧義
157
+ - 足夠的文字或中繼資料來消除物件的歧義
158
158
  - 可選的 UI 定位器,例如代理需要引用視覺元素時的選取器或坐標
159
159
  - `capturedAt` 當過時的選取有害時
160
160
 
161
- 避免在 `selection` 中存儲機密、完整檔案、大型二進制有效負載或整個 API 回應。存儲 ID 和簡短摘錄,然後讓 `view-screen` 獲取目前的事實來源。
161
+ 避免在 `selection` 中儲存機密、完整檔案、大型二進制有效負載或整個 API 回應。儲存 ID 和簡短摘錄,然後讓 `view-screen` 取得目前的事實來源。
162
162
 
163
- ### 一次性選定文本 {#pending-selection-context}
163
+ ### 一次性選定文字 {#pending-selection-context}
164
164
 
165
- `AgentPanel` 已經處理常見的文本選取流程。當使用者在頁面上選取文本的情況下按 Cmd+I(或 Ctrl+I)時,它:
165
+ `AgentPanel` 已經處理常見的文字選取流程。當使用者在頁面上選取文字的情況下按 Cmd+I(或 Ctrl+I)時,它:
166
166
 
167
167
  1. 讀取`window.getSelection()`
168
168
  2. 將 `{ text, capturedAt }` 寫入 `pending-selection-context`
169
- 3. 聚焦客服人員聊天
169
+ 3. 聚焦代理聊天
170
170
 
171
- 正式環境代理將該金鑰作為立即選取上下文注入下一回合,並在其過時後忽略它。這是使“選取文本,按 Cmd+I,詢問‘使其更加有力’”工作的路徑,而無需使用者將選取內容複製到提示中。
171
+ 正式環境代理將該金鑰作為立即選取脈絡注入下一回合,並在其過時後忽略它。這是使“選取文字,按 Cmd+I,詢問‘使其更加有力’”工作的路徑,而無需使用者將選取內容複製到提示中。
172
172
 
173
173
  當自訂編輯器的選取不由本機瀏覽器選取表示時,可以編寫相同的鍵:
174
174
 
@@ -185,38 +185,38 @@ await setClientAppState(
185
185
  );
186
186
  ```
187
187
 
188
- 使用 `pending-selection-context` 一次性“對這個精確突出顯示的文本進行操作”流程。使用 `selection` 進行持久物件選取,`view-screen` 和動態建議應該不斷看到。
188
+ 使用 `pending-selection-context` 一次性“對這個精確突出顯示的文字進行操作”流程。使用 `selection` 進行持久物件選取,`view-screen` 和動態建議應該不斷看到。
189
189
 
190
190
  ## 檢視螢幕操作 {#view-screen-action}
191
191
 
192
- 每個範本都應該有一個 `view-screen` 操作。它讀取導覽和選取狀態,獲取相關資料,並返回使用者所看到內容的快照。這是特工的眼睛。
192
+ 每個範本都應該有一個 `view-screen` 操作。它讀取導覽和選取狀態,取得相關資料,並返回使用者所看到內容的快照。這是代理的眼睛。
193
193
 
194
- ```an-annotated-code title="檢視螢幕 — 特工的眼睛"
194
+ ```an-annotated-code title="檢視螢幕 — 代理的眼睛"
195
195
  {
196
196
  "filename": "actions/view-screen.ts",
197
197
  "language": "ts",
198
198
  "code": "import { defineAction } from \"@agent-native/core/action\";\nimport { readAppState } from \"@agent-native/core/application-state\";\nimport { eq, inArray } from \"drizzle-orm\";\nimport { z } from \"zod\";\nimport { getDb, schema } from \"../server/db/index.js\";\n\nexport default defineAction({\n description:\n \"See what the user is currently looking at on screen.\",\n schema: z.object({}),\n http: false,\n run: async () => {\n const navigation = (await readAppState(\"navigation\")) as any;\n const selection = (await readAppState(\"selection\")) as any;\n const screen: Record<string, unknown> = {};\n if (navigation) screen.navigation = navigation;\n if (selection) screen.selection = selection;\n\n const db = getDb();\n\n // Fetch data based on what the user is viewing\n if (navigation?.view === \"inbox\") {\n screen.emailList = await db\n .select()\n .from(schema.emails)\n .where(eq(schema.emails.label, navigation.label));\n }\n if (navigation?.threadId) {\n screen.thread = await db\n .select()\n .from(schema.threads)\n .where(eq(schema.threads.id, navigation.threadId));\n }\n if (selection?.kind === \"email.messages\") {\n screen.selectedMessages = await db\n .select()\n .from(schema.emails)\n .where(inArray(schema.emails.id, selection.messageIds));\n }\n\n if (Object.keys(screen).length === 0) {\n return \"No application state found. Is the app running?\";\n }\n return screen;\n },\n});",
199
199
  "annotations": [
200
- { "lines": "10-11", "label": "工具表面", "note": "代理讀取此描述,知道它可以調用 `view-screen` 來檢視目前的 UI。" },
201
- { "lines": "13", "label": "http: false", "note": "內部操作 - 未通過 HTTP 暴露。代理和 `pnpm action` 調用它,而不是瀏覽器。" },
200
+ { "lines": "10-11", "label": "工具表面", "note": "代理讀取此描述,知道它可以呼叫 `view-screen` 來檢視目前的 UI。" },
201
+ { "lines": "13", "label": "http: false", "note": "內部操作 - 未通過 HTTP 暴露。代理和 `pnpm action` 呼叫它,而不是瀏覽器。" },
202
202
  { "lines": "15-16", "label": "讀取狀態", "note": "拉取 UI 編寫的輕量級 `navigation` 和 `selection` 鍵。" },
203
203
  { "lines": "23-37", "label": "水合物", "note": "將這些 ID 直接從 SQL 轉換為**新鮮**紀錄,以便代理在執行操作之前驗證活動物件。" }
204
204
  ]
205
205
  }
206
206
  ```
207
207
 
208
- 代理應在對目前 UI 進行操作之前調用 `pnpm action view-screen`。這是所有範本的硬約定。新增新功能時,更新 `view-screen` 以返回新視圖和任何新選取形狀的資料。
208
+ 代理應在對目前 UI 進行操作之前呼叫 `pnpm action view-screen`。這是所有範本的硬約定。新增新功能時,更新 `view-screen` 以返回新檢視和任何新選取形狀的資料。
209
209
 
210
210
  ```an-callout
211
211
  {
212
212
  "tone": "info",
213
- "body": "**保持 `navigation` 和 `selection` 小。**商店 ID 加上短標籤,而不是整個紀錄。 `view-screen` 根據需要獲取事實來源,因此陳舊或龐大的狀態永遠不會到達代理。"
213
+ "body": "**保持 `navigation` 和 `selection` 小。**商店 ID 加上短標籤,而不是整個紀錄。 `view-screen` 根據需要取得事實來源,因此陳舊或龐大的狀態永遠不會到達代理。"
214
214
  }
215
215
  ```
216
216
 
217
217
  ## 與 `sendToAgentChat()` 快速切換 {#send-to-agent-chat}
218
218
 
219
- 有時上下文不應該僅僅處於應用程式狀態。使用者點選按鈕、放下評論圖釘、選取專案並選取“詢問代理”,或者按下工具列中的 AI 指令。那次點擊是一個指令。在瀏覽器UI中,將其交給帶有`sendToAgentChat()`的代理。
219
+ 有時脈絡不應該僅僅處於應用程式狀態。使用者點選按鈕、放下評論圖釘、選取專案並選取“詢問代理”,或者按下工具列中的 AI 指令。那次點選是一個指令。在瀏覽器 UI 中,將其交給帶有`sendToAgentChat()`的代理。
220
220
 
221
221
  ```tsx
222
222
  import { sendToAgentChat } from "@agent-native/core/client";
@@ -245,32 +245,32 @@ function askAgentAboutSelection(selection: {
245
245
 
246
246
  | 欄位 | 含義 |
247
247
  | ------------------- | -------------------------------------------------------- |
248
- | `message` | 聊天中顯示可見的提示文本 |
249
- | `context` | 隱藏的模型可見上下文,不顯示為面向使用者的聊天文本 |
250
- | `submit: true` | 立即發送;適用於顯式指令按鈕,例如“修複布局” |
248
+ | `message` | 聊天中顯示可見的提示文字 |
249
+ | `context` | 隱藏的模型可見脈絡,不顯示為面向使用者的聊天文字 |
250
+ | `submit: true` | 立即傳送;適用於顯式指令按鈕,例如“修復布局” |
251
251
  | `submit: false` | 預填以供使用者審核;適合“向代理詢問此事”或模棱兩可的選取 |
252
252
  | `openSidebar: true` | 即使面板折疊,代理回應也可見 |
253
- | `newTab: true` | 為更大的建立工作啟動單獨的聊天線程 |
253
+ | `newTab: true` | 為更大的建立工作啟動單獨的聊天對話串 |
254
254
  | `type: "code"` | 當請求涉及更改應用程式來源時路由到程式碼編輯框架 |
255
255
 
256
- `sendToAgentChat()` 是提交的聊天路徑受支持的瀏覽器包裝器,有時在內部被視為 `agentNative.submitChat`。應用程式 UI 應調用包裝器,而不是直接發布 `agentNative.submitChat`,因為包裝器處理本機側邊欄、Builder/Frame 路由、MCP 應用程式主機路由、分頁 ID 和程式碼請求路由。
256
+ `sendToAgentChat()` 是提交的聊天路徑受支援的瀏覽器包裝器,有時在內部被視為 `agentNative.submitChat`。應用程式 UI 應呼叫包裝器,而不是直接發布 `agentNative.submitChat`,因為包裝器處理本機側邊欄、Builder/Frame 路由、MCP 應用程式主機路由、分頁 ID 和程式碼請求路由。
257
257
 
258
- 對於沒有瀏覽器側邊欄的節點/腳本上下文,請使用 `agentChat.submit()` 或 `agentChat.prefill()`。伺服器actions一般不應該調用僅瀏覽器的`sendToAgentChat()`;如果某個操作需要開啟 UI 向代理詢問某些內容,請將一個小請求寫入 `application_state` 並讓 UI 橋接器從瀏覽器發送它。
258
+ 對於沒有瀏覽器側邊欄的節點/指令碼脈絡,請使用 `agentChat.submit()` 或 `agentChat.prefill()`。伺服器actions一般不應該呼叫僅瀏覽器的`sendToAgentChat()`;如果某個操作需要開啟 UI 向代理詢問某些內容,請將一個小請求寫入 `application_state` 並讓 UI 橋接器從瀏覽器傳送它。
259
259
 
260
- ### 點擊提示中的專案 {#clicked-items-in-prompt}
260
+ ### 點選提示中的專案 {#clicked-items-in-prompt}
261
261
 
262
262
  對於“點選 UI 中的專案,它們成為提示的一部分”體驗,請將選取狀態與提示切換相結合:
263
263
 
264
264
  1. 點選或多選時,寫入語義 `selection` 狀態,以便 `view-screen`、動態建議和未來回合可以看到它。
265
- 2. 如果點擊也是指令,則調用`sendToAgentChat()`,簡潔的可見`message`和更丰富的隱藏`context`。
266
- 3. 在 `view-screen` 中,將選定的 ID 合並到目前紀錄中,以便代理可以在改變物件之前驗證該物件。
265
+ 2. 如果點選也是指令,則呼叫`sendToAgentChat()`,簡潔的可見`message`和更豐富的隱藏`context`。
266
+ 3. 在 `view-screen` 中,將選定的 ID 合併到目前紀錄中,以便代理可以在改變物件之前驗證該物件。
267
267
  4. 當物件不再被選取、刪除或不再相關時,清除 `selection`。
268
268
 
269
- 這為使用者提供了神奇的“這就是我的意思”行為,而無需在每個提示中填充大量可見上下文。
269
+ 這為使用者提供了神奇的“這就是我的意思”行為,而無需在每個提示中填充大量可見脈絡。
270
270
 
271
271
  ## 導覽操作 {#navigate-action}
272
272
 
273
- `navigate` 是 `navigation` 的鏡像。其中`navigation`是UI告訴代理使用者在哪裡,`navigate`是代理告訴UI去哪裡。代理將一次性 `navigate` 指令寫入應用程式狀態; UI 讀取它,執行導覽,然後刪除該條目。
273
+ `navigate` 是 `navigation` 的鏡像。其中`navigation`是 UI 告訴代理使用者在哪裡,`navigate`是代理告訴 UI 去哪裡。代理將一次性 `navigate` 指令寫入應用程式狀態; UI 讀取它,執行導覽,然後刪除該條目。
274
274
 
275
275
  ```ts
276
276
  // Agent side -- write a navigate command
@@ -279,24 +279,24 @@ import { writeAppState } from "@agent-native/core/application-state";
279
279
  await writeAppState("navigate", { view: "inbox", threadId: "thread-123" });
280
280
  ```
281
281
 
282
- 在 UI 端,您永遠不會手動輪詢或刪除此金鑰。兩個方向(在每次路由更改時寫入 `navigation` 並使用代理的 `navigate` 指令)均由單個鉤子 [`useNavigationState`](#use-navigation-state) 處理,下一節將對此進行介紹。
282
+ 在 UI 端,您永遠不會手動輪詢或刪除此金鑰。兩個方向(在每次路由更改時寫入 `navigation` 並使用代理的 `navigate` 指令)均由單一鉤子 [`useNavigationState`](#use-navigation-state) 處理,下一節將對此進行介紹。
283
283
 
284
- `navigation`金鑰屬於UI;代理絕不能直接寫入。代理寫入 `navigate`,UI 執行行動,該行動更新 `navigation`。
284
+ `navigation`金鑰屬於 UI;代理絕不能直接寫入。代理寫入 `navigate`,UI 執行行動,該行動更新 `navigation`。
285
285
 
286
- 當目的地有真實的URL時,請在其上包含同來源的`path`
286
+ 當目的地有真實的 URL 時,請在其上包含同來源的`path`
287
287
  `navigate` 指令並讓 UI 在回退到該路徑之前選取該路徑
288
288
  語義欄位。保持應用程式導覽單通道:不要同時寫入
289
289
  `navigate` 和 `__set_url__` 相同的動作。 `__set_url__` 為
290
- 框架URL工具(`set-url-path`、`set-search-params`)和僅URL過濾器
290
+ 框架 URL 工具(`set-url-path`、`set-search-params`)和僅 URL 過濾器
291
291
  改變。對於在聊天流式傳輸時可以到達的指令,請提交路由
292
292
  使用 `navigate(path, { replace: true, flushSync: true })` 而不是包裝它
293
- 在視圖轉換中,使地址欄和可見頁面保持在一起。
293
+ 在檢視轉換中,使地址欄和可見頁面保持在一起。
294
294
 
295
295
  ## useNavigationState 掛鉤 {#use-navigation-state}
296
296
 
297
- `useNavigationState` 是 **您的應用程式的鉤子,而不是框架匯入。** 每個範本都在 `app/hooks/use-navigation-state.ts` 上發布一個,並從應用程式 shell (`root.tsx`) 調用它一次。這是連線兩個方向導覽的單一位置:
297
+ `useNavigationState` 是 **您的應用程式的鉤子,而不是框架匯入。** 每個範本都在 `app/hooks/use-navigation-state.ts` 上發布一個,並從應用程式 shell (`root.tsx`) 呼叫它一次。這是連線兩個方向導覽的單一位置:
298
298
 
299
- - **出站(UI→代理):**每當路線改變時寫入`navigation`金鑰,因此代理始終知道目前視圖。
299
+ - **出站(UI→代理):**每當路由改變時寫入`navigation`金鑰,因此代理始終知道目前檢視。
300
300
  - **入站(代理 → UI):**輪詢 `navigate` 指令、執行導覽並刪除指令。
301
301
 
302
302
  它很短,因為它是真實框架原語 `useAgentRouteState`(從 `@agent-native/core/client` 匯出)的薄包裝。您提供兩個特定於應用程式的功能,框架將完成其餘的工作:
@@ -339,13 +339,13 @@ export function useNavigationState() {
339
339
  | `getNavigationState` — 將 URL 對應到語義狀態 | `navigation` 寫入,制表符範圍加上全域後備鍵 |
340
340
  | `getCommandPath` — 將 `navigate` 指令對應到路由 | 指令輪詢、讀後刪除、重複指令保護、請求來源標記 |
341
341
 
342
- `useAgentRouteState` 假定為 React 路由器。當導覽不在 URL 中時(向導步驟、畫布選取、非路由器 shell),而是下拉到較低級別的 `useSemanticNavigationState`:您將現成的 `state` 值加上 `navigationKeys`/`commandKeys` 和 `onCommand` 回調,並且它與 React 路由器完全無關。
342
+ `useAgentRouteState` 假定為 React 路由器。當導覽不在 URL 中時(向導步驟、畫布選取、非路由器 shell),而是下拉到較低階別的 `useSemanticNavigationState`:您將現成的 `state` 值加上 `navigationKeys`/`commandKeys` 和 `onCommand` 回調,並且它與 React 路由器完全無關。
343
343
 
344
344
  ## 抖動預防 {#jitter-prevention}
345
345
 
346
- 當代理寫入應用程式狀態時,同步系統可能會導致 UI 重新獲取剛剛寫入的資料。這會產生抖動。解決方案是來源標記:
346
+ 當代理寫入應用程式狀態時,同步系統可能會導致 UI 重新取得剛剛寫入的資料。這會產生抖動。解決方案是來源標記:
347
347
 
348
- 使用 `@agent-native/core/client` 中的 `setClientAppState`、`writeClientAppState`、`readClientAppState` 和 `deleteClientAppState` 進行瀏覽器端應用程式狀態存取。與`useDbSync({ ignoreSource: TAB_ID })`配對時通過`{ requestSource: TAB_ID }`對UI進行寫入;通過 `{ keepalive: true }` 進行短期寫入,例如卸載期間的選取清理。
348
+ 使用 `@agent-native/core/client` 中的 `setClientAppState`、`writeClientAppState`、`readClientAppState` 和 `deleteClientAppState` 進行瀏覽器端應用程式狀態存取。與`useDbSync({ ignoreSource: TAB_ID })`配對時透過`{ requestSource: TAB_ID }`對 UI 進行寫入;透過 `{ keepalive: true }` 進行短期寫入,例如卸載期間的選取清理。
349
349
 
350
350
  ```ts
351
351
  // app/root.tsx
@@ -360,14 +360,14 @@ useDbSync({
360
360
  工作原理:
361
361
 
362
362
  - 代理寫入標記為 `requestSource: "agent"`(操作助手自動執行此操作)
363
- - UI 寫入通過 `X-Request-Source` 標頭包含分頁的唯一 ID
364
- - 伺服器存儲每個事件的來源
365
- - 處理同步事件時,UI 會過濾掉與其自己的 `ignoreSource` 值匹配的事件 - 因此它不會重新獲取剛剛寫入的資料
363
+ - UI 寫入透過 `X-Request-Source` 標頭包含分頁的唯一 ID
364
+ - 伺服器儲存每個事件的來源
365
+ - 處理同步事件時,UI 會過濾掉與其自己的 `ignoreSource` 值匹配的事件 - 因此它不會重新取得剛剛寫入的資料
366
366
  - 來自代理、其他分頁和 actions 的事件仍然正常進行
367
367
 
368
368
  ```an-diagram title="來源標記可阻止自重取抖動" summary="分頁會忽略標有其自己的 TAB_ID 的同步事件,但仍會對代理和其他分頁寫入做出反應。"
369
369
  {
370
- "html": "<div class=\"diagram-jitter\"><div class=\"diagram-node\">此標籤頁面寫入<br><small class=\"diagram-muted\">X-Request-Source: TAB_ID</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&rarr;</div><div class=\"diagram-box\" data-rough>伺服器存儲來源<br>on the event</div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&rarr;</div><div class=\"diagram-card col\"><div class=\"diagram-pill warn\">source == TAB_ID &rarr; ignored</div><small class=\"diagram-muted\">無需重新拉取,無閃爍</small><div class=\"diagram-pill ok\">agent / other tab &rarr; applied</div><small class=\"diagram-muted\">介面實時更新</small></div></div>",
370
+ "html": "<div class=\"diagram-jitter\"><div class=\"diagram-node\">此標籤頁面寫入<br><small class=\"diagram-muted\">X-Request-Source: TAB_ID</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&rarr;</div><div class=\"diagram-box\" data-rough>伺服器儲存來源<br>on the event</div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&rarr;</div><div class=\"diagram-card col\"><div class=\"diagram-pill warn\">source == TAB_ID &rarr; ignored</div><small class=\"diagram-muted\">無需重新拉取,無閃爍</small><div class=\"diagram-pill ok\">agent / other tab &rarr; applied</div><small class=\"diagram-muted\">介面即時更新</small></div></div>",
371
371
  "css": ".diagram-jitter{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.diagram-jitter .col{display:flex;flex-direction:column;gap:6px;padding:14px}.diagram-jitter .diagram-arrow{font-size:22px;line-height:1}"
372
372
  }
373
373
  ```