@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,92 @@
|
|
|
1
|
+
export type LazyResponseAdQueue<T extends { impUrl: string }> = {
|
|
2
|
+
targetCounts: Map<string, number>
|
|
3
|
+
attemptedCounts: Map<string, number>
|
|
4
|
+
inFlight: Map<string, Promise<void>>
|
|
5
|
+
usedImpUrls: Set<string>
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/** Maximum number of unique ads auctioned for one assistant response. */
|
|
9
|
+
export const MAX_RESPONSE_AD_POOL_SIZE = 4
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Before the pool is full, only render ads that have actually loaded. Once all
|
|
13
|
+
* four are available, fill every eligible slot by cycling that stable pool.
|
|
14
|
+
*/
|
|
15
|
+
export function responseAdDisplayCount(params: {
|
|
16
|
+
eligibleCount: number
|
|
17
|
+
poolSize: number
|
|
18
|
+
}): number {
|
|
19
|
+
const eligibleCount = Math.max(0, Math.floor(params.eligibleCount))
|
|
20
|
+
const poolSize = Math.max(0, Math.floor(params.poolSize))
|
|
21
|
+
return poolSize >= MAX_RESPONSE_AD_POOL_SIZE
|
|
22
|
+
? eligibleCount
|
|
23
|
+
: Math.min(eligibleCount, poolSize)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Return the exact pooled ad for a slot, repeating the pool in order. */
|
|
27
|
+
export function getResponseAdForSlot<T>(
|
|
28
|
+
ads: readonly T[],
|
|
29
|
+
slotIndex: number,
|
|
30
|
+
): T | undefined {
|
|
31
|
+
if (ads.length === 0) return undefined
|
|
32
|
+
return ads[Math.max(0, Math.floor(slotIndex)) % ads.length]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function createLazyResponseAdQueue<
|
|
36
|
+
T extends { impUrl: string },
|
|
37
|
+
>(): LazyResponseAdQueue<T> {
|
|
38
|
+
return {
|
|
39
|
+
targetCounts: new Map(),
|
|
40
|
+
attemptedCounts: new Map(),
|
|
41
|
+
inFlight: new Map(),
|
|
42
|
+
usedImpUrls: new Set(),
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Raise one response's target ad count and fetch exactly once for each newly
|
|
48
|
+
* eligible slot, up to {@link MAX_RESPONSE_AD_POOL_SIZE}. Calls are serialized
|
|
49
|
+
* per response so resolved ads retain their placement order. No-fill and
|
|
50
|
+
* duplicate results still consume an attempt, preventing render-driven retry
|
|
51
|
+
* loops.
|
|
52
|
+
*/
|
|
53
|
+
export function requestLazyResponseAds<T extends { impUrl: string }>(params: {
|
|
54
|
+
queue: LazyResponseAdQueue<T>
|
|
55
|
+
messageId: string
|
|
56
|
+
count: number
|
|
57
|
+
fetchOne: () => Promise<T | null>
|
|
58
|
+
onAd: (ad: T) => void
|
|
59
|
+
}): Promise<void> | null {
|
|
60
|
+
const { queue, messageId, fetchOne, onAd } = params
|
|
61
|
+
const count = Number.isFinite(params.count)
|
|
62
|
+
? Math.min(MAX_RESPONSE_AD_POOL_SIZE, Math.max(0, Math.floor(params.count)))
|
|
63
|
+
: 0
|
|
64
|
+
const previousTarget = queue.targetCounts.get(messageId) ?? 0
|
|
65
|
+
if (count <= previousTarget) return queue.inFlight.get(messageId) ?? null
|
|
66
|
+
|
|
67
|
+
queue.targetCounts.set(messageId, count)
|
|
68
|
+
const existing = queue.inFlight.get(messageId)
|
|
69
|
+
if (existing) return existing
|
|
70
|
+
|
|
71
|
+
const task = (async () => {
|
|
72
|
+
try {
|
|
73
|
+
for (;;) {
|
|
74
|
+
const target = queue.targetCounts.get(messageId) ?? 0
|
|
75
|
+
const attempted = queue.attemptedCounts.get(messageId) ?? 0
|
|
76
|
+
if (attempted >= target) break
|
|
77
|
+
queue.attemptedCounts.set(messageId, attempted + 1)
|
|
78
|
+
|
|
79
|
+
const ad = await fetchOne()
|
|
80
|
+
if (!ad || queue.usedImpUrls.has(ad.impUrl)) continue
|
|
81
|
+
|
|
82
|
+
queue.usedImpUrls.add(ad.impUrl)
|
|
83
|
+
onAd(ad)
|
|
84
|
+
}
|
|
85
|
+
} finally {
|
|
86
|
+
queue.inFlight.delete(messageId)
|
|
87
|
+
}
|
|
88
|
+
})()
|
|
89
|
+
|
|
90
|
+
queue.inFlight.set(messageId, task)
|
|
91
|
+
return task
|
|
92
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { MAX_LOG_DATA_BYTES } from '../schemas/logs'
|
|
2
|
+
|
|
3
|
+
import type { LogLevel } from '../types/contracts/logs'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Shared pieces of the Axiom log-row pipeline used by every producer that
|
|
7
|
+
* ingests rows — the long-lived sink (packages/logging/src/sink.ts) and the
|
|
8
|
+
* Convex direct-ingest helper (anvil/web/convex/lib/axiom_log.ts). Living
|
|
9
|
+
* here keeps the serialized `data` contract and level ordering identical
|
|
10
|
+
* across producers, so APL queries behave the same regardless of which
|
|
11
|
+
* service emitted a row. Deliberately light on imports (the schemas module
|
|
12
|
+
* pulls only zod) so it stays safe for the Convex bundle.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/** Numeric severity order for LogLevel, used for min-level gating. */
|
|
16
|
+
export const LOG_LEVEL_ORDER: Record<LogLevel, number> = {
|
|
17
|
+
debug: 10,
|
|
18
|
+
info: 20,
|
|
19
|
+
warn: 30,
|
|
20
|
+
error: 40,
|
|
21
|
+
fatal: 50,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Serialize a log payload to a single string field, tolerating circular refs
|
|
26
|
+
* and capping size. The cap applies to ALL sources so a large `data` payload
|
|
27
|
+
* can't inflate Axiom ingest cost. The truncated form is still valid JSON so
|
|
28
|
+
* query scripts can `parse_json(data)`.
|
|
29
|
+
*/
|
|
30
|
+
export function serializeLogData(data: unknown): string | null {
|
|
31
|
+
if (data == null) return null
|
|
32
|
+
let serialized: string
|
|
33
|
+
if (typeof data === 'string') {
|
|
34
|
+
serialized = data
|
|
35
|
+
} else {
|
|
36
|
+
try {
|
|
37
|
+
const seen = new WeakSet()
|
|
38
|
+
serialized = JSON.stringify(data, (_k, v) => {
|
|
39
|
+
if (typeof v === 'object' && v !== null) {
|
|
40
|
+
if (seen.has(v)) return '[Circular]'
|
|
41
|
+
seen.add(v)
|
|
42
|
+
}
|
|
43
|
+
return v
|
|
44
|
+
})
|
|
45
|
+
} catch {
|
|
46
|
+
return null
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (serialized.length > MAX_LOG_DATA_BYTES) {
|
|
50
|
+
return JSON.stringify({
|
|
51
|
+
_truncated: true,
|
|
52
|
+
original_bytes: serialized.length,
|
|
53
|
+
preview: serialized.slice(0, MAX_LOG_DATA_BYTES),
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
return serialized
|
|
57
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { MAX_LOG_DATA_BYTES } from '../schemas/logs'
|
|
2
|
+
|
|
3
|
+
import type { LogRecordInput } from '../schemas/logs'
|
|
4
|
+
import type { LogRow, LogSource } from '../types/contracts/logs'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Truncate an oversized payload so a single client cannot bloat ingest volume.
|
|
8
|
+
* Returns the original value when small.
|
|
9
|
+
*/
|
|
10
|
+
function truncateData(data: unknown): unknown {
|
|
11
|
+
if (data === undefined) return null
|
|
12
|
+
let serialized: string
|
|
13
|
+
try {
|
|
14
|
+
serialized = JSON.stringify(data)
|
|
15
|
+
} catch {
|
|
16
|
+
return { _unserializable: true }
|
|
17
|
+
}
|
|
18
|
+
if (serialized.length <= MAX_LOG_DATA_BYTES) return data
|
|
19
|
+
return {
|
|
20
|
+
_truncated: true,
|
|
21
|
+
original_bytes: serialized.length,
|
|
22
|
+
preview: serialized.slice(0, MAX_LOG_DATA_BYTES),
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Map validated client ingest records onto `LogRow`s. The server is the source
|
|
28
|
+
* of truth for identity/environment: it stamps `source`, `service`, `env`, the
|
|
29
|
+
* authenticated `user_id`, and a received-at fallback timestamp.
|
|
30
|
+
*/
|
|
31
|
+
export function buildLogRows(params: {
|
|
32
|
+
records: LogRecordInput[]
|
|
33
|
+
source: LogSource
|
|
34
|
+
service: string
|
|
35
|
+
env: string
|
|
36
|
+
userId?: string | null
|
|
37
|
+
now: Date
|
|
38
|
+
}): LogRow[] {
|
|
39
|
+
const { records, source, service, env, userId = null, now } = params
|
|
40
|
+
return records.map((record) => {
|
|
41
|
+
const ts = record.timestamp ? new Date(record.timestamp) : now
|
|
42
|
+
return {
|
|
43
|
+
id: crypto.randomUUID(),
|
|
44
|
+
timestamp: isNaN(ts.getTime()) ? now : ts,
|
|
45
|
+
level: record.level,
|
|
46
|
+
source,
|
|
47
|
+
service,
|
|
48
|
+
env,
|
|
49
|
+
event: record.event ?? null,
|
|
50
|
+
message: record.message ?? null,
|
|
51
|
+
user_id: userId,
|
|
52
|
+
client_session_id: record.client_session_id ?? null,
|
|
53
|
+
client_request_id: record.client_request_id ?? null,
|
|
54
|
+
fingerprint_id: record.fingerprint_id ?? null,
|
|
55
|
+
data: truncateData(record.data),
|
|
56
|
+
}
|
|
57
|
+
})
|
|
58
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which analytics events get mirrored into the Axiom logs dataset.
|
|
3
|
+
*
|
|
4
|
+
* PostHog stays the product-analytics system of record (it keeps EVERY event).
|
|
5
|
+
* Axiom is the SQL-queryable copy for debugging/ops, where a handful of
|
|
6
|
+
* extremely high-volume, low-query-value PostHog auto-events would otherwise
|
|
7
|
+
* dominate ingest cost and bury the events we actually query (named product
|
|
8
|
+
* events, signups, logins, errors). We drop those from the Axiom mirror only.
|
|
9
|
+
*
|
|
10
|
+
* `$snapshot` (session replay) alone is the bulk of ingest. Autocapture,
|
|
11
|
+
* heatmaps and web-vitals are similar: useful in PostHog's product UI, noise in
|
|
12
|
+
* APL. Everything else — `$pageview`, `$identify`, `$exception`, `$rageclick`,
|
|
13
|
+
* and all non-`$` named events — is kept.
|
|
14
|
+
*/
|
|
15
|
+
export const AXIOM_MIRROR_DENYLIST: ReadonlySet<string> = new Set([
|
|
16
|
+
'$snapshot',
|
|
17
|
+
'$autocapture',
|
|
18
|
+
'$heatmap',
|
|
19
|
+
'$$heatmap',
|
|
20
|
+
'$web_vitals',
|
|
21
|
+
'$pageleave',
|
|
22
|
+
// Engaged-time heartbeat: one event per user per minute across every surface.
|
|
23
|
+
// High volume, low debug value, and PostHog is the system of record for the
|
|
24
|
+
// metric — keep it out of the Axiom mirror to control ingest cost.
|
|
25
|
+
'product_active_minute',
|
|
26
|
+
])
|
|
27
|
+
|
|
28
|
+
/** True if this analytics event should be copied into the Axiom logs dataset. */
|
|
29
|
+
export function shouldMirrorAnalyticsEvent(
|
|
30
|
+
eventName: string | null | undefined,
|
|
31
|
+
): boolean {
|
|
32
|
+
if (!eventName) return true
|
|
33
|
+
return !AXIOM_MIRROR_DENYLIST.has(eventName)
|
|
34
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A simple Least Recently Used (LRU) cache implementation using a Map.
|
|
3
|
+
* It leverages the fact that Map objects maintain insertion order.
|
|
4
|
+
*/
|
|
5
|
+
export class LRUCache<K, V> {
|
|
6
|
+
private cache = new Map<K, V>()
|
|
7
|
+
|
|
8
|
+
constructor(private maxSize: number) {
|
|
9
|
+
if (maxSize <= 0) {
|
|
10
|
+
throw new Error('LRUCache maxSize must be a positive number.')
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Retrieves an item from the cache. If found, marks it as recently used.
|
|
16
|
+
* @param key The key of the item to retrieve.
|
|
17
|
+
* @returns The value associated with the key, or undefined if not found.
|
|
18
|
+
*/
|
|
19
|
+
get(key: K): V | undefined {
|
|
20
|
+
const value = this.cache.get(key)
|
|
21
|
+
if (value !== undefined) {
|
|
22
|
+
// Mark as recently used by deleting and re-setting
|
|
23
|
+
this.cache.delete(key)
|
|
24
|
+
this.cache.set(key, value)
|
|
25
|
+
return value
|
|
26
|
+
}
|
|
27
|
+
return undefined
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Adds or updates an item in the cache. If the cache exceeds maxSize,
|
|
32
|
+
* the least recently used item is evicted.
|
|
33
|
+
* @param key The key of the item to set.
|
|
34
|
+
* @param value The value to associate with the key.
|
|
35
|
+
*/
|
|
36
|
+
set(key: K, value: V): void {
|
|
37
|
+
// If key already exists, delete it first to update its position
|
|
38
|
+
if (this.cache.has(key)) {
|
|
39
|
+
this.cache.delete(key)
|
|
40
|
+
}
|
|
41
|
+
// Check if cache is full before adding the new item
|
|
42
|
+
else if (this.cache.size >= this.maxSize) {
|
|
43
|
+
// Evict the least recently used item (the first item in the Map's iteration order)
|
|
44
|
+
const oldestKey = this.cache.keys().next().value
|
|
45
|
+
if (oldestKey !== undefined) {
|
|
46
|
+
// Should always be defined if size >= maxSize > 0
|
|
47
|
+
this.cache.delete(oldestKey)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Add the new item (or re-add the updated item)
|
|
51
|
+
this.cache.set(key, value)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Returns the current number of items in the cache.
|
|
56
|
+
*/
|
|
57
|
+
get size(): number {
|
|
58
|
+
return this.cache.size
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Clears all items from the cache.
|
|
63
|
+
*/
|
|
64
|
+
clear(): void {
|
|
65
|
+
this.cache.clear()
|
|
66
|
+
}
|
|
67
|
+
}
|