@armadra/agent 0.5.1 → 0.6.1

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 (486) hide show
  1. package/CHANGELOG.md +203 -304
  2. package/CHANGELOG.zh-CN.md +462 -0
  3. package/README.md +408 -364
  4. package/README.zh-CN.md +705 -0
  5. package/dist/agent/session-plan.js +2 -2
  6. package/dist/agent/session-state.d.ts +3 -0
  7. package/dist/agent/session-state.js +20 -0
  8. package/dist/agent/session-subagent.d.ts +15 -1
  9. package/dist/agent/session-subagent.js +26 -3
  10. package/dist/agent/session-telemetry.d.ts +16 -2
  11. package/dist/agent/session-telemetry.js +29 -7
  12. package/dist/agent/session-tools.js +5 -2
  13. package/dist/agent/session-trace-writer.d.ts +27 -0
  14. package/dist/agent/session-trace-writer.js +253 -0
  15. package/dist/agent/session.d.ts +2 -0
  16. package/dist/agent/session.js +12 -0
  17. package/dist/agent/subagent-direct.d.ts +20 -0
  18. package/dist/agent/subagent-direct.js +76 -0
  19. package/dist/agent/subagent-registry.d.ts +8 -1
  20. package/dist/agent/subagent-registry.js +28 -1
  21. package/dist/agent/system-prompt.d.ts +3 -1
  22. package/dist/agent/system-prompt.js +3 -0
  23. package/dist/agent/tool-runner.d.ts +2 -1
  24. package/dist/agent/tool-runner.js +5 -4
  25. package/dist/agent/types-w6.d.ts +39 -0
  26. package/dist/agent/types-w6.js +4 -0
  27. package/dist/agent/types.d.ts +5 -2
  28. package/dist/agents/external.js +1 -1
  29. package/dist/agents/task-record.d.ts +74 -1
  30. package/dist/agents/task-record.js +100 -0
  31. package/dist/ai/apis/cache-params.js +2 -1
  32. package/dist/ai/apis/chatgpt-backend.d.ts +52 -0
  33. package/dist/ai/apis/chatgpt-backend.js +224 -0
  34. package/dist/ai/apis/chatgpt-rate-limits.d.ts +26 -0
  35. package/dist/ai/apis/chatgpt-rate-limits.js +91 -0
  36. package/dist/ai/apis/openai-responses-request.d.ts +2 -1
  37. package/dist/ai/apis/openai-responses-request.js +8 -2
  38. package/dist/ai/apis/openai-responses.d.ts +2 -0
  39. package/dist/ai/apis/openai-responses.js +51 -16
  40. package/dist/ai/overflow.d.ts +1 -1
  41. package/dist/ai/overflow.js +10 -7
  42. package/dist/ai/providers/auth.d.ts +15 -2
  43. package/dist/ai/providers/auth.js +69 -2
  44. package/dist/ai/providers/builtin.js +27 -0
  45. package/dist/ai/providers/catalog-data.js +1 -0
  46. package/dist/ai/providers/discovered-cache.d.ts +48 -0
  47. package/dist/ai/providers/discovered-cache.js +102 -0
  48. package/dist/ai/providers/enrich.js +2 -7
  49. package/dist/ai/providers/model-visibility.d.ts +33 -0
  50. package/dist/ai/providers/model-visibility.js +70 -0
  51. package/dist/ai/providers/models-dev-cache.js +15 -19
  52. package/dist/ai/providers/models-dev-snapshot.js +8 -7
  53. package/dist/ai/providers/models-dev.js +5 -15
  54. package/dist/ai/providers/registry.d.ts +2 -0
  55. package/dist/ai/providers/registry.js +6 -1
  56. package/dist/ai/providers/suggest.js +2 -16
  57. package/dist/ai/types.d.ts +27 -1
  58. package/dist/auth/chatgpt/backend-client.d.ts +26 -0
  59. package/dist/auth/chatgpt/backend-client.js +74 -0
  60. package/dist/auth/chatgpt/claims.d.ts +17 -0
  61. package/dist/auth/chatgpt/claims.js +46 -0
  62. package/dist/auth/chatgpt/cli.d.ts +35 -0
  63. package/dist/auth/chatgpt/cli.js +279 -0
  64. package/dist/auth/chatgpt/doctor.d.ts +17 -0
  65. package/dist/auth/chatgpt/doctor.js +36 -0
  66. package/dist/auth/chatgpt/host-id.d.ts +7 -0
  67. package/dist/auth/chatgpt/host-id.js +26 -0
  68. package/dist/auth/chatgpt/login.d.ts +30 -0
  69. package/dist/auth/chatgpt/login.js +130 -0
  70. package/dist/auth/chatgpt/presets.d.ts +66 -0
  71. package/dist/auth/chatgpt/presets.js +120 -0
  72. package/dist/auth/chatgpt/quota-text.d.ts +13 -0
  73. package/dist/auth/chatgpt/quota-text.js +36 -0
  74. package/dist/auth/oauth/browser.d.ts +12 -0
  75. package/dist/auth/oauth/browser.js +27 -0
  76. package/dist/auth/oauth/callback-server.d.ts +47 -0
  77. package/dist/auth/oauth/callback-server.js +147 -0
  78. package/dist/auth/oauth/flows.d.ts +62 -0
  79. package/dist/auth/oauth/flows.js +113 -0
  80. package/dist/auth/oauth/jwt.d.ts +24 -0
  81. package/dist/auth/oauth/jwt.js +81 -0
  82. package/dist/auth/oauth/live.d.ts +21 -0
  83. package/dist/auth/oauth/live.js +25 -0
  84. package/dist/auth/oauth/oidc.d.ts +26 -0
  85. package/dist/auth/oauth/oidc.js +72 -0
  86. package/dist/auth/oauth/pkce.d.ts +15 -0
  87. package/dist/auth/oauth/pkce.js +20 -0
  88. package/dist/auth/oauth/refresh.d.ts +35 -0
  89. package/dist/auth/oauth/refresh.js +129 -0
  90. package/dist/auth/oauth/token-client.d.ts +33 -0
  91. package/dist/auth/oauth/token-client.js +121 -0
  92. package/dist/auth/oauth/token-store.d.ts +23 -0
  93. package/dist/auth/oauth/token-store.js +125 -0
  94. package/dist/auth/testing/fake-oauth.d.ts +73 -0
  95. package/dist/auth/testing/fake-oauth.js +271 -0
  96. package/dist/auth/testing/refresh-child.d.ts +5 -0
  97. package/dist/auth/testing/refresh-child.js +16 -0
  98. package/dist/bundle/ama.cjs +26532 -11045
  99. package/dist/checkpoints/backend.js +6 -5
  100. package/dist/checkpoints/restore.js +3 -2
  101. package/dist/checkpoints/settings.js +2 -1
  102. package/dist/checkpoints/shadow-git.js +7 -6
  103. package/dist/checkpoints/shadow-restore.js +3 -2
  104. package/dist/checkpoints/tracker.js +4 -3
  105. package/dist/cli/args.d.ts +9 -2
  106. package/dist/cli/args.js +74 -27
  107. package/dist/cli/bootstrap.js +53 -31
  108. package/dist/cli/choice-prompt.js +8 -6
  109. package/dist/cli/codemode-notice.js +2 -2
  110. package/dist/cli/compose-agents.js +2 -1
  111. package/dist/cli/compose-extensions.js +2 -0
  112. package/dist/cli/compose-memory.d.ts +53 -0
  113. package/dist/cli/compose-memory.js +127 -0
  114. package/dist/cli/compose-providers.d.ts +6 -0
  115. package/dist/cli/compose-providers.js +38 -2
  116. package/dist/cli/compose-session.d.ts +5 -0
  117. package/dist/cli/compose-session.js +27 -13
  118. package/dist/cli/compose-store.d.ts +2 -0
  119. package/dist/cli/compose-store.js +9 -5
  120. package/dist/cli/compose.d.ts +2 -0
  121. package/dist/cli/compose.js +13 -5
  122. package/dist/cli/default-model.d.ts +0 -2
  123. package/dist/cli/default-model.js +5 -8
  124. package/dist/cli/deps.d.ts +5 -1
  125. package/dist/cli/exit-codes.d.ts +1 -1
  126. package/dist/cli/exit-codes.js +7 -16
  127. package/dist/cli/from-prompt.js +3 -2
  128. package/dist/cli/help-text.d.ts +2 -1
  129. package/dist/cli/help-text.js +5 -99
  130. package/dist/cli/main.d.ts +5 -0
  131. package/dist/cli/main.js +21 -2
  132. package/dist/cli/proxy.js +14 -9
  133. package/dist/cli/runtime.d.ts +5 -0
  134. package/dist/cli/startup-screen.js +20 -27
  135. package/dist/cli/startup-steps.js +6 -8
  136. package/dist/cli/subcommands/auth.d.ts +6 -3
  137. package/dist/cli/subcommands/auth.js +52 -22
  138. package/dist/cli/subcommands/config-set.d.ts +21 -0
  139. package/dist/cli/subcommands/config-set.js +145 -0
  140. package/dist/cli/subcommands/config.d.ts +2 -1
  141. package/dist/cli/subcommands/config.js +51 -37
  142. package/dist/cli/subcommands/doctor.d.ts +2 -1
  143. package/dist/cli/subcommands/doctor.js +97 -58
  144. package/dist/cli/subcommands/init.d.ts +1 -1
  145. package/dist/cli/subcommands/init.js +8 -7
  146. package/dist/cli/subcommands/memory.d.ts +18 -0
  147. package/dist/cli/subcommands/memory.js +189 -0
  148. package/dist/cli/subcommands/model-meta.js +11 -9
  149. package/dist/cli/subcommands/models-cache-probe.js +23 -20
  150. package/dist/cli/subcommands/models-discover.d.ts +4 -0
  151. package/dist/cli/subcommands/models-discover.js +60 -21
  152. package/dist/cli/subcommands/models-enable.d.ts +13 -0
  153. package/dist/cli/subcommands/models-enable.js +145 -0
  154. package/dist/cli/subcommands/models.d.ts +3 -1
  155. package/dist/cli/subcommands/models.js +39 -24
  156. package/dist/cli/subcommands/probe-runner.js +8 -7
  157. package/dist/cli/subcommands/providers-list.js +32 -21
  158. package/dist/cli/subcommands/providers-plan.js +24 -25
  159. package/dist/cli/subcommands/providers-probe.js +5 -6
  160. package/dist/cli/subcommands/providers.d.ts +1 -1
  161. package/dist/cli/subcommands/providers.js +45 -50
  162. package/dist/cli/subcommands/sessions-export.d.ts +1 -1
  163. package/dist/cli/subcommands/sessions-export.js +10 -9
  164. package/dist/cli/subcommands/sessions-search.d.ts +1 -1
  165. package/dist/cli/subcommands/sessions-search.js +11 -10
  166. package/dist/cli/subcommands/sessions-trace.d.ts +30 -0
  167. package/dist/cli/subcommands/sessions-trace.js +156 -0
  168. package/dist/cli/subcommands/sessions.d.ts +4 -3
  169. package/dist/cli/subcommands/sessions.js +40 -37
  170. package/dist/cli/subcommands/stats.d.ts +1 -1
  171. package/dist/cli/subcommands/stats.js +49 -30
  172. package/dist/cli/system-prompt-arg.js +3 -2
  173. package/dist/codemode/capability.js +3 -2
  174. package/dist/compaction/post-compact.d.ts +1 -0
  175. package/dist/compaction/post-compact.js +15 -1
  176. package/dist/compaction/prune-tier.d.ts +1 -1
  177. package/dist/compaction/prune-tier.js +3 -3
  178. package/dist/compaction/serialize.js +2 -1
  179. package/dist/config/auth-file.d.ts +12 -2
  180. package/dist/config/auth-file.js +32 -10
  181. package/dist/config/checker.js +12 -11
  182. package/dist/config/context-files.js +3 -2
  183. package/dist/config/edit.d.ts +106 -0
  184. package/dist/config/edit.js +350 -0
  185. package/dist/config/init.d.ts +4 -3
  186. package/dist/config/init.js +10 -18
  187. package/dist/config/json-schema.d.ts +2 -1
  188. package/dist/config/json-schema.js +102 -69
  189. package/dist/config/key-docs.d.ts +18 -7
  190. package/dist/config/key-docs.js +43 -128
  191. package/dist/config/load.js +7 -6
  192. package/dist/config/merge.d.ts +4 -1
  193. package/dist/config/merge.js +42 -22
  194. package/dist/config/paths.js +6 -5
  195. package/dist/config/profile.d.ts +5 -1
  196. package/dist/config/profile.js +7 -2
  197. package/dist/config/schema-w5.js +12 -4
  198. package/dist/config/schema-w6.d.ts +19 -0
  199. package/dist/config/schema-w6.js +115 -0
  200. package/dist/config/schema.js +34 -20
  201. package/dist/config/settings-registry.d.ts +81 -0
  202. package/dist/config/settings-registry.js +185 -0
  203. package/dist/config/types-w5.d.ts +7 -0
  204. package/dist/config/types-w5.js +2 -0
  205. package/dist/config/types-w6.d.ts +109 -0
  206. package/dist/config/types-w6.js +19 -0
  207. package/dist/config/types.d.ts +11 -8
  208. package/dist/config/types.js +1 -0
  209. package/dist/drivers/acp/client.js +1 -1
  210. package/dist/drivers/acp/driver.js +13 -8
  211. package/dist/drivers/agents.js +4 -3
  212. package/dist/drivers/base.js +3 -2
  213. package/dist/drivers/host-runners.js +2 -1
  214. package/dist/drivers/native/claude-stream.js +12 -11
  215. package/dist/drivers/native/codex-app-server.js +17 -12
  216. package/dist/drivers/native/oneshot.js +8 -7
  217. package/dist/drivers/pool.js +1 -1
  218. package/dist/drivers/runner.d.ts +3 -1
  219. package/dist/drivers/runner.js +68 -20
  220. package/dist/drivers/turn.js +1 -1
  221. package/dist/hooks/config.js +3 -2
  222. package/dist/hooks/protocol.js +18 -12
  223. package/dist/host/api-impl.js +11 -10
  224. package/dist/host/loader.js +9 -8
  225. package/dist/host/types.d.ts +3 -0
  226. package/dist/i18n/catalog.d.ts +2209 -0
  227. package/dist/i18n/catalog.js +72 -0
  228. package/dist/i18n/format.d.ts +21 -0
  229. package/dist/i18n/format.js +58 -0
  230. package/dist/i18n/index.d.ts +58 -0
  231. package/dist/i18n/index.js +72 -0
  232. package/dist/i18n/messages/agents.d.ts +84 -0
  233. package/dist/i18n/messages/agents.js +85 -0
  234. package/dist/i18n/messages/approval.d.ts +99 -0
  235. package/dist/i18n/messages/approval.js +100 -0
  236. package/dist/i18n/messages/auth.d.ts +189 -0
  237. package/dist/i18n/messages/auth.js +201 -0
  238. package/dist/i18n/messages/cli-args.d.ts +46 -0
  239. package/dist/i18n/messages/cli-args.js +46 -0
  240. package/dist/i18n/messages/cli-help.d.ts +12 -0
  241. package/dist/i18n/messages/cli-help.js +248 -0
  242. package/dist/i18n/messages/cli.d.ts +336 -0
  243. package/dist/i18n/messages/cli.js +311 -0
  244. package/dist/i18n/messages/config-keys.d.ts +293 -0
  245. package/dist/i18n/messages/config-keys.js +296 -0
  246. package/dist/i18n/messages/config.d.ts +508 -0
  247. package/dist/i18n/messages/config.js +241 -0
  248. package/dist/i18n/messages/drivers.d.ts +123 -0
  249. package/dist/i18n/messages/drivers.js +124 -0
  250. package/dist/i18n/messages/errors.d.ts +83 -0
  251. package/dist/i18n/messages/errors.js +171 -0
  252. package/dist/i18n/messages/interactive-line.d.ts +61 -0
  253. package/dist/i18n/messages/interactive-line.js +69 -0
  254. package/dist/i18n/messages/interactive-startup.d.ts +99 -0
  255. package/dist/i18n/messages/interactive-startup.js +100 -0
  256. package/dist/i18n/messages/interactive-view.d.ts +140 -0
  257. package/dist/i18n/messages/interactive-view.js +141 -0
  258. package/dist/i18n/messages/interactive.d.ts +489 -0
  259. package/dist/i18n/messages/interactive.js +248 -0
  260. package/dist/i18n/messages/memory.d.ts +123 -0
  261. package/dist/i18n/messages/memory.js +128 -0
  262. package/dist/i18n/messages/panels.d.ts +233 -0
  263. package/dist/i18n/messages/panels.js +232 -0
  264. package/dist/i18n/messages/permissions.d.ts +126 -0
  265. package/dist/i18n/messages/permissions.js +151 -0
  266. package/dist/i18n/messages/plan.d.ts +123 -0
  267. package/dist/i18n/messages/plan.js +124 -0
  268. package/dist/i18n/messages/print.d.ts +86 -0
  269. package/dist/i18n/messages/print.js +91 -0
  270. package/dist/i18n/messages/report.d.ts +391 -0
  271. package/dist/i18n/messages/report.js +490 -0
  272. package/dist/i18n/messages/rewind.d.ts +198 -0
  273. package/dist/i18n/messages/rewind.js +217 -0
  274. package/dist/i18n/messages/session.d.ts +230 -0
  275. package/dist/i18n/messages/session.js +258 -0
  276. package/dist/i18n/messages/settings.d.ts +355 -0
  277. package/dist/i18n/messages/settings.js +343 -0
  278. package/dist/i18n/messages/subcommands-config.d.ts +113 -0
  279. package/dist/i18n/messages/subcommands-config.js +129 -0
  280. package/dist/i18n/messages/subcommands-models.d.ts +34 -0
  281. package/dist/i18n/messages/subcommands-models.js +34 -0
  282. package/dist/i18n/messages/subcommands.d.ts +576 -0
  283. package/dist/i18n/messages/subcommands.js +477 -0
  284. package/dist/i18n/messages/trace.d.ts +243 -0
  285. package/dist/i18n/messages/trace.js +238 -0
  286. package/dist/i18n/types.d.ts +15 -0
  287. package/dist/i18n/types.js +7 -0
  288. package/dist/index.d.ts +6 -0
  289. package/dist/index.js +2 -0
  290. package/dist/memory/edit.d.ts +24 -0
  291. package/dist/memory/edit.js +63 -0
  292. package/dist/memory/frontmatter.d.ts +37 -0
  293. package/dist/memory/frontmatter.js +79 -0
  294. package/dist/memory/index.d.ts +28 -0
  295. package/dist/memory/index.js +126 -0
  296. package/dist/memory/lock.d.ts +17 -0
  297. package/dist/memory/lock.js +62 -0
  298. package/dist/memory/paths.d.ts +57 -0
  299. package/dist/memory/paths.js +175 -0
  300. package/dist/memory/report.d.ts +36 -0
  301. package/dist/memory/report.js +86 -0
  302. package/dist/memory/runtime.d.ts +42 -0
  303. package/dist/memory/runtime.js +36 -0
  304. package/dist/memory/secrets.d.ts +8 -0
  305. package/dist/memory/secrets.js +27 -0
  306. package/dist/memory/section.d.ts +28 -0
  307. package/dist/memory/section.js +59 -0
  308. package/dist/memory/store.d.ts +70 -0
  309. package/dist/memory/store.js +284 -0
  310. package/dist/memory/tool.d.ts +31 -0
  311. package/dist/memory/tool.js +94 -0
  312. package/dist/modes/acp/acp-events.js +2 -1
  313. package/dist/modes/acp/acp-server.js +13 -12
  314. package/dist/modes/commands-core.d.ts +11 -0
  315. package/dist/modes/commands-core.js +93 -62
  316. package/dist/modes/image-input.js +20 -6
  317. package/dist/modes/interactive/agent-bar.d.ts +95 -0
  318. package/dist/modes/interactive/agent-bar.js +248 -0
  319. package/dist/modes/interactive/agent-panels.js +27 -26
  320. package/dist/modes/interactive/agent-transcript.d.ts +47 -0
  321. package/dist/modes/interactive/agent-transcript.js +191 -0
  322. package/dist/modes/interactive/agent-ui.d.ts +36 -1
  323. package/dist/modes/interactive/agent-ui.js +180 -14
  324. package/dist/modes/interactive/agent-view.d.ts +72 -0
  325. package/dist/modes/interactive/agent-view.js +281 -0
  326. package/dist/modes/interactive/approval-dialog.js +46 -34
  327. package/dist/modes/interactive/clipboard-paste.d.ts +2 -2
  328. package/dist/modes/interactive/clipboard-paste.js +9 -4
  329. package/dist/modes/interactive/commands.d.ts +22 -1
  330. package/dist/modes/interactive/commands.js +100 -49
  331. package/dist/modes/interactive/completion.js +2 -1
  332. package/dist/modes/interactive/config-panel.d.ts +70 -0
  333. package/dist/modes/interactive/config-panel.js +319 -0
  334. package/dist/modes/interactive/config-ui.d.ts +96 -0
  335. package/dist/modes/interactive/config-ui.js +397 -0
  336. package/dist/modes/interactive/confirm-dialog.js +6 -7
  337. package/dist/modes/interactive/event-notices.js +11 -9
  338. package/dist/modes/interactive/interactive-mode.d.ts +1 -1
  339. package/dist/modes/interactive/interactive-mode.js +21 -22
  340. package/dist/modes/interactive/key-dispatch.d.ts +12 -0
  341. package/dist/modes/interactive/key-dispatch.js +24 -9
  342. package/dist/modes/interactive/line/line-editor.js +2 -1
  343. package/dist/modes/interactive/line/line-mode.js +18 -7
  344. package/dist/modes/interactive/line/line-render.js +25 -24
  345. package/dist/modes/interactive/memory-panel.d.ts +64 -0
  346. package/dist/modes/interactive/memory-panel.js +221 -0
  347. package/dist/modes/interactive/message-view.d.ts +4 -2
  348. package/dist/modes/interactive/message-view.js +42 -33
  349. package/dist/modes/interactive/model-items.d.ts +45 -0
  350. package/dist/modes/interactive/model-items.js +134 -0
  351. package/dist/modes/interactive/model-picker.d.ts +57 -0
  352. package/dist/modes/interactive/model-picker.js +191 -0
  353. package/dist/modes/interactive/panels.js +39 -31
  354. package/dist/modes/interactive/pickers.d.ts +2 -1
  355. package/dist/modes/interactive/pickers.js +10 -6
  356. package/dist/modes/interactive/plan-command.d.ts +1 -1
  357. package/dist/modes/interactive/plan-command.js +24 -27
  358. package/dist/modes/interactive/plan-dialog.js +18 -17
  359. package/dist/modes/interactive/plan-flow.js +6 -5
  360. package/dist/modes/interactive/rewind-command.d.ts +1 -1
  361. package/dist/modes/interactive/rewind-command.js +18 -16
  362. package/dist/modes/interactive/rewind-flow.d.ts +0 -1
  363. package/dist/modes/interactive/rewind-flow.js +13 -14
  364. package/dist/modes/interactive/rewind-list.js +7 -6
  365. package/dist/modes/interactive/rewind-panel.js +40 -40
  366. package/dist/modes/interactive/rewind-text.d.ts +5 -3
  367. package/dist/modes/interactive/rewind-text.js +48 -38
  368. package/dist/modes/interactive/run-indicator.js +15 -12
  369. package/dist/modes/interactive/session-events.js +3 -2
  370. package/dist/modes/interactive/startup-header.js +22 -23
  371. package/dist/modes/interactive/startup-ui.d.ts +3 -9
  372. package/dist/modes/interactive/startup-ui.js +44 -88
  373. package/dist/modes/interactive/status-area.d.ts +2 -0
  374. package/dist/modes/interactive/status-area.js +8 -2
  375. package/dist/modes/interactive/status-bar.js +4 -3
  376. package/dist/modes/interactive/subagent-view.js +9 -7
  377. package/dist/modes/interactive/tasks-report.d.ts +6 -0
  378. package/dist/modes/interactive/tasks-report.js +28 -31
  379. package/dist/modes/interactive/terminal-setup.d.ts +9 -0
  380. package/dist/modes/interactive/terminal-setup.js +23 -0
  381. package/dist/modes/interactive/tool-summary.js +19 -17
  382. package/dist/modes/interactive/tool-view.js +7 -4
  383. package/dist/modes/interactive/trace-view.d.ts +89 -0
  384. package/dist/modes/interactive/trace-view.js +332 -0
  385. package/dist/modes/print/print-mode.js +14 -15
  386. package/dist/modes/rpc/commands.js +7 -3
  387. package/dist/modes/rpc/rpc-mode.js +9 -3
  388. package/dist/modes/session-report.d.ts +2 -0
  389. package/dist/modes/session-report.js +101 -105
  390. package/dist/modes/startup-ui-text.js +11 -6
  391. package/dist/permissions/bypass.d.ts +8 -10
  392. package/dist/permissions/bypass.js +19 -10
  393. package/dist/permissions/memory-class.d.ts +23 -0
  394. package/dist/permissions/memory-class.js +54 -0
  395. package/dist/permissions/modes.d.ts +3 -3
  396. package/dist/permissions/modes.js +21 -16
  397. package/dist/permissions/pipeline.d.ts +1 -1
  398. package/dist/permissions/pipeline.js +9 -2
  399. package/dist/permissions/preview.js +49 -42
  400. package/dist/permissions/rules.js +5 -2
  401. package/dist/permissions/types.d.ts +4 -0
  402. package/dist/plan/store.js +2 -1
  403. package/dist/rpc.d.ts +39 -1
  404. package/dist/rpc.js +3 -0
  405. package/dist/sandbox/bash.js +11 -8
  406. package/dist/sandbox/detect.js +14 -11
  407. package/dist/sdk.d.ts +17 -1
  408. package/dist/sdk.js +29 -7
  409. package/dist/session/export.js +31 -30
  410. package/dist/session/manager.d.ts +1 -1
  411. package/dist/session/manager.js +5 -3
  412. package/dist/session/reuse.js +5 -4
  413. package/dist/session/scan.js +3 -2
  414. package/dist/session/stats-aggregate.d.ts +3 -1
  415. package/dist/session/stats-aggregate.js +5 -1
  416. package/dist/session/stats-index.js +2 -1
  417. package/dist/session/stats-scan.d.ts +4 -1
  418. package/dist/session/stats-scan.js +6 -2
  419. package/dist/session/store.d.ts +11 -0
  420. package/dist/session/store.js +48 -1
  421. package/dist/session/types.d.ts +2 -0
  422. package/dist/skills/builtin.js +2 -1
  423. package/dist/tools/image-file.d.ts +26 -1
  424. package/dist/tools/image-file.js +55 -13
  425. package/dist/tools/presets.d.ts +14 -1
  426. package/dist/tools/presets.js +3 -3
  427. package/dist/tools/registry.js +1 -1
  428. package/dist/tools/truncate.d.ts +1 -1
  429. package/dist/tools/truncate.js +2 -2
  430. package/dist/tools/types.d.ts +17 -1
  431. package/dist/trace/build-index.d.ts +91 -0
  432. package/dist/trace/build-index.js +127 -0
  433. package/dist/trace/build-nodes.d.ts +24 -0
  434. package/dist/trace/build-nodes.js +279 -0
  435. package/dist/trace/build-util.d.ts +43 -0
  436. package/dist/trace/build-util.js +120 -0
  437. package/dist/trace/build.d.ts +82 -0
  438. package/dist/trace/build.js +382 -0
  439. package/dist/trace/detail.d.ts +35 -0
  440. package/dist/trace/detail.js +205 -0
  441. package/dist/trace/flatten.d.ts +69 -0
  442. package/dist/trace/flatten.js +173 -0
  443. package/dist/trace/format.d.ts +47 -0
  444. package/dist/trace/format.js +329 -0
  445. package/dist/trace/html-template.d.ts +19 -0
  446. package/dist/trace/html-template.js +150 -0
  447. package/dist/trace/html.d.ts +104 -0
  448. package/dist/trace/html.js +292 -0
  449. package/dist/trace/preview.d.ts +29 -0
  450. package/dist/trace/preview.js +59 -0
  451. package/dist/trace/query-session.d.ts +14 -0
  452. package/dist/trace/query-session.js +38 -0
  453. package/dist/trace/query.d.ts +55 -0
  454. package/dist/trace/query.js +188 -0
  455. package/dist/trace/session.d.ts +40 -0
  456. package/dist/trace/session.js +168 -0
  457. package/dist/trace/types.d.ts +243 -0
  458. package/dist/trace/types.js +13 -0
  459. package/dist/tui/components/editor-paste.d.ts +2 -0
  460. package/dist/tui/components/editor-paste.js +6 -3
  461. package/dist/tui/components/editor.js +2 -2
  462. package/dist/tui/components/loader.d.ts +3 -0
  463. package/dist/tui/components/loader.js +14 -0
  464. package/dist/tui/components/select-list.d.ts +2 -0
  465. package/dist/tui/components/select-list.js +7 -0
  466. package/dist/tui/components/settings-list.d.ts +61 -0
  467. package/dist/tui/components/settings-list.js +135 -0
  468. package/dist/tui/keybindings.d.ts +5 -0
  469. package/dist/tui/keybindings.js +17 -5
  470. package/dist/tui.d.ts +1 -0
  471. package/dist/tui.js +2 -0
  472. package/docs/en/host-api.md +167 -0
  473. package/docs/en/permissions.md +214 -0
  474. package/docs/en/providers.md +627 -0
  475. package/docs/en/rpc.md +361 -0
  476. package/docs/en/sessions.md +219 -0
  477. package/docs/en/tui.md +534 -0
  478. package/docs/host-api.md +18 -17
  479. package/docs/memory.md +172 -0
  480. package/docs/permissions.md +2 -2
  481. package/docs/providers.md +73 -1
  482. package/docs/rpc.md +31 -3
  483. package/docs/session-format.md +8 -2
  484. package/docs/sessions.md +29 -1
  485. package/docs/tui.md +140 -4
  486. package/package.json +8 -3
