@armadra/agent 0.4.0 → 0.5.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 (422) hide show
  1. package/CHANGELOG.md +174 -1
  2. package/README.md +201 -82
  3. package/THIRD_PARTY_NOTICES.md +34 -0
  4. package/dist/acp.d.ts +18 -0
  5. package/dist/acp.js +19 -0
  6. package/dist/agent/limits.d.ts +38 -0
  7. package/dist/agent/limits.js +127 -0
  8. package/dist/agent/loop-guard.d.ts +38 -0
  9. package/dist/agent/loop-guard.js +95 -0
  10. package/dist/agent/loop.d.ts +4 -0
  11. package/dist/agent/loop.js +7 -0
  12. package/dist/agent/prompt-rules.d.ts +12 -0
  13. package/dist/agent/prompt-rules.js +18 -0
  14. package/dist/agent/reminders.d.ts +59 -0
  15. package/dist/agent/reminders.js +327 -0
  16. package/dist/agent/session-cache.d.ts +5 -0
  17. package/dist/agent/session-cache.js +17 -1
  18. package/dist/agent/session-classifier.d.ts +1 -1
  19. package/dist/agent/session-classifier.js +3 -1
  20. package/dist/agent/session-compaction.d.ts +35 -6
  21. package/dist/agent/session-compaction.js +157 -31
  22. package/dist/agent/session-core.d.ts +27 -1
  23. package/dist/agent/session-extensions.d.ts +61 -0
  24. package/dist/agent/session-extensions.js +129 -0
  25. package/dist/agent/session-images.d.ts +23 -0
  26. package/dist/agent/session-images.js +97 -0
  27. package/dist/agent/session-plan.d.ts +21 -0
  28. package/dist/agent/session-plan.js +524 -0
  29. package/dist/agent/session-rewind.d.ts +81 -0
  30. package/dist/agent/session-rewind.js +354 -0
  31. package/dist/agent/session-run.d.ts +28 -1
  32. package/dist/agent/session-run.js +157 -6
  33. package/dist/agent/session-settings.d.ts +49 -0
  34. package/dist/agent/session-settings.js +95 -0
  35. package/dist/agent/session-subagent.d.ts +36 -24
  36. package/dist/agent/session-subagent.js +259 -129
  37. package/dist/agent/session-sync.d.ts +10 -3
  38. package/dist/agent/session-sync.js +37 -8
  39. package/dist/agent/session-telemetry.d.ts +39 -0
  40. package/dist/agent/session-telemetry.js +231 -0
  41. package/dist/agent/session-tools.js +40 -1
  42. package/dist/agent/session.d.ts +30 -29
  43. package/dist/agent/session.js +79 -123
  44. package/dist/agent/subagent-registry.d.ts +91 -0
  45. package/dist/agent/subagent-registry.js +494 -0
  46. package/dist/agent/system-prompt.d.ts +6 -3
  47. package/dist/agent/system-prompt.js +7 -2
  48. package/dist/agent/tool-runner.d.ts +8 -1
  49. package/dist/agent/tool-runner.js +57 -4
  50. package/dist/agent/types-w5.d.ts +192 -0
  51. package/dist/agent/types-w5.js +10 -0
  52. package/dist/agent/types.d.ts +47 -4
  53. package/dist/agent/types.js +2 -0
  54. package/dist/agent/worktree.d.ts +36 -0
  55. package/dist/agent/worktree.js +86 -0
  56. package/dist/agents/builtin.d.ts +14 -0
  57. package/dist/agents/builtin.js +39 -0
  58. package/dist/agents/catalog.d.ts +43 -0
  59. package/dist/agents/catalog.js +82 -0
  60. package/dist/agents/discover.d.ts +35 -0
  61. package/dist/agents/discover.js +83 -0
  62. package/dist/agents/external.d.ts +82 -0
  63. package/dist/agents/external.js +326 -0
  64. package/dist/agents/parse.d.ts +18 -0
  65. package/dist/agents/parse.js +116 -0
  66. package/dist/agents/result.d.ts +32 -0
  67. package/dist/agents/result.js +67 -0
  68. package/dist/agents/task-control.d.ts +17 -0
  69. package/dist/agents/task-control.js +17 -0
  70. package/dist/agents/task-record.d.ts +78 -0
  71. package/dist/agents/task-record.js +141 -0
  72. package/dist/agents/types.d.ts +46 -0
  73. package/dist/agents/types.js +8 -0
  74. package/dist/ai/apis/anthropic-compat.d.ts +36 -0
  75. package/dist/ai/apis/anthropic-compat.js +92 -0
  76. package/dist/ai/apis/anthropic-request.d.ts +7 -6
  77. package/dist/ai/apis/anthropic-request.js +10 -28
  78. package/dist/ai/apis/cache-params.d.ts +11 -2
  79. package/dist/ai/apis/cache-params.js +25 -6
  80. package/dist/ai/apis/openai-compat.d.ts +4 -1
  81. package/dist/ai/apis/openai-compat.js +8 -1
  82. package/dist/ai/image-limits.d.ts +45 -0
  83. package/dist/ai/image-limits.js +68 -0
  84. package/dist/ai/providers/builtin.d.ts +18 -6
  85. package/dist/ai/providers/builtin.js +135 -6
  86. package/dist/ai/providers/catalog-data.js +17 -13
  87. package/dist/ai/providers/catalog.d.ts +60 -7
  88. package/dist/ai/providers/catalog.js +197 -38
  89. package/dist/ai/providers/channels.d.ts +33 -3
  90. package/dist/ai/providers/channels.js +108 -7
  91. package/dist/ai/providers/enrich.d.ts +6 -3
  92. package/dist/ai/providers/enrich.js +19 -4
  93. package/dist/ai/providers/models-dev-cache.d.ts +28 -24
  94. package/dist/ai/providers/models-dev-cache.js +92 -78
  95. package/dist/ai/providers/models-dev-data.d.ts +7 -0
  96. package/dist/ai/providers/models-dev-data.js +32 -0
  97. package/dist/ai/providers/models-dev-snapshot.d.ts +50 -0
  98. package/dist/ai/providers/models-dev-snapshot.js +137 -0
  99. package/dist/ai/providers/models-dev.d.ts +51 -10
  100. package/dist/ai/providers/models-dev.js +132 -39
  101. package/dist/ai/providers/registry.d.ts +20 -10
  102. package/dist/ai/providers/registry.js +82 -43
  103. package/dist/ai/types.d.ts +28 -2
  104. package/dist/ai/types.js +5 -0
  105. package/dist/bundle/ama.cjs +36203 -20499
  106. package/dist/checkpoints/backend.d.ts +61 -0
  107. package/dist/checkpoints/backend.js +135 -0
  108. package/dist/checkpoints/blobs.d.ts +60 -0
  109. package/dist/checkpoints/blobs.js +203 -0
  110. package/dist/checkpoints/gc.d.ts +47 -0
  111. package/dist/checkpoints/gc.js +144 -0
  112. package/dist/checkpoints/git-head.d.ts +15 -0
  113. package/dist/checkpoints/git-head.js +89 -0
  114. package/dist/checkpoints/index.d.ts +17 -0
  115. package/dist/checkpoints/index.js +17 -0
  116. package/dist/checkpoints/replay.d.ts +48 -0
  117. package/dist/checkpoints/replay.js +154 -0
  118. package/dist/checkpoints/restore.d.ts +86 -0
  119. package/dist/checkpoints/restore.js +263 -0
  120. package/dist/checkpoints/settings.d.ts +14 -0
  121. package/dist/checkpoints/settings.js +23 -0
  122. package/dist/checkpoints/shadow-git.d.ts +108 -0
  123. package/dist/checkpoints/shadow-git.js +491 -0
  124. package/dist/checkpoints/shadow-restore.d.ts +25 -0
  125. package/dist/checkpoints/shadow-restore.js +128 -0
  126. package/dist/checkpoints/tracker.d.ts +64 -0
  127. package/dist/checkpoints/tracker.js +192 -0
  128. package/dist/checkpoints/types.d.ts +99 -0
  129. package/dist/checkpoints/types.js +12 -0
  130. package/dist/cli/args.d.ts +8 -4
  131. package/dist/cli/args.js +17 -97
  132. package/dist/cli/bootstrap.js +13 -1
  133. package/dist/cli/codemode-notice.d.ts +3 -2
  134. package/dist/cli/codemode-notice.js +3 -2
  135. package/dist/cli/compose-agents.d.ts +27 -0
  136. package/dist/cli/compose-agents.js +111 -0
  137. package/dist/cli/compose-extensions.d.ts +29 -0
  138. package/dist/cli/compose-extensions.js +44 -0
  139. package/dist/cli/compose-session.d.ts +3 -0
  140. package/dist/cli/compose-session.js +47 -4
  141. package/dist/cli/compose.d.ts +3 -0
  142. package/dist/cli/compose.js +33 -6
  143. package/dist/cli/deps.d.ts +6 -0
  144. package/dist/cli/exit-codes.d.ts +10 -0
  145. package/dist/cli/exit-codes.js +12 -0
  146. package/dist/cli/help-text.d.ts +4 -0
  147. package/dist/cli/help-text.js +102 -0
  148. package/dist/cli/startup-screen.js +5 -3
  149. package/dist/cli/startup-steps.js +7 -1
  150. package/dist/cli/subcommands/config.d.ts +4 -1
  151. package/dist/cli/subcommands/config.js +17 -6
  152. package/dist/cli/subcommands/doctor.js +21 -0
  153. package/dist/cli/subcommands/models-discover.js +5 -6
  154. package/dist/cli/subcommands/models.d.ts +2 -0
  155. package/dist/cli/subcommands/models.js +33 -14
  156. package/dist/cli/subcommands/providers.js +5 -6
  157. package/dist/cli/subcommands/sessions.d.ts +3 -1
  158. package/dist/cli/subcommands/sessions.js +36 -2
  159. package/dist/codemode/capability.d.ts +24 -7
  160. package/dist/codemode/capability.js +38 -10
  161. package/dist/codemode/host-side.d.ts +14 -0
  162. package/dist/codemode/host-side.js +24 -1
  163. package/dist/codemode/tool.d.ts +1 -1
  164. package/dist/codemode/tool.js +6 -4
  165. package/dist/compaction/breaker.d.ts +25 -9
  166. package/dist/compaction/breaker.js +47 -17
  167. package/dist/compaction/estimate.d.ts +11 -3
  168. package/dist/compaction/estimate.js +64 -22
  169. package/dist/compaction/image-budget.d.ts +45 -0
  170. package/dist/compaction/image-budget.js +115 -0
  171. package/dist/compaction/post-compact.d.ts +38 -0
  172. package/dist/compaction/post-compact.js +152 -0
  173. package/dist/compaction/protect.d.ts +27 -0
  174. package/dist/compaction/protect.js +56 -0
  175. package/dist/compaction/prune-tier.d.ts +58 -12
  176. package/dist/compaction/prune-tier.js +120 -54
  177. package/dist/compaction/summarize-tier.d.ts +23 -4
  178. package/dist/compaction/summarize-tier.js +100 -29
  179. package/dist/config/checker.d.ts +28 -0
  180. package/dist/config/checker.js +97 -0
  181. package/dist/config/json-schema.js +63 -2
  182. package/dist/config/key-docs.js +72 -3
  183. package/dist/config/merge.d.ts +5 -3
  184. package/dist/config/merge.js +81 -7
  185. package/dist/config/profile.d.ts +2 -0
  186. package/dist/config/profile.js +2 -0
  187. package/dist/config/schema-w5.d.ts +18 -0
  188. package/dist/config/schema-w5.js +109 -0
  189. package/dist/config/schema.d.ts +5 -9
  190. package/dist/config/schema.js +68 -114
  191. package/dist/config/types-w5.d.ts +118 -0
  192. package/dist/config/types-w5.js +20 -0
  193. package/dist/config/types.d.ts +50 -1
  194. package/dist/config/types.js +12 -0
  195. package/dist/drivers/acp/client.d.ts +57 -0
  196. package/dist/drivers/acp/client.js +160 -0
  197. package/dist/drivers/acp/driver.d.ts +31 -0
  198. package/dist/drivers/acp/driver.js +274 -0
  199. package/dist/drivers/acp/testing/fake-agent-main.d.ts +5 -0
  200. package/dist/drivers/acp/testing/fake-agent-main.js +7 -0
  201. package/dist/drivers/acp/testing/fake-agent.d.ts +27 -0
  202. package/dist/drivers/acp/testing/fake-agent.js +211 -0
  203. package/dist/drivers/acp/types.d.ts +285 -0
  204. package/dist/drivers/acp/types.js +36 -0
  205. package/dist/drivers/agents.d.ts +58 -0
  206. package/dist/drivers/agents.js +142 -0
  207. package/dist/drivers/base.d.ts +35 -0
  208. package/dist/drivers/base.js +59 -0
  209. package/dist/drivers/catalog.d.ts +46 -0
  210. package/dist/drivers/catalog.js +167 -0
  211. package/dist/drivers/env.d.ts +20 -0
  212. package/dist/drivers/env.js +46 -0
  213. package/dist/drivers/host-runners.d.ts +18 -0
  214. package/dist/drivers/host-runners.js +45 -0
  215. package/dist/drivers/jsonrpc.d.ts +58 -0
  216. package/dist/drivers/jsonrpc.js +180 -0
  217. package/dist/drivers/native/claude-normalize.d.ts +46 -0
  218. package/dist/drivers/native/claude-normalize.js +106 -0
  219. package/dist/drivers/native/claude-stream.d.ts +29 -0
  220. package/dist/drivers/native/claude-stream.js +456 -0
  221. package/dist/drivers/native/codex-app-server.d.ts +26 -0
  222. package/dist/drivers/native/codex-app-server.js +407 -0
  223. package/dist/drivers/native/codex-normalize.d.ts +38 -0
  224. package/dist/drivers/native/codex-normalize.js +124 -0
  225. package/dist/drivers/native/oneshot.d.ts +28 -0
  226. package/dist/drivers/native/oneshot.js +312 -0
  227. package/dist/drivers/permissions.d.ts +40 -0
  228. package/dist/drivers/permissions.js +92 -0
  229. package/dist/drivers/pids.d.ts +32 -0
  230. package/dist/drivers/pids.js +93 -0
  231. package/dist/drivers/pool.d.ts +28 -0
  232. package/dist/drivers/pool.js +96 -0
  233. package/dist/drivers/probe.d.ts +47 -0
  234. package/dist/drivers/probe.js +172 -0
  235. package/dist/drivers/process.d.ts +48 -0
  236. package/dist/drivers/process.js +100 -0
  237. package/dist/drivers/runner.d.ts +61 -0
  238. package/dist/drivers/runner.js +388 -0
  239. package/dist/drivers/store.d.ts +49 -0
  240. package/dist/drivers/store.js +91 -0
  241. package/dist/drivers/turn.d.ts +41 -0
  242. package/dist/drivers/turn.js +99 -0
  243. package/dist/drivers/types.d.ts +122 -0
  244. package/dist/drivers/types.js +11 -0
  245. package/dist/git/info.d.ts +75 -0
  246. package/dist/git/info.js +191 -0
  247. package/dist/hooks/protocol.js +6 -1
  248. package/dist/hooks/types.d.ts +10 -1
  249. package/dist/hooks/types.js +2 -0
  250. package/dist/host/api-impl.d.ts +7 -0
  251. package/dist/host/api-impl.js +15 -0
  252. package/dist/host/types.d.ts +24 -2
  253. package/dist/host/types.js +4 -0
  254. package/dist/index.d.ts +3 -0
  255. package/dist/index.js +1 -0
  256. package/dist/modes/acp/acp-events.d.ts +46 -0
  257. package/dist/modes/acp/acp-events.js +233 -0
  258. package/dist/modes/acp/acp-mode.d.ts +17 -0
  259. package/dist/modes/acp/acp-mode.js +47 -0
  260. package/dist/modes/acp/acp-server.d.ts +79 -0
  261. package/dist/modes/acp/acp-server.js +315 -0
  262. package/dist/modes/commands-core.d.ts +7 -1
  263. package/dist/modes/commands-core.js +55 -0
  264. package/dist/modes/image-input.d.ts +12 -4
  265. package/dist/modes/image-input.js +22 -5
  266. package/dist/modes/interactive/agent-panels.d.ts +14 -0
  267. package/dist/modes/interactive/agent-panels.js +103 -0
  268. package/dist/modes/interactive/agent-ui.d.ts +73 -0
  269. package/dist/modes/interactive/agent-ui.js +234 -0
  270. package/dist/modes/interactive/approval-dialog.d.ts +21 -4
  271. package/dist/modes/interactive/approval-dialog.js +98 -20
  272. package/dist/modes/interactive/approval-merge.d.ts +41 -0
  273. package/dist/modes/interactive/approval-merge.js +89 -0
  274. package/dist/modes/interactive/clipboard-paste.d.ts +18 -0
  275. package/dist/modes/interactive/clipboard-paste.js +28 -0
  276. package/dist/modes/interactive/commands.d.ts +9 -1
  277. package/dist/modes/interactive/commands.js +19 -0
  278. package/dist/modes/interactive/double-esc.d.ts +20 -0
  279. package/dist/modes/interactive/double-esc.js +34 -0
  280. package/dist/modes/interactive/event-notices.d.ts +32 -0
  281. package/dist/modes/interactive/event-notices.js +79 -0
  282. package/dist/modes/interactive/external-editor.d.ts +16 -0
  283. package/dist/modes/interactive/external-editor.js +39 -0
  284. package/dist/modes/interactive/interactive-mode.d.ts +14 -1
  285. package/dist/modes/interactive/interactive-mode.js +134 -136
  286. package/dist/modes/interactive/key-dispatch.d.ts +16 -2
  287. package/dist/modes/interactive/key-dispatch.js +49 -1
  288. package/dist/modes/interactive/line/line-mode.d.ts +2 -1
  289. package/dist/modes/interactive/line/line-mode.js +22 -5
  290. package/dist/modes/interactive/line/line-render.d.ts +2 -1
  291. package/dist/modes/interactive/line/line-render.js +40 -4
  292. package/dist/modes/interactive/message-view.d.ts +1 -1
  293. package/dist/modes/interactive/message-view.js +24 -2
  294. package/dist/modes/interactive/panels.d.ts +18 -1
  295. package/dist/modes/interactive/panels.js +19 -5
  296. package/dist/modes/interactive/plan-command.d.ts +40 -0
  297. package/dist/modes/interactive/plan-command.js +129 -0
  298. package/dist/modes/interactive/plan-dialog.d.ts +98 -0
  299. package/dist/modes/interactive/plan-dialog.js +290 -0
  300. package/dist/modes/interactive/plan-flow.d.ts +34 -0
  301. package/dist/modes/interactive/plan-flow.js +98 -0
  302. package/dist/modes/interactive/rewind-command.d.ts +31 -0
  303. package/dist/modes/interactive/rewind-command.js +106 -0
  304. package/dist/modes/interactive/rewind-flow.d.ts +37 -0
  305. package/dist/modes/interactive/rewind-flow.js +151 -0
  306. package/dist/modes/interactive/rewind-list.d.ts +36 -0
  307. package/dist/modes/interactive/rewind-list.js +123 -0
  308. package/dist/modes/interactive/rewind-panel.d.ts +77 -0
  309. package/dist/modes/interactive/rewind-panel.js +309 -0
  310. package/dist/modes/interactive/rewind-text.d.ts +40 -0
  311. package/dist/modes/interactive/rewind-text.js +139 -0
  312. package/dist/modes/interactive/session-events.d.ts +24 -0
  313. package/dist/modes/interactive/session-events.js +96 -0
  314. package/dist/modes/interactive/status-area.d.ts +73 -0
  315. package/dist/modes/interactive/status-area.js +190 -0
  316. package/dist/modes/interactive/status-bar.d.ts +99 -11
  317. package/dist/modes/interactive/status-bar.js +273 -90
  318. package/dist/modes/interactive/status-line.d.ts +33 -0
  319. package/dist/modes/interactive/status-line.js +113 -0
  320. package/dist/modes/interactive/subagent-view.d.ts +56 -0
  321. package/dist/modes/interactive/subagent-view.js +154 -0
  322. package/dist/modes/interactive/tasks-report.d.ts +27 -0
  323. package/dist/modes/interactive/tasks-report.js +114 -0
  324. package/dist/modes/interactive/tool-view.d.ts +12 -2
  325. package/dist/modes/interactive/tool-view.js +34 -4
  326. package/dist/modes/print/print-mode.d.ts +13 -4
  327. package/dist/modes/print/print-mode.js +56 -12
  328. package/dist/modes/rpc/commands.d.ts +9 -0
  329. package/dist/modes/rpc/commands.js +44 -0
  330. package/dist/modes/rpc/rpc-mode.js +7 -1
  331. package/dist/modes/session-report.d.ts +11 -0
  332. package/dist/modes/session-report.js +48 -1
  333. package/dist/permissions/auto-safe.d.ts +5 -0
  334. package/dist/permissions/auto-safe.js +18 -0
  335. package/dist/permissions/classifier.d.ts +4 -0
  336. package/dist/permissions/classifier.js +2 -0
  337. package/dist/permissions/modes.js +1 -1
  338. package/dist/permissions/pipeline.d.ts +43 -4
  339. package/dist/permissions/pipeline.js +114 -9
  340. package/dist/permissions/readonly-bash.d.ts +30 -0
  341. package/dist/permissions/readonly-bash.js +118 -0
  342. package/dist/permissions/types.d.ts +42 -0
  343. package/dist/plan/compose.d.ts +9 -0
  344. package/dist/plan/compose.js +19 -0
  345. package/dist/plan/controller.d.ts +71 -0
  346. package/dist/plan/controller.js +27 -0
  347. package/dist/plan/done-markers.d.ts +17 -0
  348. package/dist/plan/done-markers.js +51 -0
  349. package/dist/plan/extract.d.ts +29 -0
  350. package/dist/plan/extract.js +160 -0
  351. package/dist/plan/prompts.d.ts +36 -0
  352. package/dist/plan/prompts.js +89 -0
  353. package/dist/plan/store.d.ts +37 -0
  354. package/dist/plan/store.js +90 -0
  355. package/dist/rpc.d.ts +58 -2
  356. package/dist/rpc.js +7 -0
  357. package/dist/sandbox/bash.d.ts +74 -0
  358. package/dist/sandbox/bash.js +126 -0
  359. package/dist/sandbox/detect.d.ts +48 -0
  360. package/dist/sandbox/detect.js +149 -0
  361. package/dist/sandbox/index.d.ts +5 -0
  362. package/dist/sandbox/index.js +5 -0
  363. package/dist/sandbox/profile.d.ts +33 -0
  364. package/dist/sandbox/profile.js +76 -0
  365. package/dist/sandbox/wrap.d.ts +29 -0
  366. package/dist/sandbox/wrap.js +117 -0
  367. package/dist/sdk.d.ts +33 -2
  368. package/dist/sdk.js +24 -2
  369. package/dist/session/types.d.ts +3 -1
  370. package/dist/session/types.js +1 -0
  371. package/dist/skills/builtin.d.ts +31 -0
  372. package/dist/skills/builtin.js +109 -0
  373. package/dist/skills/discover.d.ts +2 -1
  374. package/dist/skills/index-prompt.js +5 -8
  375. package/dist/tools/background-jobs.d.ts +71 -0
  376. package/dist/tools/background-jobs.js +198 -0
  377. package/dist/tools/bash.d.ts +53 -1
  378. package/dist/tools/bash.js +158 -7
  379. package/dist/tools/clipboard-image.d.ts +44 -0
  380. package/dist/tools/clipboard-image.js +148 -0
  381. package/dist/tools/edit.d.ts +2 -0
  382. package/dist/tools/edit.js +18 -3
  383. package/dist/tools/image-file.d.ts +38 -3
  384. package/dist/tools/image-file.js +81 -10
  385. package/dist/tools/image-resize.d.ts +58 -0
  386. package/dist/tools/image-resize.js +97 -0
  387. package/dist/tools/presets.d.ts +7 -2
  388. package/dist/tools/presets.js +11 -4
  389. package/dist/tools/read.d.ts +5 -2
  390. package/dist/tools/read.js +13 -10
  391. package/dist/tools/registry.d.ts +7 -1
  392. package/dist/tools/registry.js +27 -4
  393. package/dist/tools/task-ctl.d.ts +22 -0
  394. package/dist/tools/task-ctl.js +116 -0
  395. package/dist/tools/task.d.ts +22 -10
  396. package/dist/tools/task.js +66 -26
  397. package/dist/tools/todo.d.ts +22 -2
  398. package/dist/tools/todo.js +58 -14
  399. package/dist/tools/truncate.d.ts +15 -0
  400. package/dist/tools/truncate.js +25 -0
  401. package/dist/tools/types.d.ts +113 -0
  402. package/dist/tools/types.js +5 -0
  403. package/dist/tools/write.js +3 -0
  404. package/dist/tui/glyphs.d.ts +4 -0
  405. package/dist/tui/glyphs.js +4 -0
  406. package/dist/tui/keybindings.d.ts +5 -0
  407. package/dist/tui/keybindings.js +5 -0
  408. package/docs/acp.md +78 -0
  409. package/docs/agents.md +250 -0
  410. package/docs/codemode.md +12 -8
  411. package/docs/hooks.md +26 -22
  412. package/docs/permissions.md +77 -13
  413. package/docs/plan.md +107 -0
  414. package/docs/providers.md +228 -52
  415. package/docs/rewind-plan.md +181 -0
  416. package/docs/rpc.md +92 -5
  417. package/docs/sandbox.md +215 -0
  418. package/docs/session-format.md +41 -21
  419. package/docs/sessions.md +41 -1
  420. package/docs/tui-design.md +751 -0
  421. package/docs/tui.md +125 -6
  422. package/package.json +13 -2
