@agent-native/core 0.79.2 → 0.79.5

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 (261) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +24 -0
  3. package/corpus/core/docs/content/locales/zh-TW/a2a-protocol.md +392 -0
  4. package/corpus/core/docs/content/locales/zh-TW/actions.md +583 -0
  5. package/corpus/core/docs/content/locales/zh-TW/agent-mentions.md +164 -0
  6. package/corpus/core/docs/content/locales/zh-TW/agent-surfaces.md +397 -0
  7. package/corpus/core/docs/content/locales/zh-TW/agent-teams.md +171 -0
  8. package/corpus/core/docs/content/locales/zh-TW/agent-web-surfaces.md +161 -0
  9. package/corpus/core/docs/content/locales/zh-TW/audit-log.md +111 -0
  10. package/corpus/core/docs/content/locales/zh-TW/authentication.md +332 -0
  11. package/corpus/core/docs/content/locales/zh-TW/automations.md +268 -0
  12. package/corpus/core/docs/content/locales/zh-TW/blueprint-installer.md +83 -0
  13. package/corpus/core/docs/content/locales/zh-TW/cli-adapters.md +129 -0
  14. package/corpus/core/docs/content/locales/zh-TW/client.md +398 -0
  15. package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.md +114 -0
  16. package/corpus/core/docs/content/locales/zh-TW/code-agents-ui.md +436 -0
  17. package/corpus/core/docs/content/locales/zh-TW/components.md +368 -0
  18. package/corpus/core/docs/content/locales/zh-TW/context-awareness.md +373 -0
  19. package/corpus/core/docs/content/locales/zh-TW/creating-templates.md +411 -0
  20. package/corpus/core/docs/content/locales/zh-TW/cross-app-sso.md +188 -0
  21. package/corpus/core/docs/content/locales/zh-TW/database.md +183 -0
  22. package/corpus/core/docs/content/locales/zh-TW/deployment.md +348 -0
  23. package/corpus/core/docs/content/locales/zh-TW/dispatch.md +146 -0
  24. package/corpus/core/docs/content/locales/zh-TW/drop-in-agent.md +260 -0
  25. package/corpus/core/docs/content/locales/zh-TW/durable-resume.md +65 -0
  26. package/corpus/core/docs/content/locales/zh-TW/embedding-sdk.md +597 -0
  27. package/corpus/core/docs/content/locales/zh-TW/evals.md +155 -0
  28. package/corpus/core/docs/content/locales/zh-TW/extensions.md +360 -0
  29. package/corpus/core/docs/content/locales/zh-TW/external-agents.md +619 -0
  30. package/corpus/core/docs/content/locales/zh-TW/faq.md +142 -0
  31. package/corpus/core/docs/content/locales/zh-TW/file-uploads.md +122 -0
  32. package/corpus/core/docs/content/locales/zh-TW/frames.md +153 -0
  33. package/corpus/core/docs/content/locales/zh-TW/getting-started.md +199 -0
  34. package/corpus/core/docs/content/locales/zh-TW/harness-agents.md +349 -0
  35. package/corpus/core/docs/content/locales/zh-TW/human-approval.md +86 -0
  36. package/corpus/core/docs/content/locales/zh-TW/internationalization.md +147 -0
  37. package/corpus/core/docs/content/locales/zh-TW/key-concepts.md +312 -0
  38. package/corpus/core/docs/content/locales/zh-TW/local-file-mode.md +433 -0
  39. package/corpus/core/docs/content/locales/zh-TW/mcp-apps.md +147 -0
  40. package/corpus/core/docs/content/locales/zh-TW/mcp-clients.md +330 -0
  41. package/corpus/core/docs/content/locales/zh-TW/mcp-protocol.md +279 -0
  42. package/corpus/core/docs/content/locales/zh-TW/messaging.md +461 -0
  43. package/corpus/core/docs/content/locales/zh-TW/migration-workbench.md +33 -0
  44. package/corpus/core/docs/content/locales/zh-TW/multi-app-workspace.md +312 -0
  45. package/corpus/core/docs/content/locales/zh-TW/multi-tenancy.md +52 -0
  46. package/corpus/core/docs/content/locales/zh-TW/native-chat-ui.md +321 -0
  47. package/corpus/core/docs/content/locales/zh-TW/notifications.md +231 -0
  48. package/corpus/core/docs/content/locales/zh-TW/observability.md +294 -0
  49. package/corpus/core/docs/content/locales/zh-TW/observational-memory.md +77 -0
  50. package/corpus/core/docs/content/locales/zh-TW/onboarding.md +216 -0
  51. package/corpus/core/docs/content/locales/zh-TW/plan-plugin.md +200 -0
  52. package/corpus/core/docs/content/locales/zh-TW/pr-visual-recap.md +384 -0
  53. package/corpus/core/docs/content/locales/zh-TW/processors.md +106 -0
  54. package/corpus/core/docs/content/locales/zh-TW/progress.md +199 -0
  55. package/corpus/core/docs/content/locales/zh-TW/pure-agent-apps.md +39 -0
  56. package/corpus/core/docs/content/locales/zh-TW/real-time-collaboration.md +680 -0
  57. package/corpus/core/docs/content/locales/zh-TW/recurring-jobs.md +142 -0
  58. package/corpus/core/docs/content/locales/zh-TW/routing.md +79 -0
  59. package/corpus/core/docs/content/locales/zh-TW/sandbox-adapters.md +227 -0
  60. package/corpus/core/docs/content/locales/zh-TW/security.md +330 -0
  61. package/corpus/core/docs/content/locales/zh-TW/server.md +265 -0
  62. package/corpus/core/docs/content/locales/zh-TW/sharing.md +219 -0
  63. package/corpus/core/docs/content/locales/zh-TW/skills-guide.md +281 -0
  64. package/corpus/core/docs/content/locales/zh-TW/template-analytics.md +259 -0
  65. package/corpus/core/docs/content/locales/zh-TW/template-assets.md +303 -0
  66. package/corpus/core/docs/content/locales/zh-TW/template-brain.md +324 -0
  67. package/corpus/core/docs/content/locales/zh-TW/template-calendar.md +194 -0
  68. package/corpus/core/docs/content/locales/zh-TW/template-chat.md +129 -0
  69. package/corpus/core/docs/content/locales/zh-TW/template-clips.md +368 -0
  70. package/corpus/core/docs/content/locales/zh-TW/template-content.md +402 -0
  71. package/corpus/core/docs/content/locales/zh-TW/template-design.md +173 -0
  72. package/corpus/core/docs/content/locales/zh-TW/template-dispatch.md +220 -0
  73. package/corpus/core/docs/content/locales/zh-TW/template-forms.md +178 -0
  74. package/corpus/core/docs/content/locales/zh-TW/template-mail.md +239 -0
  75. package/corpus/core/docs/content/locales/zh-TW/template-plan.md +814 -0
  76. package/corpus/core/docs/content/locales/zh-TW/template-slides.md +293 -0
  77. package/corpus/core/docs/content/locales/zh-TW/template-videos.md +222 -0
  78. package/corpus/core/docs/content/locales/zh-TW/tracking.md +236 -0
  79. package/corpus/core/docs/content/locales/zh-TW/using-your-agent.md +71 -0
  80. package/corpus/core/docs/content/locales/zh-TW/voice-input.md +81 -0
  81. package/corpus/core/docs/content/locales/zh-TW/what-is-agent-native.md +202 -0
  82. package/corpus/core/docs/content/locales/zh-TW/workspace-connections.md +321 -0
  83. package/corpus/core/docs/content/locales/zh-TW/workspace-management.md +175 -0
  84. package/corpus/core/docs/content/locales/zh-TW/workspace.md +323 -0
  85. package/corpus/core/docs/content/locales/zh-TW/writing-agent-instructions.md +173 -0
  86. package/corpus/core/package.json +1 -1
  87. package/corpus/core/src/client/ErrorBoundary.tsx +10 -0
  88. package/corpus/core/src/client/FeedbackButton.tsx +12 -0
  89. package/corpus/core/src/client/blocks/library/block-copy.ts +32 -0
  90. package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +33 -0
  91. package/corpus/core/src/client/i18n.tsx +5 -0
  92. package/corpus/core/src/localization/actions/set-localization-preference.ts +2 -1
  93. package/corpus/core/src/localization/shared.ts +45 -0
  94. package/corpus/core/src/server/agent-chat-plugin.ts +38 -0
  95. package/corpus/core/src/server/onboarding-html.ts +99 -0
  96. package/corpus/core/src/templates/default/app/i18n/index.ts +2 -0
  97. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +466 -0
  98. package/corpus/core/src/templates/default/app/root.tsx +8 -0
  99. package/corpus/templates/analytics/app/i18n/index.ts +2 -0
  100. package/corpus/templates/analytics/app/i18n/zh-TW.ts +818 -0
  101. package/corpus/templates/analytics/app/i18n-data.ts +9 -0
  102. package/corpus/templates/assets/app/i18n/index.ts +2 -0
  103. package/corpus/templates/assets/app/i18n/zh-TW.ts +860 -0
  104. package/corpus/templates/assets/app/i18n-data.ts +3 -0
  105. package/corpus/templates/brain/app/i18n/index.ts +2 -0
  106. package/corpus/templates/brain/app/i18n/zh-TW.ts +709 -0
  107. package/corpus/templates/brain/app/i18n-data.ts +3 -0
  108. package/corpus/templates/calendar/app/i18n/zh-TW.ts +836 -0
  109. package/corpus/templates/calendar/app/i18n-data.ts +4 -0
  110. package/corpus/templates/chat/app/i18n/index.ts +2 -0
  111. package/corpus/templates/chat/app/i18n/zh-TW.ts +67 -0
  112. package/corpus/templates/chat/app/i18n-data.ts +3 -0
  113. package/corpus/templates/clips/app/i18n/index.ts +2 -0
  114. package/corpus/templates/clips/app/i18n/zh-TW.ts +1280 -0
  115. package/corpus/templates/content/app/i18n/index.ts +2 -0
  116. package/corpus/templates/content/app/i18n/zh-TW.ts +906 -0
  117. package/corpus/templates/content/app/i18n-data.ts +4 -0
  118. package/corpus/templates/design/app/i18n/index.ts +2 -0
  119. package/corpus/templates/design/app/i18n/zh-TW.ts +517 -0
  120. package/corpus/templates/design/app/i18n-data.ts +6 -0
  121. package/corpus/templates/dispatch/app/i18n/index.ts +2 -0
  122. package/corpus/templates/dispatch/app/i18n/zh-TW.ts +195 -0
  123. package/corpus/templates/dispatch/app/i18n-data.ts +3 -0
  124. package/corpus/templates/forms/app/i18n/index.ts +2 -0
  125. package/corpus/templates/forms/app/i18n/zh-TW.ts +349 -0
  126. package/corpus/templates/macros/app/i18n/index.ts +2 -0
  127. package/corpus/templates/macros/app/i18n/zh-TW.ts +224 -0
  128. package/corpus/templates/mail/app/i18n/index.ts +2 -0
  129. package/corpus/templates/mail/app/i18n/zh-TW.ts +562 -0
  130. package/corpus/templates/mail/app/root.tsx +6 -0
  131. package/corpus/templates/plan/app/i18n/index.ts +2 -0
  132. package/corpus/templates/plan/app/i18n/zh-TW.ts +712 -0
  133. package/corpus/templates/slides/app/i18n/index.ts +2 -0
  134. package/corpus/templates/slides/app/i18n/zh-TW.ts +531 -0
  135. package/corpus/templates/videos/app/i18n/index.ts +2 -0
  136. package/corpus/templates/videos/app/i18n/zh-TW.ts +435 -0
  137. package/dist/client/ErrorBoundary.d.ts.map +1 -1
  138. package/dist/client/ErrorBoundary.js +10 -0
  139. package/dist/client/ErrorBoundary.js.map +1 -1
  140. package/dist/client/FeedbackButton.d.ts.map +1 -1
  141. package/dist/client/FeedbackButton.js +12 -0
  142. package/dist/client/FeedbackButton.js.map +1 -1
  143. package/dist/client/blocks/library/block-copy.d.ts.map +1 -1
  144. package/dist/client/blocks/library/block-copy.js +32 -0
  145. package/dist/client/blocks/library/block-copy.js.map +1 -1
  146. package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
  147. package/dist/client/extensions/ExtensionsSidebarSection.js +32 -0
  148. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  149. package/dist/client/i18n.d.ts.map +1 -1
  150. package/dist/client/i18n.js +5 -0
  151. package/dist/client/i18n.js.map +1 -1
  152. package/dist/collab/awareness.d.ts +2 -2
  153. package/dist/collab/awareness.d.ts.map +1 -1
  154. package/dist/collab/routes.d.ts +1 -1
  155. package/dist/localization/actions/set-localization-preference.d.ts.map +1 -1
  156. package/dist/localization/actions/set-localization-preference.js +2 -2
  157. package/dist/localization/actions/set-localization-preference.js.map +1 -1
  158. package/dist/localization/shared.d.ts +1 -1
  159. package/dist/localization/shared.d.ts.map +1 -1
  160. package/dist/localization/shared.js +43 -0
  161. package/dist/localization/shared.js.map +1 -1
  162. package/dist/notifications/routes.d.ts +3 -3
  163. package/dist/observability/routes.d.ts +3 -3
  164. package/dist/resources/handlers.d.ts +2 -2
  165. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  166. package/dist/server/agent-chat-plugin.js +39 -0
  167. package/dist/server/agent-chat-plugin.js.map +1 -1
  168. package/dist/server/agent-engine-api-key-route.d.ts +2 -2
  169. package/dist/server/onboarding-html.d.ts.map +1 -1
  170. package/dist/server/onboarding-html.js +96 -0
  171. package/dist/server/onboarding-html.js.map +1 -1
  172. package/dist/templates/default/app/i18n/index.ts +2 -0
  173. package/dist/templates/default/app/i18n/zh-TW.ts +466 -0
  174. package/dist/templates/default/app/root.tsx +8 -0
  175. package/docs/content/locales/zh-TW/a2a-protocol.md +392 -0
  176. package/docs/content/locales/zh-TW/actions.md +583 -0
  177. package/docs/content/locales/zh-TW/agent-mentions.md +164 -0
  178. package/docs/content/locales/zh-TW/agent-surfaces.md +397 -0
  179. package/docs/content/locales/zh-TW/agent-teams.md +171 -0
  180. package/docs/content/locales/zh-TW/agent-web-surfaces.md +161 -0
  181. package/docs/content/locales/zh-TW/audit-log.md +111 -0
  182. package/docs/content/locales/zh-TW/authentication.md +332 -0
  183. package/docs/content/locales/zh-TW/automations.md +268 -0
  184. package/docs/content/locales/zh-TW/blueprint-installer.md +83 -0
  185. package/docs/content/locales/zh-TW/cli-adapters.md +129 -0
  186. package/docs/content/locales/zh-TW/client.md +398 -0
  187. package/docs/content/locales/zh-TW/cloneable-saas.md +114 -0
  188. package/docs/content/locales/zh-TW/code-agents-ui.md +436 -0
  189. package/docs/content/locales/zh-TW/components.md +368 -0
  190. package/docs/content/locales/zh-TW/context-awareness.md +373 -0
  191. package/docs/content/locales/zh-TW/creating-templates.md +411 -0
  192. package/docs/content/locales/zh-TW/cross-app-sso.md +188 -0
  193. package/docs/content/locales/zh-TW/database.md +183 -0
  194. package/docs/content/locales/zh-TW/deployment.md +348 -0
  195. package/docs/content/locales/zh-TW/dispatch.md +146 -0
  196. package/docs/content/locales/zh-TW/drop-in-agent.md +260 -0
  197. package/docs/content/locales/zh-TW/durable-resume.md +65 -0
  198. package/docs/content/locales/zh-TW/embedding-sdk.md +597 -0
  199. package/docs/content/locales/zh-TW/evals.md +155 -0
  200. package/docs/content/locales/zh-TW/extensions.md +360 -0
  201. package/docs/content/locales/zh-TW/external-agents.md +619 -0
  202. package/docs/content/locales/zh-TW/faq.md +142 -0
  203. package/docs/content/locales/zh-TW/file-uploads.md +122 -0
  204. package/docs/content/locales/zh-TW/frames.md +153 -0
  205. package/docs/content/locales/zh-TW/getting-started.md +199 -0
  206. package/docs/content/locales/zh-TW/harness-agents.md +349 -0
  207. package/docs/content/locales/zh-TW/human-approval.md +86 -0
  208. package/docs/content/locales/zh-TW/internationalization.md +147 -0
  209. package/docs/content/locales/zh-TW/key-concepts.md +312 -0
  210. package/docs/content/locales/zh-TW/local-file-mode.md +433 -0
  211. package/docs/content/locales/zh-TW/mcp-apps.md +147 -0
  212. package/docs/content/locales/zh-TW/mcp-clients.md +330 -0
  213. package/docs/content/locales/zh-TW/mcp-protocol.md +279 -0
  214. package/docs/content/locales/zh-TW/messaging.md +461 -0
  215. package/docs/content/locales/zh-TW/migration-workbench.md +33 -0
  216. package/docs/content/locales/zh-TW/multi-app-workspace.md +312 -0
  217. package/docs/content/locales/zh-TW/multi-tenancy.md +52 -0
  218. package/docs/content/locales/zh-TW/native-chat-ui.md +321 -0
  219. package/docs/content/locales/zh-TW/notifications.md +231 -0
  220. package/docs/content/locales/zh-TW/observability.md +294 -0
  221. package/docs/content/locales/zh-TW/observational-memory.md +77 -0
  222. package/docs/content/locales/zh-TW/onboarding.md +216 -0
  223. package/docs/content/locales/zh-TW/plan-plugin.md +200 -0
  224. package/docs/content/locales/zh-TW/pr-visual-recap.md +384 -0
  225. package/docs/content/locales/zh-TW/processors.md +106 -0
  226. package/docs/content/locales/zh-TW/progress.md +199 -0
  227. package/docs/content/locales/zh-TW/pure-agent-apps.md +39 -0
  228. package/docs/content/locales/zh-TW/real-time-collaboration.md +680 -0
  229. package/docs/content/locales/zh-TW/recurring-jobs.md +142 -0
  230. package/docs/content/locales/zh-TW/routing.md +79 -0
  231. package/docs/content/locales/zh-TW/sandbox-adapters.md +227 -0
  232. package/docs/content/locales/zh-TW/security.md +330 -0
  233. package/docs/content/locales/zh-TW/server.md +265 -0
  234. package/docs/content/locales/zh-TW/sharing.md +219 -0
  235. package/docs/content/locales/zh-TW/skills-guide.md +281 -0
  236. package/docs/content/locales/zh-TW/template-analytics.md +259 -0
  237. package/docs/content/locales/zh-TW/template-assets.md +303 -0
  238. package/docs/content/locales/zh-TW/template-brain.md +324 -0
  239. package/docs/content/locales/zh-TW/template-calendar.md +194 -0
  240. package/docs/content/locales/zh-TW/template-chat.md +129 -0
  241. package/docs/content/locales/zh-TW/template-clips.md +368 -0
  242. package/docs/content/locales/zh-TW/template-content.md +402 -0
  243. package/docs/content/locales/zh-TW/template-design.md +173 -0
  244. package/docs/content/locales/zh-TW/template-dispatch.md +220 -0
  245. package/docs/content/locales/zh-TW/template-forms.md +178 -0
  246. package/docs/content/locales/zh-TW/template-mail.md +239 -0
  247. package/docs/content/locales/zh-TW/template-plan.md +814 -0
  248. package/docs/content/locales/zh-TW/template-slides.md +293 -0
  249. package/docs/content/locales/zh-TW/template-videos.md +222 -0
  250. package/docs/content/locales/zh-TW/tracking.md +236 -0
  251. package/docs/content/locales/zh-TW/using-your-agent.md +71 -0
  252. package/docs/content/locales/zh-TW/voice-input.md +81 -0
  253. package/docs/content/locales/zh-TW/what-is-agent-native.md +202 -0
  254. package/docs/content/locales/zh-TW/workspace-connections.md +321 -0
  255. package/docs/content/locales/zh-TW/workspace-management.md +175 -0
  256. package/docs/content/locales/zh-TW/workspace.md +323 -0
  257. package/docs/content/locales/zh-TW/writing-agent-instructions.md +173 -0
  258. package/package.json +1 -1
  259. package/src/templates/default/app/i18n/index.ts +2 -0
  260. package/src/templates/default/app/i18n/zh-TW.ts +466 -0
  261. package/src/templates/default/app/root.tsx +8 -0