@@ -10,33 +10,75 @@
10
10
  * - `/rewind`(无参数)打开回滚列表与确认面板(rewind-flow.ts);带参数走 commands-core,对话变了时
11
11
  * 重画消息区并回填原消息。
12
12
  * - 不是命令(含模板与 `/skill:`)返回 false,调用方把整行当提示发出。
13
+ * - [W6-C0] 面板钩子:`/config`(W6-S)、`/trace`(W6-T1)、`/memory`(W6-M)按 `PANEL_COMMANDS` 表分派到
14
+ * `CommandUi` 的可选钩子;`/tasks` 无参在有 `agentBar` 时聚焦 Agent 栏、`/tasks <id>` 在有 `agentView` 时
15
+ * 直接进子 Agent 视图(W6-A)。钩子没装时回落 commands-core(line 模式同一套文本)。
13
16
  */
17
+ import { msg } from "../../i18n/index.js";
14
18
  import { formatModelRef } from "../../ai/providers/channels.js";
15
19
  import { AgentSessionImpl } from "../../agent/session.js";
16
20
  import { THINKING_LEVELS } from "../../ai/thinking.js";
17
21
  import { listSessions } from "../../cli/compose-store.js";
18
22
  import { hideFakeProvider } from "../../cli/fake-visibility.js";
