@armadra/agent 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. package/CHANGELOG.md +52 -32
  2. package/CHANGELOG.zh-CN.md +69 -49
  3. package/README.md +162 -204
  4. package/README.zh-CN.md +150 -199
  5. package/dist/acp.d.ts +1 -1
  6. package/dist/acp.js +1 -1
  7. package/dist/agent/limits.d.ts +1 -1
  8. package/dist/agent/limits.js +1 -1
  9. package/dist/agent/loop-guard.d.ts +1 -1
  10. package/dist/agent/loop-guard.js +1 -1
  11. package/dist/agent/prompt-rules.d.ts +1 -1
  12. package/dist/agent/prompt-rules.js +1 -1
  13. package/dist/agent/reminders.d.ts +1 -1
  14. package/dist/agent/reminders.js +1 -1
  15. package/dist/agent/session-cache-key.d.ts +1 -1
  16. package/dist/agent/session-cache-key.js +1 -1
  17. package/dist/agent/session-extensions.d.ts +1 -1
  18. package/dist/agent/session-extensions.js +1 -1
  19. package/dist/agent/session-images.d.ts +1 -1
  20. package/dist/agent/session-images.js +1 -1
  21. package/dist/agent/session-plan.d.ts +1 -1
  22. package/dist/agent/session-plan.js +1 -1
  23. package/dist/agent/session-rewind.d.ts +1 -1
  24. package/dist/agent/session-rewind.js +1 -1
  25. package/dist/agent/session-settings.d.ts +1 -1
  26. package/dist/agent/session-settings.js +1 -1
  27. package/dist/agent/session-subagent.d.ts +1 -1
  28. package/dist/agent/session-subagent.js +1 -1
  29. package/dist/agent/session-telemetry.d.ts +1 -1
  30. package/dist/agent/session-telemetry.js +1 -1
  31. package/dist/agent/session-trace-writer.d.ts +1 -1
  32. package/dist/agent/session-trace-writer.js +1 -1
  33. package/dist/agent/session.js +1 -1
  34. package/dist/agent/subagent-background.d.ts +1 -1
  35. package/dist/agent/subagent-background.js +1 -1
  36. package/dist/agent/subagent-direct.d.ts +1 -1
  37. package/dist/agent/subagent-direct.js +1 -1
  38. package/dist/agent/subagent-fork.d.ts +1 -1
  39. package/dist/agent/subagent-fork.js +1 -1
  40. package/dist/agent/subagent-registry.d.ts +1 -1
  41. package/dist/agent/subagent-registry.js +1 -1
  42. package/dist/agent/system-prompt.js +1 -1
  43. package/dist/agent/tool-availability.d.ts +1 -1
  44. package/dist/agent/tool-availability.js +1 -1
  45. package/dist/agent/types-w5.d.ts +2 -2
  46. package/dist/agent/types-w5.js +1 -1
  47. package/dist/agent/types-w6.d.ts +1 -1
  48. package/dist/agent/types-w6.js +1 -1
  49. package/dist/agent/types.d.ts +1 -1
  50. package/dist/agent/worktree.d.ts +1 -1
  51. package/dist/agent/worktree.js +1 -1
  52. package/dist/agents/builtin.d.ts +1 -1
  53. package/dist/agents/builtin.js +1 -1
  54. package/dist/agents/catalog.d.ts +1 -1
  55. package/dist/agents/catalog.js +1 -1
  56. package/dist/agents/discover.d.ts +1 -1
  57. package/dist/agents/discover.js +1 -1
  58. package/dist/agents/external.d.ts +1 -1
  59. package/dist/agents/external.js +1 -1
  60. package/dist/agents/parse.d.ts +1 -1
  61. package/dist/agents/parse.js +1 -1
  62. package/dist/agents/result.d.ts +1 -1
  63. package/dist/agents/result.js +2 -2
  64. package/dist/agents/task-record.d.ts +3 -3
  65. package/dist/agents/task-record.js +2 -2
  66. package/dist/agents/types.d.ts +1 -1
  67. package/dist/agents/types.js +1 -1
  68. package/dist/ai/apis/anthropic-compat.d.ts +2 -2
  69. package/dist/ai/apis/anthropic-compat.js +2 -2
  70. package/dist/ai/apis/cache-params.d.ts +1 -1
  71. package/dist/ai/apis/cache-params.js +1 -1
  72. package/dist/ai/apis/chatgpt-backend.d.ts +1 -1
  73. package/dist/ai/apis/chatgpt-backend.js +1 -1
  74. package/dist/ai/apis/chatgpt-rate-limits.d.ts +1 -1
  75. package/dist/ai/apis/chatgpt-rate-limits.js +1 -1
  76. package/dist/ai/apis/max-tokens.d.ts +1 -1
  77. package/dist/ai/apis/max-tokens.js +1 -1
  78. package/dist/ai/apis/shared.d.ts +1 -1
  79. package/dist/ai/apis/shared.js +1 -1
  80. package/dist/ai/image-intern.d.ts +2 -2
  81. package/dist/ai/image-intern.js +1 -1
  82. package/dist/ai/image-limits.d.ts +1 -1
  83. package/dist/ai/image-limits.js +1 -1
  84. package/dist/ai/json-body.d.ts +1 -1
  85. package/dist/ai/json-body.js +1 -1
  86. package/dist/ai/providers/builtin.d.ts +2 -2
  87. package/dist/ai/providers/builtin.js +4 -4
  88. package/dist/ai/providers/catalog-data.js +2 -2
  89. package/dist/ai/providers/catalog.d.ts +2 -2
  90. package/dist/ai/providers/catalog.js +1 -1
  91. package/dist/ai/providers/channels.d.ts +1 -1
  92. package/dist/ai/providers/channels.js +1 -1
  93. package/dist/ai/providers/enrich.d.ts +1 -1
  94. package/dist/ai/providers/enrich.js +1 -1
  95. package/dist/ai/providers/models-dev-cache.d.ts +1 -1
  96. package/dist/ai/providers/models-dev-cache.js +1 -1
  97. package/dist/ai/providers/models-dev-data.d.ts +1 -1
  98. package/dist/ai/providers/models-dev-data.js +12 -12
  99. package/dist/ai/providers/models-dev-snapshot.d.ts +1 -1
  100. package/dist/ai/providers/models-dev-snapshot.js +1 -1
  101. package/dist/ai/providers/models-dev.d.ts +4 -4
  102. package/dist/ai/providers/models-dev.js +3 -3
  103. package/dist/ai/types.d.ts +2 -2
  104. package/dist/ai/types.js +1 -1
  105. package/dist/auth/chatgpt/cli.d.ts +1 -1
  106. package/dist/auth/chatgpt/cli.js +1 -1
  107. package/dist/auth/chatgpt/host-id.d.ts +1 -1
  108. package/dist/auth/chatgpt/host-id.js +1 -1
  109. package/dist/auth/chatgpt/login.d.ts +1 -1
  110. package/dist/auth/chatgpt/login.js +1 -1
  111. package/dist/auth/chatgpt/presets.d.ts +1 -1
  112. package/dist/auth/chatgpt/presets.js +1 -1
  113. package/dist/auth/oauth/callback-server.d.ts +1 -1
  114. package/dist/auth/oauth/callback-server.js +1 -1
  115. package/dist/auth/oauth/flows.d.ts +1 -1
  116. package/dist/auth/oauth/flows.js +1 -1
  117. package/dist/auth/oauth/oidc.d.ts +1 -1
  118. package/dist/auth/oauth/oidc.js +1 -1
  119. package/dist/auth/oauth/pkce.d.ts +1 -1
  120. package/dist/auth/oauth/pkce.js +1 -1
  121. package/dist/auth/oauth/refresh.d.ts +1 -1
  122. package/dist/auth/oauth/refresh.js +1 -1
  123. package/dist/auth/oauth/token-client.d.ts +1 -1
  124. package/dist/auth/oauth/token-client.js +1 -1
  125. package/dist/auth/oauth/token-store.d.ts +1 -1
  126. package/dist/auth/oauth/token-store.js +1 -1
  127. package/dist/auth/testing/fake-oauth.d.ts +1 -1
  128. package/dist/auth/testing/fake-oauth.js +1 -1
  129. package/dist/bundle/ama.cjs +41 -38
  130. package/dist/checkpoints/backend.js +6 -1
  131. package/dist/checkpoints/blobs.d.ts +1 -1
  132. package/dist/checkpoints/blobs.js +1 -1
  133. package/dist/checkpoints/gc.d.ts +1 -1
  134. package/dist/checkpoints/gc.js +1 -1
  135. package/dist/checkpoints/git-head.d.ts +1 -1
  136. package/dist/checkpoints/git-head.js +1 -1
  137. package/dist/checkpoints/index.d.ts +1 -1
  138. package/dist/checkpoints/index.js +1 -1
  139. package/dist/checkpoints/replay.d.ts +1 -1
  140. package/dist/checkpoints/replay.js +1 -1
  141. package/dist/checkpoints/restore.d.ts +1 -1
  142. package/dist/checkpoints/restore.js +1 -1
  143. package/dist/checkpoints/settings.d.ts +1 -1
  144. package/dist/checkpoints/settings.js +1 -1
  145. package/dist/checkpoints/shadow-git.d.ts +1 -1
  146. package/dist/checkpoints/shadow-git.js +1 -1
  147. package/dist/checkpoints/shadow-restore.d.ts +1 -1
  148. package/dist/checkpoints/shadow-restore.js +1 -1
  149. package/dist/checkpoints/tracker.d.ts +1 -1
  150. package/dist/checkpoints/tracker.js +1 -1
  151. package/dist/checkpoints/types.d.ts +1 -1
  152. package/dist/checkpoints/types.js +1 -1
  153. package/dist/cli/args.d.ts +2 -2
  154. package/dist/cli/args.js +1 -1
  155. package/dist/cli/bootstrap.js +1 -1
  156. package/dist/cli/choice-prompt.d.ts +1 -1
  157. package/dist/cli/choice-prompt.js +1 -1
  158. package/dist/cli/codemode-notice.d.ts +1 -1
  159. package/dist/cli/codemode-notice.js +1 -1
  160. package/dist/cli/compose-agents.d.ts +1 -1
  161. package/dist/cli/compose-agents.js +1 -1
  162. package/dist/cli/compose-extensions.d.ts +1 -1
  163. package/dist/cli/compose-extensions.js +1 -1
  164. package/dist/cli/compose-memory.d.ts +1 -1
  165. package/dist/cli/compose-memory.js +1 -1
  166. package/dist/cli/compose-providers.d.ts +1 -1
  167. package/dist/cli/compose-providers.js +1 -1
  168. package/dist/cli/compose-request.d.ts +1 -1
  169. package/dist/cli/compose-request.js +1 -1
  170. package/dist/cli/from-prompt.d.ts +1 -1
  171. package/dist/cli/from-prompt.js +1 -1
  172. package/dist/cli/main.d.ts +1 -1
  173. package/dist/cli/main.js +1 -1
  174. package/dist/cli/subcommands/auth.d.ts +1 -1
  175. package/dist/cli/subcommands/auth.js +1 -1
  176. package/dist/cli/subcommands/config-set.d.ts +1 -1
  177. package/dist/cli/subcommands/config-set.js +1 -1
  178. package/dist/cli/subcommands/doctor.js +1 -1
  179. package/dist/cli/subcommands/init.d.ts +1 -1
  180. package/dist/cli/subcommands/init.js +1 -1
  181. package/dist/cli/subcommands/memory.d.ts +1 -1
  182. package/dist/cli/subcommands/memory.js +1 -1
  183. package/dist/cli/subcommands/models.js +1 -1
  184. package/dist/cli/subcommands/providers-list.d.ts +1 -1
  185. package/dist/cli/subcommands/providers-list.js +1 -1
  186. package/dist/cli/subcommands/providers-plan.d.ts +1 -1
  187. package/dist/cli/subcommands/providers-plan.js +1 -1
  188. package/dist/cli/subcommands/providers.d.ts +1 -1
  189. package/dist/cli/subcommands/providers.js +1 -1
  190. package/dist/cli/subcommands/sessions-export.d.ts +1 -1
  191. package/dist/cli/subcommands/sessions-export.js +1 -1
  192. package/dist/cli/subcommands/sessions-trace.d.ts +1 -1
  193. package/dist/cli/subcommands/sessions-trace.js +1 -1
  194. package/dist/cli/subcommands/sessions.d.ts +1 -1
  195. package/dist/cli/subcommands/sessions.js +1 -1
  196. package/dist/cli/subcommands/stats.d.ts +1 -1
  197. package/dist/cli/subcommands/stats.js +1 -1
  198. package/dist/codemode/capability.d.ts +1 -1
  199. package/dist/codemode/capability.js +1 -1
  200. package/dist/codemode/host-side.d.ts +2 -2
  201. package/dist/codemode/host-side.js +2 -2
  202. package/dist/compaction/image-budget.d.ts +1 -1
  203. package/dist/compaction/image-budget.js +1 -1
  204. package/dist/config/edit.d.ts +1 -1
  205. package/dist/config/edit.js +1 -1
  206. package/dist/config/init.d.ts +1 -1
  207. package/dist/config/init.js +1 -1
  208. package/dist/config/json-schema.d.ts +2 -2
  209. package/dist/config/json-schema.js +2 -2
  210. package/dist/config/schema-w5.d.ts +1 -1
  211. package/dist/config/schema-w5.js +1 -1
  212. package/dist/config/schema-w6.d.ts +1 -1
  213. package/dist/config/schema-w6.js +1 -1
  214. package/dist/config/settings-registry.d.ts +1 -1
  215. package/dist/config/settings-registry.js +1 -1
  216. package/dist/config/types-w5.d.ts +2 -2
  217. package/dist/config/types-w5.js +2 -2
  218. package/dist/config/types-w6.d.ts +5 -5
  219. package/dist/config/types-w6.js +1 -1
  220. package/dist/config/types.d.ts +6 -6
  221. package/dist/config/types.js +1 -1
  222. package/dist/drivers/acp/client.d.ts +1 -1
  223. package/dist/drivers/acp/client.js +1 -1
  224. package/dist/drivers/acp/driver.d.ts +1 -1
  225. package/dist/drivers/acp/driver.js +1 -1
  226. package/dist/drivers/acp/testing/fake-agent.d.ts +1 -1
  227. package/dist/drivers/acp/testing/fake-agent.js +1 -1
  228. package/dist/drivers/acp/types.d.ts +1 -1
  229. package/dist/drivers/acp/types.js +1 -1
  230. package/dist/drivers/agents.d.ts +1 -1
  231. package/dist/drivers/agents.js +1 -1
  232. package/dist/drivers/base.d.ts +1 -1
  233. package/dist/drivers/base.js +1 -1
  234. package/dist/drivers/catalog.d.ts +1 -1
  235. package/dist/drivers/catalog.js +1 -1
  236. package/dist/drivers/env.d.ts +1 -1
  237. package/dist/drivers/env.js +1 -1
  238. package/dist/drivers/host-runners.d.ts +1 -1
  239. package/dist/drivers/host-runners.js +1 -1
  240. package/dist/drivers/jsonrpc.d.ts +1 -1
  241. package/dist/drivers/jsonrpc.js +1 -1
  242. package/dist/drivers/native/claude-normalize.d.ts +1 -1
  243. package/dist/drivers/native/claude-normalize.js +1 -1
  244. package/dist/drivers/native/claude-stream.d.ts +1 -1
  245. package/dist/drivers/native/claude-stream.js +1 -1
  246. package/dist/drivers/native/codex-app-server.d.ts +1 -1
  247. package/dist/drivers/native/codex-app-server.js +1 -1
  248. package/dist/drivers/native/codex-normalize.d.ts +1 -1
  249. package/dist/drivers/native/codex-normalize.js +1 -1
  250. package/dist/drivers/native/oneshot.d.ts +1 -1
  251. package/dist/drivers/native/oneshot.js +1 -1
  252. package/dist/drivers/permissions.d.ts +1 -1
  253. package/dist/drivers/permissions.js +1 -1
  254. package/dist/drivers/pids.d.ts +1 -1
  255. package/dist/drivers/pids.js +1 -1
  256. package/dist/drivers/pool.d.ts +1 -1
  257. package/dist/drivers/pool.js +1 -1
  258. package/dist/drivers/probe.d.ts +1 -1
  259. package/dist/drivers/probe.js +1 -1
  260. package/dist/drivers/process.d.ts +1 -1
  261. package/dist/drivers/process.js +1 -1
  262. package/dist/drivers/runner.d.ts +1 -1
  263. package/dist/drivers/runner.js +1 -1
  264. package/dist/drivers/store.d.ts +1 -1
  265. package/dist/drivers/store.js +1 -1
  266. package/dist/drivers/types.d.ts +1 -1
  267. package/dist/drivers/types.js +1 -1
  268. package/dist/git/info.d.ts +1 -1
  269. package/dist/git/info.js +1 -1
  270. package/dist/host/api-impl.d.ts +1 -1
  271. package/dist/host/api-impl.js +1 -1
  272. package/dist/host/types.d.ts +2 -2
  273. package/dist/i18n/catalog.d.ts +2 -2
  274. package/dist/i18n/catalog.js +2 -2
  275. package/dist/i18n/format.d.ts +1 -1
  276. package/dist/i18n/format.js +1 -1
  277. package/dist/i18n/index.d.ts +1 -1
  278. package/dist/i18n/index.js +1 -1
  279. package/dist/i18n/messages/acp.d.ts +1 -1
  280. package/dist/i18n/messages/acp.js +1 -1
  281. package/dist/i18n/messages/agents.d.ts +1 -1
  282. package/dist/i18n/messages/agents.js +1 -1
  283. package/dist/i18n/messages/approval.d.ts +1 -1
  284. package/dist/i18n/messages/approval.js +1 -1
  285. package/dist/i18n/messages/auth.d.ts +1 -1
  286. package/dist/i18n/messages/auth.js +1 -1
  287. package/dist/i18n/messages/cli.d.ts +1 -1
  288. package/dist/i18n/messages/cli.js +1 -1
  289. package/dist/i18n/messages/config-keys.js +12 -12
  290. package/dist/i18n/messages/config.d.ts +1 -1
  291. package/dist/i18n/messages/config.js +3 -3
  292. package/dist/i18n/messages/drivers.d.ts +1 -1
  293. package/dist/i18n/messages/drivers.js +1 -1
  294. package/dist/i18n/messages/errors.d.ts +1 -1
  295. package/dist/i18n/messages/errors.js +1 -1
  296. package/dist/i18n/messages/interactive-line.d.ts +1 -1
  297. package/dist/i18n/messages/interactive-line.js +1 -1
  298. package/dist/i18n/messages/interactive-startup.d.ts +1 -1
  299. package/dist/i18n/messages/interactive-startup.js +1 -1
  300. package/dist/i18n/messages/interactive-view.d.ts +1 -1
  301. package/dist/i18n/messages/interactive-view.js +1 -1
  302. package/dist/i18n/messages/interactive.d.ts +1 -1
  303. package/dist/i18n/messages/interactive.js +1 -1
  304. package/dist/i18n/messages/memory.d.ts +1 -1
  305. package/dist/i18n/messages/memory.js +1 -1
  306. package/dist/i18n/messages/panels.d.ts +1 -1
  307. package/dist/i18n/messages/panels.js +1 -1
  308. package/dist/i18n/messages/permissions.d.ts +1 -1
  309. package/dist/i18n/messages/permissions.js +1 -1
  310. package/dist/i18n/messages/plan.d.ts +1 -1
  311. package/dist/i18n/messages/plan.js +1 -1
  312. package/dist/i18n/messages/print.d.ts +2 -2
  313. package/dist/i18n/messages/print.js +2 -2
  314. package/dist/i18n/messages/report-context.d.ts +1 -1
  315. package/dist/i18n/messages/report-context.js +1 -1
  316. package/dist/i18n/messages/report.d.ts +1 -1
  317. package/dist/i18n/messages/report.js +1 -1
  318. package/dist/i18n/messages/rewind.d.ts +1 -1
  319. package/dist/i18n/messages/rewind.js +1 -1
  320. package/dist/i18n/messages/session.d.ts +1 -1
  321. package/dist/i18n/messages/session.js +1 -1
  322. package/dist/i18n/messages/settings.d.ts +1 -1
  323. package/dist/i18n/messages/settings.js +1 -1
  324. package/dist/i18n/messages/subcommands.d.ts +1 -1
  325. package/dist/i18n/messages/subcommands.js +1 -1
  326. package/dist/i18n/messages/trace.d.ts +1 -1
  327. package/dist/i18n/messages/trace.js +1 -1
  328. package/dist/i18n/types.d.ts +1 -1
  329. package/dist/i18n/types.js +1 -1
  330. package/dist/memory/frontmatter.d.ts +1 -1
  331. package/dist/memory/frontmatter.js +1 -1
  332. package/dist/memory/index.d.ts +1 -1
  333. package/dist/memory/index.js +1 -1
  334. package/dist/memory/lock.d.ts +1 -1
  335. package/dist/memory/lock.js +1 -1
  336. package/dist/memory/paths.d.ts +1 -1
  337. package/dist/memory/paths.js +1 -1
  338. package/dist/memory/runtime.d.ts +1 -1
  339. package/dist/memory/runtime.js +1 -1
  340. package/dist/memory/secrets.d.ts +1 -1
  341. package/dist/memory/secrets.js +1 -1
  342. package/dist/memory/section.d.ts +1 -1
  343. package/dist/memory/section.js +1 -1
  344. package/dist/memory/store.d.ts +1 -1
  345. package/dist/memory/store.js +1 -1
  346. package/dist/memory/tool.d.ts +1 -1
  347. package/dist/memory/tool.js +1 -1
  348. package/dist/modes/acp/acp-auth-gate.d.ts +1 -1
  349. package/dist/modes/acp/acp-auth-gate.js +1 -1
  350. package/dist/modes/acp/acp-config.d.ts +1 -1
  351. package/dist/modes/acp/acp-config.js +1 -1
  352. package/dist/modes/acp/acp-connection.d.ts +1 -1
  353. package/dist/modes/acp/acp-connection.js +1 -1
  354. package/dist/modes/acp/acp-events.d.ts +1 -1
  355. package/dist/modes/acp/acp-events.js +1 -1
  356. package/dist/modes/acp/acp-mode.d.ts +1 -1
  357. package/dist/modes/acp/acp-mode.js +1 -1
  358. package/dist/modes/acp/acp-server.d.ts +2 -2
  359. package/dist/modes/acp/acp-server.js +2 -2
  360. package/dist/modes/acp/acp-sessions.d.ts +2 -2
  361. package/dist/modes/acp/acp-sessions.js +2 -2
  362. package/dist/modes/acp/acp-tool-text.d.ts +1 -1
  363. package/dist/modes/acp/acp-tool-text.js +1 -1
  364. package/dist/modes/commands-core.js +1 -1
  365. package/dist/modes/image-input.d.ts +1 -1
  366. package/dist/modes/image-input.js +1 -1
  367. package/dist/modes/interactive/agent-bar.d.ts +1 -1
  368. package/dist/modes/interactive/agent-bar.js +1 -1
  369. package/dist/modes/interactive/agent-transcript.d.ts +1 -1
  370. package/dist/modes/interactive/agent-transcript.js +1 -1
  371. package/dist/modes/interactive/agent-view.d.ts +1 -1
  372. package/dist/modes/interactive/agent-view.js +1 -1
  373. package/dist/modes/interactive/approval-dock.d.ts +1 -1
  374. package/dist/modes/interactive/approval-dock.js +1 -1
  375. package/dist/modes/interactive/config-panel.d.ts +1 -1
  376. package/dist/modes/interactive/config-panel.js +1 -1
  377. package/dist/modes/interactive/config-ui.d.ts +1 -1
  378. package/dist/modes/interactive/config-ui.js +1 -1
  379. package/dist/modes/interactive/memory-panel.d.ts +1 -1
  380. package/dist/modes/interactive/memory-panel.js +1 -1
  381. package/dist/modes/interactive/plan-command.d.ts +1 -1
  382. package/dist/modes/interactive/plan-command.js +1 -1
  383. package/dist/modes/interactive/plan-dialog.d.ts +1 -1
  384. package/dist/modes/interactive/plan-dialog.js +1 -1
  385. package/dist/modes/interactive/plan-flow.d.ts +1 -1
  386. package/dist/modes/interactive/plan-flow.js +1 -1
  387. package/dist/modes/interactive/subagent-view.d.ts +1 -1
  388. package/dist/modes/interactive/subagent-view.js +1 -1
  389. package/dist/modes/interactive/task-background.d.ts +1 -1
  390. package/dist/modes/interactive/task-background.js +1 -1
  391. package/dist/modes/interactive/trace-view.d.ts +1 -1
  392. package/dist/modes/interactive/trace-view.js +1 -1
  393. package/dist/modes/print/json-event.d.ts +1 -1
  394. package/dist/modes/print/json-event.js +2 -2
  395. package/dist/modes/print/print-mode.d.ts +1 -1
  396. package/dist/modes/print/print-mode.js +1 -1
  397. package/dist/modes/print/search-hint.d.ts +1 -1
  398. package/dist/modes/print/search-hint.js +1 -1
  399. package/dist/modes/rpc/commands.js +2 -2
  400. package/dist/permissions/auto-safe.d.ts +1 -1
  401. package/dist/permissions/auto-safe.js +1 -1
  402. package/dist/permissions/bypass.d.ts +1 -1
  403. package/dist/permissions/bypass.js +1 -1
  404. package/dist/permissions/classifier.d.ts +1 -1
  405. package/dist/permissions/classifier.js +1 -1
  406. package/dist/permissions/memory-class.d.ts +1 -1
  407. package/dist/permissions/memory-class.js +1 -1
  408. package/dist/permissions/pipeline.d.ts +2 -2
  409. package/dist/permissions/pipeline.js +2 -2
  410. package/dist/permissions/protected.d.ts +1 -1
  411. package/dist/permissions/protected.js +1 -1
  412. package/dist/permissions/readonly-bash.d.ts +1 -1
  413. package/dist/permissions/readonly-bash.js +1 -1
  414. package/dist/permissions/types.d.ts +2 -2
  415. package/dist/plan/done-markers.d.ts +1 -1
  416. package/dist/plan/done-markers.js +1 -1
  417. package/dist/plan/extract.d.ts +1 -1
  418. package/dist/plan/extract.js +1 -1
  419. package/dist/plan/prompts.d.ts +1 -1
  420. package/dist/plan/prompts.js +1 -1
  421. package/dist/plan/store.d.ts +1 -1
  422. package/dist/plan/store.js +1 -1
  423. package/dist/rpc.d.ts +3 -3
  424. package/dist/rpc.js +3 -3
  425. package/dist/sandbox/bash.d.ts +1 -1
  426. package/dist/sandbox/bash.js +1 -1
  427. package/dist/sandbox/detect.d.ts +1 -1
  428. package/dist/sandbox/detect.js +1 -1
  429. package/dist/sandbox/index.d.ts +1 -1
  430. package/dist/sandbox/index.js +1 -1
  431. package/dist/sandbox/profile.d.ts +1 -1
  432. package/dist/sandbox/profile.js +1 -1
  433. package/dist/sandbox/wrap.d.ts +1 -1
  434. package/dist/sandbox/wrap.js +1 -1
  435. package/dist/sdk.d.ts +3 -3
  436. package/dist/sdk.js +2 -2
  437. package/dist/session/line-reader.d.ts +1 -1
  438. package/dist/session/line-reader.js +1 -1
  439. package/dist/session/list.d.ts +1 -1
  440. package/dist/session/list.js +1 -1
  441. package/dist/session/migrate.d.ts +1 -1
  442. package/dist/session/migrate.js +1 -1
  443. package/dist/session/store.d.ts +1 -1
  444. package/dist/session/store.js +1 -1
  445. package/dist/skills/builtin.js +2 -2
  446. package/dist/tools/background-jobs.d.ts +1 -1
  447. package/dist/tools/background-jobs.js +1 -1
  448. package/dist/tools/clipboard-image.d.ts +1 -1
  449. package/dist/tools/clipboard-image.js +1 -1
  450. package/dist/tools/edit.d.ts +1 -1
  451. package/dist/tools/edit.js +1 -1
  452. package/dist/tools/grep.d.ts +1 -1
  453. package/dist/tools/grep.js +1 -1
  454. package/dist/tools/image-resize.d.ts +1 -1
  455. package/dist/tools/image-resize.js +1 -1
  456. package/dist/tools/read-lines.d.ts +1 -1
  457. package/dist/tools/read-lines.js +1 -1
  458. package/dist/tools/read.d.ts +1 -1
  459. package/dist/tools/read.js +1 -1
  460. package/dist/tools/task-ctl.d.ts +1 -1
  461. package/dist/tools/task-ctl.js +1 -1
  462. package/dist/tools/task.d.ts +2 -2
  463. package/dist/tools/task.js +2 -2
  464. package/dist/tools/types.d.ts +3 -3
  465. package/dist/tools/types.js +1 -1
  466. package/dist/trace/build.d.ts +1 -1
  467. package/dist/trace/build.js +1 -1
  468. package/dist/trace/detail.d.ts +1 -1
  469. package/dist/trace/detail.js +1 -1
  470. package/dist/trace/flatten.d.ts +1 -1
  471. package/dist/trace/flatten.js +1 -1
  472. package/dist/trace/format.d.ts +1 -1
  473. package/dist/trace/format.js +1 -1
  474. package/dist/trace/html-template.d.ts +1 -1
  475. package/dist/trace/html-template.js +1 -1
  476. package/dist/trace/html.d.ts +1 -1
  477. package/dist/trace/html.js +1 -1
  478. package/dist/trace/query-session.d.ts +1 -1
  479. package/dist/trace/query-session.js +1 -1
  480. package/dist/trace/query.d.ts +1 -1
  481. package/dist/trace/query.js +1 -1
  482. package/dist/trace/types.d.ts +1 -1
  483. package/dist/trace/types.js +1 -1
  484. package/dist/tui/components/settings-list.d.ts +1 -1
  485. package/dist/tui/components/settings-list.js +1 -1
  486. package/docs/README.md +85 -0
  487. package/docs/assets/ama-wordmark-dark.svg +37 -0
  488. package/docs/assets/ama-wordmark-light.svg +37 -0
  489. package/docs/en/README.md +39 -0
  490. package/docs/en/{permissions.md → guides/permissions.md} +14 -14
  491. package/docs/en/{providers.md → guides/providers.md} +6 -6
  492. package/docs/en/{sessions.md → guides/sessions.md} +6 -6
  493. package/docs/en/{tui.md → guides/tui.md} +15 -15
  494. package/docs/en/{acp.md → reference/acp.md} +6 -6
  495. package/docs/en/{host-api.md → reference/host-api.md} +7 -7
  496. package/docs/en/{rpc.md → reference/rpc.md} +13 -13
  497. package/docs/{agents.md → guides/agents.md} +13 -13
  498. package/docs/{codemode.md → guides/codemode.md} +3 -3
  499. package/docs/{hooks.md → guides/hooks.md} +2 -2
  500. package/docs/guides/i18n.md +93 -0
  501. package/docs/{memory.md → guides/memory.md} +1 -1
  502. package/docs/{permissions.md → guides/permissions.md} +2 -2
  503. package/docs/{plan.md → guides/plan.md} +4 -4
  504. package/docs/{providers.md → guides/providers.md} +4 -4
  505. package/docs/{sessions.md → guides/sessions.md} +5 -5
  506. package/docs/{tui.md → guides/tui.md} +8 -8
  507. package/docs/{acp.md → reference/acp.md} +5 -5
  508. package/docs/{host-api.md → reference/host-api.md} +4 -4
  509. package/docs/{rpc.md → reference/rpc.md} +11 -11
  510. package/docs/{session-format.md → reference/session-format.md} +7 -7
  511. package/package.json +12 -23
  512. package/docs/rewind-plan.md +0 -181
  513. package/docs/tui-design.md +0 -764
  514. /package/docs/{sandbox.md → guides/sandbox.md} +0 -0