@@ -0,0 +1,142 @@
1
+ ---
2
+ title: "重複性工作"
3
+ description: "Cron 調度提示代理自行執行 - 每日摘要、每週報告、每小時輪詢。"
4
+ ---
5
+
6
+ # 重複性工作
7
+
8
+ **重複作業**是按 cron 計畫執行的提示。這就是代理自己做事的方式:“每天早上 7 點總結我隔夜收到的電子郵件”,“每週一將上週的註冊號碼發布到 Slack”,“每小時清理陳舊的草稿並將其刪除。”
9
+
10
+ 重複性工作按時進行。要對*事件*(建立的預訂、收到的電子郵件)做出反應 - 相同的 `jobs/` 檔案格式加上條件 - 請參閱 [Automations](/docs/automations)。
11
+
12
+ 作業位於 `jobs/<name>.md` 的 [workspace](/docs/workspace) 中 — 只是一個帶有 YAML frontmatter 的 Markdown 檔案。無需註冊,無需接線。將檔案放入,框架就會拾取它。
13
+
14
+ ## 作業檔案 {#job-file}
15
+
16
+ ```an-annotated-code title="jobs/morning-digest.md"
17
+ {
18
+ "filename": "jobs/morning-digest.md",
19
+ "language": "markdown",
20
+ "code": "---\nschedule: \"0 7 * * *\"\nenabled: true\nrunAs: creator\n---\n\n# 早間摘要\n\n總結隔夜收到的電子郵件。按發件人域分組。\n將今天看起來需要回複的前 3 個線程固定到\n\"Needs reply\" 標籤。對任何顯而易見的問題草擬答複。",
21
+ "annotations": [
22
+ { "lines": "2", "label": "當", "note": "標準 5 欄位 cron — `0 7 * * *` 是每天 07:00。" },
23
+ { "lines": "3", "label": "暫停開關", "note": "Flip to `false` to stop the job without deleting it." },
24
+ { "lines": "4", "label": "身分", "note": "`creator` runs with the owner's identity and `ANTHROPIC_API_KEY`; `shared` uses the org's key." },
25
+ { "lines": "7-12", "label": "提示", "note": "主體只是一個提示 - 代理在每次觸發時使用其所有常規工具和工作區上下文執行它。" }
26
+ ]
27
+ }
28
+ ```
29
+
30
+ 就是這樣。內文是代理在每次計畫觸發時執行的提示。代理可以存取其在互動式聊天中擁有的所有相同工具和工作區上下文 - actions、skills、內存、連線的 MCP 伺服器、子代理。
31
+
32
+ ## 前線 {#frontmatter}
33
+
34
+ | 欄位 | 型別 | 預設 | 描述 |
35
+ | ------------ | ----------------------------- | ----------- | --------------------------------------------------------------------------------------- |
36
+ | `schedule` | cron 表達式 | _(必填)_ | 標準 5 欄位 cron。 `"0 7 * * *"` = 每天 07:00; `"0 */4 * * *"` = 每 4 小時一次。 |
37
+ | `enabled` | 布爾值 | `true` | 翻轉到 `false` 以暫停而不刪除作業。 |
38
+ | `runAs` | `"creator"` \| `"shared"` | `"creator"` | `"creator"` 以作業所有者的身分和 `ANTHROPIC_API_KEY` 執行。 `"shared"` 使用組織的金鑰。 |
39
+ | `createdBy` | 電子郵件 | _(自動)_ | 當通過工作區 UI 或代理建立作業時填充。 |
40
+ | `orgId` | 字串 | _(自動)_ | 組織範圍;從建立者的活動組織繼承。 |
41
+ | `lastRun` | ISO時間戳 | _(託管)_ | 由調度程序在每次執行後寫入。 |
42
+ | `lastStatus` | `"success"` \| `"error"` \| … | _(託管)_ | 最新結果。 |
43
+ | `lastError` | 字串 | _(託管)_ | 如果上次執行失敗,則會出現錯誤訊息。 |
44
+ | `nextRun` | ISO時間戳 | _(託管)_ | 由`schedule`計算得出;由調度程序用來決定下次何時觸發。 |
45
+
46
+ `last*` 和 `nextRun` 欄位由調度程序寫入。您可以閱讀它們以檢視歷史紀錄,但不要手動編輯它們 - 下次執行將覆蓋它們。
47
+
48
+ ## cron 語法 {#cron}
49
+
50
+ 標準 5 欄位 cron(分鐘、小時、月份、月份、星期幾):
51
+
52
+ | 定時工作 | 含義 |
53
+ | -------------- | -------------- |
54
+ | `*/5 * * * *` | 每 5 分鐘 |
55
+ | `0 * * * *` | 每小時整點 |
56
+ | `0 */4 * * *` | 每 4 小時一次 |
57
+ | `0 7 * * *` | 每天 07:00 |
58
+ | `0 9 * * 1` | 每週一 09:00 |
59
+ | `0 17 * * 1-5` | 工作日 17:00 |
60
+ | `0 0 1 * *` | 每個月的第一天 |
61
+
62
+ 該框架包括用於驗證和呈現 cron 字串的 cron 實用程序(`isValidCron()` 和 `describeCron()`),由資源層和調度程序層在內部使用。
63
+
64
+ ## 建立作業 {#creating}
65
+
66
+ ### 從“工作區”分頁
67
+
68
+ `+` → **工作區面板中的計畫工作**。填寫提示和時間表。另存為 `jobs/<slug>.md` 並在下一個匹配的刻度處開始執行。
69
+
70
+ ### 通過詢問代理
71
+
72
+ > “建立一個計畫工作,每天早上 7 點總結我未讀的電子郵件。”
73
+
74
+ 代理會為您寫入檔案。
75
+
76
+ ### 手動
77
+
78
+ 通過框架的資源APIs將Markdown檔案拖放到`jobs/`中:
79
+
80
+ ```ts
81
+ import { resourcePut } from "@agent-native/core/resources";
82
+
83
+ await resourcePut(
84
+ ownerEmail,
85
+ "jobs/morning-digest.md",
86
+ `---
87
+ schedule: "0 7 * * *"
88
+ enabled: true
89
+ ---
90
+ Summarize overnight emails.`,
91
+ );
92
+ ```
93
+
94
+ ## 調度程序如何執行 {#how-scheduler-runs}
95
+
96
+ 調度程序是一個在進程中執行的框架外掛(內部 `processRecurringJobs()` 例程):無論伺服器在何處執行,代理聊天外掛內的 `setInterval` 每 60 秒觸發一次(有 10 秒的啟動延遲)。
97
+
98
+ ```an-diagram title="一個調度程序勾選" summary="每 60 秒,調度程序就會找到到期的作業,將每個作業作為新的代理線程執行,並將結果寫回作業檔案。"
99
+ {
100
+ "html": "<div class=\"sched\"><div class=\"diagram-box accent\"><code>setInterval</code> &bull; 60s &#8635;</div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&darr;</div><div class=\"diagram-card\"><span class=\"diagram-pill\">1 &middot; scan</span><small class=\"diagram-muted\">list every enabled <code>jobs/*.md</code> across all owners</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&darr;</div><div class=\"diagram-card\"><span class=\"diagram-pill\">2 &middot; due?</span><small class=\"diagram-muted\">compare <code>nextRun</code> to now</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&darr;</div><div class=\"diagram-card accent\"><span class=\"diagram-pill accent\">3 &middot; run</span><small class=\"diagram-muted\">fresh agent thread, job body as the user message &mdash; actions, SQL, A2A, email</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">&darr;</div><div class=\"diagram-card ok\"><span class=\"diagram-pill ok\">4 &middot; record</span><small class=\"diagram-muted\">write <code>lastRun</code> / <code>lastStatus</code> / <code>lastError</code>, recompute <code>nextRun</code></small></div></div>",
101
+ "css": ".sched{display:flex;flex-direction:column;gap:6px;max-width:520px}.sched .diagram-card{display:flex;flex-direction:column;gap:2px;padding:10px 14px}.sched .diagram-box{align-self:flex-start}.sched .diagram-arrow{font-size:18px;align-self:center}"
102
+ }
103
+ ```
104
+
105
+ ```an-callout
106
+ { "tone": "risk", "body": "**Scale-to-zero caveat.** The scheduler is in-process, so on serverless hosts jobs only fire while an instance is warm. If reliable scheduling matters, keep an instance warm with keep-alive pings or use an always-on host (Fly, Render, a VPS)." }
107
+ ```
108
+
109
+ ## 偵錯作業 {#debugging}
110
+
111
+ - 在工作區中開啟 `jobs/<name>.md` — frontmatter 顯示 `lastRun`、`lastStatus`、`lastError`、`nextRun`。
112
+ - **無需等待即可測試:**沒有強制發射工具。要按需執行相同的工作,可以將作業的提示貼上到代理聊天中並讓它在那裡執行,或者暫時將計畫設定為下一分鐘,以便調度程序在下一個時間點上選取它(然後恢復真正的 cron)。
113
+ - **暫停:**翻轉`enabled: false`。檔案保持不變,只是停止執行。
114
+
115
+ ## 代理工具 {#agent-tool}
116
+
117
+ 每個範本中都會註冊一個 `manage-jobs` 工具。 `action`參數選取操作:
118
+
119
+ | 行動 | 參數 | 目的 |
120
+ | -------- | --------------------------------------------------------------- | ------------------------------------------------- |
121
+ | `create` | `name`、`schedule`、`instructions`(必填); `scope`、`runAs` | 建立新的定期作業 |
122
+ | `list` | `scope`(`personal`、`shared` 或全部) | 列出所有作業的狀態(計畫、已啟用、上次/下次執行) |
123
+ | `update` | `name`(必填); `schedule`、`instructions`、`enabled`、`runAs` | 編輯現有作業 |
124
+ | `delete` | `name`(必填) | 刪除作業 - 始終先與使用者確認 |
125
+
126
+ **個人與共用範圍。**每個作業都位於個人範圍(作為建立者執行且僅對建立者可見)或共用/組織範圍(代表建立者執行但對組織成員可見)。 `scope` 和 `runAs` 參數在建立時對此進行控制。組織管理員可以更新或刪除任何共用作業;非管理員成員只能管理自己的成員。
127
+
128
+ ## 與調度包不同 {#vs-scheduling-package}
129
+
130
+ 不要將重複性作業與 `@agent-native/scheduling` 混淆:
131
+
132
+ - **重複作業(本頁面)** — cron 計畫*提示*代理在後台執行。框架級別。住在工作區。在任何代理本機應用程式上執行。
133
+ - **`@agent-native/scheduling`** — 用於建置行事曆/預訂功能(事件型別、可用窗口、預訂)的可重用域包。為 `calendar` 範本和自訂調度介面提供支持。
134
+
135
+ 重複性工作是“如何讓代理自行行動?”日程安排包是“如何建置行事曆應用程式?”不同的關注點。
136
+
137
+ ## 下一步是什么
138
+
139
+ - [**Automations**](/docs/automations) — 將事件觸發器和條件新增到相同的 `jobs/` 格式
140
+ - [**Workspace**](/docs/workspace) — 作業與 skills、內存和自訂代理一起存在
141
+ - [**Actions**](/docs/actions) — 工作調用的工具
142
+ - [**Agent Teams**](/docs/agent-teams) - 作業通常會產生子代理來執行並行工作
@@ -0,0 +1,79 @@
1
+ ---
2
+ title: "路由"
3
+ description: "使用 React Router v8 為代理本機應用程式提供基於檔案的路由 - 頁面、動態參數和導覽。"
4
+ ---
5
+
6
+ # 路由
7
+
8
+ 代理本機應用程式使用 **React Router v8** 以及通過來自 `@react-router/fs-routes` 的 `flatRoutes()` 的基於檔案的路由。 `app/routes/` 中的每個檔案都會變成 URL。範本使用點符號約定 - 點在單個檔案名內分隔 URL 段。
9
+
10
+ ## 基於檔案的路由 {#file-based-routing}
11
+
12
+ ### 檔案→URL對應
13
+
14
+ | 檔案 | URL | 注釋 |
15
+ | --------------------- | ------------------ | ----------------------------- |
16
+ | `_index.tsx` | `/` | 索引路線 |
17
+ | `settings.tsx` | `/settings` | 簡單頁面 |
18
+ | `inbox.$threadId.tsx` | `/inbox/:threadId` | 點 = `/`,`$` = 動態參數 |
19
+ | `_app.tsx` | (無 URL 段) | 無路徑布局 - 前綴為 `_` |
20
+ | `inbox/route.tsx` | `/inbox` | 資料夾形式——`route.tsx`為索引 |
21
+
22
+ 為動態參數新增 `$` 前綴。以 `_` 為前綴,使其成為無路徑布局路線(無 URL 段)。範本使用 `flatRoutes()` — 上面的點符號檔案是主要的;嵌套資料夾形式 `inbox/route.tsx` 也適用。
23
+
24
+ ```an-diagram title="無路徑布局包裹頁面" summary="_app.tsx 布局(無 URL 段)渲染共用 shell 一次;匹配的頁面在其 <Outlet/> 內呈現,因此代理側邊欄永遠不會在導覽時重新安裝。"
25
+ {
26
+ "html": "<div class=\"diagram-layout\" data-rough><div class=\"diagram-shell\"><span class=\"diagram-pill accent\">_app.tsx</span><small class=\"diagram-muted\">無路徑布局 · 持久外殼 + Agent 側邊欄</small><div class=\"diagram-outlet\" data-rough><small class=\"diagram-muted\">&lt;Outlet/&gt; — the matched page</small><div class=\"diagram-row\"><span class=\"diagram-pill\">_index.tsx &rarr; /</span><span class=\"diagram-pill\">settings.tsx &rarr; /settings</span><span class=\"diagram-pill\">inbox.$threadId.tsx &rarr; /inbox/:threadId</span></div></div></div></div>",
27
+ "css": ".diagram-layout .diagram-shell{display:flex;flex-direction:column;gap:8px;padding:16px}.diagram-layout .diagram-outlet{display:flex;flex-direction:column;gap:8px;padding:14px;margin-top:6px}.diagram-layout .diagram-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}"
28
+ }
29
+
30
+ ```
31
+
32
+ ## 新增新頁面 {#adding-a-page}
33
+
34
+ 建立檔案並匯出預設元件:
35
+
36
+ ```tsx
37
+ // app/routes/settings.tsx
38
+ export function meta() {
39
+ return [{ title: "Settings" }];
40
+ }
41
+
42
+ export default function SettingsPage() {
43
+ return <div>Settings</div>;
44
+ }
45
+ ```
46
+
47
+ 就是這樣 - React 路由器會自動選取它,無需註冊。
48
+
49
+ ## 動態參數 {#dynamic-params}
50
+
51
+ ```tsx
52
+ // app/routes/inbox/$threadId.tsx
53
+ import { useParams } from "react-router";
54
+
55
+ export default function ThreadPage() {
56
+ const { threadId } = useParams();
57
+ return <div>Thread: {threadId}</div>;
58
+ }
59
+ ```
60
+
61
+ ## 導覽 {#navigation}
62
+
63
+ 使用 `<Link>` 進行用戶端導覽,使用 `useNavigate()` 進行編程導覽:
64
+
65
+ ```tsx
66
+ import { Link, useNavigate } from "react-router";
67
+
68
+ // In JSX
69
+ <Link to="/settings">Settings</Link>;
70
+
71
+ // Programmatic
72
+ const navigate = useNavigate();
73
+ navigate(`/inbox/${threadId}`);
74
+ ```
75
+
76
+ ## 下一步是什么
77
+
78
+ - [**Client**](/docs/client) - 代理本機瀏覽器掛鉤和實用程序
79
+ - [**Server**](/docs/server) — 基於檔案的伺服器路由和 `/_agent-native/` 命名空間
@@ -0,0 +1,227 @@
1
+ ---
2
+ title: "適配器"
3
+ description: "框架的兩個適配器接縫:沙箱適配器交換執行代理執行程式碼工具的後端,CLI適配器為代理提供對指令行工具的結構化存取。"
4
+ search: "適配器沙箱適配器cli適配器執行程式碼SandboxAdapter CliAdapter ShellCliAdapter持久執行器遠端沙箱邊缘無伺服器child_process"
5
+ ---
6
+
7
+ # 適配器
8
+
9
+ > **這是誰的:**擴充功能執行時的主機作者。應用程式開發人員很少
10
+ > 需要這個——預設值開箱即用。
11
+
12
+ Agent-Native 有兩個適配器接縫,可消除狹窄後面的問題,
13
+ 可交換介面:
14
+
15
+ - **沙盒適配器**交換執行代理的 `run-code` 工具的後端 -
16
+ 預設為本機子進程,或 Docker/遠端/持久執行程序。
17
+ - **CLI 適配器**為代理提供對指令行工具的結構化存取
18
+ (`gh`、`ffmpeg`、`stripe`),具有發現、可用性檢查和
19
+ 一致的結果形狀。
20
+
21
+ 兩者共用一個執行時約束:它們依賴於 Node.js 系統綁定並執行
22
+ 不在邊缘/工作執行時上執行 - 請參閱 [Edge and serverless](#edge-serverless)。
23
+
24
+ ## 我需要哪個編碼檔案? {#which-doc}
25
+
26
+ | 你想要…… | 使用 |
27
+ | -------------------------------------------------------- | -------------------------------------------- |
28
+ | 交換執行代理 **`run-code` 工具**的後端 | **沙盒適配器**(本頁面) |
29
+ | 封裝一個CLI工具(`gh`、`ffmpeg`)供代理調用 | **CLI 適配器**(本頁面) |
30
+ | 渲染 Claude-Code/Codex-style **編碼工作區 UI** | [Agent-Native Code UI](/docs/code-agents-ui) |
31
+ | 使用自己的循環+工具**作為代理**執行Claude程式碼/Codex/Pi | [Harness Agents](/docs/harness-agents) |
32
+
33
+ # 沙盒適配器
34
+
35
+ `run-code` 工具在隔離環境中執行代理提供的 JavaScript。 **沙箱適配器**將 _execution_ 問題從該工具中剔除,以便可以交換後端(預設情況下為本機子進程,或 Docker/遠端/持久執行程序),而無需觸及代理循環、`run-code.ts`、本機主機橋、環境清理或輸出格式。
36
+
37
+ ## 為什么要接縫 {#why}
38
+
39
+ 預設後端會生成一個鎖定的本機 Node 子進程。這受到託管進程的限制:在託管平台上,它共用代理循環的軟執行上限(超時/繼續衝擊之前約 40 秒)。遠端或持久適配器是超越該上限的杠杆 - 它獨立於請求生命週期執行大型資料作業直至完成。
40
+
41
+ 保持契約範圍窄意味著遠端適配器繼承相同的安全狀態。父進程保留所有秘密的所有權:它建置沙箱模塊,執行本機主機橋(它儲存請求上下文並應用主機允許列表+ SSRF 防護),清理環境並格式化輸出。適配器僅接收已準備好的、**非秘密**模塊來源加上資源限制 - 它僅負責*執行*它並捕獲 stdout/stderr/exit 狀態。
42
+
43
+ ```an-diagram title="父母保守秘密;適配器僅執行程式碼" summary="run-code 建置模塊並執行環回橋;適配器接收非秘密模塊+限制並返回stdout/stderr/exit。"
44
+ {
45
+ "html": "<div class=\"diagram-sandbox\"><div class=\"diagram-box\" data-rough><strong>父進程</strong><small class=\"diagram-muted\">建置模塊 · loopback 橋 · 環境清理 · 輸出格式</small></div><div class=\"diagram-col\"><div class=\"diagram-pill accent\">non-secret module + limits &rarr;</div><div class=\"diagram-pill ok\">&larr; stdout / stderr / exitCode</div><div class=\"diagram-pill\">&harr; bridge calls (127.0.0.1)</div></div><div class=\"diagram-panel center\" data-rough><strong>SandboxAdapter.run</strong><small class=\"diagram-muted\">本機子進程 · Docker · 遠端 · 持久</small></div></div>",
46
+ "css": ".diagram-sandbox{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.diagram-sandbox .diagram-col{display:flex;flex-direction:column;gap:8px}.diagram-sandbox .center{display:flex;flex-direction:column;align-items:center;gap:4px}"
47
+ }
48
+ ```
49
+
50
+ ## 介面 {#interface}
51
+
52
+ 接縫位於 `packages/core/src/coding-tools/sandbox/` 的核心 - `adapter.ts`(合約)、`index.ts`(選取:`getSandboxAdapter()` / `registerSandboxAdapter()`)和 `local-child-process-adapter.ts`(預設)。采用`run-code.ts`封裝內接線;主機通過 `index.ts` 註冊助手插入不同的後端(或者,對於 Docker 後端,通過直接編輯這些檔案的 [blueprint](/docs/blueprint-installer))。
53
+
54
+ ```an-file-tree title="core 中的 sandbox 接縫"
55
+ {
56
+ "title": "packages/core/src/coding-tools/sandbox/",
57
+ "entries": [
58
+ { "path": "adapter.ts", "note": "SandboxAdapter 合約(SandboxRunRequest / SandboxRunResult)" },
59
+ { "path": "index.ts", "note": "選取:getSandboxAdapter() / registerSandboxAdapter()" },
60
+ { "path": "local-child-process-adapter.ts", "note": "預設後端:受限的 Node 子進程" },
61
+ { "path": "../run-code.ts", "note": "連線這個接縫;替換 backend 時永遠不變" }
62
+ ]
63
+ }
64
+ ```
65
+
66
+ 每個後端都實現 `SandboxAdapter`:
67
+
68
+ ```ts
69
+ interface SandboxAdapter {
70
+ /** Stable id, surfaced for diagnostics and adapter selection. */
71
+ readonly id: string;
72
+ /** Execute one prepared sandbox module and capture its output. */
73
+ run(request: SandboxRunRequest): Promise<SandboxRunResult>;
74
+ }
75
+ ```
76
+
77
+ 請求和結果故意很小且不透明:
78
+
79
+ ```ts
80
+ interface SandboxRunRequest {
81
+ /**
82
+ * The complete ESM module source to execute. Already wraps the user's code
83
+ * and embeds the loopback bridge URL/token; the adapter does NOT parse or
84
+ * rewrite it.
85
+ */
86
+ moduleSource: string;
87
+ /**
88
+ * Scrubbed environment — only safe POSIX vars (PATH/HOME/TMPDIR/…), never app
89
+ * secrets. Adapters must not augment this with the parent's own environment.
90
+ */
91
+ env: Record<string, string>;
92
+ /** Hard wall-clock timeout in milliseconds. The adapter must enforce it. */
93
+ timeoutMs: number;
94
+ /**
95
+ * Loopback port of the parent's bridge server (reachable over 127.0.0.1). A
96
+ * remote adapter that can't reach the parent's loopback must tunnel or proxy
97
+ * this to support bridge-backed globals (`appAction`, `providerFetch`, …).
98
+ */
99
+ bridgePort: number;
100
+ }
101
+
102
+ interface SandboxRunResult {
103
+ stdout: string;
104
+ stderr: string;
105
+ /** `0` on clean exit, non-zero on failure, `null` when killed by a signal. */
106
+ exitCode: number | null;
107
+ /** True when the run was killed for exceeding `timeoutMs`. */
108
+ timedOut: boolean;
109
+ }
110
+ ```
111
+
112
+ ## 預設:`LocalChildProcessAdapter` {#default}
113
+
114
+ 開箱即用,`getSandboxAdapter()` 返回 `LocalChildProcessAdapter` (`id: "local-child-process"`)。它逐字節保留歷史 `run-code` 行為:
115
+
116
+ - 準備好的模塊來源被寫入新的臨時目錄。
117
+ - 子進程使用清理後的環境(沒有秘密)執行,`TMPDIR`/`TEMP`/`TMP` 指向沙箱目錄內。
118
+ - 當節點權限模型可用(節點 20 上的 `--permission` 或 `--experimental-permission`)時,子進程將被拒絕存取其臨時目錄之外的檔案系統,以及子進程、工作進程和本機外掛。出站網路不會被權限模型阻止,但環境清理意味著此類請求不攜帶憑證,並且所有經過驗證的調用都會通過父級的環回橋。
119
+ - 超時發送 `SIGTERM`,然後在 2 秒寬限期後發送 `SIGKILL`。
120
+ - 執行後會盡力清理臨時檔案。
121
+
122
+ > [!WARNING]
123
+ > 預設適配器使用 `node:child_process`,該適配器在邊缘/工作執行時上不存在。在標準 Node.js 環境中執行 `run-code`,或註冊遠端適配器 - 請參閱 [Edge and serverless](#edge-serverless)。
124
+
125
+ ## 選取適配器 {#selection}
126
+
127
+ 解決順序——顯式註冊的適配器獲勝;否則環境變數選取內置的;否則使用本機預設值:
128
+
129
+ ```text
130
+ registerSandboxAdapter(adapter) → AGENT_NATIVE_SANDBOX → local default
131
+ ```
132
+
133
+ ### `AGENT_NATIVE_SANDBOX` 環境變數 {#env}
134
+
135
+ 通過 id 選取內置適配器。目前僅有線`local`(預設);未知值回退到本機而不是執行失敗。
136
+
137
+ ```bash
138
+ AGENT_NATIVE_SANDBOX=local # 預設值——顯式
139
+ ```
140
+
141
+ ### `registerSandboxAdapter()` {#register}
142
+
143
+ 主機進程通過接縫的 `index.ts` 覆蓋所有後續 `run-code` 調用的後端 - 例如,執行遠端容器中的每個調用:
144
+
145
+ ```ts
146
+ import {
147
+ registerSandboxAdapter,
148
+ type SandboxAdapter,
149
+ } from "./coding-tools/sandbox/index.js";
150
+
151
+ class RemoteSandboxAdapter implements SandboxAdapter {
152
+ readonly id = "remote";
153
+ async run(request) {
154
+ // Ship request.moduleSource to the durable runner, enforce request.timeoutMs,
155
+ // proxy bridge calls back to request.bridgePort, and return stdout/stderr/exitCode.
156
+ }
157
+ }
158
+
159
+ registerSandboxAdapter(new RemoteSandboxAdapter());
160
+ // Pass `null` to clear the override and fall back to env-var / default resolution.
161
+ ```
162
+
163
+ ## 耐用跑鞋的接縫 {#durable}
164
+
165
+ 這個介面是特意為未來的遠端/持久沙箱做的接縫。遠端或持久適配器(Docker、Vercel-Sandbox 式執行程序或排隊後台工作程序)將:
166
+
167
+ 1. 針對進程外執行時實現 `SandboxAdapter.run`。
168
+ 2. 通過隧道環回網橋(或代理網橋回調至父級)。
169
+ 3. 讓大資料作業獨立於請求生命週期執行直至完成 - 超過限制本機子進程適配器的託管約 40 秒程式碼執行上限。
170
+
171
+ 將其註冊為新的 `AGENT_NATIVE_SANDBOX` 值(例如 `remote`)和/或通過 `registerSandboxAdapter()`。代理循環和 `run-code.ts` 永遠不會改變。
172
+
173
+ > [!TIP]
174
+ > `agent-native add sandbox docker` 藍圖發出了一個完整的、獨立的配方,用於針對此接縫實現 Docker 適配器。參見[Blueprint Installer](/docs/blueprint-installer)。
175
+
176
+ # CLI 適配器
177
+
178
+ 另一個適配器接縫包裝單個指令行工具(`gh`、`ffmpeg`、`stripe`、`aws`),以便代理可以發現它,檢查它是否已安裝,並以一致的 stdout/stderr/exit-code 結果執行它。每個 CLI 適配器都實現 `CliAdapter`:
179
+
180
+ ```ts
181
+ import type { CliAdapter, CliResult } from "@agent-native/core/adapters/cli";
182
+
183
+ interface CliAdapter {
184
+ name: string; // "gh", "stripe", "ffmpeg"
185
+ description: string; // What the agent sees during discovery
186
+ isAvailable(): Promise<boolean>;
187
+ execute(args: string[]): Promise<CliResult>;
188
+ }
189
+
190
+ interface CliResult {
191
+ stdout: string;
192
+ stderr: string;
193
+ exitCode: number;
194
+ }
195
+ ```
196
+
197
+ 對於大多數 CLI,`ShellCliAdapter` 使用合理的預設值包裝任何二進制檔案,而 `CliRegistry` 收集適配器以進行執行時發現:
198
+
199
+ ```ts
200
+ import { CliRegistry, ShellCliAdapter } from "@agent-native/core/adapters/cli";
201
+
202
+ const cliRegistry = new CliRegistry();
203
+ cliRegistry.register(
204
+ new ShellCliAdapter({
205
+ command: "gh",
206
+ description: "GitHub CLI — manage repos, PRs, issues, and releases",
207
+ }),
208
+ );
209
+
210
+ await cliRegistry.describe(); // [{ name, description, available }] for discovery
211
+ const gh = cliRegistry.get("gh");
212
+ const result = await gh?.execute(["pr", "list", "--json", "title,url"]);
213
+ ```
214
+
215
+ 將 CLI 調用包裝在 `defineAction` 中以將其公開在操作介面上。請參閱 [CLI Adapters](/docs/cli-adapters) 快速參考,了解 `ShellCliAdapter` 選項、自訂適配器和操作包裝模式。
216
+
217
+ ## 邊缘和無伺服器 {#edge-serverless}
218
+
219
+ > [!WARNING]
220
+ > 兩個適配器接縫均依賴於 Node.js 系統綁定。沙箱 `LocalChildProcessAdapter` 和 CLI 適配器(`ShellCliAdapter` 和自訂適配器)使用 `node:child_process` (`execFile` / `spawn`),這在 Cloudflare Workers 或 Netlify Edge Functions 等邊缘/工作線程執行時上**不存在**。如果將伺服器路由部署到這些邊缘預設,則執行這些適配器會引發執行時異常。在標準 Node.js 環境(傳統伺服器容器或無伺服器節點功能)中執行適配器端點和工作 - 或者,對於沙箱接縫,註冊一個在進程外傳送工作的遠端適配器。
221
+
222
+ ## 下一步是什么
223
+
224
+ - [**CLI Adapters**](/docs/cli-adapters) — CLI 接縫的快速參考
225
+ - [**Blueprint Installer**](/docs/blueprint-installer) - `agent-native add sandbox docker` 列印 Docker 適配器配方
226
+ - [**Agent Teams**](/docs/agent-teams) — 將繁重的工作委派給子代理
227
+ - [**Security**](/docs/security) — env 清理和橋允許名單姿勢