19
- import { AUTO_LAYER_TEXT, permissionModeLabel } from "../../permissions/modes.js";
23
+ import { autoLayerText, permissionModeLabel } from "../../permissions/modes.js";
20
24
  import { BUILTIN_COMMANDS, parseSlash, runSlashCommand, } from "../commands-core.js";
21
25
  import { contentText } from "./message-view.js";
22
26
  import { cachePanel, permissionsPanel, sessionPanel } from "./panels.js";
23
27
  import { modelItems, permissionPickerSpec, sessionItems, thinkingItems, treeItems, } from "./pickers.js";
28
+ /** 说明随界面语言(取用时求值)。 */
29
+ function command(name, key) {
30
+ return {
31
+ name,
32
+ get description() {
33
+ return msg().interactive.commands[key];
34
+ },
35
+ };
36
+ }
24
37
  export const INTERACTIVE_COMMANDS = [
25
- { name: "tree", description: "浏览会话树,回到某条消息之前重写" },
26
- { name: "permissions", description: "权限模式、判定顺序与规则" },
38
+ command("tree", "treeDescription"),
39
+ command("permissions", "permissionsDescription"),
27
40
  ];
28
41
  /** 补全与 /help 用的完整命令表。 */
29
42
  export const ALL_COMMANDS = [...BUILTIN_COMMANDS, ...INTERACTIVE_COMMANDS];
