@alumbwe/anvil 1.0.20 → 1.0.21
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.
- package/package.json +6 -2
- package/src/agents/bundled-agents.generated.ts +4 -4
- package/src/chat.tsx +1703 -1698
- package/src/cli-args.ts +134 -134
- package/src/components/status-bar.tsx +331 -313
- package/src/hooks/helpers/send-message.ts +663 -654
- package/src/hooks/use-send-message.ts +806 -773
- package/src/index.tsx +473 -473
- package/src/state/chat-store.ts +553 -544
- package/src/utils/create-run-config.ts +121 -121
- package/src/utils/format-compact-number.ts +37 -0
- package/vendor/@anvil/common/package.json +27 -0
- package/vendor/@anvil/common/src/__tests__/agent-validation.test.ts +846 -0
- package/vendor/@anvil/common/src/__tests__/anvil-model-availability.test.ts +101 -0
- package/vendor/@anvil/common/src/__tests__/anvil-models.test.ts +1408 -0
- package/vendor/@anvil/common/src/__tests__/anvil-public-data-use-copy.test.ts +258 -0
- package/vendor/@anvil/common/src/__tests__/anvil-referral-tiers.test.ts +48 -0
- package/vendor/@anvil/common/src/__tests__/anvil-spend-ceilings.test.ts +282 -0
- package/vendor/@anvil/common/src/__tests__/anvil-trust.test.ts +526 -0
- package/vendor/@anvil/common/src/__tests__/deepseek-direct.test.ts +68 -0
- package/vendor/@anvil/common/src/__tests__/disposable-email.test.ts +132 -0
- package/vendor/@anvil/common/src/__tests__/dynamic-agent-template-schema.test.ts +422 -0
- package/vendor/@anvil/common/src/__tests__/env-ci.test.ts +167 -0
- package/vendor/@anvil/common/src/__tests__/env-process.test.ts +145 -0
- package/vendor/@anvil/common/src/__tests__/foreign-client-shipped-agents.test.ts +234 -0
- package/vendor/@anvil/common/src/__tests__/foreign-client-signals.test.ts +379 -0
- package/vendor/@anvil/common/src/__tests__/free-agents.test.ts +807 -0
- package/vendor/@anvil/common/src/__tests__/gravity-capi.test.ts +154 -0
- package/vendor/@anvil/common/src/__tests__/handlesteps-parsing.test.ts +246 -0
- package/vendor/@anvil/common/src/__tests__/kimi-k3-god-only.test.ts +77 -0
- package/vendor/@anvil/common/src/__tests__/model-config.test.ts +89 -0
- package/vendor/@anvil/common/src/__tests__/project-file-tree.test.ts +298 -0
- package/vendor/@anvil/common/src/__tests__/provisioned-model-tiers.test.ts +116 -0
- package/vendor/@anvil/common/src/__tests__/reasoning-effort.test.ts +167 -0
- package/vendor/@anvil/common/src/__tests__/reddit-capi.test.ts +132 -0
- package/vendor/@anvil/common/src/__tests__/response-ad-positions.test.ts +72 -0
- package/vendor/@anvil/common/src/__tests__/user-state.test.ts +30 -0
- package/vendor/@anvil/common/src/actions.ts +215 -0
- package/vendor/@anvil/common/src/analytics-core.ts +69 -0
- package/vendor/@anvil/common/src/analytics.ts +93 -0
- package/vendor/@anvil/common/src/api-keys/constants.ts +26 -0
- package/vendor/@anvil/common/src/browser-actions.ts +413 -0
- package/vendor/@anvil/common/src/constants/__tests__/anvil-onboarding-gate.test.ts +63 -0
- package/vendor/@anvil/common/src/constants/__tests__/anvil-onboarding.test.ts +246 -0
- package/vendor/@anvil/common/src/constants/__tests__/cf-worker-signals.test.ts +106 -0
- package/vendor/@anvil/common/src/constants/agents.ts +99 -0
- package/vendor/@anvil/common/src/constants/analytics-events.ts +435 -0
- package/vendor/@anvil/common/src/constants/anthropic.ts +73 -0
- package/vendor/@anvil/common/src/constants/anvil-data-use.ts +81 -0
- package/vendor/@anvil/common/src/constants/anvil-errors.ts +7 -0
- package/vendor/@anvil/common/src/constants/anvil-gemini-thinker.ts +21 -0
- package/vendor/@anvil/common/src/constants/anvil-model-ids.ts +11 -0
- package/vendor/@anvil/common/src/constants/anvil-models.ts +2130 -0
- package/vendor/@anvil/common/src/constants/anvil-onboarding-gate.ts +55 -0
- package/vendor/@anvil/common/src/constants/anvil-onboarding.ts +307 -0
- package/vendor/@anvil/common/src/constants/anvil-referral-tiers.ts +87 -0
- package/vendor/@anvil/common/src/constants/anvil-signup-block.ts +68 -0
- package/vendor/@anvil/common/src/constants/anvil-spend-ceilings.ts +450 -0
- package/vendor/@anvil/common/src/constants/anvil-trust.ts +976 -0
- package/vendor/@anvil/common/src/constants/auth.ts +18 -0
- package/vendor/@anvil/common/src/constants/byok.ts +2 -0
- package/vendor/@anvil/common/src/constants/cf-worker-signals.ts +132 -0
- package/vendor/@anvil/common/src/constants/composio.ts +34 -0
- package/vendor/@anvil/common/src/constants/deepseek-direct.ts +55 -0
- package/vendor/@anvil/common/src/constants/feedback.ts +13 -0
- package/vendor/@anvil/common/src/constants/foreign-client-signals.ts +272 -0
- package/vendor/@anvil/common/src/constants/free-agents.ts +777 -0
- package/vendor/@anvil/common/src/constants/gemini.ts +15 -0
- package/vendor/@anvil/common/src/constants/grant-priorities.ts +13 -0
- package/vendor/@anvil/common/src/constants/hosts.ts +6 -0
- package/vendor/@anvil/common/src/constants/images.ts +51 -0
- package/vendor/@anvil/common/src/constants/index.ts +7 -0
- package/vendor/@anvil/common/src/constants/knowledge.ts +35 -0
- package/vendor/@anvil/common/src/constants/limits.ts +23 -0
- package/vendor/@anvil/common/src/constants/model-config.ts +277 -0
- package/vendor/@anvil/common/src/constants/openrouter-attribution.ts +8 -0
- package/vendor/@anvil/common/src/constants/paths.ts +69 -0
- package/vendor/@anvil/common/src/constants/provider-routes.ts +317 -0
- package/vendor/@anvil/common/src/constants/reasoning-effort.ts +79 -0
- package/vendor/@anvil/common/src/constants/skills.ts +60 -0
- package/vendor/@anvil/common/src/constants/subscription-plans.ts +49 -0
- package/vendor/@anvil/common/src/constants/ui.ts +25 -0
- package/vendor/@anvil/common/src/env-ci.ts +36 -0
- package/vendor/@anvil/common/src/env-process.ts +95 -0
- package/vendor/@anvil/common/src/env-schema.ts +95 -0
- package/vendor/@anvil/common/src/env.ts +24 -0
- package/vendor/@anvil/common/src/gravity-capi.ts +207 -0
- package/vendor/@anvil/common/src/mcp/client.ts +233 -0
- package/vendor/@anvil/common/src/old-constants.ts +10 -0
- package/vendor/@anvil/common/src/project-file-tree.ts +355 -0
- package/vendor/@anvil/common/src/reddit-capi.ts +254 -0
- package/vendor/@anvil/common/src/schemas/feedback.ts +52 -0
- package/vendor/@anvil/common/src/schemas/logs.ts +66 -0
- package/vendor/@anvil/common/src/templates/agent-validation.ts +392 -0
- package/vendor/@anvil/common/src/templates/initial-agents-dir/LICENSE +202 -0
- package/vendor/@anvil/common/src/templates/initial-agents-dir/README.md +294 -0
- package/vendor/@anvil/common/src/templates/initial-agents-dir/examples/01-basic-diff-reviewer.ts +17 -0
- package/vendor/@anvil/common/src/templates/initial-agents-dir/examples/02-intermediate-git-committer.ts +78 -0
- package/vendor/@anvil/common/src/templates/initial-agents-dir/examples/03-advanced-file-explorer.ts +73 -0
- package/vendor/@anvil/common/src/templates/initial-agents-dir/my-custom-agent.ts +40 -0
- package/vendor/@anvil/common/src/templates/initial-agents-dir/package.json +6 -0
- package/vendor/@anvil/common/src/templates/initial-agents-dir/skills/README.md +65 -0
- package/vendor/@anvil/common/src/templates/initial-agents-dir/skills/example-skill/SKILL.md +29 -0
- package/vendor/@anvil/common/src/templates/initial-agents-dir/types/agent-definition.ts +497 -0
- package/vendor/@anvil/common/src/templates/initial-agents-dir/types/tools.ts +444 -0
- package/vendor/@anvil/common/src/templates/initial-agents-dir/types/util-types.ts +178 -0
- package/vendor/@anvil/common/src/testing/TESTING_PATTERNS.md +351 -0
- package/vendor/@anvil/common/src/testing/anvil-offer-invariants.ts +169 -0
- package/vendor/@anvil/common/src/testing/errors.ts +33 -0
- package/vendor/@anvil/common/src/testing/fixtures/agent-runtime.ts +334 -0
- package/vendor/@anvil/common/src/testing/impl/agent-runtime.ts +6 -0
- package/vendor/@anvil/common/src/testing/index.ts +84 -0
- package/vendor/@anvil/common/src/testing/mock-modules.ts +53 -0
- package/vendor/@anvil/common/src/testing/mock-types.ts +123 -0
- package/vendor/@anvil/common/src/testing/mocks/analytics.ts +261 -0
- package/vendor/@anvil/common/src/testing/mocks/child-process.ts +93 -0
- package/vendor/@anvil/common/src/testing/mocks/crypto.ts +218 -0
- package/vendor/@anvil/common/src/testing/mocks/database.ts +337 -0
- package/vendor/@anvil/common/src/testing/mocks/fetch.ts +219 -0
- package/vendor/@anvil/common/src/testing/mocks/filesystem.ts +166 -0
- package/vendor/@anvil/common/src/testing/mocks/index.ts +101 -0
- package/vendor/@anvil/common/src/testing/mocks/logger.ts +135 -0
- package/vendor/@anvil/common/src/testing/mocks/stream.ts +313 -0
- package/vendor/@anvil/common/src/testing/mocks/timers.ts +132 -0
- package/vendor/@anvil/common/src/testing/mocks/tree-sitter.ts +127 -0
- package/vendor/@anvil/common/src/testing/setup.ts +282 -0
- package/vendor/@anvil/common/src/testing-env-ci.ts +15 -0
- package/vendor/@anvil/common/src/testing-env-process.ts +78 -0
- package/vendor/@anvil/common/src/tools/__tests__/compile-tool-definitions.test.ts +34 -0
- package/vendor/@anvil/common/src/tools/compile-tool-definitions.ts +157 -0
- package/vendor/@anvil/common/src/tools/constants.ts +117 -0
- package/vendor/@anvil/common/src/tools/list.ts +190 -0
- package/vendor/@anvil/common/src/tools/params/__tests__/coerce-to-array.test.ts +213 -0
- package/vendor/@anvil/common/src/tools/params/__tests__/read-docs.test.ts +47 -0
- package/vendor/@anvil/common/src/tools/params/__tests__/render-ui.test.ts +65 -0
- package/vendor/@anvil/common/src/tools/params/tool/__tests__/run-terminal-command-timeout.test.ts +49 -0
- package/vendor/@anvil/common/src/tools/params/tool/add-message.ts +39 -0
- package/vendor/@anvil/common/src/tools/params/tool/add-subgoal.ts +57 -0
- package/vendor/@anvil/common/src/tools/params/tool/apply-patch.ts +110 -0
- package/vendor/@anvil/common/src/tools/params/tool/ask-user.ts +181 -0
- package/vendor/@anvil/common/src/tools/params/tool/browser-logs.ts +85 -0
- package/vendor/@anvil/common/src/tools/params/tool/cloud-plan-ready.ts +94 -0
- package/vendor/@anvil/common/src/tools/params/tool/code-search.ts +159 -0
- package/vendor/@anvil/common/src/tools/params/tool/composio.ts +131 -0
- package/vendor/@anvil/common/src/tools/params/tool/create-plan.ts +80 -0
- package/vendor/@anvil/common/src/tools/params/tool/end-turn.ts +57 -0
- package/vendor/@anvil/common/src/tools/params/tool/find-files.ts +60 -0
- package/vendor/@anvil/common/src/tools/params/tool/glob.ts +80 -0
- package/vendor/@anvil/common/src/tools/params/tool/gravity-index.ts +93 -0
- package/vendor/@anvil/common/src/tools/params/tool/list-directory.ts +58 -0
- package/vendor/@anvil/common/src/tools/params/tool/lookup-agent-info.ts +37 -0
- package/vendor/@anvil/common/src/tools/params/tool/propose-str-replace.ts +103 -0
- package/vendor/@anvil/common/src/tools/params/tool/propose-write-file.ts +71 -0
- package/vendor/@anvil/common/src/tools/params/tool/read-docs.ts +90 -0
- package/vendor/@anvil/common/src/tools/params/tool/read-files.ts +109 -0
- package/vendor/@anvil/common/src/tools/params/tool/read-subtree.ts +79 -0
- package/vendor/@anvil/common/src/tools/params/tool/read-url.ts +81 -0
- package/vendor/@anvil/common/src/tools/params/tool/render-ui.ts +168 -0
- package/vendor/@anvil/common/src/tools/params/tool/run-file-change-hooks.ts +57 -0
- package/vendor/@anvil/common/src/tools/params/tool/run-terminal-command.ts +211 -0
- package/vendor/@anvil/common/src/tools/params/tool/screenshot.ts +97 -0
- package/vendor/@anvil/common/src/tools/params/tool/set-messages.ts +44 -0
- package/vendor/@anvil/common/src/tools/params/tool/set-output.ts +61 -0
- package/vendor/@anvil/common/src/tools/params/tool/skill.ts +59 -0
- package/vendor/@anvil/common/src/tools/params/tool/spawn-agent-inline.ts +56 -0
- package/vendor/@anvil/common/src/tools/params/tool/spawn-agents.ts +154 -0
- package/vendor/@anvil/common/src/tools/params/tool/str-replace.ts +107 -0
- package/vendor/@anvil/common/src/tools/params/tool/suggest-followups.ts +97 -0
- package/vendor/@anvil/common/src/tools/params/tool/task-completed.ts +61 -0
- package/vendor/@anvil/common/src/tools/params/tool/think-deeply.ts +56 -0
- package/vendor/@anvil/common/src/tools/params/tool/update-subgoal.ts +89 -0
- package/vendor/@anvil/common/src/tools/params/tool/vision-analyze.ts +82 -0
- package/vendor/@anvil/common/src/tools/params/tool/web-search.ts +73 -0
- package/vendor/@anvil/common/src/tools/params/tool/write-file.ts +71 -0
- package/vendor/@anvil/common/src/tools/params/tool/write-todos.ts +67 -0
- package/vendor/@anvil/common/src/tools/params/utils.ts +150 -0
- package/vendor/@anvil/common/src/tools/utils.ts +24 -0
- package/vendor/@anvil/common/src/types/__tests__/dynamic-agent-template.test.ts +20 -0
- package/vendor/@anvil/common/src/types/agent-template.ts +215 -0
- package/vendor/@anvil/common/src/types/anvil-session.ts +535 -0
- package/vendor/@anvil/common/src/types/anvil-streak.ts +6 -0
- package/vendor/@anvil/common/src/types/anvil-usage.ts +64 -0
- package/vendor/@anvil/common/src/types/api/agents/publish.ts +61 -0
- package/vendor/@anvil/common/src/types/bun-test.d.ts +5 -0
- package/vendor/@anvil/common/src/types/contracts/agent-runtime.ts +75 -0
- package/vendor/@anvil/common/src/types/contracts/analytics.ts +9 -0
- package/vendor/@anvil/common/src/types/contracts/bigquery.ts +55 -0
- package/vendor/@anvil/common/src/types/contracts/billing.ts +46 -0
- package/vendor/@anvil/common/src/types/contracts/client.ts +53 -0
- package/vendor/@anvil/common/src/types/contracts/database.ts +112 -0
- package/vendor/@anvil/common/src/types/contracts/env.ts +203 -0
- package/vendor/@anvil/common/src/types/contracts/llm.ts +191 -0
- package/vendor/@anvil/common/src/types/contracts/logger.ts +14 -0
- package/vendor/@anvil/common/src/types/contracts/logs.ts +34 -0
- package/vendor/@anvil/common/src/types/contracts/trace.ts +21 -0
- package/vendor/@anvil/common/src/types/dynamic-agent-template.ts +328 -0
- package/vendor/@anvil/common/src/types/filesystem.ts +10 -0
- package/vendor/@anvil/common/src/types/function-params.ts +33 -0
- package/vendor/@anvil/common/src/types/grant.ts +20 -0
- package/vendor/@anvil/common/src/types/gravity-index.ts +170 -0
- package/vendor/@anvil/common/src/types/json.ts +29 -0
- package/vendor/@anvil/common/src/types/mcp.ts +24 -0
- package/vendor/@anvil/common/src/types/messages/anvil-message.ts +58 -0
- package/vendor/@anvil/common/src/types/messages/content-part.ts +59 -0
- package/vendor/@anvil/common/src/types/messages/data-content.ts +14 -0
- package/vendor/@anvil/common/src/types/messages/provider-metadata.ts +13 -0
- package/vendor/@anvil/common/src/types/organization.ts +118 -0
- package/vendor/@anvil/common/src/types/print-mode.ts +121 -0
- package/vendor/@anvil/common/src/types/publisher.ts +67 -0
- package/vendor/@anvil/common/src/types/session-state.ts +149 -0
- package/vendor/@anvil/common/src/types/skill.ts +86 -0
- package/vendor/@anvil/common/src/types/source.ts +11 -0
- package/vendor/@anvil/common/src/types/spawn.ts +13 -0
- package/vendor/@anvil/common/src/types/subscription.ts +67 -0
- package/vendor/@anvil/common/src/types/usage.ts +16 -0
- package/vendor/@anvil/common/src/types/util.ts +3 -0
- package/vendor/@anvil/common/src/util/__tests__/ad-user-agent.test.ts +26 -0
- package/vendor/@anvil/common/src/util/__tests__/analytics-dispatcher.test.ts +122 -0
- package/vendor/@anvil/common/src/util/__tests__/analytics-log.test.ts +102 -0
- package/vendor/@anvil/common/src/util/__tests__/analytics-sampling.test.ts +143 -0
- package/vendor/@anvil/common/src/util/__tests__/anvil-streak.test.ts +202 -0
- package/vendor/@anvil/common/src/util/__tests__/anvil-usage-summary.test.ts +193 -0
- package/vendor/@anvil/common/src/util/__tests__/axiom-only-log.test.ts +140 -0
- package/vendor/@anvil/common/src/util/__tests__/client-user-agent.test.ts +148 -0
- package/vendor/@anvil/common/src/util/__tests__/engagement-tracker.test.ts +115 -0
- package/vendor/@anvil/common/src/util/__tests__/env-file-path.test.ts +57 -0
- package/vendor/@anvil/common/src/util/__tests__/error-abort.test.ts +774 -0
- package/vendor/@anvil/common/src/util/__tests__/error-api-details.test.ts +206 -0
- package/vendor/@anvil/common/src/util/__tests__/file-read-limits.test.ts +173 -0
- package/vendor/@anvil/common/src/util/__tests__/format-code-search.test.ts +60 -0
- package/vendor/@anvil/common/src/util/__tests__/log-mirror.test.ts +31 -0
- package/vendor/@anvil/common/src/util/__tests__/messages.test.ts +1252 -0
- package/vendor/@anvil/common/src/util/__tests__/partial-json-delta.test.ts +505 -0
- package/vendor/@anvil/common/src/util/__tests__/path.test.ts +22 -0
- package/vendor/@anvil/common/src/util/__tests__/project-ignore.test.ts +90 -0
- package/vendor/@anvil/common/src/util/__tests__/promise.test.ts +325 -0
- package/vendor/@anvil/common/src/util/__tests__/rate-limit.test.ts +28 -0
- package/vendor/@anvil/common/src/util/__tests__/reddit-anvil-retention.test.ts +130 -0
- package/vendor/@anvil/common/src/util/__tests__/saxy.test.ts +1008 -0
- package/vendor/@anvil/common/src/util/__tests__/split-data.test.ts +289 -0
- package/vendor/@anvil/common/src/util/__tests__/string.test.ts +239 -0
- package/vendor/@anvil/common/src/util/__tests__/thread-title.test.ts +70 -0
- package/vendor/@anvil/common/src/util/__tests__/tool-result-media-order.test.ts +108 -0
- package/vendor/@anvil/common/src/util/__tests__/ttft-histogram.test.ts +180 -0
- package/vendor/@anvil/common/src/util/__tests__/with-timeout.test.ts +24 -0
- package/vendor/@anvil/common/src/util/__tests__/zoned-time.test.ts +88 -0
- package/vendor/@anvil/common/src/util/ad-user-agent.ts +25 -0
- package/vendor/@anvil/common/src/util/agent-file-utils.ts +110 -0
- package/vendor/@anvil/common/src/util/agent-id-parsing.ts +136 -0
- package/vendor/@anvil/common/src/util/agent-name-normalization.ts +38 -0
- package/vendor/@anvil/common/src/util/agent-name-resolver.ts +86 -0
- package/vendor/@anvil/common/src/util/analytics-dispatcher.ts +82 -0
- package/vendor/@anvil/common/src/util/analytics-log.ts +78 -0
- package/vendor/@anvil/common/src/util/analytics-sampling.ts +255 -0
- package/vendor/@anvil/common/src/util/anvil-model-availability.ts +102 -0
- package/vendor/@anvil/common/src/util/anvil-privacy.ts +82 -0
- package/vendor/@anvil/common/src/util/anvil-streak-line.ts +103 -0
- package/vendor/@anvil/common/src/util/anvil-streak.ts +156 -0
- package/vendor/@anvil/common/src/util/anvil-usage-summary.ts +125 -0
- package/vendor/@anvil/common/src/util/array.ts +31 -0
- package/vendor/@anvil/common/src/util/axiom-only-log.ts +124 -0
- package/vendor/@anvil/common/src/util/cache-debug.ts +171 -0
- package/vendor/@anvil/common/src/util/client-user-agent.ts +114 -0
- package/vendor/@anvil/common/src/util/credentials.ts +26 -0
- package/vendor/@anvil/common/src/util/currency.ts +25 -0
- package/vendor/@anvil/common/src/util/dates.ts +81 -0
- package/vendor/@anvil/common/src/util/disposable-email.ts +277 -0
- package/vendor/@anvil/common/src/util/engagement-tracker.ts +129 -0
- package/vendor/@anvil/common/src/util/env-file-path.ts +40 -0
- package/vendor/@anvil/common/src/util/error.ts +562 -0
- package/vendor/@anvil/common/src/util/file-read-limits.ts +236 -0
- package/vendor/@anvil/common/src/util/file.ts +339 -0
- package/vendor/@anvil/common/src/util/format-code-search.ts +115 -0
- package/vendor/@anvil/common/src/util/lazy-response-ads.ts +92 -0
- package/vendor/@anvil/common/src/util/log-data.ts +57 -0
- package/vendor/@anvil/common/src/util/log-ingest.ts +58 -0
- package/vendor/@anvil/common/src/util/log-mirror.ts +34 -0
- package/vendor/@anvil/common/src/util/lru-cache.ts +67 -0
- package/vendor/@anvil/common/src/util/messages.ts +685 -0
- package/vendor/@anvil/common/src/util/min-heap.ts +87 -0
- package/vendor/@anvil/common/src/util/model-utils.ts +4 -0
- package/vendor/@anvil/common/src/util/object.ts +128 -0
- package/vendor/@anvil/common/src/util/partial-json-delta.ts +89 -0
- package/vendor/@anvil/common/src/util/path.ts +15 -0
- package/vendor/@anvil/common/src/util/project-ignore.ts +119 -0
- package/vendor/@anvil/common/src/util/promise.ts +73 -0
- package/vendor/@anvil/common/src/util/random.ts +15 -0
- package/vendor/@anvil/common/src/util/rate-limit.ts +56 -0
- package/vendor/@anvil/common/src/util/reddit-anvil-retention.ts +60 -0
- package/vendor/@anvil/common/src/util/reddit-capi-events.ts +36 -0
- package/vendor/@anvil/common/src/util/response-ad-positions.ts +54 -0
- package/vendor/@anvil/common/src/util/saxy.ts +741 -0
- package/vendor/@anvil/common/src/util/skills.test.ts +44 -0
- package/vendor/@anvil/common/src/util/skills.ts +36 -0
- package/vendor/@anvil/common/src/util/split-data.ts +259 -0
- package/vendor/@anvil/common/src/util/stop-sequence.ts +61 -0
- package/vendor/@anvil/common/src/util/string.ts +426 -0
- package/vendor/@anvil/common/src/util/system-info.ts +53 -0
- package/vendor/@anvil/common/src/util/thread-title.ts +46 -0
- package/vendor/@anvil/common/src/util/ttft-histogram.ts +73 -0
- package/vendor/@anvil/common/src/util/xml-parser.ts +27 -0
- package/vendor/@anvil/common/src/util/xml.ts +17 -0
- package/vendor/@anvil/common/src/util/zod-schema.ts +25 -0
- package/vendor/@anvil/common/src/util/zoned-time.ts +136 -0
- package/vendor/@anvil/common/src/utils/ask-user-bridge.ts +44 -0
- package/vendor/@anvil/sdk/dist/index.cjs +52297 -0
- package/vendor/@anvil/sdk/dist/index.cjs.map +440 -0
- package/vendor/@anvil/sdk/dist/index.d.ts +4277 -0
- package/vendor/@anvil/sdk/dist/index.mjs +52290 -0
- package/vendor/@anvil/sdk/dist/index.mjs.map +440 -0
- package/vendor/@anvil/sdk/dist/vendor/ai.cjs +30886 -0
- package/vendor/@anvil/sdk/dist/vendor/ripgrep/arm64-darwin/rg +0 -0
- package/vendor/@anvil/sdk/dist/vendor/ripgrep/arm64-linux/rg +0 -0
- package/vendor/@anvil/sdk/dist/vendor/ripgrep/x64-darwin/rg +0 -0
- package/vendor/@anvil/sdk/dist/vendor/ripgrep/x64-linux/rg +0 -0
- package/vendor/@anvil/sdk/dist/vendor/ripgrep/x64-win32/rg.exe +0 -0
- package/vendor/@anvil/sdk/dist/wasm/tree-sitter-c-sharp.wasm +0 -0
- package/vendor/@anvil/sdk/dist/wasm/tree-sitter-cpp.wasm +0 -0
- package/vendor/@anvil/sdk/dist/wasm/tree-sitter-go.wasm +0 -0
- package/vendor/@anvil/sdk/dist/wasm/tree-sitter-java.wasm +0 -0
- package/vendor/@anvil/sdk/dist/wasm/tree-sitter-javascript.wasm +0 -0
- package/vendor/@anvil/sdk/dist/wasm/tree-sitter-python.wasm +0 -0
- package/vendor/@anvil/sdk/dist/wasm/tree-sitter-ruby.wasm +0 -0
- package/vendor/@anvil/sdk/dist/wasm/tree-sitter-rust.wasm +0 -0
- package/vendor/@anvil/sdk/dist/wasm/tree-sitter-tsx.wasm +0 -0
- package/vendor/@anvil/sdk/dist/wasm/tree-sitter-typescript.wasm +0 -0
- package/vendor/@anvil/sdk/dist/wasm/tree-sitter.wasm +0 -0
- 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 }
|