@@ -1,11 +1,11 @@
1
1
  # RPC protocol (stdio JSONL)
2
2
 
3
- English · [简体中文](../rpc.md)
3
+ English · [简体中文](../../reference/rpc.md)
4
4
 
5
- > Translated from the Chinese [docs/rpc.md](../rpc.md) as of commit `a567833`. When the two differ, the Chinese version is
5
+ > Translated from the Chinese [docs/reference/rpc.md](../../reference/rpc.md) as of commit `a567833`. When the two differ, the Chinese version is
6
6
  > authoritative.
7
7
 
8
- `ama --mode rpc` reads commands from stdin and writes responses and events to stdout, one JSON value per line. The types are defined in `@armadra/agent/rpc` (`src/rpc.ts`) and implemented in `src/modes/rpc/`. The events printed by `ama -p --output-format stream-json` have the same shapes. The design rationale is in [design.md](../design.md) §13.2 (Chinese).
8
+ `ama --mode rpc` reads commands from stdin and writes responses and events to stdout, one JSON value per line. The types are defined in `@armadra/agent/rpc` (`src/rpc.ts`) and implemented in `src/modes/rpc/`. The events printed by `ama -p --output-format stream-json` have the same shapes. The design rationale is in [design.md](../../design/design.md) §13.2 (Chinese).
9
9
 