30
- export const KEY_HINTS = [
31
- "Enter 发送(运行中 = 插话) Alt+Enter 排到本轮之后 Shift+Enter / Ctrl+J 换行",
32
- "Esc 中断(排队消息回填编辑器) Alt+↑ 取回最后一条排队消息",
33
- "空闲时 Esc Esc:输入框为空 = 回滚(/rewind),有字 = 清空(↑ 取回)",
34
- "Shift+Tab / Tab(输入为空时)切换权限模式(进入 Bypass 前确认) Ctrl+L 模型 Ctrl+T 思考级别 Ctrl+O 展开工具输出与思考",
35
- "审批:1–3 或 ↑↓ Enter 选择,y 允许 a 本会话允许同类 n / Esc 拒绝 v 完整输入",
36
- "计划审批:1 批准 2 新上下文执行 3 继续修改 4 放弃并退出 Plan e 编辑计划 Esc 留在 Plan",
37
- "Ctrl+V 粘贴剪贴板图片(插入 @路径) Ctrl+G 底部信息行两行 / 一行",
38
- "Ctrl+C 清空输入(再按退出) Ctrl+D 空输入时退出 Tab 补全 @ 引用文件",
39
- ].join("\n");
43
+ /** `/help` 末尾的按键说明(多行)。 */
44
+ export function keyHints() {
45
+ return msg().interactive.commands.keyHints;
46
+ }
47
+ /**
48
+ * [W6-C0] 面板类命令 → `CommandUi` 钩子。钩子存在就调用并返回 true;不存在返回 false(回落 commands-core)。
49
+ */
50
+ export const PANEL_COMMANDS = {
51
+ config: async (ui, args) => {
52
+ if (ui.configPanel === undefined)
53
+ return false;
54
+ await ui.configPanel(args);
55
+ return true;
56
+ },
57
+ trace: async (ui, args) => {
58
+ if (ui.traceView === undefined)
59
+ return false;
60
+ await ui.traceView(args === "" ? undefined : args);
61
+ return true;
62
+ },
63
+ memory: async (ui, args) => {
64
+ if (ui.memoryPanel === undefined)
65
+ return false;
66
+ await ui.memoryPanel(args);
67
+ return true;
68
+ },
69
+ tasks: async (ui, args) => {
70
+ const parts = args.split(/\s+/).filter((s) => s !== "");
71
+ if (parts.length === 0 && ui.agentBar !== undefined) {
72
+ await ui.agentBar();
73
+ return true;
74
+ }
75
+ if (parts.length === 1 && parts[0] !== "stop" && ui.agentView !== undefined) {
76
+ await ui.agentView(parts[0]);
77
+ return true;
78
+ }
79
+ return false;
80
+ },
81
+ };
40
82
  function homeOf(ui) {
41
83
  return ui.home !== undefined ? { home: ui.home } : {};
42
84
  }
