@armadra/agent 0.0.0-stage → 0.3.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 (433) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +21 -0
  3. package/README.md +470 -2
  4. package/dist/agent/agent.d.ts +56 -0
  5. package/dist/agent/agent.js +129 -0
  6. package/dist/agent/loop.d.ts +51 -0
  7. package/dist/agent/loop.js +158 -0
  8. package/dist/agent/queue.d.ts +25 -0
  9. package/dist/agent/queue.js +55 -0
  10. package/dist/agent/retry.d.ts +22 -0
  11. package/dist/agent/retry.js +92 -0
  12. package/dist/agent/schema.d.ts +27 -0
  13. package/dist/agent/schema.js +186 -0
  14. package/dist/agent/session-cache.d.ts +100 -0
  15. package/dist/agent/session-cache.js +514 -0
  16. package/dist/agent/session-compaction.d.ts +49 -0
  17. package/dist/agent/session-compaction.js +251 -0
  18. package/dist/agent/session-core.d.ts +103 -0
  19. package/dist/agent/session-core.js +7 -0
  20. package/dist/agent/session-run.d.ts +55 -0
  21. package/dist/agent/session-run.js +246 -0
  22. package/dist/agent/session-state.d.ts +39 -0
  23. package/dist/agent/session-state.js +119 -0
  24. package/dist/agent/session-subagent.d.ts +54 -0
  25. package/dist/agent/session-subagent.js +157 -0
  26. package/dist/agent/session-sync.d.ts +20 -0
  27. package/dist/agent/session-sync.js +111 -0
  28. package/dist/agent/session-tools.d.ts +24 -0
  29. package/dist/agent/session-tools.js +277 -0
  30. package/dist/agent/session.d.ts +117 -0
  31. package/dist/agent/session.js +485 -0
  32. package/dist/agent/system-prompt.d.ts +49 -0
  33. package/dist/agent/system-prompt.js +121 -0
  34. package/dist/agent/tool-runner.d.ts +64 -0
  35. package/dist/agent/tool-runner.js +309 -0
  36. package/dist/agent/transform.d.ts +26 -0
  37. package/dist/agent/transform.js +171 -0
  38. package/dist/agent/types.d.ts +378 -0
  39. package/dist/agent/types.js +21 -0
  40. package/dist/ai/apis/anthropic-messages.d.ts +26 -0
  41. package/dist/ai/apis/anthropic-messages.js +214 -0
  42. package/dist/ai/apis/anthropic-request.d.ts +42 -0
  43. package/dist/ai/apis/anthropic-request.js +282 -0
  44. package/dist/ai/apis/api.d.ts +28 -0
  45. package/dist/ai/apis/api.js +102 -0
  46. package/dist/ai/apis/cache-params.d.ts +48 -0
  47. package/dist/ai/apis/cache-params.js +163 -0
  48. package/dist/ai/apis/google-generative-ai.d.ts +32 -0
  49. package/dist/ai/apis/google-generative-ai.js +249 -0
  50. package/dist/ai/apis/google-request.d.ts +40 -0
  51. package/dist/ai/apis/google-request.js +255 -0
  52. package/dist/ai/apis/openai-compat.d.ts +35 -0
  53. package/dist/ai/apis/openai-compat.js +142 -0
  54. package/dist/ai/apis/openai-completions.d.ts +28 -0
  55. package/dist/ai/apis/openai-completions.js +246 -0
  56. package/dist/ai/apis/openai-request.d.ts +35 -0
  57. package/dist/ai/apis/openai-request.js +303 -0
  58. package/dist/ai/apis/openai-responses-request.d.ts +52 -0
  59. package/dist/ai/apis/openai-responses-request.js +266 -0
  60. package/dist/ai/apis/openai-responses.d.ts +28 -0
  61. package/dist/ai/apis/openai-responses.js +304 -0
  62. package/dist/ai/apis/shared.d.ts +56 -0
  63. package/dist/ai/apis/shared.js +179 -0
  64. package/dist/ai/cache/economics.d.ts +24 -0
  65. package/dist/ai/cache/economics.js +69 -0
  66. package/dist/ai/cache/fingerprint.d.ts +17 -0
  67. package/dist/ai/cache/fingerprint.js +39 -0
  68. package/dist/ai/cache/miss.d.ts +49 -0
  69. package/dist/ai/cache/miss.js +96 -0
  70. package/dist/ai/cache/reporting.d.ts +39 -0
  71. package/dist/ai/cache/reporting.js +103 -0
  72. package/dist/ai/cache/types.d.ts +94 -0
  73. package/dist/ai/cache/types.js +19 -0
  74. package/dist/ai/cache/warmer.d.ts +94 -0
  75. package/dist/ai/cache/warmer.js +224 -0
  76. package/dist/ai/context.d.ts +35 -0
  77. package/dist/ai/context.js +114 -0
  78. package/dist/ai/cost.d.ts +21 -0
  79. package/dist/ai/cost.js +60 -0
  80. package/dist/ai/event-stream.d.ts +33 -0
  81. package/dist/ai/event-stream.js +101 -0
  82. package/dist/ai/fake/fake-provider.d.ts +68 -0
  83. package/dist/ai/fake/fake-provider.js +278 -0
  84. package/dist/ai/fake/fake-script.d.ts +69 -0
  85. package/dist/ai/fake/fake-script.js +142 -0
  86. package/dist/ai/http.d.ts +54 -0
  87. package/dist/ai/http.js +212 -0
  88. package/dist/ai/json-partial.d.ts +17 -0
  89. package/dist/ai/json-partial.js +243 -0
  90. package/dist/ai/overflow.d.ts +22 -0
  91. package/dist/ai/overflow.js +61 -0
  92. package/dist/ai/providers/auth.d.ts +71 -0
  93. package/dist/ai/providers/auth.js +202 -0
  94. package/dist/ai/providers/builtin.d.ts +23 -0
  95. package/dist/ai/providers/builtin.js +148 -0
  96. package/dist/ai/providers/catalog-data.d.ts +5 -0
  97. package/dist/ai/providers/catalog-data.js +19 -0
  98. package/dist/ai/providers/catalog.d.ts +28 -0
  99. package/dist/ai/providers/catalog.js +166 -0
  100. package/dist/ai/providers/channels.d.ts +51 -0
  101. package/dist/ai/providers/channels.js +96 -0
  102. package/dist/ai/providers/enrich.d.ts +34 -0
  103. package/dist/ai/providers/enrich.js +86 -0
  104. package/dist/ai/providers/models-dev-cache.d.ts +53 -0
  105. package/dist/ai/providers/models-dev-cache.js +147 -0
  106. package/dist/ai/providers/models-dev.d.ts +99 -0
  107. package/dist/ai/providers/models-dev.js +315 -0
  108. package/dist/ai/providers/registry.d.ts +114 -0
  109. package/dist/ai/providers/registry.js +458 -0
  110. package/dist/ai/sse.d.ts +32 -0
  111. package/dist/ai/sse.js +140 -0
  112. package/dist/ai/thinking.d.ts +42 -0
  113. package/dist/ai/thinking.js +101 -0
  114. package/dist/ai/types.d.ts +448 -0
  115. package/dist/ai/types.js +19 -0
  116. package/dist/bundle/ama-sandbox.cjs +324 -0
  117. package/dist/bundle/ama.cjs +27837 -0
  118. package/dist/bundle.d.ts +9 -0
  119. package/dist/bundle.js +15 -0
  120. package/dist/cli/args.d.ts +85 -0
  121. package/dist/cli/args.js +408 -0
  122. package/dist/cli/bootstrap.d.ts +18 -0
  123. package/dist/cli/bootstrap.js +399 -0
  124. package/dist/cli/compose-providers.d.ts +37 -0
  125. package/dist/cli/compose-providers.js +107 -0
  126. package/dist/cli/compose-session.d.ts +72 -0
  127. package/dist/cli/compose-session.js +370 -0
  128. package/dist/cli/compose-store.d.ts +24 -0
  129. package/dist/cli/compose-store.js +125 -0
  130. package/dist/cli/compose.d.ts +108 -0
  131. package/dist/cli/compose.js +221 -0
  132. package/dist/cli/default-model.d.ts +16 -0
  133. package/dist/cli/default-model.js +24 -0
  134. package/dist/cli/deps.d.ts +207 -0
  135. package/dist/cli/deps.js +12 -0
  136. package/dist/cli/exit-codes.d.ts +29 -0
  137. package/dist/cli/exit-codes.js +40 -0
  138. package/dist/cli/main.d.ts +27 -0
  139. package/dist/cli/main.js +177 -0
  140. package/dist/cli/runtime.d.ts +90 -0
  141. package/dist/cli/runtime.js +8 -0
  142. package/dist/cli/startup-screen.d.ts +15 -0
  143. package/dist/cli/startup-screen.js +56 -0
  144. package/dist/cli/startup-steps.d.ts +35 -0
  145. package/dist/cli/startup-steps.js +202 -0
  146. package/dist/cli/subcommands/auth.d.ts +12 -0
  147. package/dist/cli/subcommands/auth.js +91 -0
  148. package/dist/cli/subcommands/config.d.ts +53 -0
  149. package/dist/cli/subcommands/config.js +277 -0
  150. package/dist/cli/subcommands/context.d.ts +21 -0
  151. package/dist/cli/subcommands/context.js +42 -0
  152. package/dist/cli/subcommands/doctor.d.ts +11 -0
  153. package/dist/cli/subcommands/doctor.js +246 -0
  154. package/dist/cli/subcommands/init.d.ts +6 -0
  155. package/dist/cli/subcommands/init.js +22 -0
  156. package/dist/cli/subcommands/model-meta.d.ts +16 -0
  157. package/dist/cli/subcommands/model-meta.js +54 -0
  158. package/dist/cli/subcommands/models-cache-probe.d.ts +34 -0
  159. package/dist/cli/subcommands/models-cache-probe.js +190 -0
  160. package/dist/cli/subcommands/models-discover.d.ts +46 -0
  161. package/dist/cli/subcommands/models-discover.js +232 -0
  162. package/dist/cli/subcommands/models.d.ts +40 -0
  163. package/dist/cli/subcommands/models.js +152 -0
  164. package/dist/cli/subcommands/providers-list.d.ts +8 -0
  165. package/dist/cli/subcommands/providers-list.js +97 -0
  166. package/dist/cli/subcommands/providers-plan.d.ts +79 -0
  167. package/dist/cli/subcommands/providers-plan.js +215 -0
  168. package/dist/cli/subcommands/providers.d.ts +27 -0
  169. package/dist/cli/subcommands/providers.js +433 -0
  170. package/dist/cli/subcommands/sessions.d.ts +11 -0
  171. package/dist/cli/subcommands/sessions.js +100 -0
  172. package/dist/codemode/capability.d.ts +37 -0
  173. package/dist/codemode/capability.js +55 -0
  174. package/dist/codemode/declarations.d.ts +44 -0
  175. package/dist/codemode/declarations.js +111 -0
  176. package/dist/codemode/host-side.d.ts +59 -0
  177. package/dist/codemode/host-side.js +253 -0
  178. package/dist/codemode/modes.d.ts +23 -0
  179. package/dist/codemode/modes.js +40 -0
  180. package/dist/codemode/protocol.d.ts +91 -0
  181. package/dist/codemode/protocol.js +114 -0
  182. package/dist/codemode/sandbox-entry.d.ts +25 -0
  183. package/dist/codemode/sandbox-entry.js +323 -0
  184. package/dist/codemode/store.d.ts +26 -0
  185. package/dist/codemode/store.js +53 -0
  186. package/dist/codemode/tool.d.ts +105 -0
  187. package/dist/codemode/tool.js +283 -0
  188. package/dist/compaction/branch-summary.d.ts +30 -0
  189. package/dist/compaction/branch-summary.js +79 -0
  190. package/dist/compaction/breaker.d.ts +32 -0
  191. package/dist/compaction/breaker.js +65 -0
  192. package/dist/compaction/cut-point.d.ts +23 -0
  193. package/dist/compaction/cut-point.js +70 -0
  194. package/dist/compaction/estimate.d.ts +30 -0
  195. package/dist/compaction/estimate.js +114 -0
  196. package/dist/compaction/prune-tier.d.ts +31 -0
  197. package/dist/compaction/prune-tier.js +83 -0
  198. package/dist/compaction/serialize.d.ts +20 -0
  199. package/dist/compaction/serialize.js +115 -0
  200. package/dist/compaction/summarize-tier.d.ts +111 -0
  201. package/dist/compaction/summarize-tier.js +305 -0
  202. package/dist/config/auth-file.d.ts +39 -0
  203. package/dist/config/auth-file.js +92 -0
  204. package/dist/config/context-files.d.ts +30 -0
  205. package/dist/config/context-files.js +77 -0
  206. package/dist/config/init.d.ts +30 -0
  207. package/dist/config/init.js +92 -0
  208. package/dist/config/json-schema.d.ts +14 -0
  209. package/dist/config/json-schema.js +182 -0
  210. package/dist/config/load.d.ts +45 -0
  211. package/dist/config/load.js +97 -0
  212. package/dist/config/merge.d.ts +73 -0
  213. package/dist/config/merge.js +248 -0
  214. package/dist/config/paths.d.ts +38 -0
  215. package/dist/config/paths.js +108 -0
  216. package/dist/config/profile.d.ts +27 -0
  217. package/dist/config/profile.js +65 -0
  218. package/dist/config/schema.d.ts +34 -0
  219. package/dist/config/schema.js +476 -0
  220. package/dist/config/trust.d.ts +42 -0
  221. package/dist/config/trust.js +122 -0
  222. package/dist/config/types.d.ts +190 -0
  223. package/dist/config/types.js +29 -0
  224. package/dist/config/write.d.ts +10 -0
  225. package/dist/config/write.js +25 -0
  226. package/dist/errors.d.ts +28 -0
  227. package/dist/errors.js +30 -0
  228. package/dist/hooks/config.d.ts +49 -0
  229. package/dist/hooks/config.js +102 -0
  230. package/dist/hooks/dispatcher.d.ts +41 -0
  231. package/dist/hooks/dispatcher.js +104 -0
  232. package/dist/hooks/matcher.d.ts +22 -0
  233. package/dist/hooks/matcher.js +108 -0
  234. package/dist/hooks/protocol.d.ts +33 -0
  235. package/dist/hooks/protocol.js +240 -0
  236. package/dist/hooks/runner.d.ts +30 -0
  237. package/dist/hooks/runner.js +143 -0
  238. package/dist/hooks/types.d.ts +147 -0
  239. package/dist/hooks/types.js +20 -0
  240. package/dist/host/api-impl.d.ts +75 -0
  241. package/dist/host/api-impl.js +173 -0
  242. package/dist/host/loader.d.ts +31 -0
  243. package/dist/host/loader.js +147 -0
  244. package/dist/host/types.d.ts +169 -0
  245. package/dist/host/types.js +14 -0
  246. package/dist/host.d.ts +5 -0
  247. package/dist/host.js +4 -0
  248. package/dist/index.d.ts +41 -0
  249. package/dist/index.js +28 -0
  250. package/dist/modes/commands-core.d.ts +44 -0
  251. package/dist/modes/commands-core.js +171 -0
  252. package/dist/modes/image-input.d.ts +27 -0
  253. package/dist/modes/image-input.js +78 -0
  254. package/dist/modes/interactive/approval-dialog.d.ts +48 -0
  255. package/dist/modes/interactive/approval-dialog.js +202 -0
  256. package/dist/modes/interactive/commands.d.ts +41 -0
  257. package/dist/modes/interactive/commands.js +201 -0
  258. package/dist/modes/interactive/completion.d.ts +53 -0
  259. package/dist/modes/interactive/completion.js +157 -0
  260. package/dist/modes/interactive/interactive-mode.d.ts +46 -0
  261. package/dist/modes/interactive/interactive-mode.js +491 -0
  262. package/dist/modes/interactive/key-dispatch.d.ts +29 -0
  263. package/dist/modes/interactive/key-dispatch.js +107 -0
  264. package/dist/modes/interactive/line/line-editor.d.ts +50 -0
  265. package/dist/modes/interactive/line/line-editor.js +232 -0
  266. package/dist/modes/interactive/line/line-mode.d.ts +20 -0
  267. package/dist/modes/interactive/line/line-mode.js +218 -0
  268. package/dist/modes/interactive/line/line-render.d.ts +35 -0
  269. package/dist/modes/interactive/line/line-render.js +171 -0
  270. package/dist/modes/interactive/line/paste-state.d.ts +26 -0
  271. package/dist/modes/interactive/line/paste-state.js +72 -0
  272. package/dist/modes/interactive/message-view.d.ts +77 -0
  273. package/dist/modes/interactive/message-view.js +269 -0
  274. package/dist/modes/interactive/pickers.d.ts +42 -0
  275. package/dist/modes/interactive/pickers.js +115 -0
  276. package/dist/modes/interactive/startup-ui.d.ts +33 -0
  277. package/dist/modes/interactive/startup-ui.js +268 -0
  278. package/dist/modes/interactive/status-bar.d.ts +48 -0
  279. package/dist/modes/interactive/status-bar.js +139 -0
  280. package/dist/modes/interactive/tool-view.d.ts +95 -0
  281. package/dist/modes/interactive/tool-view.js +344 -0
  282. package/dist/modes/print/json-event.d.ts +15 -0
  283. package/dist/modes/print/json-event.js +39 -0
  284. package/dist/modes/print/print-mode.d.ts +17 -0
  285. package/dist/modes/print/print-mode.js +107 -0
  286. package/dist/modes/rpc/commands.d.ts +40 -0
  287. package/dist/modes/rpc/commands.js +263 -0
  288. package/dist/modes/rpc/jsonl.d.ts +16 -0
  289. package/dist/modes/rpc/jsonl.js +55 -0
  290. package/dist/modes/rpc/rpc-mode.d.ts +22 -0
  291. package/dist/modes/rpc/rpc-mode.js +153 -0
  292. package/dist/modes/session-report.d.ts +55 -0
  293. package/dist/modes/session-report.js +278 -0
  294. package/dist/modes/shared.d.ts +13 -0
  295. package/dist/modes/shared.js +52 -0
  296. package/dist/modes/startup-ui-text.d.ts +16 -0
  297. package/dist/modes/startup-ui-text.js +103 -0
  298. package/dist/permissions/broker.d.ts +47 -0
  299. package/dist/permissions/broker.js +107 -0
  300. package/dist/permissions/dangerous.d.ts +47 -0
  301. package/dist/permissions/dangerous.js +370 -0
  302. package/dist/permissions/pipeline.d.ts +51 -0
  303. package/dist/permissions/pipeline.js +181 -0
  304. package/dist/permissions/preview.d.ts +43 -0
  305. package/dist/permissions/preview.js +463 -0
  306. package/dist/permissions/rules.d.ts +58 -0
  307. package/dist/permissions/rules.js +249 -0
  308. package/dist/permissions/types.d.ts +100 -0
  309. package/dist/permissions/types.js +18 -0
  310. package/dist/rpc.d.ts +173 -0
  311. package/dist/rpc.js +13 -0
  312. package/dist/sdk.d.ts +98 -0
  313. package/dist/sdk.js +195 -0
  314. package/dist/session/manager.d.ts +70 -0
  315. package/dist/session/manager.js +278 -0
  316. package/dist/session/migrate.d.ts +19 -0
  317. package/dist/session/migrate.js +53 -0
  318. package/dist/session/projection.d.ts +50 -0
  319. package/dist/session/projection.js +184 -0
  320. package/dist/session/store.d.ts +47 -0
  321. package/dist/session/store.js +210 -0
  322. package/dist/session/tree.d.ts +21 -0
  323. package/dist/session/tree.js +88 -0
  324. package/dist/session/types.d.ts +201 -0
  325. package/dist/session/types.js +18 -0
  326. package/dist/skills/discover.d.ts +60 -0
  327. package/dist/skills/discover.js +160 -0
  328. package/dist/skills/expand.d.ts +35 -0
  329. package/dist/skills/expand.js +46 -0
  330. package/dist/skills/frontmatter.d.ts +27 -0
  331. package/dist/skills/frontmatter.js +157 -0
  332. package/dist/skills/index-prompt.d.ts +13 -0
  333. package/dist/skills/index-prompt.js +42 -0
  334. package/dist/skills/templates.d.ts +52 -0
  335. package/dist/skills/templates.js +177 -0
  336. package/dist/tools/bash.d.ts +49 -0
  337. package/dist/tools/bash.js +222 -0
  338. package/dist/tools/edit-fuzzy.d.ts +36 -0
  339. package/dist/tools/edit-fuzzy.js +129 -0
  340. package/dist/tools/edit.d.ts +38 -0
  341. package/dist/tools/edit.js +241 -0
  342. package/dist/tools/file-mutex.d.ts +8 -0
  343. package/dist/tools/file-mutex.js +29 -0
  344. package/dist/tools/glob.d.ts +44 -0
  345. package/dist/tools/glob.js +217 -0
  346. package/dist/tools/grep.d.ts +39 -0
  347. package/dist/tools/grep.js +179 -0
  348. package/dist/tools/ignore.d.ts +40 -0
  349. package/dist/tools/ignore.js +174 -0
  350. package/dist/tools/image-file.d.ts +31 -0
  351. package/dist/tools/image-file.js +114 -0
  352. package/dist/tools/ls.d.ts +21 -0
  353. package/dist/tools/ls.js +96 -0
  354. package/dist/tools/output-accumulator.d.ts +48 -0
  355. package/dist/tools/output-accumulator.js +106 -0
  356. package/dist/tools/paths.d.ts +20 -0
  357. package/dist/tools/paths.js +58 -0
  358. package/dist/tools/presets.d.ts +71 -0
  359. package/dist/tools/presets.js +128 -0
  360. package/dist/tools/process-tree.d.ts +35 -0
  361. package/dist/tools/process-tree.js +125 -0
  362. package/dist/tools/read.d.ts +24 -0
  363. package/dist/tools/read.js +132 -0
  364. package/dist/tools/registry.d.ts +43 -0
  365. package/dist/tools/registry.js +106 -0
  366. package/dist/tools/shell.d.ts +38 -0
  367. package/dist/tools/shell.js +91 -0
  368. package/dist/tools/task.d.ts +29 -0
  369. package/dist/tools/task.js +107 -0
  370. package/dist/tools/todo.d.ts +28 -0
  371. package/dist/tools/todo.js +107 -0
  372. package/dist/tools/truncate.d.ts +44 -0
  373. package/dist/tools/truncate.js +175 -0
  374. package/dist/tools/types.d.ts +135 -0
  375. package/dist/tools/types.js +19 -0
  376. package/dist/tools/write.d.ts +20 -0
  377. package/dist/tools/write.js +84 -0
  378. package/dist/tui/ansi.d.ts +29 -0
  379. package/dist/tui/ansi.js +420 -0
  380. package/dist/tui/component.d.ts +38 -0
  381. package/dist/tui/component.js +13 -0
  382. package/dist/tui/components/box.d.ts +26 -0
  383. package/dist/tui/components/box.js +65 -0
  384. package/dist/tui/components/container.d.ts +14 -0
  385. package/dist/tui/components/container.js +39 -0
  386. package/dist/tui/components/editor-buffer.d.ts +67 -0
  387. package/dist/tui/components/editor-buffer.js +300 -0
  388. package/dist/tui/components/editor-paste.d.ts +29 -0
  389. package/dist/tui/components/editor-paste.js +64 -0
  390. package/dist/tui/components/editor.d.ts +114 -0
  391. package/dist/tui/components/editor.js +530 -0
  392. package/dist/tui/components/key-value.d.ts +29 -0
  393. package/dist/tui/components/key-value.js +48 -0
  394. package/dist/tui/components/loader.d.ts +35 -0
  395. package/dist/tui/components/loader.js +71 -0
  396. package/dist/tui/components/markdown.d.ts +90 -0
  397. package/dist/tui/components/markdown.js +462 -0
  398. package/dist/tui/components/meter.d.ts +29 -0
  399. package/dist/tui/components/meter.js +47 -0
  400. package/dist/tui/components/overlay.d.ts +24 -0
  401. package/dist/tui/components/overlay.js +52 -0
  402. package/dist/tui/components/select-list.d.ts +57 -0
  403. package/dist/tui/components/select-list.js +179 -0
  404. package/dist/tui/components/spacer.d.ts +11 -0
  405. package/dist/tui/components/spacer.js +16 -0
  406. package/dist/tui/components/text.d.ts +30 -0
  407. package/dist/tui/components/text.js +65 -0
  408. package/dist/tui/keybindings.d.ts +66 -0
  409. package/dist/tui/keybindings.js +120 -0
  410. package/dist/tui/keys.d.ts +38 -0
  411. package/dist/tui/keys.js +275 -0
  412. package/dist/tui/stdin-buffer.d.ts +41 -0
  413. package/dist/tui/stdin-buffer.js +206 -0
  414. package/dist/tui/terminal.d.ts +79 -0
  415. package/dist/tui/terminal.js +153 -0
  416. package/dist/tui/theme.d.ts +31 -0
  417. package/dist/tui/theme.js +199 -0
  418. package/dist/tui/tui.d.ts +103 -0
  419. package/dist/tui/tui.js +363 -0
  420. package/dist/tui/vt-screen.d.ts +46 -0
  421. package/dist/tui/vt-screen.js +251 -0
  422. package/dist/tui.d.ts +30 -0
  423. package/dist/tui.js +31 -0
  424. package/dist/version.d.ts +8 -0
  425. package/dist/version.js +24 -0
  426. package/docs/codemode.md +102 -0
  427. package/docs/hooks.md +196 -0
  428. package/docs/host-api.md +161 -0
  429. package/docs/providers.md +531 -0
  430. package/docs/rpc.md +253 -0
  431. package/docs/session-format.md +119 -0
  432. package/docs/tui.md +170 -0
  433. package/package.json +101 -4
