@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,159 @@
1
+ import z from 'zod/v4'
2
+
3
+ import { $getNativeToolCallExampleString, jsonToolResultSchema } from '../utils'
4
+
5
+ import type { $ToolParams } from '../../constants'
6
+
7
+ const toolName = 'code_search'
8
+ const endsAgentStep = true
9
+ const inputSchema = z
10
+ .object({
11
+ pattern: z
12
+ .string()
13
+ .min(1, 'Pattern cannot be empty')
14
+ .describe(`The pattern to search for.`),
15
+ flags: z
16
+ .string()
17
+ .optional()
18
+ .describe(
19
+ `Optional ripgrep flags to customize the search (e.g., "-i" for case-insensitive, "-g *.ts -g *.js" for TypeScript and JavaScript files only, "-g !*.test.ts" to exclude Typescript test files, "-A 3" for 3 lines after match, "-B 2" for 2 lines before match).`,
20
+ ),
21
+ cwd: z
22
+ .string()
23
+ .optional()
24
+ .describe(
25
+ `Optional working directory to search within, relative to the project root. Defaults to searching the entire project.`,
26
+ ),
27
+ maxResults: z
28
+ .number()
29
+ .int()
30
+ .positive()
31
+ .optional()
32
+ .default(15)
33
+ .describe(
34
+ `Maximum number of results to return per file. Defaults to 15. There is also a global limit of 250 results across all files.`,
35
+ ),
36
+ })
37
+ .describe(
38
+ `Search for string patterns in the project's files. This tool uses ripgrep (rg), a fast line-oriented search tool.`,
39
+ )
40
+ const legacyInputSchema = inputSchema.describe(
41
+ `Search for string patterns in the project's files. This tool uses ripgrep (rg), a fast line-oriented search tool. Use this tool only when read_files is not sufficient to find the files you need.`,
42
+ )
43
+ const buildDescription = (guidance: string) => `
44
+ Purpose: Search through code files to find files with specific text patterns, function names, variable names, and more.
45
+
46
+ ${guidance}
47
+
48
+ Use cases:
49
+ 1. Finding all references to a function, class, or variable name across the codebase
50
+ 2. Searching for specific code patterns or implementations
51
+ 3. Looking up where certain strings or text appear
52
+ 4. Finding files that contain specific imports or dependencies
53
+ 5. Locating configuration settings or environment variables
54
+
55
+ The pattern supports regular expressions and will search recursively through all files in the project by default. Some tips:
56
+ - Be as constraining in the pattern as possible to limit the number of files returned, e.g. if searching for the definition of a function, use "(function foo|const foo)" or "def foo" instead of merely "foo".
57
+ - Use Rust-style regex, not grep-style, PCRE, RE2 or JavaScript regex - you must always escape special characters like { and }
58
+ - Be as constraining as possible to limit results, e.g. use "(function foo|const foo)" or "def foo" instead of merely "foo"
59
+ - Add context to your search with surrounding terms (e.g., "function handleAuth" rather than just "handleAuth")
60
+ - Use word boundaries (\\b) to match whole words only
61
+ - Use the cwd parameter to narrow your search to specific directories
62
+ - For case-sensitive searches like constants (e.g., ERROR vs error), omit the "-i" flag
63
+ - Searches file content and filenames
64
+ - Automatically ignores binary files, hidden files, and files in .gitignore
65
+
66
+
67
+ Advanced ripgrep flags (use the flags parameter):
68
+
69
+ - Case sensitivity: "-i" for case-insensitive search
70
+ - File type filtering: "-t ts -t js" (TypeScript and JavaScript), "-t py" (Python), etc.
71
+ - Exclude file types: "--type-not py" to exclude Python files
72
+ - Context lines: "-A 3" (3 lines after), "-B 2" (2 lines before), "-C 2" (2 lines before and after)
73
+ - Line numbers: "-n" to show line numbers
74
+ - Count matches: "-c" to count matches per file
75
+ - Only filenames: "-l" to show only filenames with matches
76
+ - Invert match: "-v" to show lines that don't match
77
+ - Word boundaries: "-w" to match whole words only
78
+ - Fixed strings: "-F" to treat pattern as literal string (not regex)
79
+
80
+ Note: Do not use the end_turn tool after this tool! You will want to see the output of this tool before ending your turn.
81
+
82
+ RESULT LIMITING:
83
+
84
+ - The maxResults parameter limits the number of results shown per file (default: 15)
85
+ - There is also a global limit of 250 total results across all files
86
+ - These limits allow you to see results across multiple files without being overwhelmed by matches in a single file
87
+ - If a file has more matches than maxResults, you'll see a truncation notice indicating how many results were found
88
+ - If the global limit is reached, remaining files will be skipped
89
+
90
+ Examples:
91
+ ${$getNativeToolCallExampleString({
92
+ toolName,
93
+ inputSchema,
94
+ input: { pattern: 'foo' },
95
+ endsAgentStep,
96
+ })}
97
+ ${$getNativeToolCallExampleString({
98
+ toolName,
99
+ inputSchema,
100
+ input: { pattern: 'foo\\.bar = 1\\.0' },
101
+ endsAgentStep,
102
+ })}
103
+ ${$getNativeToolCallExampleString({
104
+ toolName,
105
+ inputSchema,
106
+ input: { pattern: 'import.*foo', cwd: 'src' },
107
+ endsAgentStep,
108
+ })}
109
+ ${$getNativeToolCallExampleString({
110
+ toolName,
111
+ inputSchema,
112
+ input: { pattern: 'function.*authenticate', flags: '-i -t ts -t js' },
113
+ endsAgentStep,
114
+ })}
115
+ ${$getNativeToolCallExampleString({
116
+ toolName,
117
+ inputSchema,
118
+ input: { pattern: 'TODO', flags: '-n --type-not py' },
119
+ endsAgentStep,
120
+ })}
121
+ ${$getNativeToolCallExampleString({
122
+ toolName,
123
+ inputSchema,
124
+ input: { pattern: 'getUserData', maxResults: 10 },
125
+ endsAgentStep,
126
+ })}
127
+ `.trim()
128
+
129
+ const legacyDescription = buildDescription(
130
+ 'Prefer to use read_files instead of code_search unless you need to search for a specific pattern in multiple files.',
131
+ )
132
+ const description = buildDescription(
133
+ 'Matches are returned with their line numbers, so in a large file you can search first and then read a window around a match with read_files { path, offset, limit } instead of reading the whole file.',
134
+ )
135
+
136
+ export const codeSearchDisplayVariants = {
137
+ legacy: { description: legacyDescription, inputSchema: legacyInputSchema },
138
+ windowed: { description, inputSchema },
139
+ }
140
+
141
+ export const codeSearchParams = {
142
+ toolName,
143
+ endsAgentStep,
144
+ description,
145
+ inputSchema,
146
+ outputSchema: jsonToolResultSchema(
147
+ z.union([
148
+ z.object({
149
+ stdout: z.string(),
150
+ stderr: z.string().optional(),
151
+ exitCode: z.number().optional(),
152
+ message: z.string(),
153
+ }),
154
+ z.object({
155
+ errorMessage: z.string(),
156
+ }),
157
+ ]),
158
+ ),
159
+ } satisfies $ToolParams
@@ -0,0 +1,131 @@
1
+ import { COMPOSIO_META_TOOL_NAMES } from '../../../constants/composio'
2
+ import z from 'zod/v4'
3
+
4
+ import { jsonToolResultSchema } from '../utils'
5
+
6
+ import type { $ToolParams } from '../../constants'
7
+
8
+ const sessionIdParam = z
9
+ .string()
10
+ .optional()
11
+ .describe('Session ID returned by composio_search_tools, when available.')
12
+
13
+ const composioMetaToolInputSchemas = {
14
+ composio_search_tools: z
15
+ .object({
16
+ queries: z
17
+ .array(z.unknown())
18
+ .min(1)
19
+ .describe(
20
+ 'Structured English search queries. Split independent app/API actions into separate queries.',
21
+ ),
22
+ session: z
23
+ .object({
24
+ generate_id: z.boolean().optional(),
25
+ id: z.string().optional(),
26
+ })
27
+ .catchall(z.unknown())
28
+ .describe(
29
+ 'Use { generate_id: true } for a new workflow, or { id } to continue one.',
30
+ ),
31
+ model: z.string().optional().describe('Client LLM model name.'),
32
+ })
33
+ .catchall(z.unknown()),
34
+ composio_get_tool_schemas: z
35
+ .object({
36
+ tool_slugs: z
37
+ .array(z.string())
38
+ .min(1)
39
+ .describe('Composio tool slugs to retrieve schemas for.'),
40
+ include: z
41
+ .array(z.string())
42
+ .optional()
43
+ .describe('Schema fields to include, e.g. input_schema/output_schema.'),
44
+ session_id: sessionIdParam,
45
+ })
46
+ .catchall(z.unknown()),
47
+ composio_manage_connections: z
48
+ .object({
49
+ toolkits: z
50
+ .array(z.string())
51
+ .min(1)
52
+ .describe('Toolkit slugs to check or connect, such as gmail/github.'),
53
+ reinitiate_all: z
54
+ .boolean()
55
+ .optional()
56
+ .describe('Force reconnection even if active credentials exist.'),
57
+ session_id: sessionIdParam,
58
+ })
59
+ .catchall(z.unknown()),
60
+ composio_multi_execute_tool: z
61
+ .object({
62
+ tools: z
63
+ .array(z.record(z.string(), z.unknown()))
64
+ .min(1)
65
+ .describe('Logically independent Composio tools to execute.'),
66
+ thought: z
67
+ .string()
68
+ .optional()
69
+ .describe('One concise sentence explaining the execution intent.'),
70
+ sync_response_to_workbench: z
71
+ .boolean()
72
+ .default(false)
73
+ .describe('Always use false. Anvil disables Composio workbench.'),
74
+ session_id: sessionIdParam,
75
+ })
76
+ .catchall(z.unknown()),
77
+ }
78
+
79
+ const composioMetaToolDescriptions = {
80
+ composio_search_tools:
81
+ 'Discover relevant Composio tools across external apps. Use this first for requests involving services like Gmail, GitHub, Slack, Linear, Notion, Google Calendar, or Google Sheets.',
82
+ composio_get_tool_schemas:
83
+ 'Retrieve complete input schemas for specific Composio tool slugs returned by composio_search_tools.',
84
+ composio_manage_connections:
85
+ 'Check or initiate user authentication for external app toolkits. Use when search/execution indicates a toolkit is not connected.',
86
+ composio_multi_execute_tool:
87
+ 'Execute one or more discovered Composio app tools in the current workflow session. Do not use workbench offloading.',
88
+ }
89
+
90
+ const composioOutputSchema = jsonToolResultSchema(
91
+ z.union([
92
+ z.json(),
93
+ z.object({
94
+ errorMessage: z.string(),
95
+ status: z.number().optional(),
96
+ }),
97
+ ]),
98
+ )
99
+
100
+ export const composioMetaToolParams = {
101
+ composio_manage_connections: {
102
+ toolName: 'composio_manage_connections',
103
+ endsAgentStep: true,
104
+ description: composioMetaToolDescriptions.composio_manage_connections,
105
+ inputSchema: composioMetaToolInputSchemas.composio_manage_connections,
106
+ outputSchema: composioOutputSchema,
107
+ },
108
+ composio_multi_execute_tool: {
109
+ toolName: 'composio_multi_execute_tool',
110
+ endsAgentStep: true,
111
+ description: composioMetaToolDescriptions.composio_multi_execute_tool,
112
+ inputSchema: composioMetaToolInputSchemas.composio_multi_execute_tool,
113
+ outputSchema: composioOutputSchema,
114
+ },
115
+ composio_search_tools: {
116
+ toolName: 'composio_search_tools',
117
+ endsAgentStep: true,
118
+ description: composioMetaToolDescriptions.composio_search_tools,
119
+ inputSchema: composioMetaToolInputSchemas.composio_search_tools,
120
+ outputSchema: composioOutputSchema,
121
+ },
122
+ composio_get_tool_schemas: {
123
+ toolName: 'composio_get_tool_schemas',
124
+ endsAgentStep: true,
125
+ description: composioMetaToolDescriptions.composio_get_tool_schemas,
126
+ inputSchema: composioMetaToolInputSchemas.composio_get_tool_schemas,
127
+ outputSchema: composioOutputSchema,
128
+ },
129
+ } satisfies {
130
+ [K in (typeof COMPOSIO_META_TOOL_NAMES)[number]]: $ToolParams<K>
131
+ }
@@ -0,0 +1,80 @@
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 = 'create_plan'
9
+ const endsAgentStep = false
10
+ const inputSchema = z
11
+ .object({
12
+ path: z
13
+ .string()
14
+ .min(1, 'Path cannot be empty')
15
+ .describe(
16
+ `The path including the filename of a markdown file that will be overwritten with the plan.`,
17
+ ),
18
+ plan: z
19
+ .string()
20
+ .min(1, 'Plan cannot be empty')
21
+ .describe(`A detailed plan to solve the user's request.`),
22
+ })
23
+ .describe(`Generate a detailed markdown plan for complex tasks.`)
24
+ const description = `
25
+ Use when:
26
+ - User explicitly requests a detailed plan.
27
+ - Use this tool to overwrite a previous plan by using the exact same file name.
28
+
29
+ Don't include:
30
+ - Goals, timelines, benefits, next steps.
31
+ - Background context or extensive explanations.
32
+
33
+ For a technical plan, act as an expert architect engineer and provide direction to your editor engineer.
34
+ - Study the change request and the current code.
35
+ - Describe how to modify the code to complete the request. The editor engineer will rely solely on your instructions, so make them unambiguous and complete.
36
+ - Explain all needed code changes clearly and completely, but concisely.
37
+ - Just show the changes needed.
38
+
39
+ What to include in the plan:
40
+ - Include key snippets of code -- not full files of it. Use pseudo code. For example, include interfaces between modules, function signatures, and other code that is not immediately obvious should be written out explicitly. Function and method bodies could be written out in psuedo code.
41
+ - Do not waste time on much background information, focus on the exact steps of the implementation.
42
+ - Do not wrap the path content in markdown code blocks, e.g. \`\`\`.
43
+
44
+ Do not include any of the following sections in the plan:
45
+ - goals
46
+ - a timeline or schedule
47
+ - benefits/key improvements
48
+ - next steps
49
+
50
+ After creating the plan, you should end turn to let the user review the plan.
51
+
52
+ Important: Use this tool sparingly. Do not use this tool more than once in a conversation, unless in ask mode.
53
+
54
+ Examples:
55
+ ${$getNativeToolCallExampleString({
56
+ toolName,
57
+ inputSchema,
58
+ input: {
59
+ path: 'feature-x-plan.md',
60
+ plan: [
61
+ '1. Create module `auth.ts` in `/src/auth/`.',
62
+ '```ts',
63
+ 'export function authenticate(user: User): boolean { /* pseudo-code logic */ }',
64
+ '```',
65
+ '2. Refactor existing auth logic into this module.',
66
+ '3. Update imports across codebase.',
67
+ '4. Write integration tests covering new module logic.',
68
+ ].join('\n'),
69
+ },
70
+ endsAgentStep,
71
+ })}
72
+ `.trim()
73
+
74
+ export const createPlanParams = {
75
+ toolName,
76
+ endsAgentStep,
77
+ description,
78
+ inputSchema,
79
+ outputSchema: jsonToolResultSchema(updateFileResultSchema),
80
+ } satisfies $ToolParams
@@ -0,0 +1,57 @@
1
+ import z from 'zod/v4'
2
+
3
+ import {
4
+ $getNativeToolCallExampleString,
5
+ textToolResultSchema,
6
+ } from '../utils'
7
+
8
+ import type { $ToolParams } from '../../constants'
9
+
10
+ const toolName = 'end_turn'
11
+ const endsAgentStep = true
12
+ const inputSchema = z
13
+ .object({})
14
+ .describe(
15
+ `End your turn, regardless of any new tool results that might be coming. This will allow the user to type another prompt.`,
16
+ )
17
+ const description = `
18
+ Only use this tool to hand control back to the user.
19
+
20
+ - When to use: after you have completed a meaningful chunk of work and you are either (a) fully done, or (b) explicitly waiting for the user's next message.
21
+ - Do NOT use: as a stop token mid-work, to pause between tool calls, to wait for tool results, or to "check in" unnecessarily.
22
+ - Before calling: finish all pending steps, resolve tool results, and include any outputs the user needs to review.
23
+ - Effect: Signals the UI to wait for the user's reply; any pending tool results will be ignored.
24
+
25
+ *INCORRECT USAGE*:
26
+ ${$getNativeToolCallExampleString({
27
+ toolName: 'some_tool_that_produces_results',
28
+ inputSchema: null,
29
+ input: { query: 'some example search term' },
30
+ endsAgentStep: false,
31
+ })}
32
+
33
+ ${$getNativeToolCallExampleString({
34
+ toolName,
35
+ inputSchema,
36
+ input: {},
37
+ endsAgentStep: true,
38
+ })}
39
+
40
+ *CORRECT USAGE*:
41
+ All done! Would you like some more help with xyz?
42
+
43
+ ${$getNativeToolCallExampleString({
44
+ toolName,
45
+ inputSchema,
46
+ input: {},
47
+ endsAgentStep: false,
48
+ })}
49
+ `.trim()
50
+
51
+ export const endTurnParams = {
52
+ toolName,
53
+ endsAgentStep,
54
+ description,
55
+ inputSchema,
56
+ outputSchema: textToolResultSchema(),
57
+ } satisfies $ToolParams
@@ -0,0 +1,60 @@
1
+ import z from 'zod/v4'
2
+
3
+ import { fileContentsSchema } from './read-files'
4
+ import { $getNativeToolCallExampleString, jsonToolResultSchema } from '../utils'
5
+
6
+ import type { $ToolParams } from '../../constants'
7
+
8
+ const toolName = 'find_files'
9
+ const endsAgentStep = true
10
+ const inputSchema = z
11
+ .object({
12
+ prompt: z
13
+ .string()
14
+ .min(1, 'Prompt cannot be empty')
15
+ .describe(
16
+ `A brief natural language description of the files or the name of a function or class you are looking for. It's also helpful to mention a directory or two to look within.`,
17
+ ),
18
+ })
19
+ .describe(
20
+ `Find several files related to a brief natural language description of the files or the name of a function or class you are looking for.`,
21
+ )
22
+ const description = `
23
+ Example:
24
+ ${$getNativeToolCallExampleString({
25
+ toolName,
26
+ inputSchema,
27
+ input: {
28
+ prompt: 'The implementation of function foo',
29
+ },
30
+ endsAgentStep,
31
+ })}
32
+
33
+ Purpose: Better fulfill the user request by reading files which could contain information relevant to the user's request.
34
+ Use cases:
35
+ - If you are calling a function or creating a class and want to know how it works, use this tool to get the implementation.
36
+ - If you need to understand a section of the codebase, read more files in that directory or subdirectories.
37
+ - Some requests require a broad understanding of multiple parts of the codebase. Consider using find_files to gain more context before making changes.
38
+
39
+ Don't use this tool if:
40
+ - You already know the exact path of the file(s) you are looking for — in this case, use read_files.
41
+ - You already read the files you need in context.
42
+ - You know the name of the file you need. Instead use run_terminal_command with \`find -name\` (or \`dir /s /b\` or \`Get-ChildItem -Recurse -Filter\`)
43
+
44
+ This tool is not guaranteed to find the correct file. In general, prefer using read_files instead of find_files.
45
+ `.trim()
46
+
47
+ export const findFilesParams = {
48
+ toolName,
49
+ endsAgentStep,
50
+ description,
51
+ inputSchema,
52
+ outputSchema: jsonToolResultSchema(
53
+ z.union([
54
+ fileContentsSchema.array(),
55
+ z.object({
56
+ message: z.string(),
57
+ }),
58
+ ]),
59
+ ),
60
+ } satisfies $ToolParams
@@ -0,0 +1,80 @@
1
+ import z from 'zod/v4'
2
+
3
+ import { $getNativeToolCallExampleString, jsonToolResultSchema } from '../utils'
4
+
5
+ import type { $ToolParams } from '../../constants'
6
+
7
+ const toolName = 'glob'
8
+ const endsAgentStep = false
9
+ const inputSchema = z
10
+ .object({
11
+ pattern: z
12
+ .string()
13
+ .min(1, 'Pattern cannot be empty')
14
+ .describe(
15
+ 'Glob pattern to match files against (e.g., *.js, src/glob/*.ts, glob/test/glob/*.go).',
16
+ ),
17
+ cwd: z
18
+ .string()
19
+ .optional()
20
+ .describe(
21
+ 'Optional working directory to search within, relative to project root. If not provided, searches from project root.',
22
+ ),
23
+ max_results: z
24
+ .number()
25
+ .int()
26
+ .positive()
27
+ .optional()
28
+ .describe('Maximum number of matching paths to return.'),
29
+ })
30
+ .describe(
31
+ `Search for files matching a glob pattern. Returns matching file paths sorted by modification time.`,
32
+ )
33
+ const description = `
34
+ Example:
35
+ ${$getNativeToolCallExampleString({
36
+ toolName,
37
+ inputSchema,
38
+ input: {
39
+ pattern: '**/*.test.ts',
40
+ },
41
+ endsAgentStep,
42
+ })}
43
+
44
+ Purpose: Search for files matching a glob pattern to discover files by name patterns rather than content.
45
+ Use cases:
46
+ - Find all files with a specific extension (e.g., "*.js", "*.test.ts")
47
+ - Locate files in specific directories (e.g., "src/**/*.ts")
48
+ - Find files with specific naming patterns (e.g., "**/test_*.go", "**/*-config.json")
49
+ - Discover test files, configuration files, or other files with predictable naming
50
+
51
+ Glob patterns support:
52
+ - * matches any characters except /
53
+ - ** matches any characters including /
54
+ - ? matches a single character
55
+ - [abc] matches one of the characters in brackets
56
+ - {a,b} matches one of the comma-separated patterns
57
+
58
+ This tool is fast and works well for discovering files by name patterns.
59
+ `.trim()
60
+
61
+ export const globParams = {
62
+ toolName,
63
+ description,
64
+ endsAgentStep,
65
+ inputSchema,
66
+ outputSchema: jsonToolResultSchema(
67
+ z.union([
68
+ z.object({
69
+ files: z.array(z.string()).describe('Array of matching file paths'),
70
+ count: z
71
+ .number()
72
+ .describe('Total number of files matching the pattern'),
73
+ message: z.string().describe('Success message'),
74
+ }),
75
+ z.object({
76
+ errorMessage: z.string().describe('Error message if search failed'),
77
+ }),
78
+ ]),
79
+ ),
80
+ } satisfies $ToolParams
@@ -0,0 +1,93 @@
1
+ import z from 'zod/v4'
2
+
3
+ import { gravityIndexInputSchema } from '../../../types/gravity-index'
4
+ import { $getNativeToolCallExampleString, jsonToolResultSchema } from '../utils'
5
+ import { jsonObjectSchema } from '../../../types/json'
6
+
7
+ import type { $ToolParams } from '../../constants'
8
+
9
+ const toolName = 'gravity_index'
10
+ const endsAgentStep = true
11
+
12
+ const description = `
13
+ Purpose: Use the Gravity Index to discover, inspect, and report integrations for third-party developer services such as databases, auth, payments, hosting, email, cache, monitoring, analytics, AI, storage, CMS, search, realtime, background jobs, infrastructure, CRM, support, productivity, commerce, video, webhooks, and SMS.
14
+
15
+ Choose the action:
16
+ - \`search\`: Use when the user asks for a recommendation or when you need to choose a provider before integrating it. Returns a reasoned recommendation with install guidance, env vars, and a setup/conversion URL. Include stack and constraints in \`query\`. Pass \`search_id\` from a previous search for follow-up questions.
17
+ - \`browse\`: Use to list catalog services by \`category\` and/or keyword \`q\`. Good when the user wants options or a category-scoped picker.
18
+ - \`list_categories\`: Use to see available categories and service counts.
19
+ - \`get_service\`: Use when you already know a service slug and need full detail, env vars, website, docs URL, and install metadata.
20
+ - \`report_integration\`: Use after you have actually completed and verified an integration from a previous search. Pass the original \`search_id\` and the service slug as \`integrated_slug\`.
21
+
22
+ Important setup-link behavior:
23
+ - Search results may include \`credential_request.setup_url\`, \`recommendation.click_url\`, and/or top-level \`click_url\`, the tracked setup link the user should visit to create an account and get API credentials.
24
+ - A search can contain a recommendation and several options, and you may search more than once. Decide which single service you are actually recommending before rendering a CTA.
25
+ - When \`render_ui\` is available, call it once for the selected service. Use a gravity_index link reference with the exact \`search_id\` and selected \`service_slug\`; never transcribe the opaque URL. The runtime verifies the selection and substitutes the exact stored click URL.
26
+ - When \`render_ui\` is unavailable, preserve and present the exact returned tracked URL in a normal markdown link.
27
+ - Do not replace the tracked setup link with the vendor homepage and do not auto-follow it.
28
+ - Ask the user to paste the required env vars from \`credential_request.required_env_vars\` back so you can finish setup.
29
+
30
+ Implementation guidance:
31
+ - Gravity returns reasoning, \`install.steps\`, \`install.env_vars\`, and \`credential_request\`. Execute the install steps you can perform locally, then pause only for missing user credentials.
32
+ - Use the returned \`docs_url\`, existing codebase conventions, and package/docs research to fill any gaps in the install instructions.
33
+ - For browsing results, use \`get_service\` on promising slugs before making a final recommendation if details matter.
34
+
35
+ Examples:
36
+ ${$getNativeToolCallExampleString({
37
+ toolName,
38
+ inputSchema: gravityIndexInputSchema,
39
+ input: {
40
+ action: 'search',
41
+ query:
42
+ 'transactional email API with a generous free tier for a Next.js app',
43
+ },
44
+ endsAgentStep,
45
+ })}
46
+
47
+ ${$getNativeToolCallExampleString({
48
+ toolName,
49
+ inputSchema: gravityIndexInputSchema,
50
+ input: {
51
+ action: 'browse',
52
+ category: 'Email',
53
+ q: 'send',
54
+ },
55
+ endsAgentStep,
56
+ })}
57
+
58
+ ${$getNativeToolCallExampleString({
59
+ toolName,
60
+ inputSchema: gravityIndexInputSchema,
61
+ input: {
62
+ action: 'get_service',
63
+ slug: 'sendgrid',
64
+ },
65
+ endsAgentStep,
66
+ })}
67
+
68
+ ${$getNativeToolCallExampleString({
69
+ toolName,
70
+ inputSchema: gravityIndexInputSchema,
71
+ input: {
72
+ action: 'report_integration',
73
+ search_id: 'search_id_from_previous_search',
74
+ integrated_slug: 'sendgrid',
75
+ },
76
+ endsAgentStep,
77
+ })}
78
+ `.trim()
79
+
80
+ export const gravityIndexParams = {
81
+ toolName,
82
+ endsAgentStep,
83
+ description,
84
+ inputSchema: gravityIndexInputSchema,
85
+ outputSchema: jsonToolResultSchema(
86
+ z.union([
87
+ jsonObjectSchema,
88
+ z.object({
89
+ errorMessage: z.string(),
90
+ }),
91
+ ]),
92
+ ),
93
+ } satisfies $ToolParams