@alumbwe/anvil 1.0.20 → 1.0.22

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 (328) hide show
  1. package/package.json +74 -70
  2. package/src/agents/bundled-agents.generated.ts +4 -4
  3. package/src/chat.tsx +1703 -1698
  4. package/src/cli-args.ts +134 -134
  5. package/src/components/status-bar.tsx +331 -313
  6. package/src/hooks/helpers/send-message.ts +663 -654
  7. package/src/hooks/use-send-message.ts +806 -773
  8. package/src/index.tsx +473 -473
  9. package/src/state/chat-store.ts +553 -544
  10. package/src/utils/create-run-config.ts +121 -121
  11. package/src/utils/format-compact-number.ts +37 -0
  12. package/vendor/@anvil/common/package.json +27 -0
  13. package/vendor/@anvil/common/src/__tests__/agent-validation.test.ts +846 -0
  14. package/vendor/@anvil/common/src/__tests__/anvil-model-availability.test.ts +101 -0
  15. package/vendor/@anvil/common/src/__tests__/anvil-models.test.ts +1408 -0
  16. package/vendor/@anvil/common/src/__tests__/anvil-public-data-use-copy.test.ts +258 -0
  17. package/vendor/@anvil/common/src/__tests__/anvil-referral-tiers.test.ts +48 -0
  18. package/vendor/@anvil/common/src/__tests__/anvil-spend-ceilings.test.ts +282 -0
  19. package/vendor/@anvil/common/src/__tests__/anvil-trust.test.ts +526 -0
  20. package/vendor/@anvil/common/src/__tests__/deepseek-direct.test.ts +68 -0
  21. package/vendor/@anvil/common/src/__tests__/disposable-email.test.ts +132 -0
  22. package/vendor/@anvil/common/src/__tests__/dynamic-agent-template-schema.test.ts +422 -0
  23. package/vendor/@anvil/common/src/__tests__/env-ci.test.ts +167 -0
  24. package/vendor/@anvil/common/src/__tests__/env-process.test.ts +145 -0
  25. package/vendor/@anvil/common/src/__tests__/foreign-client-shipped-agents.test.ts +234 -0
  26. package/vendor/@anvil/common/src/__tests__/foreign-client-signals.test.ts +379 -0
  27. package/vendor/@anvil/common/src/__tests__/free-agents.test.ts +807 -0
  28. package/vendor/@anvil/common/src/__tests__/gravity-capi.test.ts +154 -0
  29. package/vendor/@anvil/common/src/__tests__/handlesteps-parsing.test.ts +246 -0
  30. package/vendor/@anvil/common/src/__tests__/kimi-k3-god-only.test.ts +77 -0
  31. package/vendor/@anvil/common/src/__tests__/model-config.test.ts +89 -0
  32. package/vendor/@anvil/common/src/__tests__/project-file-tree.test.ts +298 -0
  33. package/vendor/@anvil/common/src/__tests__/provisioned-model-tiers.test.ts +116 -0
  34. package/vendor/@anvil/common/src/__tests__/reasoning-effort.test.ts +167 -0
  35. package/vendor/@anvil/common/src/__tests__/reddit-capi.test.ts +132 -0
  36. package/vendor/@anvil/common/src/__tests__/response-ad-positions.test.ts +72 -0
  37. package/vendor/@anvil/common/src/__tests__/user-state.test.ts +30 -0
  38. package/vendor/@anvil/common/src/actions.ts +215 -0
  39. package/vendor/@anvil/common/src/analytics-core.ts +69 -0
  40. package/vendor/@anvil/common/src/analytics.ts +93 -0
  41. package/vendor/@anvil/common/src/api-keys/constants.ts +26 -0
  42. package/vendor/@anvil/common/src/browser-actions.ts +413 -0
  43. package/vendor/@anvil/common/src/constants/__tests__/anvil-onboarding-gate.test.ts +63 -0
  44. package/vendor/@anvil/common/src/constants/__tests__/anvil-onboarding.test.ts +246 -0
  45. package/vendor/@anvil/common/src/constants/__tests__/cf-worker-signals.test.ts +106 -0
  46. package/vendor/@anvil/common/src/constants/agents.ts +99 -0
  47. package/vendor/@anvil/common/src/constants/analytics-events.ts +435 -0
  48. package/vendor/@anvil/common/src/constants/anthropic.ts +73 -0
  49. package/vendor/@anvil/common/src/constants/anvil-data-use.ts +81 -0
  50. package/vendor/@anvil/common/src/constants/anvil-errors.ts +7 -0
  51. package/vendor/@anvil/common/src/constants/anvil-gemini-thinker.ts +21 -0
  52. package/vendor/@anvil/common/src/constants/anvil-model-ids.ts +11 -0
  53. package/vendor/@anvil/common/src/constants/anvil-models.ts +2130 -0
  54. package/vendor/@anvil/common/src/constants/anvil-onboarding-gate.ts +55 -0
  55. package/vendor/@anvil/common/src/constants/anvil-onboarding.ts +307 -0
  56. package/vendor/@anvil/common/src/constants/anvil-referral-tiers.ts +87 -0
  57. package/vendor/@anvil/common/src/constants/anvil-signup-block.ts +68 -0
  58. package/vendor/@anvil/common/src/constants/anvil-spend-ceilings.ts +450 -0
  59. package/vendor/@anvil/common/src/constants/anvil-trust.ts +976 -0
  60. package/vendor/@anvil/common/src/constants/auth.ts +18 -0
  61. package/vendor/@anvil/common/src/constants/byok.ts +2 -0
  62. package/vendor/@anvil/common/src/constants/cf-worker-signals.ts +132 -0
  63. package/vendor/@anvil/common/src/constants/composio.ts +34 -0
  64. package/vendor/@anvil/common/src/constants/deepseek-direct.ts +55 -0
  65. package/vendor/@anvil/common/src/constants/feedback.ts +13 -0
  66. package/vendor/@anvil/common/src/constants/foreign-client-signals.ts +272 -0
  67. package/vendor/@anvil/common/src/constants/free-agents.ts +777 -0
  68. package/vendor/@anvil/common/src/constants/gemini.ts +15 -0
  69. package/vendor/@anvil/common/src/constants/grant-priorities.ts +13 -0
  70. package/vendor/@anvil/common/src/constants/hosts.ts +6 -0
  71. package/vendor/@anvil/common/src/constants/images.ts +51 -0
  72. package/vendor/@anvil/common/src/constants/index.ts +7 -0
  73. package/vendor/@anvil/common/src/constants/knowledge.ts +35 -0
  74. package/vendor/@anvil/common/src/constants/limits.ts +23 -0
  75. package/vendor/@anvil/common/src/constants/model-config.ts +277 -0
  76. package/vendor/@anvil/common/src/constants/openrouter-attribution.ts +8 -0
  77. package/vendor/@anvil/common/src/constants/paths.ts +69 -0
  78. package/vendor/@anvil/common/src/constants/provider-routes.ts +317 -0
  79. package/vendor/@anvil/common/src/constants/reasoning-effort.ts +79 -0
  80. package/vendor/@anvil/common/src/constants/skills.ts +60 -0
  81. package/vendor/@anvil/common/src/constants/subscription-plans.ts +49 -0
  82. package/vendor/@anvil/common/src/constants/ui.ts +25 -0
  83. package/vendor/@anvil/common/src/env-ci.ts +36 -0
  84. package/vendor/@anvil/common/src/env-process.ts +95 -0
  85. package/vendor/@anvil/common/src/env-schema.ts +95 -0
  86. package/vendor/@anvil/common/src/env.ts +24 -0
  87. package/vendor/@anvil/common/src/gravity-capi.ts +207 -0
  88. package/vendor/@anvil/common/src/mcp/client.ts +233 -0
  89. package/vendor/@anvil/common/src/old-constants.ts +10 -0
  90. package/vendor/@anvil/common/src/project-file-tree.ts +355 -0
  91. package/vendor/@anvil/common/src/reddit-capi.ts +254 -0
  92. package/vendor/@anvil/common/src/schemas/feedback.ts +52 -0
  93. package/vendor/@anvil/common/src/schemas/logs.ts +66 -0
  94. package/vendor/@anvil/common/src/templates/agent-validation.ts +392 -0
  95. package/vendor/@anvil/common/src/templates/initial-agents-dir/LICENSE +202 -0
  96. package/vendor/@anvil/common/src/templates/initial-agents-dir/README.md +294 -0
  97. package/vendor/@anvil/common/src/templates/initial-agents-dir/examples/01-basic-diff-reviewer.ts +17 -0
  98. package/vendor/@anvil/common/src/templates/initial-agents-dir/examples/02-intermediate-git-committer.ts +78 -0
  99. package/vendor/@anvil/common/src/templates/initial-agents-dir/examples/03-advanced-file-explorer.ts +73 -0
  100. package/vendor/@anvil/common/src/templates/initial-agents-dir/my-custom-agent.ts +40 -0
  101. package/vendor/@anvil/common/src/templates/initial-agents-dir/package.json +6 -0
  102. package/vendor/@anvil/common/src/templates/initial-agents-dir/skills/README.md +65 -0
  103. package/vendor/@anvil/common/src/templates/initial-agents-dir/skills/example-skill/SKILL.md +29 -0
  104. package/vendor/@anvil/common/src/templates/initial-agents-dir/types/agent-definition.ts +497 -0
  105. package/vendor/@anvil/common/src/templates/initial-agents-dir/types/tools.ts +444 -0
  106. package/vendor/@anvil/common/src/templates/initial-agents-dir/types/util-types.ts +178 -0
  107. package/vendor/@anvil/common/src/testing/TESTING_PATTERNS.md +351 -0
  108. package/vendor/@anvil/common/src/testing/anvil-offer-invariants.ts +169 -0
  109. package/vendor/@anvil/common/src/testing/errors.ts +33 -0
  110. package/vendor/@anvil/common/src/testing/fixtures/agent-runtime.ts +334 -0
  111. package/vendor/@anvil/common/src/testing/impl/agent-runtime.ts +6 -0
  112. package/vendor/@anvil/common/src/testing/index.ts +84 -0
  113. package/vendor/@anvil/common/src/testing/mock-modules.ts +53 -0
  114. package/vendor/@anvil/common/src/testing/mock-types.ts +123 -0
  115. package/vendor/@anvil/common/src/testing/mocks/analytics.ts +261 -0
  116. package/vendor/@anvil/common/src/testing/mocks/child-process.ts +93 -0
  117. package/vendor/@anvil/common/src/testing/mocks/crypto.ts +218 -0
  118. package/vendor/@anvil/common/src/testing/mocks/database.ts +337 -0
  119. package/vendor/@anvil/common/src/testing/mocks/fetch.ts +219 -0
  120. package/vendor/@anvil/common/src/testing/mocks/filesystem.ts +166 -0
  121. package/vendor/@anvil/common/src/testing/mocks/index.ts +101 -0
  122. package/vendor/@anvil/common/src/testing/mocks/logger.ts +135 -0
  123. package/vendor/@anvil/common/src/testing/mocks/stream.ts +313 -0
  124. package/vendor/@anvil/common/src/testing/mocks/timers.ts +132 -0
  125. package/vendor/@anvil/common/src/testing/mocks/tree-sitter.ts +127 -0
  126. package/vendor/@anvil/common/src/testing/setup.ts +282 -0
  127. package/vendor/@anvil/common/src/testing-env-ci.ts +15 -0
  128. package/vendor/@anvil/common/src/testing-env-process.ts +78 -0
  129. package/vendor/@anvil/common/src/tools/__tests__/compile-tool-definitions.test.ts +34 -0
  130. package/vendor/@anvil/common/src/tools/compile-tool-definitions.ts +157 -0
  131. package/vendor/@anvil/common/src/tools/constants.ts +117 -0
  132. package/vendor/@anvil/common/src/tools/list.ts +190 -0
  133. package/vendor/@anvil/common/src/tools/params/__tests__/coerce-to-array.test.ts +213 -0
  134. package/vendor/@anvil/common/src/tools/params/__tests__/read-docs.test.ts +47 -0
  135. package/vendor/@anvil/common/src/tools/params/__tests__/render-ui.test.ts +65 -0
  136. package/vendor/@anvil/common/src/tools/params/tool/__tests__/run-terminal-command-timeout.test.ts +49 -0
  137. package/vendor/@anvil/common/src/tools/params/tool/add-message.ts +39 -0
  138. package/vendor/@anvil/common/src/tools/params/tool/add-subgoal.ts +57 -0
  139. package/vendor/@anvil/common/src/tools/params/tool/apply-patch.ts +110 -0
  140. package/vendor/@anvil/common/src/tools/params/tool/ask-user.ts +181 -0
  141. package/vendor/@anvil/common/src/tools/params/tool/browser-logs.ts +85 -0
  142. package/vendor/@anvil/common/src/tools/params/tool/cloud-plan-ready.ts +94 -0
  143. package/vendor/@anvil/common/src/tools/params/tool/code-search.ts +159 -0
  144. package/vendor/@anvil/common/src/tools/params/tool/composio.ts +131 -0
  145. package/vendor/@anvil/common/src/tools/params/tool/create-plan.ts +80 -0
  146. package/vendor/@anvil/common/src/tools/params/tool/end-turn.ts +57 -0
  147. package/vendor/@anvil/common/src/tools/params/tool/find-files.ts +60 -0
  148. package/vendor/@anvil/common/src/tools/params/tool/glob.ts +80 -0
  149. package/vendor/@anvil/common/src/tools/params/tool/gravity-index.ts +93 -0
  150. package/vendor/@anvil/common/src/tools/params/tool/list-directory.ts +58 -0
  151. package/vendor/@anvil/common/src/tools/params/tool/lookup-agent-info.ts +37 -0
  152. package/vendor/@anvil/common/src/tools/params/tool/propose-str-replace.ts +103 -0
  153. package/vendor/@anvil/common/src/tools/params/tool/propose-write-file.ts +71 -0
  154. package/vendor/@anvil/common/src/tools/params/tool/read-docs.ts +90 -0
  155. package/vendor/@anvil/common/src/tools/params/tool/read-files.ts +109 -0
  156. package/vendor/@anvil/common/src/tools/params/tool/read-subtree.ts +79 -0
  157. package/vendor/@anvil/common/src/tools/params/tool/read-url.ts +81 -0
  158. package/vendor/@anvil/common/src/tools/params/tool/render-ui.ts +168 -0
  159. package/vendor/@anvil/common/src/tools/params/tool/run-file-change-hooks.ts +57 -0
  160. package/vendor/@anvil/common/src/tools/params/tool/run-terminal-command.ts +211 -0
  161. package/vendor/@anvil/common/src/tools/params/tool/screenshot.ts +97 -0
  162. package/vendor/@anvil/common/src/tools/params/tool/set-messages.ts +44 -0
  163. package/vendor/@anvil/common/src/tools/params/tool/set-output.ts +61 -0
  164. package/vendor/@anvil/common/src/tools/params/tool/skill.ts +59 -0
  165. package/vendor/@anvil/common/src/tools/params/tool/spawn-agent-inline.ts +56 -0
  166. package/vendor/@anvil/common/src/tools/params/tool/spawn-agents.ts +154 -0
  167. package/vendor/@anvil/common/src/tools/params/tool/str-replace.ts +107 -0
  168. package/vendor/@anvil/common/src/tools/params/tool/suggest-followups.ts +97 -0
  169. package/vendor/@anvil/common/src/tools/params/tool/task-completed.ts +61 -0
  170. package/vendor/@anvil/common/src/tools/params/tool/think-deeply.ts +56 -0
  171. package/vendor/@anvil/common/src/tools/params/tool/update-subgoal.ts +89 -0
  172. package/vendor/@anvil/common/src/tools/params/tool/vision-analyze.ts +82 -0
  173. package/vendor/@anvil/common/src/tools/params/tool/web-search.ts +73 -0
  174. package/vendor/@anvil/common/src/tools/params/tool/write-file.ts +71 -0
  175. package/vendor/@anvil/common/src/tools/params/tool/write-todos.ts +67 -0
  176. package/vendor/@anvil/common/src/tools/params/utils.ts +150 -0
  177. package/vendor/@anvil/common/src/tools/utils.ts +24 -0
  178. package/vendor/@anvil/common/src/types/__tests__/dynamic-agent-template.test.ts +20 -0
  179. package/vendor/@anvil/common/src/types/agent-template.ts +215 -0
  180. package/vendor/@anvil/common/src/types/anvil-session.ts +535 -0
  181. package/vendor/@anvil/common/src/types/anvil-streak.ts +6 -0
  182. package/vendor/@anvil/common/src/types/anvil-usage.ts +64 -0
  183. package/vendor/@anvil/common/src/types/api/agents/publish.ts +61 -0
  184. package/vendor/@anvil/common/src/types/bun-test.d.ts +5 -0
  185. package/vendor/@anvil/common/src/types/contracts/agent-runtime.ts +75 -0
  186. package/vendor/@anvil/common/src/types/contracts/analytics.ts +9 -0
  187. package/vendor/@anvil/common/src/types/contracts/bigquery.ts +55 -0
  188. package/vendor/@anvil/common/src/types/contracts/billing.ts +46 -0
  189. package/vendor/@anvil/common/src/types/contracts/client.ts +53 -0
  190. package/vendor/@anvil/common/src/types/contracts/database.ts +112 -0
  191. package/vendor/@anvil/common/src/types/contracts/env.ts +203 -0
  192. package/vendor/@anvil/common/src/types/contracts/llm.ts +191 -0
  193. package/vendor/@anvil/common/src/types/contracts/logger.ts +14 -0
  194. package/vendor/@anvil/common/src/types/contracts/logs.ts +34 -0
  195. package/vendor/@anvil/common/src/types/contracts/trace.ts +21 -0
  196. package/vendor/@anvil/common/src/types/dynamic-agent-template.ts +328 -0
  197. package/vendor/@anvil/common/src/types/filesystem.ts +10 -0
  198. package/vendor/@anvil/common/src/types/function-params.ts +33 -0
  199. package/vendor/@anvil/common/src/types/grant.ts +20 -0
  200. package/vendor/@anvil/common/src/types/gravity-index.ts +170 -0
  201. package/vendor/@anvil/common/src/types/json.ts +29 -0
  202. package/vendor/@anvil/common/src/types/mcp.ts +24 -0
  203. package/vendor/@anvil/common/src/types/messages/anvil-message.ts +58 -0
  204. package/vendor/@anvil/common/src/types/messages/content-part.ts +59 -0
  205. package/vendor/@anvil/common/src/types/messages/data-content.ts +14 -0
  206. package/vendor/@anvil/common/src/types/messages/provider-metadata.ts +13 -0
  207. package/vendor/@anvil/common/src/types/organization.ts +118 -0
  208. package/vendor/@anvil/common/src/types/print-mode.ts +121 -0
  209. package/vendor/@anvil/common/src/types/publisher.ts +67 -0
  210. package/vendor/@anvil/common/src/types/session-state.ts +149 -0
  211. package/vendor/@anvil/common/src/types/skill.ts +86 -0
  212. package/vendor/@anvil/common/src/types/source.ts +11 -0
  213. package/vendor/@anvil/common/src/types/spawn.ts +13 -0
  214. package/vendor/@anvil/common/src/types/subscription.ts +67 -0
  215. package/vendor/@anvil/common/src/types/usage.ts +16 -0
  216. package/vendor/@anvil/common/src/types/util.ts +3 -0
  217. package/vendor/@anvil/common/src/util/__tests__/ad-user-agent.test.ts +26 -0
  218. package/vendor/@anvil/common/src/util/__tests__/analytics-dispatcher.test.ts +122 -0
  219. package/vendor/@anvil/common/src/util/__tests__/analytics-log.test.ts +102 -0
  220. package/vendor/@anvil/common/src/util/__tests__/analytics-sampling.test.ts +143 -0
  221. package/vendor/@anvil/common/src/util/__tests__/anvil-streak.test.ts +202 -0
  222. package/vendor/@anvil/common/src/util/__tests__/anvil-usage-summary.test.ts +193 -0
  223. package/vendor/@anvil/common/src/util/__tests__/axiom-only-log.test.ts +140 -0
  224. package/vendor/@anvil/common/src/util/__tests__/client-user-agent.test.ts +148 -0
  225. package/vendor/@anvil/common/src/util/__tests__/engagement-tracker.test.ts +115 -0
  226. package/vendor/@anvil/common/src/util/__tests__/env-file-path.test.ts +57 -0
  227. package/vendor/@anvil/common/src/util/__tests__/error-abort.test.ts +774 -0
  228. package/vendor/@anvil/common/src/util/__tests__/error-api-details.test.ts +206 -0
  229. package/vendor/@anvil/common/src/util/__tests__/file-read-limits.test.ts +173 -0
  230. package/vendor/@anvil/common/src/util/__tests__/format-code-search.test.ts +60 -0
  231. package/vendor/@anvil/common/src/util/__tests__/log-mirror.test.ts +31 -0
  232. package/vendor/@anvil/common/src/util/__tests__/messages.test.ts +1252 -0
  233. package/vendor/@anvil/common/src/util/__tests__/partial-json-delta.test.ts +505 -0
  234. package/vendor/@anvil/common/src/util/__tests__/path.test.ts +22 -0
  235. package/vendor/@anvil/common/src/util/__tests__/project-ignore.test.ts +90 -0
  236. package/vendor/@anvil/common/src/util/__tests__/promise.test.ts +325 -0
  237. package/vendor/@anvil/common/src/util/__tests__/rate-limit.test.ts +28 -0
  238. package/vendor/@anvil/common/src/util/__tests__/reddit-anvil-retention.test.ts +130 -0
  239. package/vendor/@anvil/common/src/util/__tests__/saxy.test.ts +1008 -0
  240. package/vendor/@anvil/common/src/util/__tests__/split-data.test.ts +289 -0
  241. package/vendor/@anvil/common/src/util/__tests__/string.test.ts +239 -0
  242. package/vendor/@anvil/common/src/util/__tests__/thread-title.test.ts +70 -0
  243. package/vendor/@anvil/common/src/util/__tests__/tool-result-media-order.test.ts +108 -0
  244. package/vendor/@anvil/common/src/util/__tests__/ttft-histogram.test.ts +180 -0
  245. package/vendor/@anvil/common/src/util/__tests__/with-timeout.test.ts +24 -0
  246. package/vendor/@anvil/common/src/util/__tests__/zoned-time.test.ts +88 -0
  247. package/vendor/@anvil/common/src/util/ad-user-agent.ts +25 -0
  248. package/vendor/@anvil/common/src/util/agent-file-utils.ts +110 -0
  249. package/vendor/@anvil/common/src/util/agent-id-parsing.ts +136 -0
  250. package/vendor/@anvil/common/src/util/agent-name-normalization.ts +38 -0
  251. package/vendor/@anvil/common/src/util/agent-name-resolver.ts +86 -0
  252. package/vendor/@anvil/common/src/util/analytics-dispatcher.ts +82 -0
  253. package/vendor/@anvil/common/src/util/analytics-log.ts +78 -0
  254. package/vendor/@anvil/common/src/util/analytics-sampling.ts +255 -0
  255. package/vendor/@anvil/common/src/util/anvil-model-availability.ts +102 -0
  256. package/vendor/@anvil/common/src/util/anvil-privacy.ts +82 -0
  257. package/vendor/@anvil/common/src/util/anvil-streak-line.ts +103 -0
  258. package/vendor/@anvil/common/src/util/anvil-streak.ts +156 -0
  259. package/vendor/@anvil/common/src/util/anvil-usage-summary.ts +125 -0
  260. package/vendor/@anvil/common/src/util/array.ts +31 -0
  261. package/vendor/@anvil/common/src/util/axiom-only-log.ts +124 -0
  262. package/vendor/@anvil/common/src/util/cache-debug.ts +171 -0
  263. package/vendor/@anvil/common/src/util/client-user-agent.ts +114 -0
  264. package/vendor/@anvil/common/src/util/credentials.ts +26 -0
  265. package/vendor/@anvil/common/src/util/currency.ts +25 -0
  266. package/vendor/@anvil/common/src/util/dates.ts +81 -0
  267. package/vendor/@anvil/common/src/util/disposable-email.ts +277 -0
  268. package/vendor/@anvil/common/src/util/engagement-tracker.ts +129 -0
  269. package/vendor/@anvil/common/src/util/env-file-path.ts +40 -0
  270. package/vendor/@anvil/common/src/util/error.ts +562 -0
  271. package/vendor/@anvil/common/src/util/file-read-limits.ts +236 -0
  272. package/vendor/@anvil/common/src/util/file.ts +339 -0
  273. package/vendor/@anvil/common/src/util/format-code-search.ts +115 -0
  274. package/vendor/@anvil/common/src/util/lazy-response-ads.ts +92 -0
  275. package/vendor/@anvil/common/src/util/log-data.ts +57 -0
  276. package/vendor/@anvil/common/src/util/log-ingest.ts +58 -0
  277. package/vendor/@anvil/common/src/util/log-mirror.ts +34 -0
  278. package/vendor/@anvil/common/src/util/lru-cache.ts +67 -0
  279. package/vendor/@anvil/common/src/util/messages.ts +685 -0
  280. package/vendor/@anvil/common/src/util/min-heap.ts +87 -0
  281. package/vendor/@anvil/common/src/util/model-utils.ts +4 -0
  282. package/vendor/@anvil/common/src/util/object.ts +128 -0
  283. package/vendor/@anvil/common/src/util/partial-json-delta.ts +89 -0
  284. package/vendor/@anvil/common/src/util/path.ts +15 -0
  285. package/vendor/@anvil/common/src/util/project-ignore.ts +119 -0
  286. package/vendor/@anvil/common/src/util/promise.ts +73 -0
  287. package/vendor/@anvil/common/src/util/random.ts +15 -0
  288. package/vendor/@anvil/common/src/util/rate-limit.ts +56 -0
  289. package/vendor/@anvil/common/src/util/reddit-anvil-retention.ts +60 -0
  290. package/vendor/@anvil/common/src/util/reddit-capi-events.ts +36 -0
  291. package/vendor/@anvil/common/src/util/response-ad-positions.ts +54 -0
  292. package/vendor/@anvil/common/src/util/saxy.ts +741 -0
  293. package/vendor/@anvil/common/src/util/skills.test.ts +44 -0
  294. package/vendor/@anvil/common/src/util/skills.ts +36 -0
  295. package/vendor/@anvil/common/src/util/split-data.ts +259 -0
  296. package/vendor/@anvil/common/src/util/stop-sequence.ts +61 -0
  297. package/vendor/@anvil/common/src/util/string.ts +426 -0
  298. package/vendor/@anvil/common/src/util/system-info.ts +53 -0
  299. package/vendor/@anvil/common/src/util/thread-title.ts +46 -0
  300. package/vendor/@anvil/common/src/util/ttft-histogram.ts +73 -0
  301. package/vendor/@anvil/common/src/util/xml-parser.ts +27 -0
  302. package/vendor/@anvil/common/src/util/xml.ts +17 -0
  303. package/vendor/@anvil/common/src/util/zod-schema.ts +25 -0
  304. package/vendor/@anvil/common/src/util/zoned-time.ts +136 -0
  305. package/vendor/@anvil/common/src/utils/ask-user-bridge.ts +44 -0
  306. package/vendor/@anvil/sdk/dist/index.cjs +52297 -0
  307. package/vendor/@anvil/sdk/dist/index.cjs.map +440 -0
  308. package/vendor/@anvil/sdk/dist/index.d.ts +4277 -0
  309. package/vendor/@anvil/sdk/dist/index.mjs +52290 -0
  310. package/vendor/@anvil/sdk/dist/index.mjs.map +440 -0
  311. package/vendor/@anvil/sdk/dist/vendor/ai.cjs +30886 -0
  312. package/vendor/@anvil/sdk/dist/vendor/ripgrep/arm64-darwin/rg +0 -0
  313. package/vendor/@anvil/sdk/dist/vendor/ripgrep/arm64-linux/rg +0 -0
  314. package/vendor/@anvil/sdk/dist/vendor/ripgrep/x64-darwin/rg +0 -0
  315. package/vendor/@anvil/sdk/dist/vendor/ripgrep/x64-linux/rg +0 -0
  316. package/vendor/@anvil/sdk/dist/vendor/ripgrep/x64-win32/rg.exe +0 -0
  317. package/vendor/@anvil/sdk/dist/wasm/tree-sitter-c-sharp.wasm +0 -0
  318. package/vendor/@anvil/sdk/dist/wasm/tree-sitter-cpp.wasm +0 -0
  319. package/vendor/@anvil/sdk/dist/wasm/tree-sitter-go.wasm +0 -0
  320. package/vendor/@anvil/sdk/dist/wasm/tree-sitter-java.wasm +0 -0
  321. package/vendor/@anvil/sdk/dist/wasm/tree-sitter-javascript.wasm +0 -0
  322. package/vendor/@anvil/sdk/dist/wasm/tree-sitter-python.wasm +0 -0
  323. package/vendor/@anvil/sdk/dist/wasm/tree-sitter-ruby.wasm +0 -0
  324. package/vendor/@anvil/sdk/dist/wasm/tree-sitter-rust.wasm +0 -0
  325. package/vendor/@anvil/sdk/dist/wasm/tree-sitter-tsx.wasm +0 -0
  326. package/vendor/@anvil/sdk/dist/wasm/tree-sitter-typescript.wasm +0 -0
  327. package/vendor/@anvil/sdk/dist/wasm/tree-sitter.wasm +0 -0
  328. package/vendor/@anvil/sdk/package.json +21 -0