10
10
  ## Wire
11
11
 
@@ -35,7 +35,7 @@ A command has the shape `{ "id"?: string, "type": <command name>, ...parameters
35
35
 
36
36
  - A response carries the request's `id` back (only string ids). Commands are processed concurrently: `prompt` does not block later commands, so responses may arrive in a different order than requests; match them by `id`.
37
37
  - On failure `error` is human-readable text and `code` is the `AmaError.code` (when there is one). Unknown commands → `code: "invalid_arguments"`.
38
- **Hosts must decide by `code` and never parse `error` / `message`**: human-readable text follows the interface language (`AMA_LANG`, `--lang`, `ui.language`; bilingual since wave 6, see [i18n.md](../i18n.md), Chinese). The same holds for the `message` of `notification` events.
38
+ **Hosts must decide by `code` and never parse `error` / `message`**: human-readable text follows the interface language (`AMA_LANG`, `--lang`, `ui.language`; bilingual since wave 6, see [i18n.md](../../guides/i18n.md), Chinese). The same holds for the `message` of `notification` events.
39
39
  - A line that is not valid JSON or lacks `type` → `{ "type": "response", "command": "parse", "success": false, "error": … }`, without `id`.
40
40
  - Commands that need extension methods of the session implementation (marked † below) return `code: "not_implemented"` on sessions that are not `AgentSessionImpl`; sessions created by the CLI and the SDK are all `AgentSessionImpl`.
41
41
 
@@ -100,7 +100,7 @@ Prompt commands **do not wait for the run to finish**: they are answered as soon
100
100
 
101
101
  ### Rewind
102
102
 
103
- Details in [rewind-plan.md](../rewind-plan.md) §3 (Chinese). Rewind points are the user messages on the active path that start new turns (steers and queued messages belong to the current turn and are not listed). Calling while running returns `busy`.
103
+ Details in [rewind-plan.md](../../history/rewind-plan.md) §3 (Chinese). Rewind points are the user messages on the active path that start new turns (steers and queued messages belong to the current turn and are not listed). Calling while running returns `busy`.
104
104
 
105
105
  | Command | Parameters | `data` |
106
106
  | ------------------- | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -111,7 +111,7 @@ Details in [rewind-plan.md](../rewind-plan.md) §3 (Chinese). Rewind points are
111
111
 
112
112
  `CodeRestoreResult`: `restored` / `deleted` / `conflicts` (left untouched with `skip`, overwritten with `overwrite`) / `skipped: { path, reason }[]` (`symlink` / `hardlink` / `not_regular` / `parent_moved` / `too_large` / `backup_missing`) / `failed: { path, message }[]` / `insertions` / `deletions`; paths inside cwd are relative (`/`-separated). Error codes: restoring code without a checkpoint → `no_checkpoint`; everything failed and nothing was restored → `rewind_failed` (the conversation is left alone); the entry is not a rewind point on the active path → `invalid_arguments`. For conversation-only or code-only rewinds, a `custom_message{customType: "ama.rewind-note"}` is appended to the end of the context before the next prompt, telling the model which files disagree with the conversation.
113
113
 
114
- After a session switch the server re-subscribes to events and sends `session_start` for the new session (`reason` `new` / `resume` / `fork`). `new_session` does not use the `parentSession` parameter yet. Entry shapes are in [session-format.md](../session-format.md) (Chinese).
114
+ After a session switch the server re-subscribes to events and sends `session_start` for the new session (`reason` `new` / `resume` / `fork`). `new_session` does not use the `parentSession` parameter yet. Entry shapes are in [session-format.md](../../reference/session-format.md) (Chinese).
115
115
 
116
116
  ### Approvals
117
117
 
@@ -120,7 +120,7 @@ After a session switch the server re-subscribes to events and sends `session_sta
120
120
  | `set_client_capabilities` | `capabilities: ("approvals" \| "images" \| "hooks" \| "plans" \| "compact_events")[]` | `{ capabilities }` |