@@ -0,0 +1,127 @@
1
+ /**
2
+ * 会话预算(docs/wave5-plan.md §8.3 H2,D29):`--max-turns` / `--max-cost` / config `limits.*`。[W5-H2]
3
+ *
4
+ * 以 `SessionExtension` 实现(只装主会话;task 子会话有自己的 maxTurns):
5
+ * - **回合**:每个会话周期(`before_agent_start` 起)累计助手回复(error / aborted 不算);第 N 次回复
6
+ * 带工具调用时 `requestStop`——本轮工具照常执行,之后结束 run(与原 `--max-turns` 语义一致:
7
+ * 「一次模型请求加其工具执行算一轮」;第 N 次回复不再调用工具时自然结束,不算到限)。
8
+ * - **费用**:同样按会话周期累计助手回复的 `usage.cost.total` 与子 Agent `subagent_end` 的用量
9
+ * (模型无价格时为 0,不会到限);某次回复后累计 ≥ 上限且还要调用工具 → 同样结束 run。本周期内
10
+ * 之后的 turn 请求(重试、Stop Hook 续跑等)在发出前被拦下(`wrapStream`,返回 `limit_reached:`
11
+ * 开头的错误回复,不重试、不计费)。两项都是「一次运行」(config 说明与 `--max-cost` 的口径)。
12
+ * - 到限:发 `limit_reached{kind, value, limit}`(每周期每类一次),`agent_settled{warning:"limit_reached"}`,
13
+ * `-p` 以退出码 8 结束(print-mode.ts)。交互与 RPC 同样生效。
14
+ * - `budgetOf(core)` 给提醒通道(reminders.ts)读当前用量(预算剩余 < 20% 提醒)。
15
+ */
16
+ import { runEventStream } from "../ai/event-stream.js";
17
+ import { ZERO_USAGE } from "./loop.js";
18
+ import { LIMIT_ERROR_PREFIX, noteSettleWarning } from "./session-run.js";
19
+ export const LIMIT_REACHED = "limit_reached";
20
+ export { LIMIT_ERROR_PREFIX };
21
+ const budgets = new WeakMap();
22
+ /** 当前会话的预算状态(未设上限 / 未装扩展时 undefined)。 */
23
+ export function budgetOf(core) {
24
+ return budgets.get(core);
25
+ }
26
+ /** 合并:`--max-turns` / `--max-cost` 覆盖 config `limits.*`;全空返回 undefined。 */
27
+ export function resolveLimits(config, overrides = {}) {
28
+ const limits = { ...config };
29
+ if (overrides.maxTurns !== undefined)
30
+ limits.maxTurns = overrides.maxTurns;
31
+ if (overrides.maxCostUsd !== undefined)
32
+ limits.maxCostUsd = overrides.maxCostUsd;
33
+ if (limits.maxTurns === undefined)
34
+ delete limits.maxTurns;
35
+ if (limits.maxCostUsd === undefined)
36
+ delete limits.maxCostUsd;
37
+ return Object.keys(limits).length > 0 ? limits : undefined;
38
+ }
39
+ export function formatUsd(value) {
40
+ return `$${value < 1 ? value.toFixed(4) : value.toFixed(2)}`;
41
+ }
42
+ function hasToolCalls(message) {
43
+ return message.content.some((block) => block.type === "toolCall");
44
+ }
45
+ function blockedReply(model, text) {
46
+ return {
47
+ role: "assistant",
48
+ content: [],
49
+ api: model.api,
50
+ provider: model.provider,
51
+ model: model.id,
52
+ usage: { ...ZERO_USAGE },
53
+ stopReason: "error",
54
+ errorMessage: text,
55
+ timestamp: Date.now(),
56
+ };
57
+ }
58
+ export function createLimitsExtension(core, limits) {
59
+ if (limits === undefined || (limits.maxTurns === undefined && limits.maxCostUsd === undefined))
60
+ return undefined;
61
+ const state = { turns: 0, spentUsd: 0 };
62
+ if (limits.maxTurns !== undefined)
63
+ state.maxTurns = limits.maxTurns;
64
+ if (limits.maxCostUsd !== undefined)
65
+ state.maxCostUsd = limits.maxCostUsd;
66
+ budgets.set(core, state);
67
+ /** 本周期已报过的类别(每周期每类只报一次)。 */
68
+ const reported = new Set();
69
+ const reach = (kind, value, limit) => {
70
+ if (reported.has(kind))
71
+ return;
72
+ reported.add(kind);
73
+ core.emit({ type: "limit_reached", kind, value, limit });
74
+ noteSettleWarning(core, LIMIT_REACHED);
75
+ };
76
+ const overCost = () => state.maxCostUsd !== undefined && state.spentUsd >= state.maxCostUsd;
77
+ const onAssistant = (message) => {
78
+ state.spentUsd += message.usage.cost?.total ?? 0;
79
+ if (message.stopReason === "error" || message.stopReason === "aborted")
80
+ return;
81
+ state.turns++;
82
+ if (!hasToolCalls(message))
83
+ return;
84
+ if (state.maxTurns !== undefined && state.turns >= state.maxTurns) {
85
+ reach("turns", state.turns, state.maxTurns);
86
+ core.requestStop(undefined);
87
+ }
88
+ if (overCost()) {
89
+ reach("cost", state.spentUsd, state.maxCostUsd);
90
+ core.requestStop(undefined);
91
+ }
92
+ };
93
+ return {
94
+ id: "limits",
95
+ onEvent(event) {
96
+ if (event.type === "before_agent_start") {
97
+ state.turns = 0;
98
+ state.spentUsd = 0;
99
+ reported.clear();
100
+ }
101
+ else if (event.type === "message_end" && event.message.role === "assistant") {
102
+ onAssistant(event.message);
103
+ }
104
+ else if (event.type === "subagent_end") {
105
+ state.spentUsd += event.usage?.cost?.total ?? 0;
106
+ }
107
+ },
108
+ wrapStream(stream) {
109
+ return (model, context, options) => {
110
+ if ((options.purpose ?? "turn") !== "turn" || !overCost()) {
111
+ return stream(model, context, options);
112
+ }
113
+ const limit = state.maxCostUsd;
114
+ reach("cost", state.spentUsd, limit);
115
+ const text = `${LIMIT_ERROR_PREFIX} session cost ${formatUsd(state.spentUsd)} has reached the ` +
116
+ `${formatUsd(limit)} budget (limits.maxCostUsd / --max-cost); no request was sent`;
117
+ const reply = blockedReply(model, text);
118
+ return runEventStream(() => reply, async (out) => {
119
+ out.push({ type: "error", reason: "error", message: reply });
120
+ });
121
+ };
122
+ },
123
+ dispose() {
124
+ budgets.delete(core);
125
+ },
126
+ };
127
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * 重复调用检测(docs/wave5-plan.md §8.3 H1,D29)。[W5-H2]
3
+ *
4
+ * - 指纹 = `sha256(工具名 + 规范化 JSON 参数)`(对象键排序,数组保持顺序);同一 run 内**累计**计数。
5
+ * - 第 `LOOP_REMIND_AT`(3)次起:照常执行,在该次 toolResult 末尾追加提醒(只改这条结果,缓存安全)。
6
+ * - 第 `LOOP_STOP_AT`(5)次:不执行,给错误结果并结束本 run,`agent_settled{warning:"repeated_tool_call"}`。
7
+ * - 豁免:`annotations.pollable` 的工具(`task_ctl`),以及后台 bash 的查询(`bash{job, action:"wait"|"output"}`)。
8
+ *
9
+ * 每个 run 一个实例:tool-runner 以 run 的 AbortSignal 为键取(`guardFor`),run 结束随之回收。
10
+ */
11
+ import type { ToolCallBlock } from "../ai/types.js";
12
+ import type { ToolDefinition } from "../tools/types.js";
13
+ export declare const LOOP_REMIND_AT = 3;
14
+ export declare const LOOP_STOP_AT = 5;
15
+ /** 结束 run 时 `agent_settled.warning` 的值。 */
16
+ export declare const REPEATED_TOOL_CALL = "repeated_tool_call";
17
+ export type LoopVerdict = "ok" | "remind" | "stop";
18
+ /** 规范化 JSON:对象键按字典序,`undefined` 字段省略。 */
19
+ export declare function canonicalJson(value: unknown): string;
20
+ export declare function callFingerprint(call: Pick<ToolCallBlock, "name" | "arguments">): string;
21
+ /** 轮询类调用:工具声明 `pollable`,或后台 bash 的 wait / output。 */
22
+ export declare function isPollableCall(call: ToolCallBlock, tool: ToolDefinition | undefined): boolean;
23
+ export declare class LoopGuard {
24
+ private readonly remindAt;
25
+ private readonly stopAt;
26
+ private readonly counts;
27
+ constructor(remindAt?: number, stopAt?: number);
28
+ /** 记一次调用并给出判定(轮询类恒为 ok,不计数)。 */
29
+ observe(call: ToolCallBlock, tool: ToolDefinition | undefined): LoopVerdict;
30
+ /** 该调用到目前为止的次数。 */
31
+ count(call: ToolCallBlock): number;
32
+ }
33
+ /** 追加在第 3、4 次结果末尾的提醒(给模型看)。 */
34
+ export declare function loopReminderText(name: string, count: number): string;
35
+ /** 第 5 次:不执行,给这条错误结果并结束 run。 */
36
+ export declare function loopStopText(name: string, count: number): string;
37
+ /** 本 run 的检测器(以 run 的 AbortSignal 为键,run 结束随 signal 回收)。 */
38
+ export declare function guardFor(signal: AbortSignal): LoopGuard;
@@ -0,0 +1,95 @@
1
+ /**
2
+ * 重复调用检测(docs/wave5-plan.md §8.3 H1,D29)。[W5-H2]
3
+ *
4
+ * - 指纹 = `sha256(工具名 + 规范化 JSON 参数)`(对象键排序,数组保持顺序);同一 run 内**累计**计数。
5
+ * - 第 `LOOP_REMIND_AT`(3)次起:照常执行,在该次 toolResult 末尾追加提醒(只改这条结果,缓存安全)。
6
+ * - 第 `LOOP_STOP_AT`(5)次:不执行,给错误结果并结束本 run,`agent_settled{warning:"repeated_tool_call"}`。
7
+ * - 豁免:`annotations.pollable` 的工具(`task_ctl`),以及后台 bash 的查询(`bash{job, action:"wait"|"output"}`)。
8
+ *
9
+ * 每个 run 一个实例:tool-runner 以 run 的 AbortSignal 为键取(`guardFor`),run 结束随之回收。
10
+ */
11
+ import { createHash } from "node:crypto";
12
+ export const LOOP_REMIND_AT = 3;
13
+ export const LOOP_STOP_AT = 5;
14
+ /** 结束 run 时 `agent_settled.warning` 的值。 */
15
+ export const REPEATED_TOOL_CALL = "repeated_tool_call";
16
+ /** 规范化 JSON:对象键按字典序,`undefined` 字段省略。 */
17
+ export function canonicalJson(value) {
18
+ if (value === null || typeof value !== "object")
19
+ return JSON.stringify(value) ?? "null";
20
+ if (Array.isArray(value))
21
+ return `[${value.map((item) => canonicalJson(item)).join(",")}]`;
22
+ const record = value;
23
+ const parts = Object.keys(record)
24
+ .filter((key) => record[key] !== undefined)
25
+ .sort()
26
+ .map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`);
27
+ return `{${parts.join(",")}}`;
28
+ }
29
+ export function callFingerprint(call) {
30
+ return createHash("sha256")
31
+ .update(call.name)
32
+ .update("\u0000")
33
+ .update(canonicalJson(call.arguments))
34
+ .digest("hex");
35
+ }
36
+ /** 轮询类调用:工具声明 `pollable`,或后台 bash 的 wait / output。 */
37
+ export function isPollableCall(call, tool) {
38
+ if (tool?.annotations?.pollable === true)
39
+ return true;
40
+ if (call.name !== "bash")
41
+ return false;
42
+ const args = call.arguments;
43
+ return (typeof args === "object" &&
44
+ args !== null &&
45
+ typeof args.job === "string" &&
46
+ (args.action === "wait" || args.action === "output"));
47
+ }
48
+ export class LoopGuard {
49
+ remindAt;
50
+ stopAt;
51
+ counts = new Map();
52
+ constructor(remindAt = LOOP_REMIND_AT, stopAt = LOOP_STOP_AT) {
53
+ this.remindAt = remindAt;
54
+ this.stopAt = stopAt;
55
+ }
56
+ /** 记一次调用并给出判定(轮询类恒为 ok,不计数)。 */
57
+ observe(call, tool) {
58
+ if (isPollableCall(call, tool))
59
+ return "ok";
60
+ const key = callFingerprint(call);
61
+ const count = (this.counts.get(key) ?? 0) + 1;
62
+ this.counts.set(key, count);
63
+ if (count >= this.stopAt)
64
+ return "stop";
65
+ if (count >= this.remindAt)
66
+ return "remind";
67
+ return "ok";
68
+ }
69
+ /** 该调用到目前为止的次数。 */
70
+ count(call) {
71
+ return this.counts.get(callFingerprint(call)) ?? 0;
72
+ }
73
+ }
74
+ /** 追加在第 3、4 次结果末尾的提醒(给模型看)。 */
75
+ export function loopReminderText(name, count) {
76
+ return (`<system-reminder>You have now called ${name} ${count} times in this run with exactly the ` +
77
+ `same arguments. Repeating it will not change the result; use what you already have, try a ` +
78
+ `different approach, or stop and report. A ${LOOP_STOP_AT}th identical call ends the run.` +
79
+ `</system-reminder>`);
80
+ }
81
+ /** 第 5 次:不执行,给这条错误结果并结束 run。 */
82
+ export function loopStopText(name, count) {
83
+ return (`Not executed: ${name} was called ${count} times in this run with identical arguments. ` +
84
+ `The run was stopped to avoid a loop.`);
85
+ }
86
+ const guards = new WeakMap();
87
+ /** 本 run 的检测器(以 run 的 AbortSignal 为键,run 结束随 signal 回收)。 */
88
+ export function guardFor(signal) {
89
+ let guard = guards.get(signal);
90
+ if (guard === undefined) {
91
+ guard = new LoopGuard();
92
+ guards.set(signal, guard);
93
+ }
94
+ return guard;
95
+ }
@@ -10,6 +10,8 @@
10
10
  * 内层结束(无 tool_call 且 steer 空)→ 收 followUp(有则继续外层)→ 返回
11
11
  * ```
12
12
  *
13
+ * [W5-H2] 工具批次带 `stop`(重复调用检测)时本轮结束即返回,`RunOutcome.warning` 交给会话层。
14
+ *
13
15
  * 循环不发 agent_start / agent_end(由 Agent 发,以便带上 willRetry);上下文每次请求前从
14
16
  * `getMessages()` 现取(压缩 / context_edit 会替换 Agent 的消息数组)。
15
17
  */
@@ -41,6 +43,8 @@ export interface RunOutcome {
41
43
  /** 最后一条助手消息的 stopReason;工具执行中被中断为 "aborted"。 */
42
44
  stopReason: string;
43
45
  newMessages: AgentMessage[];
46
+ /** [W5-H2] run 被 harness 提前结束的原因(重复调用检测:`repeated_tool_call`)。 */
47
+ warning?: string;
44
48
  }
45
49
  export declare const ZERO_USAGE: Usage;
46
50
  export declare function failureMessage(model: Model, stopReason: "error" | "aborted", errorMessage: string): AssistantMessage;
@@ -10,6 +10,8 @@
10
10
  * 内层结束(无 tool_call 且 steer 空)→ 收 followUp(有则继续外层)→ 返回
11
11
  * ```
12
12
  *
13
+ * [W5-H2] 工具批次带 `stop`(重复调用检测)时本轮结束即返回,`RunOutcome.warning` 交给会话层。
14
+ *
13
15
  * 循环不发 agent_start / agent_end(由 Agent 发,以便带上 willRetry);上下文每次请求前从
14
16
  * `getMessages()` 现取(压缩 / context_edit 会替换 Agent 的消息数组)。
15
17
  */
@@ -129,6 +131,7 @@ export async function runLoop(prompts, config, signal, options = {}) {
129
131
  const calls = toolCallsOf(assistant);
130
132
  hasMoreToolCalls = false;
131
133
  let toolResults = [];
134
+ let stop;
132
135
  if (calls.length > 0) {
133
136
  const batch = assistant.stopReason === "length"
134
137
  ? await failTruncatedBatch(assistant, emit)
@@ -136,12 +139,16 @@ export async function runLoop(prompts, config, signal, options = {}) {
136
139
  toolResults = batch.messages;
137
140
  newMessages.push(...toolResults);
138
141
  hasMoreToolCalls = !batch.terminate;
142
+ stop = batch.stop;
139
143
  }
140
144
  lastTurn = { assistant, toolResults };
141
145
  const decision = await hooks.finishTurn?.(lastTurn);
142
146
  await emit({ type: "turn_end", message: assistant, toolResults });
143
147
  if (signal.aborted)
144
148
  return outcome("aborted");
149
+ // [W5-H2] 重复调用检测要求结束:不再投递 steer / followUp(留在队列)
150
+ if (stop !== undefined)
151
+ return { ...outcome(assistant.stopReason), warning: stop };
145
152
  // length 且无工具调用:输出被截断,交给会话层的溢出恢复,不投递 steer / followUp。
146
153
  if (assistant.stopReason === "length" && calls.length === 0)
147
154
  return outcome("length");
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 系统提示 `rules` 节的通用行为规则(在各工具 `promptGuidelines` 之前)。
3
+ *
4
+ * 只按工具表决定、会话内不变,所以不影响前缀稳定(设计 §9.1)。每加一条都进每次请求的缓存前缀:
5
+ * 保持一句、英文、只写模型确实会做错的事;预算见 `src/cli/prompt-budget.test.ts`。
6
+ * 「edit 的多处修改」写在 edit 工具描述里(只在 edit 可用时出现);并行批量在 codemode 独占时
7
+ * 由它自己的说明负责,所以只在 read 直接可用时给。
8
+ */
9
+ import type { ToolDefinition } from "../tools/types.js";
10
+ export declare const DESTRUCTIVE_RULE = "Ask before destructive commands (rm -rf, git reset --hard, force push, deleting branches) unless the user requested them.";
11
+ export declare const PARALLEL_READS_RULE = "Batch independent read-only tool calls into one turn.";
12
+ export declare function baseRules(tools: readonly Pick<ToolDefinition, "name">[]): string[];
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 系统提示 `rules` 节的通用行为规则(在各工具 `promptGuidelines` 之前)。
3
+ *
4
+ * 只按工具表决定、会话内不变,所以不影响前缀稳定(设计 §9.1)。每加一条都进每次请求的缓存前缀:
5
+ * 保持一句、英文、只写模型确实会做错的事;预算见 `src/cli/prompt-budget.test.ts`。
6
+ * 「edit 的多处修改」写在 edit 工具描述里(只在 edit 可用时出现);并行批量在 codemode 独占时
7
+ * 由它自己的说明负责,所以只在 read 直接可用时给。
8
+ */
9
+ export const DESTRUCTIVE_RULE = "Ask before destructive commands (rm -rf, git reset --hard, force push, deleting branches) unless the user requested them.";
10
+ export const PARALLEL_READS_RULE = "Batch independent read-only tool calls into one turn.";
11
+ export function baseRules(tools) {
12
+ if (tools.length === 0)
13
+ return [];
14
+ const rules = [DESTRUCTIVE_RULE];
15
+ if (tools.some((tool) => tool.name === "read"))
16
+ rules.push(PARALLEL_READS_RULE);
17
+ return rules;
18
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * 统一提醒通道 `ama.reminder`(docs/wave5-plan.md §8.3 H3,D29)。[W5-H2]
3
+ *
4
+ * 以 `SessionExtension` 实现,两个投递点,都只追加在尾部(design §9.1,缓存前缀不动):
5
+ * - **新提示**:`beforePrompts` 追加一条 `custom_message{customType:"ama.reminder", display:false}`;
6
+ * - **run 进行中**:在 agent_start 时以本 run 的 signal 登记批次尾部来源(tool-runner.ts
7
+ * `setBatchSuffixSource`),每个工具批次结束时把到期提醒追加在本批最后一条结果末尾
8
+ * (`<system-reminder>` 包起来)。不用 steer 队列:那会占用户的投递位、Esc 时还会被回填进编辑器。
9
+ *
10
+ * 提醒种类(`reminders.*` 逐项可关,缺省全开):
11
+ * 1. `todo`:todo 工具在活动集、清单有未完成项、连续 `todo.reminder`(缺省 10,0 关闭)次助手回复
12
+ * 没更新清单(`ama.todo` 条目)→ 复述清单,计数清零;
13
+ * 2. `fileChanges`:本会话 read / edit / write 过的文件 mtime 或大小变了(不是本 Agent 的编辑或 bash
14
+ * 改的:这些之后重新取基线)→ 列出 ≤ 10 个,附 `git diff --stat`(拿得到时);
15
+ * 3. `contextPressure`:上下文估算(compaction/estimate.ts 的口径)到窗口 70% / 85% 各一次,
16
+ * 压缩后回落再重新计;
17
+ * 4. `budget`:limits 的回合或费用用掉 ≥ 80%(剩余 < 20%)时每次运行各一次;
18
+ * 5. 后台命令退出(不可关):`bash{background}` 的任务退出且模型还没经 wait / output 看到 →
19
+ * 「后台命令 bgN 已退出(码 N)」。
20
+ *
21
+ * 后台任务表的生命周期也挂在这里:任务事件转成 `background_job`,会话 dispose 时回收进程树。
22
+ * task 子会话(depth > 0)只装后台任务部分。
23
+ */
24
+ import type { RemindersConfig } from "../config/types-w5.js";
25
+ import type { AgentMessage } from "../session/types.js";
26
+ import { type Job } from "../tools/background-jobs.js";
27
+ import type { SessionCore } from "./session-core.js";
28
+ import type { SessionExtension } from "./session-extensions.js";
29
+ export declare const REMINDER_CUSTOM_TYPE = "ama.reminder";
30
+ export declare const DEFAULT_TODO_REMINDER_TURNS = 10;
31
+ export declare const CONTEXT_REMINDER_RATIOS: readonly [0.7, 0.85];
32
+ export declare const BUDGET_REMINDER_RATIO = 0.8;
33
+ export declare const MAX_CHANGED_FILES = 10;
34
+ export interface RemindersSettings {
35
+ reminders?: RemindersConfig;
36
+ /** `todo.reminder`:连续多少次回复未更新清单就复述;0 关闭。 */
37
+ todoEvery?: number;
38
+ }
39
+ /** config → 提醒设置(`reminders.*` 与 `todo.reminder`)。 */
40
+ export declare function remindersSettings(config: {
41
+ reminders?: RemindersConfig | undefined;
42
+ todo?: {
43
+ reminder?: number | undefined;
44
+ } | undefined;
45
+ }): RemindersSettings;
46
+ export interface RemindersDeps {
47
+ /** `git diff --stat -- <files>`;拿不到返回 undefined。测试注入。 */
48
+ diffStat?(cwd: string, files: readonly string[]): string | undefined;
49
+ stat?(path: string): {
50
+ mtimeMs: number;
51
+ size: number;
52
+ } | undefined;
53
+ }
54
+ export declare function jobExitText(job: Job): string;
55
+ export declare function reminderMessage(text: string): AgentMessage;
56
+ /**
57
+ * 提醒扩展。主会话:全部提醒 + 后台任务生命周期;子会话:只管后台任务(事件与回收)。
58
+ */
59
+ export declare function createRemindersExtension(core: SessionCore, settings?: RemindersSettings, deps?: RemindersDeps): SessionExtension;