@@ -0,0 +1,157 @@
1
+ /**
2
+ * YAML 头**子集**解析(设计 §5.3、§2「YAML 只支持 frontmatter 子集自写」)。[B3]
3
+ *
4
+ * 支持:首行 `---` 到下一个 `---` / `...` 之间的
5
+ * - `key: value`(值为裸字串、单 / 双引号字串、`true/false`、整数 / 小数、`null` / `~`);
6
+ * - 行内数组 `key: [a, "b", 3]`;块数组(`key:` 后跟 `- item` 行);
7
+ * - `#` 注释(引号外)与空行。
8
+ * 不支持:嵌套映射、多行块标量(`|` / `>`)、锚点——遇到时记一条错误并跳过该键。
9
+ */
10
+ function stripComment(text) {
11
+ let quote;
12
+ for (let i = 0; i < text.length; i++) {
13
+ const ch = text[i];
14
+ if (quote) {
15
+ if (ch === "\\" && quote === '"')
16
+ i++;
17
+ else if (ch === quote)
18
+ quote = undefined;
19
+ }
20
+ else if (ch === '"' || ch === "'") {
21
+ quote = ch;
22
+ }
23
+ else if (ch === "#" && (i === 0 || /\s/.test(text[i - 1] ?? ""))) {
24
+ return text.slice(0, i).trimEnd();
25
+ }
26
+ }
27
+ return text.trimEnd();
28
+ }
29
+ function unquote(text) {
30
+ if (text.length >= 2 && text.startsWith('"') && text.endsWith('"')) {
31
+ try {
32
+ return JSON.parse(text);
33
+ }
34
+ catch {
35
+ return text.slice(1, -1);
36
+ }
37
+ }
38
+ if (text.length >= 2 && text.startsWith("'") && text.endsWith("'")) {
39
+ return text.slice(1, -1).replace(/''/g, "'");
40
+ }
41
+ return undefined;
42
+ }
43
+ export function parseScalar(raw) {
44
+ const text = raw.trim();
45
+ const quoted = unquote(text);
46
+ if (quoted !== undefined)
47
+ return quoted;
48
+ if (text === "" || text === "null" || text === "~")
49
+ return null;
50
+ if (text === "true" || text === "True" || text === "TRUE")
51
+ return true;
52
+ if (text === "false" || text === "False" || text === "FALSE")
53
+ return false;
54
+ if (/^-?\d+(\.\d+)?$/.test(text))
55
+ return Number(text);
56
+ return text;
57
+ }
58
+ function splitInlineArray(inner) {
59
+ const out = [];
60
+ let current = "";
61
+ let quote;
62
+ for (const ch of inner) {
63
+ if (quote) {
64
+ if (ch === quote)
65
+ quote = undefined;
66
+ current += ch;
67
+ }
68
+ else if (ch === '"' || ch === "'") {
69
+ quote = ch;
70
+ current += ch;
71
+ }
72
+ else if (ch === ",") {
73
+ out.push(current);
74
+ current = "";
75
+ }
76
+ else
77
+ current += ch;
78
+ }
79
+ if (current.trim() !== "")
80
+ out.push(current);
81
+ return out;
82
+ }
83
+ /** 拆出头与正文;不以 `---` 开头视为无头。 */
84
+ export function splitFrontmatter(text) {
85
+ const normalized = text.replace(/^\uFEFF/, "").replace(/\r\n/g, "\n");
86
+ const lines = normalized.split("\n");
87
+ if (lines[0]?.trim() !== "---")
88
+ return { header: undefined, body: normalized };
89
+ for (let i = 1; i < lines.length; i++) {
90
+ const t = lines[i]?.trim();
91
+ if (t === "---" || t === "...") {
92
+ return { header: lines.slice(1, i), body: lines.slice(i + 1).join("\n") };
93
+ }
94
+ }
95
+ return { header: undefined, body: normalized };
96
+ }
97
+ export function parseFrontmatter(text) {
98
+ const { header, body } = splitFrontmatter(text);
99
+ const result = {
100
+ data: {},
101
+ body,
102
+ hasFrontmatter: header !== undefined,
103
+ errors: [],
104
+ };
105
+ if (!header)
106
+ return result;
107
+ let listKey;
108
+ const emptyKeys = new Set();
109
+ header.forEach((rawLine, index) => {
110
+ const lineNo = index + 2;
111
+ const line = stripComment(rawLine);
112
+ if (line.trim() === "")
113
+ return;
114
+ const item = /^\s+-\s*(.*)$|^-\s+(.*)$/.exec(line);
115
+ if (item && listKey !== undefined) {
116
+ const arr = result.data[listKey];
117
+ if (Array.isArray(arr))
118
+ arr.push(parseScalar(item[1] ?? item[2] ?? ""));
119
+ emptyKeys.delete(listKey);
120
+ return;
121
+ }
122
+ if (/^\s/.test(line)) {
123
+ result.errors.push(`line ${lineNo}: nested values are not supported`);
124
+ return;
125
+ }
126
+ const m = /^([A-Za-z0-9_][A-Za-z0-9_.-]*)\s*:(?:\s+(.*)|\s*)$/.exec(line);
127
+ if (!m) {
128
+ result.errors.push(`line ${lineNo}: expected "key: value"`);
129
+ listKey = undefined;
130
+ return;
131
+ }
132
+ const key = m[1];
133
+ const value = (m[2] ?? "").trim();
134
+ listKey = undefined;
135
+ if (value === "") {
136
+ result.data[key] = [];
137
+ listKey = key;
138
+ emptyKeys.add(key);
139
+ }
140
+ else if (value === "|" || value === ">" || /^[|>][+-]?$/.test(value)) {
141
+ result.errors.push(`line ${lineNo}: block scalars are not supported (key "${key}")`);
142
+ }
143
+ else if (value.startsWith("[") && value.endsWith("]")) {
144
+ result.data[key] = splitInlineArray(value.slice(1, -1)).map(parseScalar);
145
+ }
146
+ else if (value.startsWith("{")) {
147
+ result.errors.push(`line ${lineNo}: inline mappings are not supported (key "${key}")`);
148
+ }
149
+ else {
150
+ result.data[key] = parseScalar(value);
151
+ }
152
+ });
153
+ // `key:` 后没有列表项 → null。
154
+ for (const key of emptyKeys)
155
+ result.data[key] = null;
156
+ return result;
157
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `<available_skills>` 索引(设计 §5.3 三级披露第一级)。[B3]
3
+ *
4
+ * 放进系统提示 `skills` 节。`disable-model-invocation: true` 的技能不进索引;有 `skill` 工具时
5
+ * 引导用它,否则用 `read`,都没有时不生成索引(返回空串)。
6
+ */
7
+ import type { Skill } from "./discover.js";
8
+ export interface SkillIndexOptions {
9
+ hasSkillTool: boolean;
10
+ hasReadTool: boolean;
11
+ }
12
+ export declare function escapeXml(text: string): string;
13
+ export declare function formatSkillIndex(skills: readonly Pick<Skill, "name" | "description" | "location" | "disableModelInvocation">[], options: SkillIndexOptions): string;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * `<available_skills>` 索引(设计 §5.3 三级披露第一级)。[B3]
3
+ *
4
+ * 放进系统提示 `skills` 节。`disable-model-invocation: true` 的技能不进索引;有 `skill` 工具时
5
+ * 引导用它,否则用 `read`,都没有时不生成索引(返回空串)。
6
+ */
7
+ export function escapeXml(text) {
8
+ return text
9
+ .replace(/&/g, "&amp;")
10
+ .replace(/</g, "&lt;")
11
+ .replace(/>/g, "&gt;")
12
+ .replace(/"/g, "&quot;")
13
+ .replace(/'/g, "&apos;");
14
+ }
15
+ export function formatSkillIndex(skills, options) {
16
+ const visible = skills.filter((s) => !s.disableModelInvocation);
17
+ if (visible.length === 0)
18
+ return "";
19
+ let how;
20
+ if (options.hasSkillTool) {
21
+ how =
22
+ "Call the skill tool with a skill's name to load it when the task matches its description.";
23
+ }
24
+ else if (options.hasReadTool) {
25
+ how = "Use the read tool to load a skill's file when the task matches its description.";
26
+ }
27
+ else {
28
+ return "";
29
+ }
30
+ const lines = [
31
+ "The following skills provide specialized instructions for specific tasks.",
32
+ how,
33
+ "When a skill file references a relative path, resolve it against the skill's directory.",
34
+ "",
35
+ "<available_skills>",
36
+ ];
37
+ for (const s of visible) {
38
+ lines.push(" <skill>", ` <name>${escapeXml(s.name)}</name>`, ` <description>${escapeXml(s.description)}</description>`, ` <location>${escapeXml(s.location)}</location>`, " </skill>");
39
+ }
40
+ lines.push("</available_skills>");
41
+ return lines.join("\n");
42
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * 提示模板 `prompts/<cmd>.md`(设计 §5.3)。[B3]
3
+ *
4
+ * - 发现:profile `promptDirs` → `<configDir>/prompts/` → `<cwd>/.ama/prompts/`(需信任);只取目录
5
+ * 的直接 `*.md` 子文件,文件名即命令名;重名保留先发现者并 warning。frontmatter 可给
6
+ * `description`(缺省取正文首个非空行)与 `argument-hint`。
7
+ * - 参数按 shell 规则切分(空白分隔,单 / 双引号,反斜杠转义)。
8
+ * - 占位:`$1…$N`、`$@` / `$ARGUMENTS`(全部参数)、`${N}`、`${N:-默认}`、`${@:-默认}`、`${@:N}`、
9
+ * `${@:N:L}`;`\$` 为字面 `$`。模板里没有任何占位而用户给了参数时,参数接在正文后(空一行)。
10
+ */
11
+ export interface PromptTemplate {
12
+ name: string;
13
+ path: string;
14
+ description: string;
15
+ argumentHint?: string;
16
+ scope: PromptScope;
17
+ }
18
+ export type PromptScope = "cli" | "profile" | "user" | "project";
19
+ export interface PromptSource {
20
+ dir: string;
21
+ scope: PromptScope;
22
+ requiresTrust: boolean;
23
+ }
24
+ export declare const TEMPLATE_NAME_RE: RegExp;
25
+ export declare function promptSources(options: {
26
+ cwd: string;
27
+ configDir: string;
28
+ cliDirs?: readonly string[];
29
+ profileDirs?: readonly string[];
30
+ }): PromptSource[];
31
+ export declare function discoverPromptTemplates(sources: readonly PromptSource[], options: {
32
+ trusted: boolean;
33
+ }): Promise<{
34
+ templates: PromptTemplate[];
35
+ warnings: string[];
36
+ skippedUntrusted: string[];
37
+ }>;
38
+ /** shell 风格切分。 */
39
+ export declare function parseCommandArgs(text: string): string[];
40
+ export declare function hasPlaceholders(body: string): boolean;
41
+ export declare function expandTemplate(body: string, args: readonly string[]): string;
42
+ export interface PromptCommand {
43
+ name: string;
44
+ args: string[];
45
+ rawArgs: string;
46
+ }
47
+ export declare function parsePromptCommand(text: string): PromptCommand | undefined;
48
+ /** `/name args` 命中模板则返回展开文本;否则 undefined(交给斜杠命令表)。 */
49
+ export declare function expandPromptCommand(text: string, templates: readonly PromptTemplate[], read?: (path: string) => Promise<string>): Promise<{
50
+ text: string;
51
+ template: PromptTemplate;
52
+ } | undefined>;
@@ -0,0 +1,177 @@
1
+ /**
2
+ * 提示模板 `prompts/<cmd>.md`(设计 §5.3)。[B3]
3
+ *
4
+ * - 发现:profile `promptDirs` → `<configDir>/prompts/` → `<cwd>/.ama/prompts/`(需信任);只取目录
5
+ * 的直接 `*.md` 子文件,文件名即命令名;重名保留先发现者并 warning。frontmatter 可给
6
+ * `description`(缺省取正文首个非空行)与 `argument-hint`。
7
+ * - 参数按 shell 规则切分(空白分隔,单 / 双引号,反斜杠转义)。
8
+ * - 占位:`$1…$N`、`$@` / `$ARGUMENTS`(全部参数)、`${N}`、`${N:-默认}`、`${@:-默认}`、`${@:N}`、
9
+ * `${@:N:L}`;`\$` 为字面 `$`。模板里没有任何占位而用户给了参数时,参数接在正文后(空一行)。
10
+ */
11
+ import { readdir, readFile, stat } from "node:fs/promises";
12
+ import { join, resolve } from "node:path";
13
+ import { parseFrontmatter } from "./frontmatter.js";
14
+ export const TEMPLATE_NAME_RE = /^[a-z0-9][a-z0-9_-]*$/i;
15
+ export function promptSources(options) {
16
+ const out = [];
17
+ for (const d of options.cliDirs ?? [])
18
+ out.push({ dir: resolve(options.cwd, d), scope: "cli", requiresTrust: false });
19
+ for (const d of options.profileDirs ?? []) {
20
+ out.push({ dir: resolve(options.cwd, d), scope: "profile", requiresTrust: false });
21
+ }
22
+ out.push({ dir: join(options.configDir, "prompts"), scope: "user", requiresTrust: false });
23
+ out.push({ dir: join(options.cwd, ".ama", "prompts"), scope: "project", requiresTrust: true });
24
+ return out;
25
+ }
26
+ export async function discoverPromptTemplates(sources, options) {
27
+ const templates = [];
28
+ const warnings = [];
29
+ const skippedUntrusted = [];
30
+ const seen = new Map();
31
+ for (const source of sources) {
32
+ let names;
33
+ try {
34
+ if (!(await stat(source.dir)).isDirectory())
35
+ continue;
36
+ names = await readdir(source.dir);
37
+ }
38
+ catch {
39
+ continue;
40
+ }
41
+ if (source.requiresTrust && !options.trusted) {
42
+ skippedUntrusted.push(source.dir);
43
+ continue;
44
+ }
45
+ for (const file of names.filter((n) => n.endsWith(".md")).sort()) {
46
+ const name = file.slice(0, -3);
47
+ const path = join(source.dir, file);
48
+ if (!TEMPLATE_NAME_RE.test(name)) {
49
+ warnings.push(`${path}: invalid command name "${name}"`);
50
+ continue;
51
+ }
52
+ const existing = seen.get(name);
53
+ if (existing) {
54
+ warnings.push(`${path}: prompt "/${name}" already defined at ${existing.path}; ignored`);
55
+ continue;
56
+ }
57
+ let text;
58
+ try {
59
+ if (!(await stat(path)).isFile())
60
+ continue;
61
+ text = await readFile(path, "utf8");
62
+ }
63
+ catch {
64
+ continue;
65
+ }
66
+ const fm = parseFrontmatter(text);
67
+ const desc = fm.data["description"];
68
+ const firstLine = fm.body
69
+ .split("\n")
70
+ .find((l) => l.trim() !== "")
71
+ ?.trim() ?? "";
72
+ const template = {
73
+ name,
74
+ path,
75
+ description: typeof desc === "string" && desc !== "" ? desc : firstLine.slice(0, 80),
76
+ scope: source.scope,
77
+ };
78
+ const hint = fm.data["argument-hint"];
79
+ if (typeof hint === "string" && hint !== "")
80
+ template.argumentHint = hint;
81
+ seen.set(name, template);
82
+ templates.push(template);
83
+ }
84
+ }
85
+ return { templates, warnings, skippedUntrusted };
86
+ }
87
+ /** shell 风格切分。 */
88
+ export function parseCommandArgs(text) {
89
+ const args = [];
90
+ let current = "";
91
+ let has = false;
92
+ let quote;
93
+ for (let i = 0; i < text.length; i++) {
94
+ const ch = text[i];
95
+ if (quote === "'") {
96
+ if (ch === "'")
97
+ quote = undefined;
98
+ else
99
+ current += ch;
100
+ }
101
+ else if (quote === '"') {
102
+ if (ch === '"')
103
+ quote = undefined;
104
+ else if (ch === "\\" && (text[i + 1] === '"' || text[i + 1] === "\\"))
105
+ current += text[++i];
106
+ else
107
+ current += ch;
108
+ }
109
+ else if (ch === "'" || ch === '"') {
110
+ quote = ch;
111
+ has = true;
112
+ }
113
+ else if (ch === "\\" && i + 1 < text.length) {
114
+ current += text[++i];
115
+ has = true;
116
+ }
117
+ else if (/\s/.test(ch)) {
118
+ if (has || current !== "")
119
+ args.push(current);
120
+ current = "";
121
+ has = false;
122
+ }
123
+ else {
124
+ current += ch;
125
+ }
126
+ }
127
+ if (has || current !== "")
128
+ args.push(current);
129
+ return args;
130
+ }
131
+ const PLACEHOLDER = /\\\$|\$\{(@|\d+)(?::-([^}]*)|:(\d+)(?::(\d+))?)?\}|\$(ARGUMENTS|@|\d+)/g;
132
+ export function hasPlaceholders(body) {
133
+ return [...body.matchAll(PLACEHOLDER)].some((m) => m[0] !== "\\$");
134
+ }
135
+ export function expandTemplate(body, args) {
136
+ const all = args.join(" ");
137
+ const expanded = body.replace(PLACEHOLDER, (whole, braced, def, start, len, bare) => {
138
+ if (whole === "\\$")
139
+ return "$";
140
+ const key = braced ?? bare;
141
+ if (key === "@" || key === "ARGUMENTS") {
142
+ if (start !== undefined) {
143
+ const from = Math.max(0, Number(start) - 1);
144
+ const slice = len !== undefined ? args.slice(from, from + Number(len)) : args.slice(from);
145
+ return slice.join(" ");
146
+ }
147
+ if (def !== undefined)
148
+ return args.length > 0 ? all : def;
149
+ return all;
150
+ }
151
+ const value = args[Number(key) - 1];
152
+ if (def !== undefined)
153
+ return value === undefined || value === "" ? def : value;
154
+ return value ?? "";
155
+ });
156
+ if (!hasPlaceholders(body) && args.length > 0)
157
+ return `${expanded.replace(/\s+$/, "")}\n\n${all}`;
158
+ return expanded;
159
+ }
160
+ export function parsePromptCommand(text) {
161
+ const m = /^\/([A-Za-z0-9][A-Za-z0-9_-]*)(?:[ \t]+([\s\S]*))?$/.exec(text.trim());
162
+ if (!m)
163
+ return undefined;
164
+ const rawArgs = (m[2] ?? "").trim();
165
+ return { name: m[1], args: parseCommandArgs(rawArgs), rawArgs };
166
+ }
167
+ /** `/name args` 命中模板则返回展开文本;否则 undefined(交给斜杠命令表)。 */
168
+ export async function expandPromptCommand(text, templates, read = (p) => readFile(p, "utf8")) {
169
+ const cmd = parsePromptCommand(text);
170
+ if (!cmd)
171
+ return undefined;
172
+ const template = templates.find((t) => t.name === cmd.name);
173
+ if (!template)
174
+ return undefined;
175
+ const body = parseFrontmatter(await read(template.path)).body.replace(/^\n+/, "");
176
+ return { text: expandTemplate(body, cmd.args), template };
177
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * `bash` 工具(设计 §5.2、§4.2)。[B3]
3
+ *
4
+ * - `spawn(shell, args, { detached: !win, stdio: [ignore, pipe, pipe] })`,stdout / stderr 合流;
5
+ * - 超时(缺省 120 s,上限 600 s)与 abort 都走 `killProcessTree`:SIGTERM → 2 s → SIGKILL;
6
+ * - 滚动尾部节流后经 `ctx.onUpdate` 流出;超限(2000 行 / 50 KB)尾截断并落全文;
7
+ * - 结构化结果 `{ output, exit_code, truncated, full_output_path?, wall_time_seconds }`;
8
+ * 信号退出 `128 + signo`;非零退出码 → isError;
9
+ * - 注入 `AMA_*` 环境变量(shell.ts)。shell 退出后不等仍占着管道的后台进程。
10
+ */
11
+ import type { ToolContext, ToolDefinition, ToolResult } from "./types.js";
12
+ import { type ShellConfig } from "./shell.js";
13
+ import { type ProcessDeps } from "./process-tree.js";
14
+ export declare const DEFAULT_BASH_TIMEOUT_MS = 120000;
15
+ export declare const MAX_BASH_TIMEOUT_MS = 600000;
16
+ export interface BashInput {
17
+ command: string;
18
+ timeoutMs?: number;
19
+ cwd?: string;
20
+ description?: string;
21
+ }
22
+ export interface BashStructured {
23
+ output: string;
24
+ exit_code: number;
25
+ truncated: boolean;
26
+ full_output_path?: string;
27
+ wall_time_seconds: number;
28
+ }
29
+ export interface BashDetails extends BashStructured {
30
+ timedOut: boolean;
31
+ aborted: boolean;
32
+ killedWithSigkill: boolean;
33
+ totalLines: number;
34
+ totalBytes: number;
35
+ cwd: string;
36
+ description?: string;
37
+ }
38
+ export interface BashToolOptions {
39
+ /** config.tools.bashTimeoutMs;缺省 120 000。 */
40
+ defaultTimeoutMs?: number;
41
+ /** 测试注入:固定 shell 选择。 */
42
+ shell?(): ShellConfig;
43
+ /** 测试注入:杀树参数(宽限时间等)。 */
44
+ processDeps?: ProcessDeps;
45
+ /** 测试注入:基础环境,缺省 process.env。 */
46
+ baseEnv?(): NodeJS.ProcessEnv;
47
+ }
48
+ export declare function executeBash(input: BashInput, ctx: ToolContext, options?: BashToolOptions): Promise<ToolResult>;
49
+ export declare function createBashTool(options?: BashToolOptions): ToolDefinition<BashInput>;