@@ -52,25 +94,23 @@ export function activeBranchIds(session) {
52
94
  return new Set(session.entries.map((e) => e.id));
53
95
  }
54
96
  export function permissionsText(runtime, session) {
97
+ const m = msg().interactive.commands;
98
+ const p = msg().panels.permissions;
55
99
  const rules = runtime.permission.rules;
56
100
  const mode = session.state.permissionMode;
57
- const order = mode === "auto"
58
- ? "deny 规则 → Hook deny → 危险命令确认 → 规则层(受保护路径、项目外写入、网络、删除类)→ Hook ask → allow 规则 / Hook allow / 本会话记忆 → 静态判定(只读、项目内写入、安全名单)→ 模型分类器 → 询问"
59
- : mode === "allowlist"
60
- ? "deny 规则 → Hook deny → 危险命令(拒绝)→ 只读工具 / allow 规则 / Hook allow 放行 → 其余拒绝(从不询问)"
61
- : "deny 规则 → Hook deny → 危险命令确认 → 权限模式 → allow 规则 / Hook allow / 本会话记忆 → 询问";
101
+ const order = mode === "auto" ? p.orderAuto : mode === "allowlist" ? p.orderAllowlist : p.orderDefault;
62
102
  const lines = [
63
- `权限模式:${permissionModeLabel(mode)}(${mode})`,
64
- `判定顺序:${order}`,
65
- rules.length === 0 ? "规则:(无)" : `规则(${rules.length}):`,
103
+ m.permissionsMode(permissionModeLabel(mode), mode),
104
+ m.permissionsOrder(order),
105
+ rules.length === 0 ? m.rulesNone : m.rules(rules.length),
66
106
  ...rules.map((r) => ` ${r.effect === "deny" ? "deny " : "allow"} ${r.raw} [${r.source}]`),
67
107
  ];
68
108
  const recent = runtime.permission.autoDecisions?.() ?? [];
69
109
  if (recent.length > 0) {
70
- lines.push(`最近的 auto 判定(${recent.length}):`);
110
+ lines.push(m.recentAuto(recent.length));
71
111
  for (const d of recent) {
72
- const cached = d.cached === true ? "(缓存)" : "";
73
- lines.push(` ${AUTO_LAYER_TEXT[d.layer]} ${d.decision} ${d.toolName} ${d.summary} — ${d.reason}${cached}`);
112
+ const cached = d.cached === true ? p.cached : "";
113
+ lines.push(` ${autoLayerText(d.layer)} ${d.decision} ${d.toolName} ${d.summary} — ${d.reason}${cached}`);
74
114
  }
75
115
  }
76
116
  return lines.join("\n");
@@ -79,7 +119,7 @@ async function pickTree(ui, title) {
79
119
  const session = ui.session();
80
120
  const items = treeItems(session.entries, activeBranchIds(session), ui.now());
81
121
  if (items.length === 0) {
82
- ui.notice("info", "还没有用户消息");
122
+ ui.notice("info", msg().interactive.commands.noUserMessages);
83
123
  return undefined;
84
124
  }
85
125
  const active = [...items].reverse().find((i) => i.label.includes("● "));
@@ -95,14 +135,14 @@ async function pickTree(ui, title) {
95
135
  async function treeCommand(ui) {
96
136
  const session = ui.session();
97
137
  if (!(session instanceof AgentSessionImpl)) {
98
- ui.notice("warn", "当前会话不支持 /tree");
138
+ ui.notice("warn", msg().interactive.commands.treeUnsupported);
99
139
  return;
100
140
  }
101
141
  if (session.state.isStreaming) {
102
- ui.notice("warn", "运行中不能切换分支(先 Esc 中断)");
142
+ ui.notice("warn", msg().interactive.commands.treeBusy);
103
143
  return;
104
144
  }
105
- const entry = await pickTree(ui, "会话树");
145
+ const entry = await pickTree(ui, msg().interactive.commands.treeTitle);
106
146
  if (entry === undefined)
107
147
  return;
108
148
  await session.navigate(entry.parentId);
@@ -111,23 +151,31 @@ async function treeCommand(ui) {
111
151
  }
112
152
  async function handlePick(what, ui) {
113
153
  const session = ui.session();
154
+ const m = msg().interactive.commands;
114
155
  switch (what) {
115
156
  case "model": {
116
157
  const current = session.state.model;
117
158
  const ref = current === undefined ? undefined : `${current.provider}/${current.id}`;
118
- const picked = await ui.pick({
119
- title: "选择模型",
120
- items: await modelItems(ui.env === undefined
121
- ? ui.runtime.providers
122
- : hideFakeProvider(ui.runtime.providers, ui.env)),
123
- filterable: true,
124
- showCount: true,
125
- ...(ref !== undefined ? { selected: ref, currentValue: ref } : {}),
126
- });
159
+ const providers = ui.env === undefined
160
+ ? ui.runtime.providers
161
+ : hideFakeProvider(ui.runtime.providers, ui.env);
162
+ const picked = ui.pickModel !== undefined
163
+ ? await ui.pickModel(providers, ref)
164
+ : (await ui.pick({
165
+ title: m.modelTitle,
166
+ items: await modelItems(providers, {
167
+ current: ref,
168
+ enabled: ui.runtime.config.models?.enabled,
169
+ hints: false,
170
+ }),
171
+ filterable: true,
172
+ showCount: true,
173
+ ...(ref !== undefined ? { selected: ref, currentValue: ref } : {}),
174
+ }))?.value;
127
175
  if (picked === undefined)
128
176
  return;
129
- await session.setModel(picked.value);
130
- ui.notice("info", `模型:${picked.value}`);
177
+ await session.setModel(picked);
178
+ ui.notice("info", m.modelSet(picked));
131
179
  return;
132
180
  }
133
181
  case "session": {
@@ -137,26 +185,26 @@ async function handlePick(what, ui) {
137
185
  });
138
186
  const others = items.filter((i) => i.id !== session.state.sessionId);
139
187
  if (others.length === 0) {
140
- ui.notice("info", "本目录没有其它会话");
188
+ ui.notice("info", m.noOtherSessions);
141
189
  return;
142
190
  }
143
191
  const picked = await ui.pick({
144
- title: "恢复会话",
192
+ title: m.resumeTitle,
145
193
  items: sessionItems(others, ui.now()),
146
194
  filterable: true,
147
195
  });
148
196
  if (picked === undefined)
149
197
  return;
150
198
  const next = await ui.switchSession({ kind: "resume", id: picked.value });
151
- ui.notice("info", `已恢复会话 ${next.state.sessionId.slice(0, 8)}`);
199
+ ui.notice("info", m.resumed(next.state.sessionId.slice(0, 8)));
152
200
  return;
153
201
  }
154
202
  case "tree": {
155
- const entry = await pickTree(ui, "从哪条消息之前分叉");
203
+ const entry = await pickTree(ui, m.forkTitle);
156
204
  if (entry === undefined)
157
205
  return;
158
206
  const next = await ui.switchSession(entry.parentId === null ? { kind: "new" } : { kind: "fork", entryId: entry.parentId });
159
- ui.notice("info", `已分叉到新会话 ${next.state.sessionId.slice(0, 8)}`);
207
+ ui.notice("info", m.forked(next.state.sessionId.slice(0, 8)));
160
208
  ui.setEditorText(userEntryText(entry) ?? "");
161
209
  return;
162
210
  }
@@ -167,11 +215,11 @@ async function handlePick(what, ui) {
167
215
  const mode = picked.value;
168
216
  const current = session.state.permissionMode;
169
217
  if (mode !== current && ui.confirmMode !== undefined && !(await ui.confirmMode(mode))) {
170
- ui.notice("info", `已取消,权限模式仍为 ${permissionModeLabel(current)}`);
218
+ ui.notice("info", m.modeCancelled(permissionModeLabel(current)));
171
219
  return;
172
220
  }
173
221
  session.setPermissionMode(mode);
174
- ui.notice("info", `权限模式:${permissionModeLabel(mode)}`);
222
+ ui.notice("info", m.modeSet(permissionModeLabel(mode)));
175
223
  return;
176
224
  }
177
225
  case "thinking": {
@@ -179,13 +227,13 @@ async function handlePick(what, ui) {
179
227
  const found = model === undefined ? undefined : ui.runtime.providers.findModel(formatModelRef(model));
180
228
  const reasoning = found?.ok === true ? found.model.reasoning : true;
181
229
  const picked = await ui.pick({
182
- title: "思考级别",
230
+ title: m.thinkingTitle,
183
231
  items: thinkingItems(reasoning),
184
232
  selected: session.state.thinkingLevel,
185
233
  currentValue: session.state.thinkingLevel,
186
234
  filterable: false,
187
235
  numberKeys: true,
188
- footer: `↑↓ 选择 · 1-${THINKING_LEVELS.length} 直接选 · Enter 确认 · Esc 取消`,
236
+ footer: m.numberFooter("↑↓", THINKING_LEVELS.length),
189
237
  });
190
238
  if (picked !== undefined)
191
239
  session.setThinkingLevel(picked.value);
@@ -201,6 +249,9 @@ export async function runInteractiveCommand(line, ui) {
201
249
  try {
202
250
  if (ui.extra !== undefined && (await ui.extra(parsed.name, parsed.args)))
203
251
  return true;
252
+ const panel = PANEL_COMMANDS[parsed.name];
253
+ if (panel !== undefined && (await panel(ui, parsed.args)))
254
+ return true;
204
255
  if (parsed.name === "tree") {
205
256
  await treeCommand(ui);
206
257
  return true;
@@ -251,7 +302,7 @@ export async function runInteractiveCommand(line, ui) {
251
302
  ui.reload();
252
303
  if (parsed.name === "help") {
253
304
  const extra = INTERACTIVE_COMMANDS.map((c) => `/${c.name} ${c.description}`);
254
- ui.notice("info", [result.message ?? "", ...extra, "", KEY_HINTS].join("\n"));
305
+ ui.notice("info", [result.message ?? "", ...extra, "", keyHints()].join("\n"));
255
306
  }
256
307
  else if (result.message !== undefined)
257
308
  ui.notice("info", result.message);
@@ -7,6 +7,7 @@
7
7
  * 最多 50 项;查询含 glob 字符时按 glob(tools/glob.ts)匹配相对路径,否则按「文件名前缀 → 路径前缀 →
8
8
  * 文件名子串 → 路径子串」排序。目录以 `/` 结尾,可继续补全。文件表按 cwd 缓存 15 秒、最多 20 000 项。
9
9
  */
10
+ import { msg } from "../../i18n/index.js";
10
11
  import { GlobMatcher } from "../../tools/glob.js";
11
12
  import { walk } from "../../tools/ignore.js";
12
13
  export const MAX_FILE_ITEMS = 50;
@@ -82,7 +83,7 @@ export class InteractiveCompletion {
82
83
  : command.description, command.name);
83
84
  }
84
85
  for (const prompt of this.source.prompts())
85
- push(prompt.name, "提示模板", prompt.name);
86
+ push(prompt.name, msg().interactive.completion.promptTemplate, prompt.name);
86
87
  for (const skill of this.source.skills()) {
87
88
  push(`skill:${skill.name}`, skill.description, `skill:${skill.name}`);
88
89
  }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * `/config` settings panel component (docs/wave6-plan.md §6.3, D24-D26). [W6-S]
3
+ *
4
+ * Bottom overlay with the card bar: title + write target (`Tab` switches user / project), a search line,
5
+ * the grouped `SettingsList`, a rule, the selected key's description (key-docs, dim, wrapped), one notice
6
+ * line and the key hints. What a key press *does* to a setting is the controller's job (config-ui.ts):
7
+ * the panel calls `activate(key)` for Enter / Space, `unset(key)` for a confirmed Backspace / Delete,
8
+ * `commit(key, text)` for the inline number / text editor, `switchScope()` for Tab and `close()` for Esc.
9
+ *
10
+ * Keys: ↑↓ (and Ctrl+P / Ctrl+N) move; `/` starts a search (typing filters, Esc clears it first, a
11
+ * second Esc closes); Backspace / Delete asks once, then unsets; inside the editor Enter saves (an
12
+ * invalid value stays in the box with the error in red), Esc cancels.
13
+ */
14
+ import { type Component, type Focusable, type Keybindings, type SemanticColor, type SettingsRow, type Theme } from "../../tui.js";
15
+ import { type ConfigSnapshot, type EditScope, type SettingValue } from "../../config/edit.js";
16
+ import { type SettingSpec } from "../../config/settings-registry.js";
17
+ export interface ConfigPanelDeps {
18
+ theme: Theme;
19
+ keybindings?: Keybindings;
20
+ /** Terminal rows (the panel fits in `rows - 1`). */
21
+ rows?(): number;
22
+ /** Write target paths for the title (already shortened with ~). */
23
+ paths: Readonly<Record<EditScope, string>>;
24
+ /** Embedded host (profile): the title says changes go to the user config. */
25
+ embedded?: boolean;
26
+ activate(key: string, scope: EditScope): void | Promise<void>;
27
+ unset(key: string, scope: EditScope): void | Promise<void>;
28
+ /** Inline editor: returns an error message to keep the box open. */
29
+ commit(key: string, text: string, scope: EditScope): Promise<string | undefined>;
30
+ close(): void;
31
+ requestRender(): void;
32
+ }
33
+ /** Display text of a setting value (unset ASCII shows the detected value). */
34
+ export declare function settingValueText(spec: SettingSpec, value: SettingValue, theme: Theme): string;
35
+ /** Why the row cannot be changed in `scope` (undefined: editable). */
36
+ export declare function blockedReason(spec: SettingSpec, value: SettingValue, scope: EditScope): string | undefined;
37
+ /** Panel rows for a snapshot (pure; frame tests use it directly). */
38
+ export declare function settingRows(snapshot: ConfigSnapshot, scope: EditScope, theme: Theme): SettingsRow[];
39
+ /** Hint text for an "edited elsewhere" row id (undefined for settings). */
40
+ export declare function hintOf(id: string): string | undefined;
41
+ export declare class ConfigPanel implements Component, Focusable {
42
+ private snapshot;
43
+ private readonly deps;
44
+ focused: boolean;
45
+ scope: EditScope;
46
+ private readonly list;
47
+ private searching;
48
+ private edit;
49
+ private pendingUnset;
50
+ private notice;
51
+ private busy;
52
+ constructor(snapshot: ConfigSnapshot, deps: ConfigPanelDeps);
53
+ /** Selected row id (tests). */
54
+ get selectedKey(): string | undefined;
55
+ get editing(): boolean;
56
+ refresh(snapshot?: ConfigSnapshot): void;
57
+ select(key: string): void;
58
+ setNotice(text: string | undefined, color?: SemanticColor): void;
59
+ /** Open the inline editor for a number / text key. */
60
+ startEdit(key: string, initial: string): void;
61
+ handleInput(data: string): void;
62
+ private move;
63
+ /** Run a controller action; input is ignored until it settles. */
64
+ private run;
65
+ private editInput;
66
+ render(width: number): string[];
67
+ private body;
68
+ private description;
69
+ invalidate(): void;
70
+ }