@@ -0,0 +1,82 @@
1
+ import z from 'zod/v4'
2
+
3
+ import { jsonToolResultSchema } from '../utils'
4
+
5
+ import type { $ToolParams } from '../../constants'
6
+
7
+ const toolName = 'vision_analyze'
8
+ const endsAgentStep = true
9
+
10
+ const inputSchema = z
11
+ .object({
12
+ image_path: z
13
+ .string()
14
+ .describe(
15
+ 'Path to the image file to analyze. Can be a screenshot captured with the screenshot tool, or any image file.',
16
+ ),
17
+ prompt: z
18
+ .string()
19
+ .describe(
20
+ 'What to analyze about the image. Examples: "Critique this UI design", "Check if dark mode is properly implemented", "Compare spacing and alignment", "Evaluate typography hierarchy".',
21
+ ),
22
+ context: z
23
+ .string()
24
+ .optional()
25
+ .describe(
26
+ 'Optional context about what the image shows (e.g. "This is a SaaS landing page hero section"). Helps the vision model give more targeted feedback.',
27
+ ),
28
+ focus_areas: z
29
+ .array(z.string())
30
+ .optional()
31
+ .describe(
32
+ 'Specific areas to focus on. Examples: ["color contrast", "button styling", "spacing", "typography", "layout", "dark mode"].',
33
+ ),
34
+ })
35
+ .describe(
36
+ 'Analyze a UI screenshot using Gemini vision. Get AI-powered design critique, accessibility feedback, and improvement suggestions.',
37
+ )
38
+
39
+ const visionAnalyzeOutputSchema = z.object({
40
+ analysis: z.string(),
41
+ issues_found: z.array(
42
+ z.object({
43
+ severity: z.enum(['critical', 'warning', 'info']),
44
+ area: z.string(),
45
+ description: z.string(),
46
+ suggestion: z.string(),
47
+ }),
48
+ ),
49
+ score: z.number().min(0).max(10),
50
+ summary: z.string(),
51
+ })
52
+
53
+ const description = `
54
+ Analyze a UI screenshot using Gemini's vision capabilities for AI-powered design critique.
55
+
56
+ **Use cases:**
57
+ - Get design feedback after building a UI
58
+ - Check accessibility (contrast, spacing, readability)
59
+ - Compare against design system rules
60
+ - Validate dark mode implementation
61
+ - Get suggestions for visual improvements
62
+
63
+ **How it works:**
64
+ 1. Reads the image file (supports PNG, JPG, WebP)
65
+ 2. Sends it to Gemini's vision API with your analysis prompt
66
+ 3. Returns structured feedback with issues, severity, and suggestions
67
+
68
+ **Requires:** GEMINI_API_KEY environment variable or .env.local entry.
69
+
70
+ **Examples:**
71
+ - Critique a landing page: image_path="./screenshot.png", prompt="Critique this landing page hero section"
72
+ - Check dark mode: image_path="./dark-mode.png", prompt="Is dark mode properly implemented?", focus_areas=["contrast", "colors"]
73
+ - Accessibility check: image_path="./ui.png", prompt="Check this UI for accessibility issues", focus_areas=["color contrast", "text sizing", "touch targets"]
74
+ `.trim()
75
+
76
+ export const visionAnalyzeParams = {
77
+ toolName,
78
+ endsAgentStep,
79
+ description,
80
+ inputSchema,
81
+ outputSchema: jsonToolResultSchema(visionAnalyzeOutputSchema),
82
+ } satisfies $ToolParams
@@ -0,0 +1,73 @@
1
+ import z from 'zod/v4'
2
+
3
+ import { $getNativeToolCallExampleString, jsonToolResultSchema } from '../utils'
4
+
5
+ import type { $ToolParams } from '../../constants'
6
+
7
+ const toolName = 'web_search'
8
+ const endsAgentStep = true
9
+ const inputSchema = z
10
+ .object({
11
+ query: z
12
+ .string()
13
+ .min(1, 'Query cannot be empty')
14
+ .describe(`The search query to find relevant web content`),
15
+ depth: z
16
+ .enum(['standard', 'deep'])
17
+ .optional()
18
+ .default('standard')
19
+ .describe(
20
+ `Search depth - 'standard' for quick results, 'deep' for more comprehensive search. Default is 'standard'.`,
21
+ ),
22
+ })
23
+ .describe(`Search the web for current information using Serper API.`)
24
+ const description = `
25
+ Purpose: Search the web for current, up-to-date information on any topic. This tool uses Serper's Google Search API to find relevant content from across the internet.
26
+
27
+ Use cases:
28
+ - Finding current information about technologies, libraries, or frameworks
29
+ - Researching best practices and solutions
30
+ - Getting up-to-date news or documentation
31
+ - Finding examples and tutorials
32
+ - Checking current status of services or APIs
33
+
34
+ The tool will return JSON search results with titles, URLs, content snippets, and other available SERP fields such as answer boxes or related questions.
35
+
36
+ Example:
37
+ ${$getNativeToolCallExampleString({
38
+ toolName,
39
+ inputSchema,
40
+ input: {
41
+ query: 'Next.js 15 new features',
42
+ depth: 'standard',
43
+ },
44
+ endsAgentStep,
45
+ })}
46
+
47
+ ${$getNativeToolCallExampleString({
48
+ toolName,
49
+ inputSchema,
50
+ input: {
51
+ query: 'React Server Components tutorial',
52
+ depth: 'deep',
53
+ },
54
+ endsAgentStep,
55
+ })}
56
+ `.trim()
57
+
58
+ export const webSearchParams = {
59
+ toolName,
60
+ endsAgentStep,
61
+ description,
62
+ inputSchema,
63
+ outputSchema: jsonToolResultSchema(
64
+ z.union([
65
+ z.object({
66
+ result: z.string(),
67
+ }),
68
+ z.object({
69
+ errorMessage: z.string(),
70
+ }),
71
+ ]),
72
+ ),
73
+ } satisfies $ToolParams
@@ -0,0 +1,71 @@
1
+ import z from 'zod/v4'
2
+
3
+ import { updateFileResultSchema } from './str-replace'
4
+ import { $getNativeToolCallExampleString, jsonToolResultSchema } from '../utils'
5
+
6
+ import type { $ToolParams } from '../../constants'
7
+
8
+ const toolName = 'write_file'
9
+ const endsAgentStep = false
10
+ const inputSchema = z
11
+ .object({
12
+ path: z
13
+ .string()
14
+ .min(1, 'Path cannot be empty')
15
+ .describe(`Path to the file relative to the **project root**`),
16
+ instructions: z
17
+ .string()
18
+ .describe('What the change is intended to do in only one sentence.'),
19
+ content: z.string().describe(`Complete file content to write to the file.`),
20
+ })
21
+ .describe(`Create or overwrite a file with the given content.`)
22
+ const description = `
23
+ Create or replace a file with the given content.
24
+
25
+ Format the \`content\` parameter with the entire content of the file.
26
+
27
+ #### Additional Info
28
+
29
+ Do not use this tool to delete or rename a file. Instead run a terminal command for that.
30
+
31
+ Examples:
32
+
33
+ Example 1 - Simple file creation:
34
+ ${$getNativeToolCallExampleString({
35
+ toolName,
36
+ inputSchema,
37
+ input: {
38
+ path: 'new-file.ts',
39
+ instructions: 'Prints Hello, world',
40
+ content: 'console.log("Hello, world!");',
41
+ },
42
+ endsAgentStep,
43
+ })}
44
+
45
+ Example 2 - Overwriting a file:
46
+ ${$getNativeToolCallExampleString({
47
+ toolName,
48
+ inputSchema,
49
+ input: {
50
+ path: 'foo.ts',
51
+ instructions: 'Update foo function',
52
+ content: `function foo() {
53
+ doSomethingNew();
54
+ }
55
+
56
+ function bar() {
57
+ doSomethingOld();
58
+ }
59
+ `,
60
+ },
61
+ endsAgentStep,
62
+ })}
63
+ `.trim()
64
+
65
+ export const writeFileParams = {
66
+ toolName,
67
+ endsAgentStep,
68
+ description,
69
+ inputSchema,
70
+ outputSchema: jsonToolResultSchema(updateFileResultSchema),
71
+ } satisfies $ToolParams
@@ -0,0 +1,67 @@
1
+ import z from 'zod/v4'
2
+
3
+ import { $getNativeToolCallExampleString, coerceToArray } from '../utils'
4
+
5
+ import type { $ToolParams } from '../../constants'
6
+
7
+ const toolName = 'write_todos'
8
+ const endsAgentStep = false
9
+ const inputSchema = z
10
+ .object({
11
+ todos: z
12
+ .preprocess(
13
+ coerceToArray,
14
+ z.array(
15
+ z.object({
16
+ task: z.string().describe('Description of the task'),
17
+ completed: z.boolean().describe('Whether the task is completed'),
18
+ }),
19
+ ),
20
+ )
21
+ .describe(
22
+ "List of todos with their completion status. Add ALL of the applicable tasks to the list, so you don't forget to do anything. Try to order the todos the same way you will complete them. Do not mark todos as completed if you have not completed them yet!",
23
+ ),
24
+ })
25
+ .describe(
26
+ 'Write a todo list to track tasks for multi-step implementations. Use this frequently to maintain an updated step-by-step plan.',
27
+ )
28
+ const description = `
29
+ Use this tool to track your objectives through an ordered step-by-step plan. Call this tool after you have gathered context on the user's request to plan out the implementation steps for the user's request.
30
+
31
+ After completing each todo step, call this tool again to update the list and mark that task as completed. Note that each time you call this tool, rewrite ALL todos with their current status.
32
+
33
+ Use this tool frequently as you work through tasks to update the list of todos with their current status. Doing this is extremely useful because it helps you stay on track and complete all the requirements of the user's request. It also helps inform the user of your plans and the current progress, which they want to know at all times.
34
+
35
+ Example:
36
+ ${$getNativeToolCallExampleString({
37
+ toolName,
38
+ inputSchema,
39
+ input: {
40
+ todos: [
41
+ { task: 'Create new implementation in foo.ts', completed: true },
42
+ { task: 'Update bar.ts to use the new implementation', completed: false },
43
+ { task: 'Write tests for the new implementation', completed: false },
44
+ {
45
+ task: 'Run the tests to verify the new implementation',
46
+ completed: false,
47
+ },
48
+ ],
49
+ },
50
+ endsAgentStep,
51
+ })}
52
+ `.trim()
53
+
54
+ export const writeTodosParams = {
55
+ toolName,
56
+ endsAgentStep,
57
+ description,
58
+ inputSchema,
59
+ outputSchema: z.tuple([
60
+ z.object({
61
+ type: z.literal('json'),
62
+ value: z.object({
63
+ message: z.string(),
64
+ }),
65
+ }),
66
+ ]),
67
+ } satisfies $ToolParams
@@ -0,0 +1,150 @@
1
+ import z from 'zod/v4'
2
+
3
+ import {
4
+ endsAgentStepParam,
5
+ endToolTag,
6
+ startToolTag,
7
+ toolNameParam,
8
+ } from '../constants'
9
+
10
+ import type { JSONValue } from '../../types/json'
11
+ import type { ToolResultOutput } from '../../types/messages/content-part'
12
+
13
+ /**
14
+ * Coerces a value into an array if it isn't one already.
15
+ * Handles common LLM mistakes:
16
+ * - Single object/string passed instead of an array → wraps in array
17
+ * - Stringified JSON array passed as a string → parses it
18
+ * - Already an array → passes through
19
+ * - null/undefined → passes through (let Zod handle it)
20
+ */
21
+ export function coerceToArray(val: unknown): unknown {
22
+ if (Array.isArray(val)) return val
23
+ if (typeof val === 'string') {
24
+ try {
25
+ const parsed = JSON.parse(val)
26
+ if (Array.isArray(parsed)) return parsed
27
+ } catch {
28
+ // Not valid JSON — fall through to wrap
29
+ }
30
+ }
31
+ if (val != null) return [val]
32
+ return val
33
+ }
34
+
35
+ /**
36
+ * Coerces a stringified JSON object into an object.
37
+ * This is intentionally narrow so malformed values still fail validation.
38
+ */
39
+ export function coerceToObject(val: unknown): unknown {
40
+ if (typeof val !== 'string') {
41
+ return val
42
+ }
43
+
44
+ try {
45
+ const parsed = JSON.parse(val)
46
+ if (
47
+ parsed != null &&
48
+ typeof parsed === 'object' &&
49
+ !Array.isArray(parsed)
50
+ ) {
51
+ return parsed
52
+ }
53
+ } catch {
54
+ // Leave the original value untouched so schema validation can reject it.
55
+ }
56
+
57
+ return val
58
+ }
59
+
60
+ /**
61
+ * Handles common replacement-key aliases emitted by some models while keeping
62
+ * the documented schema stable.
63
+ */
64
+ export function normalizeReplacementAliases(val: unknown): unknown {
65
+ if (val === null || typeof val !== 'object' || Array.isArray(val)) {
66
+ return val
67
+ }
68
+
69
+ const replacement = { ...(val as Record<string, unknown>) }
70
+ for (const [target, aliases] of [
71
+ ['oldString', ['old', 'old_str', 'old_string']],
72
+ ['newString', ['new', 'new_str', 'new_string']],
73
+ ] as const) {
74
+ if (replacement[target] !== undefined) {
75
+ continue
76
+ }
77
+ const alias = aliases.find((key) => typeof replacement[key] === 'string')
78
+ if (alias) {
79
+ replacement[target] = replacement[alias]
80
+ }
81
+ }
82
+ return replacement
83
+ }
84
+
85
+ /** Only used for generating tool call strings before all tools are defined.
86
+ *
87
+ * @param toolName - The name of the tool to call
88
+ * @param inputSchema - The zod schema for the tool. This is only used as type validation and is unused otherwise.
89
+ * @param input - The input to the tool
90
+ * @param endsAgentStep - Whether the agent should end its turn after this tool call
91
+ */
92
+ export function $getToolCallString<Input>(params: {
93
+ toolName: string
94
+ inputSchema: z.ZodType<any, Input> | null
95
+ input: Input
96
+ endsAgentStep: boolean
97
+ }): string {
98
+ const { toolName, input, endsAgentStep } = params
99
+ const obj: Record<string, any> = {
100
+ [toolNameParam]: toolName,
101
+ ...input,
102
+ }
103
+ if (endsAgentStep) {
104
+ obj[endsAgentStepParam] = endsAgentStep satisfies true
105
+ }
106
+ return [startToolTag, JSON.stringify(obj, null, 2), endToolTag].join('')
107
+ }
108
+
109
+ export function $getNativeToolCallExampleString<Input>(params: {
110
+ toolName: string
111
+ inputSchema: z.ZodType<any, Input> | null
112
+ input: Input
113
+ endsAgentStep?: boolean // unused
114
+ }): string {
115
+ const { toolName, input } = params
116
+ return [
117
+ `<${toolName}_params_example>\n`,
118
+ JSON.stringify(input, null, 2),
119
+ `\n</${toolName}_params_example>`,
120
+ ].join('')
121
+ }
122
+
123
+ /** Generates the zod schema for a single JSON tool result. */
124
+ export function jsonToolResultSchema<T extends JSONValue>(
125
+ valueSchema: z.ZodType<T>,
126
+ ) {
127
+ return z.tuple([
128
+ z.object({
129
+ type: z.literal('json'),
130
+ value: valueSchema,
131
+ }) satisfies z.ZodType<ToolResultOutput>,
132
+ ])
133
+ }
134
+
135
+ /** Generates the zod schema for an empty tool result. */
136
+ export function emptyToolResultSchema() {
137
+ return z.tuple([])
138
+ }
139
+
140
+ /** Generates the zod schema for a simple text tool result. */
141
+ export function textToolResultSchema() {
142
+ return z.tuple([
143
+ z.object({
144
+ type: z.literal('json'),
145
+ value: z.object({
146
+ message: z.string(),
147
+ }),
148
+ }) satisfies z.ZodType<ToolResultOutput>,
149
+ ])
150
+ }
@@ -0,0 +1,24 @@
1
+ import { toolParams } from './list'
2
+ import { $getToolCallString } from './params/utils'
3
+
4
+ import type { ToolName } from './constants'
5
+ import type z from 'zod/v4'
6
+
7
+ export function getToolCallString<T extends ToolName | (string & {})>(
8
+ toolName: T,
9
+ input: T extends ToolName
10
+ ? z.input<(typeof toolParams)[T]['inputSchema']>
11
+ : Record<string, any>,
12
+ ...endsAgentStep: T extends ToolName ? [] : [boolean]
13
+ ): string {
14
+ const endsAgentStepValue =
15
+ toolName in toolParams
16
+ ? toolParams[toolName as keyof typeof toolParams].endsAgentStep
17
+ : endsAgentStep[0] ?? false
18
+ return $getToolCallString({
19
+ toolName,
20
+ inputSchema: null,
21
+ input,
22
+ endsAgentStep: endsAgentStepValue,
23
+ })
24
+ }
@@ -0,0 +1,20 @@
1
+ import type { AgentDefinition } from '../../templates/initial-agents-dir/types/agent-definition'
2
+ import type { publishedTools } from '../../tools/constants'
3
+ import type { DynamicAgentDefinition } from '../dynamic-agent-template'
4
+
5
+ // Create a version of DynamicAgentDefinition where handleSteps is compatible with AgentDefinition
6
+
7
+ type DynamicAgentDefinitionHandleSteps = Omit<
8
+ DynamicAgentDefinition,
9
+ 'handleSteps' | 'toolNames'
10
+ > & {
11
+ handleSteps?: AgentDefinition['handleSteps']
12
+ toolNames?: (typeof publishedTools | (string & {}))[number][]
13
+ }
14
+ // Don't remove these lines! And don't change the values away from true!
15
+ const _typecheck1: DynamicAgentDefinitionHandleSteps = {} as AgentDefinition
16
+ const _typecheck2: AgentDefinition = {} as DynamicAgentDefinitionHandleSteps
17
+ const _keyTypecheck1: keyof AgentDefinition =
18
+ {} as keyof DynamicAgentDefinitionHandleSteps
19
+ const _keyTypecheck2: keyof DynamicAgentDefinitionHandleSteps =
20
+ {} as keyof AgentDefinition
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Backend Agent Template Types
3
+ *
4
+ * This file provides backend-compatible agent template types with strict validation.
5
+ * It imports base types from the user-facing template to eliminate duplication.
6
+ */
7
+
8
+ import { z } from 'zod/v4'
9
+
10
+ import type { MCPConfig } from './mcp'
11
+ import type { Model } from '../old-constants'
12
+ import type { ToolResultOutput } from './messages/content-part'
13
+ import type { AgentState, AgentTemplateType } from './session-state'
14
+ import type {
15
+ ToolCall,
16
+ AgentState as PublicAgentState,
17
+ } from '../templates/initial-agents-dir/types/agent-definition'
18
+ import type { Logger } from '../templates/initial-agents-dir/types/util-types'
19
+ import type { ToolName } from '../tools/constants'
20
+
21
+ export type AgentId = `${string}/${string}@${number}.${number}.${number}`
22
+
23
+ export type OpenRouterReasoningOptions = {
24
+ /**
25
+ * https://openrouter.ai/docs/use-cases/reasoning-tokens
26
+ * One of `max_tokens` or `effort` is required.
27
+ * If `exclude` is true, reasoning will be removed from the response. Default is false.
28
+ */
29
+ enabled?: boolean
30
+ exclude?: boolean
31
+ } & (
32
+ | {
33
+ max_tokens: number
34
+ }
35
+ | {
36
+ effort: 'high' | 'medium' | 'low' | 'minimal' | 'none'
37
+ }
38
+ )
39
+
40
+ export type OpenRouterProviderRoutingOptions = {
41
+ /**
42
+ * List of provider slugs to try in order (e.g. ["anthropic", "openai"])
43
+ */
44
+ order?: string[]
45
+ /**
46
+ * Whether to allow backup providers when primary is unavailable (default: true)
47
+ */
48
+ allow_fallbacks?: boolean
49
+ /**
50
+ * Only use providers that support all parameters in your request (default: false)
51
+ */
52
+ require_parameters?: boolean
53
+ /**
54
+ * Control whether to use providers that may store data
55
+ */
56
+ data_collection?: 'allow' | 'deny'
57
+ /**
58
+ * List of provider slugs to allow for this request
59
+ */
60
+ only?: string[]
61
+ /**
62
+ * List of provider slugs to skip for this request
63
+ */
64
+ ignore?: string[]
65
+ /**
66
+ * List of quantization levels to filter by (e.g. ["int4", "int8"])
67
+ */
68
+ quantizations?: Array<
69
+ | 'int4'
70
+ | 'int8'
71
+ | 'fp4'
72
+ | 'fp6'
73
+ | 'fp8'
74
+ | 'fp16'
75
+ | 'bf16'
76
+ | 'fp32'
77
+ | 'unknown'
78
+ >
79
+ /**
80
+ * Sort providers by price, throughput, or latency
81
+ */
82
+ sort?: 'price' | 'throughput' | 'latency'
83
+ /**
84
+ * Maximum pricing you want to pay for this request
85
+ */
86
+ max_price?: {
87
+ prompt?: number | string
88
+ completion?: number | string
89
+ image?: number | string
90
+ audio?: number | string
91
+ request?: number | string
92
+ }
93
+ }
94
+
95
+ export type OpenRouterProviderOptions = {
96
+ models?: string[]
97
+ reasoning?: OpenRouterReasoningOptions
98
+ /**
99
+ * A unique identifier representing your end-user, which can
100
+ * help OpenRouter to monitor and detect abuse.
101
+ */
102
+ user?: string
103
+ }
104
+
105
+ /**
106
+ * Backend agent template with strict validation and Zod schemas
107
+ * Extends the user-facing AgentDefinition but with backend-specific requirements
108
+ */
109
+ export type AgentTemplate<
110
+ P = string | undefined,
111
+ T = Record<string, any> | undefined,
112
+ > = {
113
+ id: AgentTemplateType
114
+ displayName: string
115
+ model: Model
116
+ reasoningOptions?: OpenRouterReasoningOptions
117
+ providerOptions?: OpenRouterProviderRoutingOptions
118
+
119
+ mcpServers: Record<string, MCPConfig>
120
+ toolNames: (ToolName | (string & {}))[]
121
+ spawnableAgents: AgentTemplateType[]
122
+
123
+ spawnerPrompt?: string
124
+ systemPrompt: string
125
+ instructionsPrompt: string
126
+ stepPrompt: string
127
+ parentInstructions?: Record<string, string>
128
+
129
+ // Required parameters for spawning this agent.
130
+ inputSchema: {
131
+ prompt?: z.ZodSchema<P>
132
+ params?: z.ZodSchema<T>
133
+ }
134
+ includeMessageHistory: boolean
135
+ inheritParentSystemPrompt: boolean
136
+ windowedFileReads?: boolean
137
+ compactContext?:
138
+ | boolean
139
+ | { cacheExpiryMs?: number | null; cacheExpiryMinTokens?: number | null }
140
+ outputMode: 'last_message' | 'all_messages' | 'structured_output'
141
+ outputSchema?: z.ZodSchema<any>
142
+
143
+ handleSteps?: StepHandler<P, T> | string // Function or string of the generator code for running in a sandbox
144
+ /**
145
+ * Live copy of handleSteps kept alongside the serialized string. The string
146
+ * form of a bundled function can reference out-of-scope bundler helpers
147
+ * (esbuild keepNames injects `__name(...)`, minified to a bare identifier),
148
+ * which breaks the eval path. When the runtime is in-process, prefer this
149
+ * function. Dropped automatically by JSON serialization (resume blobs, DB).
150
+ */
151
+ handleStepsFn?: StepHandler<P, T>
152
+ }
153
+
154
+ export type StepText = { type: 'STEP_TEXT'; text: string }
155
+ export type GenerateN = { type: 'GENERATE_N'; n: number }
156
+
157
+ // Zod schemas for handleSteps yield values
158
+ export const StepTextSchema = z.object({
159
+ type: z.literal('STEP_TEXT'),
160
+ text: z.string(),
161
+ })
162
+
163
+ export const GenerateNSchema = z.object({
164
+ type: z.literal('GENERATE_N'),
165
+ n: z.number().int().positive(),
166
+ })
167
+
168
+ export const HandleStepsToolCallSchema = z.object({
169
+ toolName: z.string().min(1),
170
+ input: z.record(z.string(), z.any()),
171
+ includeToolCall: z.boolean().optional(),
172
+ })
173
+
174
+ export const HandleStepsYieldValueSchema = z.union([
175
+ z.literal('STEP'),
176
+ z.literal('STEP_ALL'),
177
+ StepTextSchema,
178
+ GenerateNSchema,
179
+ HandleStepsToolCallSchema,
180
+ ])
181
+
182
+ export type HandleStepsYieldValue = z.infer<typeof HandleStepsYieldValueSchema>
183
+
184
+ export type StepGenerator = Generator<
185
+ Omit<ToolCall, 'toolCallId'> | 'STEP' | 'STEP_ALL' | StepText | GenerateN, // Generic tool call type
186
+ void,
187
+ {
188
+ agentState: PublicAgentState
189
+ toolResult: ToolResultOutput[]
190
+ stepsComplete: boolean
191
+ nResponses?: string[]
192
+ }
193
+ >
194
+
195
+ export type StepHandler<
196
+ P = string | undefined,
197
+ T = Record<string, any> | undefined,
198
+ > = (context: {
199
+ agentState: AgentState
200
+ prompt: P
201
+ params: T
202
+ /**
203
+ * The model this agent step is running on, after any per-request override of
204
+ * the template's `model`. Needed because `handleSteps` is serialized with
205
+ * `toString()` (no closures survive), so a caller that swaps the model at
206
+ * request time has no other way to tell the generator which model it got.
207
+ *
208
+ * Supplied by the runtime; optional so generators invoked directly in tests
209
+ * keep compiling. Treat `undefined` as "unknown model".
210
+ */
211
+ model?: string
212
+ logger: Logger
213
+ }) => StepGenerator
214
+
215
+ export { Logger, PublicAgentState }