121
121
  | `permission_response` | `requestId: string`, `decision: "allow" \| "deny" \| "allow_session"` | `{ accepted: boolean }` (false = not currently waiting for this id; kept and applied when that request is asked) |
122
122
 
123
- `compact_events` (docs/memory-plan.md D9, Chinese): once declared, `turn_end.toolResults`, `message_start` and `entry_appended` no longer repeat the body of tool results and of user messages with images (marked `contentOmitted: true`); the body is sent only in `message_end` and `tool_execution_end`. Without it the event shapes are byte-for-byte unchanged. Shapes are in [Compact events](#compact-events-compact_events). `stream-json` has no such switch and always emits the full shapes.
123
+ `compact_events` (docs/history/memory-plan.md D9, Chinese): once declared, `turn_end.toolResults`, `message_start` and `entry_appended` no longer repeat the body of tool results and of user messages with images (marked `contentOmitted: true`); the body is sent only in `message_end` and `tool_execution_end`. Without it the event shapes are byte-for-byte unchanged. Shapes are in [Compact events](#compact-events-compact_events). `stream-json` has no such switch and always emits the full shapes.
124
124
 
125
125
  ### Tools, permissions, discovery
126
126
 
@@ -144,7 +144,7 @@ After a session switch the server re-subscribes to events and sends `session_sta
144
144
 
145
145
  ### Traces (wave 6)
146
146
 
147
- `get_trace` returns the session trace (the same tree as the TUI `/trace` and `ama sessions trace`, see [tui.md](tui.md)
147
+ `get_trace` returns the session trace (the same tree as the TUI `/trace` and `ama sessions trace`, see [tui.md](../guides/tui.md)
148
148
  "Traces"). There is no new event: after `entry_appended`, fetch again with the previous `cursor.since` to refresh incrementally.
149
149
 
150
150
  | Parameter | Meaning |
@@ -227,7 +227,7 @@ There is also the non-session event `{"type":"notification","level":"info"|"warn
227
227
 
228
228
  `parentToolCallId` appears only on inner calls made through `tools.*` inside codemode scripts; its value is the id of the outer `codemode` call, which clients use to fold the display. Inner calls do not enter the transcript.
229
229
 
230
- Assistant messages in `message_end`, `turn_end`, `done` / `error` and in replays (`get_messages`, `get_entries`) may carry two optional fields (model efficiency batch, docs/model-efficiency-plan.md §1.10, Chinese): `retryAfterMs` on failed messages (`Retry-After`, in ms) and `rawArguments` on tool-call blocks (the raw argument string the model produced). `subagent_*` events are unchanged; `TaskInfo` from `get_tasks` may carry `context?: "fork" | "fresh"` (the sub-session's actual context mode). All are new optional fields, `RPC_PROTOCOL_VERSION` is unchanged, and clients can ignore fields they do not know.
230
+ Assistant messages in `message_end`, `turn_end`, `done` / `error` and in replays (`get_messages`, `get_entries`) may carry two optional fields (model efficiency batch, docs/history/model-efficiency-plan.md §1.10, Chinese): `retryAfterMs` on failed messages (`Retry-After`, in ms) and `rawArguments` on tool-call blocks (the raw argument string the model produced). `subagent_*` events are unchanged; `TaskInfo` from `get_tasks` may carry `context?: "fork" | "fresh"` (the sub-session's actual context mode). All are new optional fields, `RPC_PROTOCOL_VERSION` is unchanged, and clients can ignore fields they do not know.
231
231
 
232
232
  ### Compact events (`compact_events`)
233
233
 
@@ -243,7 +243,7 @@ In the full shapes, the result of one tool call appears once each in `message_st
243
243
 
244
244
  ### Sub-agent events (wave 5)
245
245
 
246
- Sub-agents started by `task` / `task_ctl` (ama sub-sessions and external agents share the same events, see [agents.md](../agents.md), Chinese):
246
+ Sub-agents started by `task` / `task_ctl` (ama sub-sessions and external agents share the same events, see [agents.md](../../guides/agents.md), Chinese):
247
247
 
248
248
  | Event | Fields |
249
249
  | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -349,7 +349,7 @@ The `data` of `get_session_stats` is `SessionStats`:
349
349
  {"type":"context_pressure","percent":71,"threshold":70,"remainingTokens":57990,"estimatedTurnsLeft":6}
350
350
  ```
351
351
 
352
- `cache_miss` gives `detail` only for `prefix_changed` (`tools`, `system`, or `system:<section,…>` naming the changed sections, such as `system:hooks,memory`). The values and meanings of `reason` for `cache_warm{stopped}` are in [tui.md](tui.md) "Cache and context". The result object of `ama -p --output-format json` also has a `cache` field of the same shape.
352
+ `cache_miss` gives `detail` only for `prefix_changed` (`tools`, `system`, or `system:<section,…>` naming the changed sections, such as `system:hooks,memory`). The values and meanings of `reason` for `cache_warm{stopped}` are in [tui.md](../guides/tui.md) "Cache and context". The result object of `ama -p --output-format json` also has a `cache` field of the same shape.
353
353
 
354
354
  It also carries `context: { tokens, window, percent }` (context used, window size and usage 0–100, defined like `contextTokens` / `contextWindow` / `contextPercent` in the table above); an unknown item is omitted (for a model without a window only `tokens` is present), and when all are unknown there is no `context`.
355
355
 
@@ -363,7 +363,7 @@ It also carries `context: { tokens, window, percent }` (context used, window siz
363
363
 
364
364
  ## Plan approval
365
365
 
366
- Plan mode and the plan format are described in [plan.md](../plan.md) (Chinese).
366
+ Plan mode and the plan format are described in [plan.md](../../guides/plan.md) (Chinese).
367
367
 
368
368
  1. When a turn ends in plan mode with plain text and the reply contains a `<proposed_plan>` block, the server saves the plan and sends `plan_proposed{ planId, version, markdown, steps, filePath? }` (`steps[]`: `{ id, text, dependsOn?, agent? }`), followed by `agent_settled` as usual.
369
369
  2. The client answers only if it declared `set_client_capabilities{capabilities:["plans"]}`; otherwise the config `plan.unattended` applies: `stop` by default (the plan stays proposed, no mode switch, no execution; the client can still answer later with `plan_response`), and `approve` approves and executes within the same run.
@@ -381,7 +381,7 @@ Plan mode and the plan format are described in [plan.md](../plan.md) (Chinese).
381
381
 
382
382
  - stdin closed: no more commands are accepted and approvals are withdrawn (later asks resolve as unanswered → deny); in-flight commands and started runs finish and their responses are written, then the exit code is 0. So `printf '{"type":"prompt","message":"hi"}\n' | ama --mode rpc` gets a complete reply; to stop early, send `abort` first.
383
383
  - SIGINT / SIGTERM: the current run is interrupted and the process exits in order, with exit code 130 / 143.
384
- - Startup failures use the CLI exit codes ([design.md](../design.md) §11.3, Chinese): config error 3, no model or key 4, session error 5, host / hook startup failure 6, host API version mismatch 78.
384
+ - Startup failures use the CLI exit codes ([design.md](../../design/design.md) §11.3, Chinese): config error 3, no model or key 4, session error 5, host / hook startup failure 6, host API version mismatch 78.
385
385
 
386
386
  ## Examples
387
387
 
@@ -1,7 +1,7 @@
1
1
  # Agent:子 Agent 与外部 Agent
2
2
 
3
3
  模型只认识两个工具:`task`(委派)与 `task_ctl`(管理后台任务)。`task(agent=…)` 的 `agent` 既可以是 ama 自己的子 Agent
4
- 类型,也可以是外部 CLI Agent(外部部分见下文「外部 Agent」节)。设计依据:[wave5-plan.md](wave5-plan.md) §7、D13、D22–D24。
4
+ 类型,也可以是外部 CLI Agent(外部部分见下文「外部 Agent」节)。设计依据:[wave5-plan.md](../history/wave5-plan.md) §7、D13、D22–D24。
5
5
 
6
6
  ## 子 Agent
7
7
 
@@ -92,7 +92,7 @@ ama 再跑一轮、在消息里要求「不要调用工具、直接给最终报
92
92
  `<task-notification>`:
93
93
 
94
94
  - 交互界面:`Ctrl+B` / `/tasks bg [id]` / Agent 栏里按 `b`(见 [tui.md](tui.md)「子 Agent」);
95
- - RPC:`background_task { taskId? }`([rpc.md](rpc.md)),SDK:`session.backgroundTask(taskId?)`,返回实际转了的 `taskId`;
95
+ - RPC:`background_task { taskId? }`([rpc.md](../reference/rpc.md)),SDK:`session.backgroundTask(taskId?)`,返回实际转了的 `taskId`;
96
96
  不给 `taskId` 时转全部前台运行中任务,正在 `task_ctl wait` 的等待也一并打断;
97
97
  - 自动:`subagents.autoBackgroundAfterMs` 大于 0 时,前台任务运行超过该毫秒数自动转后台(缺省 0 关闭)。
98
98
 
@@ -133,7 +133,7 @@ ama 再跑一轮、在消息里要求「不要调用工具、直接给最终报
133
133
  每个任务有会话内唯一的 `taskId`(`t1`、`t2` …)。子会话结束后不立即释放,最多保留 4 个(`subagents.retainSessions`;
134
134
  最久未用的先释放内存,JSONL 一直在)。`task{taskId}` / `task_ctl send` 续聊时,保留中的直接追加消息,已释放的按会话文件重新打开再追加——
135
135
  同一个任务始终写同一个 JSONL。父会话在任务开始、每次续聊与结束时写一条 `custom{ama.task}`
136
- ([session-format.md](session-format.md));`--resume` 时据此重建任务列表,当时还在运行的标 `interrupted`,仍可续聊。
136
+ ([session-format.md](../reference/session-format.md));`--resume` 时据此重建任务列表,当时还在运行的标 `interrupted`,仍可续聊。
137
137
  内存会话(`--no-session`)的任务被释放后不能续聊。子会话转录常达数十 MB,保留得越多常驻内存越大;频繁轮换续聊
138
138
  5 个以上任务时可调大保留数,代价只是被释放的任务续聊时多一次从磁盘重开。
139
139
 
@@ -159,7 +159,7 @@ worktree 里与父 cwd 对应的目录。结束时没有改动(工作区干净
159
159
  - 类型声明了 `tools` / `disallowed-tools`(或参数给了 `tools`)时,工具表不变,不可用的工具在执行层拒绝
160
160
  (`Tool "X" is not available in this session.`),并在 `<task>` 里列出。只读类型照旧走只读管线。
161
161
  - `<task>` 同时列出按深度拒绝的 `task` / `task_ctl` 并要求不要调用它们(执行层仍是深度拒绝的文案)。实测仍有模型把父消息里
162
- 「调用 task」的指令当成自己的:调一次被拒,多一轮请求,有时随后只回报失败、不做子任务(见 [benchmarks](benchmarks/efficiency-2026-10.md)「F2」)。
162
+ 「调用 task」的指令当成自己的:调一次被拒,多一轮请求,有时随后只回报失败、不做子任务(见 [benchmarks](../benchmarks/efficiency-2026-10.md)「F2」)。
163
163
  - `isolation: "worktree"` 时子会话的 cwd 是 worktree,`<task>` 里说明上文的相对路径指父目录;cwd 节变化以尾部补丁发送,
164
164
  不影响已缓存的前缀。
165
165
 
@@ -171,12 +171,12 @@ worktree 里与父 cwd 对应的目录。结束时没有改动(工作区干净
171
171
  何时用 fork:子任务需要你已经读过、讨论过的内容时。fork 的首个请求把父上下文整段带上,按命中价计费;fresh 只发系统提示、
172
172
  工具表与任务说明,但你得在 `prompt` 里写清全部背景,子 Agent 往往还要重新读文件。
173
173
 
174
- | 供应商(命中价 / 未命中价) | 8k 父上下文 fork 一次(实测,见 [benchmarks](benchmarks/efficiency-2026-10.md)「F」) | 适合 |
175
- | ------------------------------- | ------------------------------------------------------------------------------------- | ---------------------------- |
176
- | DeepSeek(约 1/50) | 命中 77%,与父自己的下一回合相同;折合约 1.9k 全价 token | 需要父上下文时几乎总划算 |
177
- | Kimi(约 1/4–1/10) | 命中 97.5% | 需要父上下文、且要重读较多时 |
178
- | OpenAI 系(经中转,不发路由键) | 两次分别 0% 与 85%,取决于中转把请求路由到哪个上游 | 视中转而定 |
179
- | Anthropic(1/10,写入 1.25×) | 未实测;前缀相同,命中应与父的下一回合相同 | 需要父上下文时 |
174
+ | 供应商(命中价 / 未命中价) | 8k 父上下文 fork 一次(实测,见 [benchmarks](../benchmarks/efficiency-2026-10.md)「F」) | 适合 |
175
+ | ------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------- |
176
+ | DeepSeek(约 1/50) | 命中 77%,与父自己的下一回合相同;折合约 1.9k 全价 token | 需要父上下文时几乎总划算 |
177
+ | Kimi(约 1/4–1/10) | 命中 97.5% | 需要父上下文、且要重读较多时 |
178
+ | OpenAI 系(经中转,不发路由键) | 两次分别 0% 与 85%,取决于中转把请求路由到哪个上游 | 视中转而定 |
179
+ | Anthropic(1/10,写入 1.25×) | 未实测;前缀相同,命中应与父的下一回合相同 | 需要父上下文时 |
180
180
 
181
181
  fork 的成本不止首请求:子会话**每一回合**都重读整段父前缀。按命中价折算,8k 父上下文 × 30 回合在 DeepSeek(1/50)上约
182
182
  4.8k 全价 token,在 Kimi / Anthropic(1/4–1/10)上约 24k–60k,中转落空时全价。所以 DeepSeek 上子任务只要重读 ≥ 1 份
@@ -189,7 +189,7 @@ fork 的成本不止首请求:子会话**每一回合**都重读整段父前
189
189
 
190
190
  ### 事件与统计
191
191
 
192
- RPC / SDK 事件 `subagent_start` / `subagent_update` / `subagent_background` / `subagent_end` 见 [rpc.md](rpc.md)「子 Agent 事件」。
192
+ RPC / SDK 事件 `subagent_start` / `subagent_update` / `subagent_background` / `subagent_end` 见 [rpc.md](../reference/rpc.md)「子 Agent 事件」。
193
193
  `getStats().tasks` 给出任务总数、运行中数量与按状态的计数;子会话的缓存命中与重计费仍汇总在 `cache.subagents`。
194
194
  RPC `get_tasks` / `get_agents` 返回任务快照与可用类型(来源、定义文件路径)。交互界面的 `/tasks`、`/agents` 与 task 工具行的折叠显示见 [tui.md](tui.md)「子 Agent」。
195
195
 
@@ -245,7 +245,7 @@ ama 改为直接驱动 `pi --mode rpc`,并以 `-e` 给这一次运行加载一
245
245
 
246
246
  每条路径在临时目录各跑两个会话:非 git 目录里两轮「只回 OK」+ 一次触发审批的写文件(`default` 模式);git 目录里长输出时中断,再续一轮。
247
247
  模型用各家最便宜的:Claude `haiku`、Codex `gpt-6-luna`、Copilot `gpt-5-mini`、OpenCode `opencode/mimo-v2.6-flash-free`、pi `openai-codex/gpt-6-luna`。
248
- 记录与原始数字见 [benchmarks/external-agents-2026-10.md](benchmarks/external-agents-2026-10.md)。
248
+ 记录与原始数字见 [benchmarks/external-agents-2026-10.md](../benchmarks/external-agents-2026-10.md)。
249
249
 
250
250
  | 路径 | 两轮续聊 | 审批写文件 | 中断后续聊 | 用量 / 上下文 | 非 git 目录 |
251
251
  | -------------------------- | -------- | ------------------------------------------------- | ------------- | --------------------------------- | -------------- |
@@ -313,7 +313,7 @@ ama 改为直接驱动 `pi --mode rpc`,并以 `-e` 给这一次运行加载一
313
313
  | `full-auto` | `auto`(从不给 `bypassPermissions`) | `never` / `workspace-write`(从不给 `danger-full-access`) | 同上 |
314
314
 
315
315
  上表 ACP 一列是缺省规则;模式 id 与 ama 不同名的 Agent 在驱动表里有显式映射(见上文「实测能力矩阵」后的说明)。
316
- ACP Agent 不给 `modes`、改用 category `mode` 的配置项表达模式时,按上表同一映射在配置项的可选值里找,经 `session/set_config_option` 设置(见 [acp.md](acp.md)「作为客户端」)。
316
+ ACP Agent 不给 `modes`、改用 category `mode` 的配置项表达模式时,按上表同一映射在配置项的可选值里找,经 `session/set_config_option` 设置(见 [acp.md](../reference/acp.md)「作为客户端」)。
317
317
 
318
318
  一次性打印模式不能审批,只在只读任务下用。
319
319
 
@@ -1,6 +1,6 @@
1
1
  # codemode
2
2
 
3
- 设计依据见 [design.md](design.md) §5.5、§5.6、§9.1。
3
+ 设计依据见 [design.md](../design/design.md) §5.5、§5.6、§9.1。
4
4
 
5
5
  `codemode` 工具让模型写一段 JavaScript,在脚本里经 `tools.*` 编排多次工具调用,只有脚本输出回到模型。长流程、工具密集的任务里,它把多次往返合成一次,减少往返次数与缓存读取;短任务里模型照常直接调用工具,codemode 只多占约 400 token 前缀,所以 `default` 预设在网络隔离的运行时上缺省开着它。
6
6
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  缺省配置里不写 `codemode.mode`(`ama init` 生成的 `config.json` 也不写),所以这张映射以后调整时老用户同样生效。`ama config show` / `ama doctor` 显示生效模式与原因(跟随哪个预设、网络由 Node 还是操作系统沙箱隔离);`ama doctor` 另列操作系统沙箱能力。
26
26
 
27
- `minimal` / `coordinator` 预设缺省不带 codemode,也没有 grep / glob:模型找代码只能用 bash(`default` 权限模式下每次审批、`-p` 下被拒)。要检索就 `tools.default: ["+grep","+glob"]` 直接加上,比为了检索打开 codemode 便宜(见 [design.md](design.md) §5.6);`codemode-only` 的脚本里 `tools.grep()` / `tools.glob()` / `tools.ls()` 都可调用。
27
+ `minimal` / `coordinator` 预设缺省不带 codemode,也没有 grep / glob:模型找代码只能用 bash(`default` 权限模式下每次审批、`-p` 下被拒)。要检索就 `tools.default: ["+grep","+glob"]` 直接加上,比为了检索打开 codemode 便宜(见 [design.md](../design/design.md) §5.6);`codemode-only` 的脚本里 `tools.grep()` / `tools.glob()` / `tools.ls()` 都可调用。
28
28
 
29
29
  `coordinator` 预设即使显式 `on`,脚本里能调用的工具也只限它的活动集(read 与宿主工具):`tools.bash`、`tools.write` 在脚本里同样不存在,协调者「不写文件、不跑 bash」的约定不能经 codemode 绕过。
30
30
 
@@ -87,7 +87,7 @@
87
87
 
88
88
  - `codemode` 本身作为一次工具调用经过 PreToolUse、权限与 PostToolUse。
89
89
  - 脚本里的每次 `tools.*` 再各自经过完整流程,Hook 按**真实工具名**匹配(`bash`,不是 `codemode`);Hook 输入多两个字段:`viaCodemode: true` 与 `parentToolCallId`(外层 `codemode` 调用的 id)。
90
- - 事件:`tool_execution_update` 透传脚本输出(最近 4000 字符);内层调用发 `tool_execution_start / end`,带 `parentToolCallId`,不进转录、不进模型上下文。`ama --mode acp` 把每次内层调用单列为一条 `tool_call`(标题前缀 `codemode › `,`_meta.ama.parentToolCallId` 指向外层),其权限请求关联到这条内层调用(见 [acp.md](acp.md))。
90
+ - 事件:`tool_execution_update` 透传脚本输出(最近 4000 字符);内层调用发 `tool_execution_start / end`,带 `parentToolCallId`,不进转录、不进模型上下文。`ama --mode acp` 把每次内层调用单列为一条 `tool_call`(标题前缀 `codemode › `,`_meta.ama.parentToolCallId` 指向外层),其权限请求关联到这条内层调用(见 [acp.md](../reference/acp.md))。
91
91
 
92
92
  ## 沙箱
93
93
 
@@ -1,6 +1,6 @@
1
1
  # 命令式 Hook(hooks.json)
2
2
 
3
- 命令式 Hook 是在固定时机运行的 shell 命令:ama 把事件写成 JSON 交给命令的 stdin,按退出码与 stdout JSON 决定放行、阻止或改写。它是**用户策略**层——可以改工具输入、一票否决工具调用、给提示追加上下文、让运行再跑一轮。类型定义在 `src/hooks/types.ts`(经 `@armadra/agent` 导出 `HookInput`、`HookOutput`、`HookConfig` 等)。设计依据见 [design.md](design.md) §6.1、§6.3、§7.3。
3
+ 命令式 Hook 是在固定时机运行的 shell 命令:ama 把事件写成 JSON 交给命令的 stdin,按退出码与 stdout JSON 决定放行、阻止或改写。它是**用户策略**层——可以改工具输入、一票否决工具调用、给提示追加上下文、让运行再跑一轮。类型定义在 `src/hooks/types.ts`(经 `@armadra/agent` 导出 `HookInput`、`HookOutput`、`HookConfig` 等)。设计依据见 [design.md](../design/design.md) §6.1、§6.3、§7.3。
4
4
 
5
5
  ## 配置
6
6
 
@@ -125,7 +125,7 @@ interface HookOutput {
125
125
  - `additionalContext` / `customInstructions` 按配置顺序拼接。
126
126
  - 任一 Hook 返回 `continue: false` 即请求结束运行。
127
127
 
128
- 一次工具调用的完整顺序([design.md](design.md) §6.3):
128
+ 一次工具调用的完整顺序([design.md](../design/design.md) §6.3):
129
129
 
130
130
  ```text
131
131
  模型产出工具调用
@@ -0,0 +1,93 @@
1
+ # 界面语言(中英双语)
2
+
3
+ > 第六波(docs/history/wave6-plan.md §5、D18–D23)。本文是开发约定:怎么选语言、文案放哪、键怎么起名、怎么测。
4
+ > 调研依据见 [research/wave6/R8-i18n.md](../research/wave6/R8-i18n.md)。
5
+
6
+ ## 语言怎么定
7
+
8
+ 优先级从高到低,**进程启动时定一次**,不做运行中切换:
9
+
10
+ 1. 环境变量 `AMA_LANG`(`zh` / `en`,`zh_CN` 之类也认;写错的值忽略);
11
+ 2. 命令行 `--lang zh|en`(也可写在子命令前:`ama --lang en doctor`);SDK `createRuntime({ language })` / `createAgentSession({ language })` 等价;
12
+ 3. profile 的 `language`(嵌入宿主跟随画布界面语言);
13
+ 4. 配置 `ui.language`(`auto` / `zh` / `en`,缺省 `auto`;用户级 / 项目级都可设);
14
+ 5. `LC_ALL` → `LC_MESSAGES` → `LANG` 第一个非空值:`zh*` 为中文,其余(含 `C`、`POSIX`、`en_*`)为英文;
15
+ 6. 都没有:英文。
16
+
17
+ `cli/main.ts` 在解析参数后、任何输出前按 1、2、用户级 `ui.language`、5 定语言;bootstrap 合并 profile 与项目级后,若它们给了 `ui.language` / `language`,再补定一次(仍以 1、2 为准)。`ama doctor` 显示「界面语言:zh(来源 LANG=zh_CN.UTF-8)」(`resolveLocaleWithSource`)。
18
+
19
+ **界面语言只影响给人看的文字。** 发给模型的一切(系统提示、工具描述、工具结果里的标记、截断 / 裁剪占位、外部 Agent 报告、Hook 阻止理由、拒绝理由)固定英文,两种语言下请求逐字节相同。想让模型用某种语言回复,用 `ui.replyLanguage`(在 `rules` 节末尾追加一句英文规则,不设时零字节变化)。
20
+
21
+ ## 文案放哪
22
+
23
+ ```text
24
+ src/i18n/
25
+ index.ts Locale、resolveLocale / resolveLocaleWithSource、setLocale / getLocale、msg()、messagesFor()
26
+ types.ts Messages<T>
27
+ format.ts plural()、formatDuration()
28
+ catalog.ts 汇总全部领域(第六波 C0 一次登记,之后无人再改)
29
+ messages/<领域>.ts
30
+ ```
31
+
32
+ | 领域文件 | 归属批次 |
33
+ | --------------------------------------------------------------------------- | ------------------------------------- |
34
+ | `cli`、`subcommands` | W6-I1 |
35
+ | `interactive`、`approval`、`plan`、`rewind`、`panels`、`permissions` | W6-I2 |
36
+ | `report`、`print`、`drivers`、`session`、`errors` | W6-I3 |
37
+ | `config` | W6-I4 |
38
+ | `agents` / `trace` / `memory` / `auth` / `settings` | W6-A / W6-T1、T2 / W6-M / W6-O / W6-S |
39
+ | `acp`(子对象 `core` / `auth` / `session` / `tools` / `config` / `client`) | ACP-C0 建,各子对象归 ACP 补全的批次 |
40
+
41
+ 每个领域文件同时导出 `en`(形状源)与 `zh`:
42
+
43
+ ```ts
44
+ import { plural } from "../format.js";
45
+ import type { Messages } from "../types.js";
46
+
47
+ export const en = {
48
+ limitTurns: (limit: number) => `ama: reached the turn limit ${limit}; run ended early`,
49
+ dirSummary: (files: number, size: string) => `directory, ${plural(files, "file")}, ${size}`,
50
+ approval: { title: "Approve tool call", keys: { allow: "allow", deny: "deny" } },
51
+ };
52
+
53
+ export const zh = {
54
+ limitTurns: (limit) => `ama: 已达到回合上限 ${limit},运行在完成前结束`,
55
+ dirSummary: (files, size) => `目录,${files} 个文件,${size}`,
56
+ approval: { title: "Approve tool call", keys: { allow: "allow", deny: "deny" } },
57
+ } satisfies Messages<typeof en>;
58
+ ```
59
+
60
+ `satisfies Messages<typeof en>` 让缺键、多键、参数个数 / 类型不符都在 `tsc` 期报错——两种语言必须同时给。
61
+
62
+ 取用:`const m = msg().print; io.stderr(m.limitTurns(limit))`。用嵌套属性访问,不用字符串键。
63
+
64
+ ## 键名规范
65
+
66
+ - 领域文件名即一级命名空间(`msg().approval…`);
67
+ - 叶子 camelCase,按「组件.用途」分组:`approval.title`、`approval.keys.allow`、`rewind.skip.failed`;
68
+ - 不以文案内容命名(`notInstalled` 可以,`weiAnZhuang` 不行);
69
+ - **整句一个键,禁止片段拼接**:英文语序不同,`"追加写入" + 词 + 路径` 这种要写成一个函数,条件分支写进函数体;
70
+ - 插值写成箭头函数,参数类型写在 en 上;复数只英文需要,用 `plural(n, "file")`(不规则词给第三参数);
71
+ - 紧凑时长 `formatDuration(ms)`(`45s` / `2m 10s` / `1h24m`)两种语言共用;`formatTokens` / `formatUsd` / `formatPercent`、日期(ISO)与 compact 状态行记号(`ctx`、`cache`、`$`、`↑ ↓`、`⎇`、`·`)不译;
72
+ - 枚举值、命令名、配置键、动作 id、错误码不译。
73
+
74
+ ## 不要这样做
75
+
76
+ - **模块顶层求值**:`const HELP = msg().cli.help` 会按 import 时的语言定死(SDK / 嵌入场景显示错语言)。改成函数或 getter;`scripts/check-i18n.mjs` 会拦。
77
+ - **按文案判断逻辑**:`text === "未安装"`、`reason.startsWith("失败")`。界面文案会随语言变,逻辑用枚举 / 码(第六波 C0 已把三处改掉)。用户**输入**的别名(`批准`、`步骤`、粘贴标记 `[粘贴 #` / `[paste #`)两种语言同时识别,与界面语言无关。
78
+ - **模型侧模块 import `src/i18n`**:系统提示、工具(`src/tools/**`)、Plan 提示、内置子 Agent、Skill、压缩、codemode 声明、Memory 工具不得 import——`src/i18n/guard.test.ts` 守着。这些模块需要给人看的错误时抛 `AmaError(code, englishMessage, { detail })`,由界面层按 `detail` 渲染(例:`tools/image-file.ts` → `modes/image-input.ts` 的 `msg().errors.imageFile(detail)`)。
79
+ - **宿主解析 `message`**:RPC / ACP 的 `error.message`、`-p` 的 stderr 是人读文本,会随语言变;宿主按 `code` 判断。
80
+
81
+ ## 测试
82
+
83
+ - 测试缺省钉 zh:`test/helpers/setup.ts` 设 `AMA_LANG=zh` 并 `setLocale("zh")`,子进程也是 zh。迁移批次的验收是现有 zh 帧黄金与断言**字节不变**。
84
+ - en 用例自己 `setLocale("en")`(或传 `AMA_LANG=en`),用完在 `afterEach` 里 `setLocale("zh")`;en 帧黄金放 `test/fixtures/tui/en/`。
85
+ - `src/cli/lang-independence.test.ts`:同一脚本在 zh / en 下各跑一遍,发给供应商的请求逐字节相同。
86
+ - `scripts/check-i18n.mjs`(`pnpm check:i18n`,在 `pnpm ci` 里):
87
+ 1. 严格(W6-I5 起,基线已清零删除):`src/**` 源码里含汉字的代码行(注释不算)**出现即失败**。不扫的文件(测试、测试支撑、`src/i18n/`、models.dev 上游快照)在脚本的 `SKIPPED`,允许的行(用户输入别名、粘贴标记识别、价格覆盖数据的 `_reason`)在 `ALLOWED_LINES`,每条都写了理由;新增条目要在 PR 里说明;
88
+ 2. `en` 目录里不得有汉字,`zh` 目录里不得留 `TODO`;
89
+ 3. 顶层常量不得立即调用 `msg()`。
90
+
91
+ ## 体积
92
+
93
+ bundle 用 `charset: "utf8"` 输出(中文按 UTF-8 原样,不转 `\uXXXX`),抵消英文目录带来的增量。
@@ -1,6 +1,6 @@
1
1
  # 记忆(Memory)
2
2
 
3
- > 第六波 W6-M(设计见 [wave6-plan.md](wave6-plan.md) §3、D8–D12;调研 [research/wave6/R7-memory.md](research/wave6/R7-memory.md))。
3
+ > 第六波 W6-M(设计见 [wave6-plan.md](../history/wave6-plan.md) §3、D8–D12;调研 [research/wave6/R7-memory.md](../research/wave6/R7-memory.md))。
4
4
 
5
5
  跨会话的个人笔记:你说「记住……」,模型把它写成一条 Markdown,下次会话开始时索引进系统提示,正文按需读取。
6
6
  **缺省关闭**;关闭时不读盘、不注册工具、不渲染节,发给模型的请求与没有这个功能时逐字节相同。
@@ -1,6 +1,6 @@
1
1
  # 权限模式与 auto 判定
2
2
 
3
- 本文写 ama 的六种权限模式、每次工具调用的判定顺序,以及 `auto` 模式「规则层 → 静态判定 → 模型分类器」三层怎样决定放行还是询问。总体设计见 [design.md](design.md) §6.3、§7;Hook 的输入输出见 [hooks.md](hooks.md)。
3
+ 本文写 ama 的六种权限模式、每次工具调用的判定顺序,以及 `auto` 模式「规则层 → 静态判定 → 模型分类器」三层怎样决定放行还是询问。总体设计见 [design.md](../design/design.md) §6.3、§7;Hook 的输入输出见 [hooks.md](hooks.md)。
4
4
 
5
5
  ## 模式
6
6
 
@@ -42,7 +42,7 @@
42
42
  | 外部 Agent(claude / codex / ACP)请求权限 | `[claude · 会话 abc12345]` | 外部 Agent 给的标题、种类、涉及路径与输入摘要 | 只交给人:宿主 → 界面 → 无人值守拒绝,auto 分类器与模型不参与 |
43
43
  | 外部 Agent 本会话首次运行 | 标题「首次运行外部 Agent」 | 说明(以你在该 CLI 的登录运行)与模式 | allow / deny 规则 `task(<id>)`、`full-auto` 放行,其余交给人(不经分类器) |
44
44
 
45
- 外部 Agent 的「本会话允许」由它自己记住。Manual 模式下 `task(agent=…)` 的 task 调用审批与首次运行确认合并为一次(见 [agents.md](agents.md)「在 task 里使用」)。RPC 的 `context` 是 `{ depth, taskId, origin }`([rpc.md](rpc.md)「审批」)。
45
+ 外部 Agent 的「本会话允许」由它自己记住。Manual 模式下 `task(agent=…)` 的 task 调用审批与首次运行确认合并为一次(见 [agents.md](agents.md)「在 task 里使用」)。RPC 的 `context` 是 `{ depth, taskId, origin }`([rpc.md](../reference/rpc.md)「审批」)。
46
46
 
47
47
  ## plan 模式与只读命令
48
48
 
@@ -1,6 +1,6 @@
1
1
  # Plan 模式
2
2
 
3
- plan 模式让 ama 先只读调研、写出一份结构化的计划,经人批准后再切回执行模式按计划推进。本文写流程、计划格式、审批的几种入口、配置与持久化;权限细节见 [permissions.md](permissions.md)「plan 模式与只读命令」,设计依据见 [wave5-plan.md](wave5-plan.md) §6。
3
+ plan 模式让 ama 先只读调研、写出一份结构化的计划,经人批准后再切回执行模式按计划推进。本文写流程、计划格式、审批的几种入口、配置与持久化;权限细节见 [permissions.md](permissions.md)「plan 模式与只读命令」,设计依据见 [wave5-plan.md](../history/wave5-plan.md) §6。
4
4
 
5
5
  ## 流程
6
6
 
@@ -54,7 +54,7 @@ plan 模式让 ama 先只读调研、写出一份结构化的计划,经人批
54
54
  | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
55
55
  | 交互(TUI) | 用户在底部审批框里选:批准并执行 / 批准,在新上下文执行(两者接着选执行模式:回到进入前的模式 / Accept edits / Auto)/ 继续修改(框内或外部编辑器写意见)/ 放弃并退出 Plan;`e` 在 `$VISUAL` / `$EDITOR` 里改计划,Esc 放弃但留在 Plan。见 [tui.md](tui.md)「Plan 审批」 |
56
56
  | 交互(line,`--no-tui`) | `/plan approve [模式\|fresh]`、`/plan reject`;回复 `1` / `2` / `3` 也能批准(进入前的模式 / Accept edits / Auto),其它内容作为修改意见、留在 plan |
57
- | RPC,声明了 `plans` 能力 | 客户端:`plan_proposed` → `plan_response`(见 [rpc.md](rpc.md)「计划审批」) |
57
+ | RPC,声明了 `plans` 能力 | 客户端:`plan_proposed` → `plan_response`(见 [rpc.md](../reference/rpc.md)「计划审批」) |
58
58
  | SDK,给了 `plan.onProposed` | 回调:运行结束后调用,返回 `{ decision, mode?, feedback?, editedMarkdown? }`;返回 undefined 留待 `session.plan.respond()` |
59
59
  | `-p`、未声明能力的 RPC、无回调的 SDK | 配置 `plan.unattended`:`stop`(缺省)落盘计划后停下,不切模式、不执行;`approve` 在同一次运行里自动批准并执行 |
60
60
 
@@ -65,7 +65,7 @@ plan 模式让 ama 先只读调研、写出一份结构化的计划,经人批
65
65
  - **revise**:留在 plan;`feedback` 作为普通用户消息开回合,模型整份重写计划,新版本号 +1,旧版标 superseded。
66
66
  - **reject**:计划标 rejected,留在 plan。交互界面的「放弃,退出 Plan 模式」在 reject 之后切回进入前的模式;审批框里按 Esc 是 reject 但留在 plan。
67
67
 
68
- **进度记法**:活动工具集里有 `todo`(`tools.default: ["+todo"]`、`--tools …,todo`)时,交接消息请模型「按 todo 推进,每完成一步 todo update」;没有时(`default` 预设缺省不含 todo,见 D20 与 [docs/benchmarks/](https://github.com/Owlbay/armadra-agent/tree/main/docs/benchmarks))请模型每完成一步在回复里**单独一行**写 `[DONE:<步骤 id>]`(如 `[DONE:S1]`),ama 在回合结束时读这些标记:对应的计划待办标 done,没有进行中的项时下一个 pending 转 in_progress,照常落 `ama.todo`、发 `todo_updated`,界面与 RPC 的进度显示不受影响。「在新上下文执行」的首条消息用同样的规则。
68
+ **进度记法**:活动工具集里有 `todo`(`tools.default: ["+todo"]`、`--tools …,todo`)时,交接消息请模型「按 todo 推进,每完成一步 todo update」;没有时(`default` 预设缺省不含 todo,见 D20 与 [docs/benchmarks/](https://github.com/AMA-Link/armadra-agent/tree/main/docs/benchmarks))请模型每完成一步在回复里**单独一行**写 `[DONE:<步骤 id>]`(如 `[DONE:S1]`),ama 在回合结束时读这些标记:对应的计划待办标 done,没有进行中的项时下一个 pending 转 in_progress,照常落 `ama.todo`、发 `todo_updated`,界面与 RPC 的进度显示不受影响。「在新上下文执行」的首条消息用同样的规则。
69
69
 
70
70
  客户端改过的全文(`editedMarkdown`,界面里「在外部编辑器里改」)先落一份新版本,交接消息用改后的全文。
71
71
 
@@ -100,7 +100,7 @@ plan 模式让 ama 先只读调研、写出一份结构化的计划,经人批
100
100
 
101
101
  ## 接口
102
102
 
103
- - RPC:命令 `plan_response` / `get_plan` / `get_todos`,能力 `plans`,事件 `plan_proposed` / `plan_resolved` / `todo_updated`,见 [rpc.md](rpc.md)。
103
+ - RPC:命令 `plan_response` / `get_plan` / `get_todos`,能力 `plans`,事件 `plan_proposed` / `plan_resolved` / `todo_updated`,见 [rpc.md](../reference/rpc.md)。
104
104
  - SDK:`createAgentSession({ plan: { bash?, directory?, unattended?, model?, thinkingLevel?, onProposed? } })`;返回的会话有 `session.plan.current()`、`session.plan.respond(response)`、`session.plan.todos()`。
105
105
  - 进程内:`planController(session)`(`src/agent/session-plan.ts`)给界面用——`pending()`、`respond()`、`proposeFromLastReply()`、`adopt()`、`setAttendance()`。
106
106
  - 交互界面:底部审批框(四个选项 + 执行模式、`e` 编辑计划、Esc 留在 Plan)、`/plan` 面板,`/plan <目标>` 进入 Plan 并发出目标,`/plan approve [模式|fresh]` / `/plan reject` 不开对话框直接作答;见 [tui.md](tui.md)「Plan 审批」。
@@ -1,6 +1,6 @@
1
1
  # 供应商与模型
2
2
 
3
- 内置供应商、模型引用、API Key、自定义供应商与中转站、各协议的 compat 开关,以及缓存。设计依据见 [design.md](design.md) §3、§9.1。
3
+ 内置供应商、模型引用、API Key、自定义供应商与中转站、各协议的 compat 开关,以及缓存。设计依据见 [design.md](../design/design.md) §3、§9.1。
4
4
 
5
5
  ## 配置目录
6
6
 
@@ -629,9 +629,9 @@ OpenRouter 的 Messages 接口只在 `message_delta` 里给缓存 usage,解析
629
629
 
630
630
  长任务的主要用量是缓存读取:前缀一旦变化,此后每次请求都要按全价重读。ama 分三层处理缓存:**协议层**按各家写法打断点、发缓存键与保留层级,并标记响应里有没有缓存字段;**会话层**记录每次请求的前缀指纹,检测未命中、判定端点报不报缓存、在长工具运行期间保温;**展示层**是状态栏、`/session`、RPC 统计与 `ama models cache-probe`(界面怎么读见 [tui.md](tui.md)「缓存与上下文」)。
631
631
 
632
- 前缀稳定由组装保证:系统提示节顺序固定、不含时间戳,工具按名排序,会话中途的变化只以 system 补丁追加在末尾([session-format.md](session-format.md)「消息」)。
632
+ 前缀稳定由组装保证:系统提示节顺序固定、不含时间戳,工具按名排序,会话中途的变化只以 system 补丁追加在末尾([session-format.md](../reference/session-format.md)「消息」)。
633
633
 
634
- **开头的 system 与工具声明在会话内只写一次。** 对话开始之后的节补丁(resume 时 AGENTS.md、Skills 或 SessionStart Hook 输出变了,宿主 instructions 刷新,压缩后记忆节重新渲染)不改写开头:没有打开 `supportsMidConvoSystemMessages` 的协议把它渲染成 `<system-reminder>` 包裹的 user 消息,插在补丁所在的位置,之前的请求仍是逐字节前缀。实测 DeepSeek 接受对话中途的 system 消息、前缀缓存也保持,但模型仍按开头那条回答,所以 DeepSeek 不打开这个开关([cache-midconvo-2026-10-09](benchmarks/cache-midconvo-2026-10-09.md))。
634
+ **开头的 system 与工具声明在会话内只写一次。** 对话开始之后的节补丁(resume 时 AGENTS.md、Skills 或 SessionStart Hook 输出变了,宿主 instructions 刷新,压缩后记忆节重新渲染)不改写开头:没有打开 `supportsMidConvoSystemMessages` 的协议把它渲染成 `<system-reminder>` 包裹的 user 消息,插在补丁所在的位置,之前的请求仍是逐字节前缀。实测 DeepSeek 接受对话中途的 system 消息、前缀缓存也保持,但模型仍按开头那条回答,所以 DeepSeek 不打开这个开关([cache-midconvo-2026-10-09](../benchmarks/cache-midconvo-2026-10-09.md))。
635
635
 
636
636
  工具表同理:对话开始后新加的工具追加在工具表末尾;**移除工具不删声明**,提醒里写一句 `Tool "X" is no longer available in this session; calls to it are rejected.`,模型仍去调用时执行层拒绝(`Tool "X" is not available in this session.`);再加回只提醒 `Tool "X" is available again.`,声明沿用第一次发送的版本。系统提示的 `tools` / `rules` 两节在对话开始后也冻结为已发送的文本。
637
637
 
@@ -748,7 +748,7 @@ xAI、Mistral、OpenRouter、Google 没有承诺的 TTL,留空:不保温、
748
748
  | 取消 | 换模型、换思考级别、压缩、`/tree`、退出时取消,下一次真实请求再开始 |
749
749
  | 记账 | 成功的保温追加 `usage{kind:"cache_warm"}` 条目(不进上下文),计入 `/session` 费用与 RPC 统计;事件 `cache_warm{scheduled|sent|stopped}` |
750
750
 
751
- 宿主可以经 `api.cache.onWarmingDecision` 否决或强制每一次保温([host-api.md](host-api.md)「缓存保温」)。子会话缺省不保温(`cache.warmSubagents: true` 打开)。按目录价格估算,长工具运行期间几乎总是划算;空闲保温只对贵模型、长前缀划算。
751
+ 宿主可以经 `api.cache.onWarmingDecision` 否决或强制每一次保温([host-api.md](../reference/host-api.md)「缓存保温」)。子会话缺省不保温(`cache.warmSubagents: true` 打开)。按目录价格估算,长工具运行期间几乎总是划算;空闲保温只对贵模型、长前缀划算。
752
752
 
753
753
  ### 压缩摘要续写
754
754
 
@@ -1,6 +1,6 @@
1
1
  # 会话统计、检索、复用、导出与检查点
2
2
 
3
- 这几条命令都只读会话目录(`<数据目录>/sessions`,`--session-dir` 可改;文件格式见 [session-format.md](session-format.md)):不加锁、不修复半行、不改文件,正在运行的会话也能读。会话文件按块逐行读取,不整份读进内存:`ama sessions list` 只解析每个文件的头、首条条目、改名与首条提示,其余行只看类型,几十 MB 的会话也不会让内存随文件大小上涨;`--resume` 打开会话同样逐行解析。范围缺省是**当前目录**的会话,`--all` 看全部。
3
+ 这几条命令都只读会话目录(`<数据目录>/sessions`,`--session-dir` 可改;文件格式见 [session-format.md](../reference/session-format.md)):不加锁、不修复半行、不改文件,正在运行的会话也能读。会话文件按块逐行读取,不整份读进内存:`ama sessions list` 只解析每个文件的头、首条条目、改名与首条提示,其余行只看类型,几十 MB 的会话也不会让内存随文件大小上涨;`--resume` 打开会话同样逐行解析。范围缺省是**当前目录**的会话,`--all` 看全部。
4
4
 
5
5
  ## 统计:`ama stats`
6
6
 
@@ -154,7 +154,7 @@ ama sessions trace <id|文件> [--html [文件]] [--json] [--output <文件>] [-
154
154
  - `--no-content`:只留结构、时间与数字(没有提示、参数、结果,也没有错误原文),适合只想分享性能问题时。
155
155
  - `--children`:内嵌 ama 子 Agent 子会话里节点的预览;缺省只嵌它们的结构与数字。外部 Agent 本来就只有骨架。
156
156
  - 预览按条截断(参数 500、其余 2000 字符),整份预览上限 4 MB 字符,超出后更早的预览置空并在详情里注明。
157
- - `--json`(或 `--format json`):与 RPC `get_trace` 同形的 JSON([rpc.md](rpc.md)「轨迹」),包含全部回合、已加载的子会话轨迹与本会话节点的 `previews`
157
+ - `--json`(或 `--format json`):与 RPC `get_trace` 同形的 JSON([rpc.md](../reference/rpc.md)「轨迹」),包含全部回合、已加载的子会话轨迹与本会话节点的 `previews`
158
158
  (`--no-content` 时没有)。
159
159
  - 输出:`--html <文件>`(文件名以 `.html` / `.htm` 结尾时才当作值,否则用 `--output`)或 `--output <文件>` 写文件(0600),否则写 stdout。
160
160
  `--open` 写好后用系统浏览器打开(没给文件时写到临时目录)。
@@ -163,7 +163,7 @@ ama sessions trace <id|文件> [--html [文件]] [--json] [--output <文件>] [-
163
163
 
164
164
  ## 检查点与文件备份
165
165
 
166
- 回滚代码(`/rewind`,设计见 [rewind-plan.md](rewind-plan.md))依赖检查点:每个新回合开始时,ama 记下 edit / write 改过的文件当时的内容。
166
+ 回滚代码(`/rewind`,设计见 [rewind-plan.md](../history/rewind-plan.md))依赖检查点:每个新回合开始时,ama 记下 edit / write 改过的文件当时的内容。
167
167
 
168
168
  - **存储位置**:备份按内容 sha256 存在 `<数据目录>/file-history/blobs/<前 2 位>/<sha256>`,原字节、不压缩;多个会话、多个检查点共用,同内容只存一份。会话文件里只有 `ama.checkpoint` / `ama.checkpoint-track` 两类 `custom` 条目(记哈希,不进上下文)。会话目录不在缺省位置时(`--session-dir`、宿主 profile 的 `sessionDir`),目录登记在 `file-history/roots.json`,清理时一并扫描。
169
169
  - **跟踪范围**:edit / write(含 codemode 内层调用与 task 子会话)第一次写某文件之前备份它;之后每个新回合按当前磁盘内容重拍已跟踪的文件,所以 bash 或手动对这些文件的改动也会进下一个检查点。bash 新建或改动的其它文件不跟踪。
@@ -192,7 +192,7 @@ ama sessions trace <id|文件> [--html [文件]] [--json] [--output <文件>] [-
192
192
 
193
193
  ## 回滚(会话内)
194
194
 
195
- `/rewind`、RPC `rewind`、SDK `session.rewind()` 回到某条用户消息之前(设计见 [rewind-plan.md](rewind-plan.md)):
195
+ `/rewind`、RPC `rewind`、SDK `session.rewind()` 回到某条用户消息之前(设计见 [rewind-plan.md](../history/rewind-plan.md)):
196
196
 
197
197
  - 回滚点是活动路径上开启新回合的用户消息,从旧到新;运行中插话、排队消息与 Stop Hook 续跑的消息并入当前回合,不单列。运行中回滚报 `busy`。
198
198
  - 对话回滚复用 `/tree` 换叶子:离开的分支留在文件里,可以再从 `/tree` 回去;模型、思考级别与权限模式保持当前,不随回滚改变。之后第一次请求的 system、工具表与落点之前的消息和回滚前逐字节相同,提示缓存照常命中。
@@ -200,7 +200,7 @@ ama sessions trace <id|文件> [--html [文件]] [--json] [--output <文件>] [-
200
200
  - 仅对话或仅代码时,下一次提示前在末尾追加一条 `ama.rewind-note` 告诉模型哪些文件与对话不一致;对话 + 代码不追加。
201
201
  - 内存会话与 `checkpoints.mode: "off"` 不建检查点,只能仅对话。
202
202
  - 运行中 Esc 中断、本回合还没有任何回复或工具调用时,撤回该回合并回填原消息(`ui.restoreOnCancel`,缺省 true)。
203
- - 回到图片被降级之前时图片从会话文件回读;文件已被外部改写、读不回时图片保留为空,并告警一次(`AMA_LOG`,TUI 显示在通知区;见 [session-format.md](session-format.md)「内存表示」)。
203
+ - 回到图片被降级之前时图片从会话文件回读;文件已被外部改写、读不回时图片保留为空,并告警一次(`AMA_LOG`,TUI 显示在通知区;见 [session-format.md](../reference/session-format.md)「内存表示」)。
204
204
 
205
205
  ## 请求明细(设计,未实现)
206
206
 
@@ -1,12 +1,12 @@
1
1
  # 终端界面
2
2
 
3
- 交互模式的使用说明,以及终端组件库 `@armadra/agent/tui` 的 API。设计依据见 [design.md](design.md) §12。
3
+ 交互模式的使用说明,以及终端组件库 `@armadra/agent/tui` 的 API。设计依据见 [design.md](../design/design.md) §12。
4
4
 
5
5
  `ama` 在终端里直接运行(stdin / stdout 都是 TTY、`TERM` 不是 `dumb`、没有 `--no-tui`)时进入交互模式。界面只用**主屏**:对话历史滚进终端回滚,不切备用屏,所以在 tmux 里 `capture-pane` 能读到完整对话,退出后对话也留在屏幕上。
6
6
 
7
7
  ## 布局
8
8
 
9
- 视觉规格(配色、字形、逐屏样稿)见 [tui-design.md](tui-design.md)。层级用缩进表达:第 0 列是用户 `›`、工具 `⏺` 与提示符号,第 2 列是结果连接符 `⎿`,第 4 列是工具输出;去掉颜色(`NO_COLOR`、`capture-pane` 不带 `-e`)也读得出结构。
9
+ 视觉规格(配色、字形、逐屏样稿)见 [tui-design.md](../design/tui-design.md)。层级用缩进表达:第 0 列是用户 `›`、工具 `⏺` 与提示符号,第 2 列是结果连接符 `⎿`,第 4 列是工具输出;去掉颜色(`NO_COLOR`、`capture-pane` 不带 `-e`)也读得出结构。
10
10
 
11
11
  ```
12
12
  ▄███▄ ██▄ ▄██ ▄███▄ ama 0.6.2 ← 启动头(normal 档)
@@ -148,11 +148,11 @@ Accept edits | shift+tab 切换 claude-opus-5-5 medium | Ctx 3.0% 8.2k/272k a
148
148
 
149
149
  缺省键选 `Ctrl+X` 的原因:macOS Terminal、iTerm2、tmux、Windows Terminal 都原样送达,且没有别的绑定;`Ctrl+Enter` 不开 kitty 键盘协议时与 Enter 无法区分,`Ctrl+S` 可能被 XOFF 流控吃掉,`Alt+Enter` 已是 followUp,`Alt+字母` 在 macOS 缺省不送 Meta,`Ctrl+]` 在非美式键盘上难按。可在 `keybindings.json` 改。
150
150
 
151
- line 模式(`--no-tui`)运行中输入 `/interrupt <文本>` 效果相同(空闲时就是普通提示);交互界面里也认这条命令。RPC 是 `prompt` / `steer` 的 `interrupt: true`,见 [rpc.md](rpc.md)。
151
+ line 模式(`--no-tui`)运行中输入 `/interrupt <文本>` 效果相同(空闲时就是普通提示);交互界面里也认这条命令。RPC 是 `prompt` / `steer` 的 `interrupt: true`,见 [rpc.md](../reference/rpc.md)。
152
152
 
153
153
  ## 回滚
154
154
 
155
- 设计见 [rewind-plan.md](rewind-plan.md)。每条开启新回合的用户消息都是一个回滚点;edit / write 改过的文件在消息发出前有检查点(`checkpoints.mode`,bash 改动只在下一回合重拍已跟踪文件时收进来)。
155
+ 设计见 [rewind-plan.md](../history/rewind-plan.md)。每条开启新回合的用户消息都是一个回滚点;edit / write 改过的文件在消息发出前有检查点(`checkpoints.mode`,bash 改动只在下一回合重拍已跟踪文件时收进来)。
156
156
 
157
157
  - **入口**:`/rewind`,或空闲且输入框为空时双击 Esc——第一次底部提示「再按 Esc 回滚」(1 秒消失),800 ms 内再按打开列表。输入框有字时双击 Esc 是清空(提示「再按 Esc 清空」),文字存进输入历史,↑ 取回。运行中 Esc 仍是中断;审批对话框、选择器打开时 Esc 归它们。
158
158
  - **中断即撤回**:运行中按 Esc 中断,若这一回合还没有任何回复文字或工具调用、输入框为空(`ui.restoreOnCancel`,缺省 true),自动撤回这条消息并把原文放回输入框,消息区一行「已撤回被中断的消息」。
@@ -319,7 +319,7 @@ CLI 子命令(`ama providers add` / `refresh` 的写入与 `--probe` 计费确
319
319
  - write:目标是否存在、现有行数与大小 → 新内容;覆盖本会话没读过的文件标黄。
320
320
  - edit:对原文干跑一遍,列出每处 −n/+m 行与总变化;匹配不到或不唯一时提前说明。
321
321
 
322
- 预览按严重度着色(危险红、警告黄、其余暗色),只读、有上限:每个目录最多计 2000 项,整次预览 200 ms 预算,超出只给提示、不降低严重度;超过 2 MiB 的文件只报大小。预览失败不影响审批。line 模式在问句之前逐行打印同样的预览;RPC 客户端从 `permission_request.preview` 拿到它([rpc.md](rpc.md)「审批」)。
322
+ 预览按严重度着色(危险红、警告黄、其余暗色),只读、有上限:每个目录最多计 2000 项,整次预览 200 ms 预算,超出只给提示、不降低严重度;超过 2 MiB 的文件只报大小。预览失败不影响审批。line 模式在问句之前逐行打印同样的预览;RPC 客户端从 `permission_request.preview` 拿到它([rpc.md](../reference/rpc.md)「审批」)。
323
323
 
324
324
  ## Plan 审批
325
325
 
@@ -389,7 +389,7 @@ Plan 模式(Shift+Tab、`/permission plan`、`/plan <目标>`、`--permission-
389
389
  - 按了没进去时底部提示一行(3 秒):输入框有字——「输入框有字;清空后再按 ↓ 进 Agent 栏」(每段草稿一次,光标在末行时;`↓` 照常下移);栏关闭——「Agent 栏已关闭(ui.agentBar),用 /tasks」;没有任务——「还没有子 Agent 任务」。在用 `↑` `↓` 浏览输入历史时 `↓` 只翻历史。
390
390
  - `Ctrl+B` 不进栏,是「前台任务转后台」(见上)。想要原来的「`Ctrl+B` 进栏」可在 `keybindings.json` 写 `"app.agents.focus": ["down", "ctrl+b"]` 并把 `app.tasks.background` 改成别的键。
391
391
  - 栏里:`↑` `↓` 选(列出本会话全部任务,窗口跟着滚;在第一项再按 `↑` 回到输入框),Enter 打开子 Agent 视图(选中的任务有停靠的审批时随即弹出),`b` / `Ctrl+B` 把选中的前台任务转后台(不是前台运行中的给一行提示),`x` 停止选中的任务(第一次提示「再按 x 停止 t2」,1.5 秒内再按才停),Esc 回到输入框;其它字母回到输入框并把字填进去。末行是按键提示 `↑↓ 选择 · Enter 打开 · b 转后台 · x 停止 · Esc 返回`,窄屏丢掉 `b` / `x` 两项。
392
- - 嵌入宿主(有 profile)不再缺省关闭栏;宿主自己展示子任务、不要栏时在 profile 里写 `ui.agentBar: "off"`(见 [host-api.md](host-api.md)「嵌入 Armadra」)。关闭后栏不显示,`↓` 在有任务时提示改用 `/tasks`。
392
+ - 嵌入宿主(有 profile)不再缺省关闭栏;宿主自己展示子任务、不要栏时在 profile 里写 `ui.agentBar: "off"`(见 [host-api.md](../reference/host-api.md)「嵌入 Armadra」)。关闭后栏不显示,`↓` 在有任务时提示改用 `/tasks`。
393
393
 
394
394
  ### 子 Agent 视图
395
395
 
@@ -409,7 +409,7 @@ t2 explore · 运行中 1m05s · 3 轮 · ↑12k ↓3.4k · Esc 返回 · /tasks
409
409
 
410
410
  - 正文实时跟随:ama 子 Agent 显示子会话的全部消息与工具调用(与消息区同样的渲染);子会话句柄已被释放(保留上限 16 个)或会话是 resume 进来的,就只读加载子会话文件,任务再次运行时接上实时事件。外部 Agent(claude / codex / ACP)显示本进程内存里的实时输出(文本、思考、工具起止、回合、提示;最多 2000 条 / 1 MB,不落盘);ama 重启后只剩一行说明「用原 CLI resume <会话 id> 查看全文」。
411
411
  - 输入框为空时:`↑` / PgUp 上翻(暂停跟随,底部提示「已暂停跟随 · End 继续」),`↓` / PgDn 下翻,End(暂停时也可按 `f`)回到跟随;`←` `→` 切到上一个 / 下一个任务;Esc 返回主界面。输入框有字时 Esc 先清空。
412
- - Enter 把输入发给这个子 Agent(会话里记为 `origin: "direct"` 的 user 消息,见 [session-format.md](session-format.md)):ama 子 Agent 运行中 → 排到它本轮结束时送达;外部 Agent 运行中或任务还在排队 → 等本次运行结束后续聊;已结束 → 后台续聊(同 `task_ctl send`,完成后主会话照常收到 `<task-notification>`)。底部一行提示发送结果。父会话的模型不知道你直接和子 Agent 说过话,结果经结束通知自然带回。
412
+ - Enter 把输入发给这个子 Agent(会话里记为 `origin: "direct"` 的 user 消息,见 [session-format.md](../reference/session-format.md)):ama 子 Agent 运行中 → 排到它本轮结束时送达;外部 Agent 运行中或任务还在排队 → 等本次运行结束后续聊;已结束 → 后台续聊(同 `task_ctl send`,完成后主会话照常收到 `<task-notification>`)。底部一行提示发送结果。父会话的模型不知道你直接和子 Agent 说过话,结果经结束通知自然带回。
413
413
  - `Ctrl+X` 打断并发送给这个子 Agent:ama 子 Agent 运行中 → 中止它当前这一轮(工具按中断收尾)并立即以这条消息开新一轮,任务照常完成、照常通知主会话;外部 Agent 的驱动能中断单个回合(ACP `session/cancel`、Claude stream-json interrupt、Codex `turn/interrupt`)→ 中断后立即以它(连同之前排着的消息)开下一回合;不能(oneshot、宿主驱动)或任务还在并发池排队 → 退回排队并提示「不支持打断,已排队」;已结束 → 同 Enter 的后台续聊。`ui.enterWhileRunning: "interrupt"` 时与 Enter 互换。主会话不受影响。
414
414
  - 视图里 Esc 不中断任何东西:Esc 只是返回。停止子任务用 `/tasks stop <id>`,转后台用 `Ctrl+B` 或 `/tasks bg [id]`——在视图输入框里也能用(视图里只认这两条命令)。
415
415
  - 正在看的任务等审批时标题显示「等待审批」,审批框照常弹在视图上面(带 `[task:<类型>]` 来源);它的审批停靠在栏里时,打开视图即弹出。
@@ -467,7 +467,7 @@ t2 explore · 运行中 1m05s · 3 轮 · ↑12k ↓3.4k · Esc 返回 · /tasks
467
467
  - 保温与权限分类等辅助请求收在末尾「辅助请求 N 次」一组,缺省折叠。
468
468
  - line 模式(`--ui line`、管道)里 `/trace [任务 id]` 打印同一棵树的文本(全部展开、不画条形)。
469
469
 
470
- 计时来自会话文件里的 `custom{customType:"ama.trace"}` 条目([session-format.md](session-format.md)),只有 id、时间与计数;
470
+ 计时来自会话文件里的 `custom{customType:"ama.trace"}` 条目([session-format.md](../reference/session-format.md)),只有 id、时间与计数;
471
471
  提示、参数、结果的预览从会话条目按需读取,不进轨迹本身。
472
472
 
473
473
  ## Memory