@alumbwe/anvil 1.0.42 → 1.0.50
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/bin/anvil.js +18 -0
- package/package.json +13 -6
- package/src/agents/bundled-agents.generated.ts +1 -1
- package/src/index.tsx +27 -4
- package/src/login/plain-login.ts +60 -0
- package/src/login/supabase-auth.ts +346 -0
- package/src/utils/anvil-client.ts +4 -0
- package/src/utils/auth.ts +16 -4
- package/src/utils/config-dir.ts +1 -1
- package/vendor/@anvil/common/src/constants/deepseek-direct.ts +30 -1
- package/vendor/@anvil/common/src/util/project-ignore.ts +4 -3
- package/vendor/@anvil/sdk/dist/index.cjs +46 -10
- package/vendor/@anvil/sdk/dist/index.mjs +46 -10
- package/src/commands/__tests__/anvil-command-aliases.test.ts +0 -56
- package/src/commands/__tests__/bash-command.test.ts +0 -445
- package/src/commands/__tests__/command-args.test.ts +0 -349
- package/src/commands/__tests__/copy-conversation-clipboard.test.ts +0 -108
- package/src/commands/__tests__/copy-conversation.test.ts +0 -226
- package/src/commands/__tests__/diagnostics-command.test.ts +0 -35
- package/src/commands/__tests__/image.test.ts +0 -99
- package/src/commands/__tests__/init.test.ts +0 -456
- package/src/commands/__tests__/new-command-rotates-chat.test.ts +0 -91
- package/src/commands/__tests__/process-diagnostics.test.ts +0 -54
- package/src/commands/__tests__/prompt-builders.test.ts +0 -28
- package/src/commands/__tests__/router-input.test.ts +0 -298
- package/src/components/__tests__/ad-banner.test.tsx +0 -83
- package/src/components/__tests__/anvil-landing-heading-row.test.tsx +0 -91
- package/src/components/__tests__/anvil-model-selector.test.tsx +0 -519
- package/src/components/__tests__/anvil-offer-invariants.test.ts +0 -54
- package/src/components/__tests__/anvil-takeover-prompt.test.tsx +0 -212
- package/src/components/__tests__/chat-input-bar.test.tsx +0 -130
- package/src/components/__tests__/grid-layout.integration.test.tsx +0 -304
- package/src/components/__tests__/grid-layout.test.tsx +0 -1051
- package/src/components/__tests__/message-block.completion.test.tsx +0 -104
- package/src/components/__tests__/message-block.streaming.test.tsx +0 -78
- package/src/components/__tests__/message-with-agents.test.tsx +0 -579
- package/src/components/__tests__/multiline-input.test.tsx +0 -1132
- package/src/components/__tests__/queue-panel.test.tsx +0 -398
- package/src/components/__tests__/selectable-list.test.ts +0 -232
- package/src/components/__tests__/status-bar.test.tsx +0 -44
- package/src/components/__tests__/status-indicator.test.tsx +0 -204
- package/src/components/__tests__/terminal-thinking-orb.test.tsx +0 -111
- package/src/components/__tests__/user-error-banner.test.tsx +0 -102
- package/src/components/ask-user/__tests__/multiple-choice-form.test.ts +0 -432
- package/src/components/ask-user/__tests__/validation.test.ts +0 -213
- package/src/components/tools/__tests__/apply-patch.test.tsx +0 -84
- package/src/components/tools/__tests__/code-search.test.tsx +0 -45
- package/src/components/tools/__tests__/gravity-index.test.ts +0 -76
- package/src/components/tools/__tests__/render-ui.test.tsx +0 -92
- package/src/components/tools/__tests__/run-terminal-command.test.ts +0 -233
- package/src/contexts/__tests__/chat-runtime-context.test.tsx +0 -149
- package/src/data/slash-commands.test.ts +0 -24
- package/src/hooks/__tests__/holds-live-anvil-slot.test.ts +0 -49
- package/src/hooks/__tests__/session-fetch-signal.test.ts +0 -63
- package/src/hooks/__tests__/use-activity-query.test.ts +0 -1000
- package/src/hooks/__tests__/use-ask-user-bridge.test.ts +0 -176
- package/src/hooks/__tests__/use-auth-query.test.ts +0 -21
- package/src/hooks/__tests__/use-chat-input-remount.test.tsx +0 -66
- package/src/hooks/__tests__/use-clipboard.test.tsx +0 -73
- package/src/hooks/__tests__/use-connection-status.test.ts +0 -112
- package/src/hooks/__tests__/use-directory-browser.test.ts +0 -203
- package/src/hooks/__tests__/use-gravity-ad.test.ts +0 -73
- package/src/hooks/__tests__/use-grid-layout.test.ts +0 -349
- package/src/hooks/__tests__/use-input-history.test.ts +0 -699
- package/src/hooks/__tests__/use-message-queue-editing.test.tsx +0 -209
- package/src/hooks/__tests__/use-message-queue.test.tsx +0 -71
- package/src/hooks/__tests__/use-path-tab-completion.test.ts +0 -315
- package/src/hooks/__tests__/use-queue-controls.test.ts +0 -68
- package/src/hooks/__tests__/use-queue-ui.test.tsx +0 -83
- package/src/hooks/__tests__/use-searchable-list.test.ts +0 -359
- package/src/hooks/__tests__/use-send-message-timer.test.ts +0 -146
- package/src/hooks/__tests__/use-suggestion-engine-mention.test.ts +0 -361
- package/src/hooks/__tests__/use-suggestion-engine.test.ts +0 -485
- package/src/hooks/__tests__/use-terminal-focus.test.ts +0 -66
- package/src/hooks/__tests__/use-terminal-layout.test.ts +0 -675
- package/src/hooks/__tests__/use-timeout.test.ts +0 -330
- package/src/hooks/__tests__/use-usage-query.test.ts +0 -502
- package/src/hooks/__tests__/use-user-details-query.test.ts +0 -195
- package/src/hooks/helpers/__tests__/send-message.test.ts +0 -1918
- package/src/init/__tests__/init-direnv.test.ts +0 -526
- package/src/state/__tests__/chat-store-focus.test.ts +0 -22
- package/src/state/__tests__/feedback-store.test.ts +0 -257
- package/src/utils/__tests__/active-run.test.ts +0 -140
- package/src/utils/__tests__/activity-tracker.test.ts +0 -440
- package/src/utils/__tests__/agent-display.test.ts +0 -139
- package/src/utils/__tests__/analytics-client.test.ts +0 -262
- package/src/utils/__tests__/anonymous-id.test.ts +0 -74
- package/src/utils/__tests__/anvil-api.test.ts +0 -578
- package/src/utils/__tests__/anvil-instance-owner.test.ts +0 -69
- package/src/utils/__tests__/anvil-model-navigation.test.ts +0 -102
- package/src/utils/__tests__/anvil-premium-reset.test.ts +0 -79
- package/src/utils/__tests__/anvil-referral-cache.test.ts +0 -116
- package/src/utils/__tests__/anvil-session-api.test.ts +0 -215
- package/src/utils/__tests__/anvil-session-display.test.ts +0 -23
- package/src/utils/__tests__/anvil-streak-line.test.ts +0 -217
- package/src/utils/__tests__/arrays.test.ts +0 -264
- package/src/utils/__tests__/bash-context-processor.test.ts +0 -38
- package/src/utils/__tests__/block-processor.test.ts +0 -810
- package/src/utils/__tests__/chat-history.test.ts +0 -203
- package/src/utils/__tests__/chat-input-key-intercept.test.ts +0 -40
- package/src/utils/__tests__/chat-meta.test.ts +0 -130
- package/src/utils/__tests__/clipboard-linux.test.ts +0 -359
- package/src/utils/__tests__/clipboard.test.ts +0 -910
- package/src/utils/__tests__/code-search-summary.test.ts +0 -84
- package/src/utils/__tests__/collapse-helpers.test.ts +0 -1109
- package/src/utils/__tests__/error-handling.test.ts +0 -658
- package/src/utils/__tests__/exit-cleanly.test.ts +0 -110
- package/src/utils/__tests__/feedback-helpers.test.ts +0 -444
- package/src/utils/__tests__/feedback-submission.test.ts +0 -26
- package/src/utils/__tests__/fetch-usage.test.ts +0 -355
- package/src/utils/__tests__/fingerprint.test.ts +0 -144
- package/src/utils/__tests__/fixtures/terminal-command-broker-child.ts +0 -7
- package/src/utils/__tests__/fixtures/terminal-command-broker-entry.ts +0 -3
- package/src/utils/__tests__/fixtures/terminal-command-broker-owner.ts +0 -33
- package/src/utils/__tests__/format-elapsed-time.test.ts +0 -103
- package/src/utils/__tests__/format-timeout.test.ts +0 -87
- package/src/utils/__tests__/image-dimensions.test.ts +0 -249
- package/src/utils/__tests__/image-processor.test.ts +0 -209
- package/src/utils/__tests__/implementor-helpers.test.ts +0 -1458
- package/src/utils/__tests__/keyboard-actions.test.ts +0 -660
- package/src/utils/__tests__/layout-helpers.test.ts +0 -36
- package/src/utils/__tests__/lazy-response-ads.test.ts +0 -167
- package/src/utils/__tests__/log-shipper.test.ts +0 -53
- package/src/utils/__tests__/markdown-renderer.test.tsx +0 -421
- package/src/utils/__tests__/message-block-helpers.test.ts +0 -1263
- package/src/utils/__tests__/message-updater.test.ts +0 -645
- package/src/utils/__tests__/osc-timeout-scenarios.test.ts +0 -172
- package/src/utils/__tests__/pending-attachments.test.ts +0 -277
- package/src/utils/__tests__/polling-backoff.test.ts +0 -51
- package/src/utils/__tests__/queue-panel-actions.test.ts +0 -148
- package/src/utils/__tests__/run-state-storage.test.ts +0 -919
- package/src/utils/__tests__/safe-json.test.ts +0 -77
- package/src/utils/__tests__/sdk-event-handlers.test.ts +0 -685
- package/src/utils/__tests__/send-message-helpers.test.ts +0 -1898
- package/src/utils/__tests__/send-message-timer.test.ts +0 -64
- package/src/utils/__tests__/settings.test.ts +0 -99
- package/src/utils/__tests__/strings.test.ts +0 -192
- package/src/utils/__tests__/terminal-color-detection.test.ts +0 -425
- package/src/utils/__tests__/terminal-command-broker.test.ts +0 -528
- package/src/utils/__tests__/terminal-enter-detection.test.ts +0 -77
- package/src/utils/__tests__/terminal-io.test.ts +0 -137
- package/src/utils/__tests__/terminal-protocol-controller.test.ts +0 -119
- package/src/utils/__tests__/text-layout.test.ts +0 -82
- package/src/utils/__tests__/theme-platform-detection.test.ts +0 -125
- package/src/utils/__tests__/think-tag-parser.test.ts +0 -159
- package/src/utils/__tests__/trace-writer.test.ts +0 -223
- package/src/utils/__tests__/trim-chat-logs.test.ts +0 -78
- package/src/utils/__tests__/usage-banner-state.test.ts +0 -298
- package/src/utils/__tests__/validation-error-formatting.test.ts +0 -126
- package/src/utils/__tests__/windows-terminal-health.test.ts +0 -101
- package/src/utils/__tests__/write-file-atomic.test.ts +0 -127
- package/vendor/@anvil/common/src/__tests__/agent-validation.test.ts +0 -846
- package/vendor/@anvil/common/src/__tests__/anvil-model-availability.test.ts +0 -101
- package/vendor/@anvil/common/src/__tests__/anvil-models.test.ts +0 -1408
- package/vendor/@anvil/common/src/__tests__/anvil-public-data-use-copy.test.ts +0 -258
- package/vendor/@anvil/common/src/__tests__/anvil-referral-tiers.test.ts +0 -48
- package/vendor/@anvil/common/src/__tests__/anvil-spend-ceilings.test.ts +0 -282
- package/vendor/@anvil/common/src/__tests__/anvil-trust.test.ts +0 -526
- package/vendor/@anvil/common/src/__tests__/deepseek-direct.test.ts +0 -68
- package/vendor/@anvil/common/src/__tests__/disposable-email.test.ts +0 -132
- package/vendor/@anvil/common/src/__tests__/dynamic-agent-template-schema.test.ts +0 -422
- package/vendor/@anvil/common/src/__tests__/env-ci.test.ts +0 -167
- package/vendor/@anvil/common/src/__tests__/env-process.test.ts +0 -145
- package/vendor/@anvil/common/src/__tests__/foreign-client-shipped-agents.test.ts +0 -234
- package/vendor/@anvil/common/src/__tests__/foreign-client-signals.test.ts +0 -379
- package/vendor/@anvil/common/src/__tests__/free-agents.test.ts +0 -807
- package/vendor/@anvil/common/src/__tests__/gravity-capi.test.ts +0 -154
- package/vendor/@anvil/common/src/__tests__/handlesteps-parsing.test.ts +0 -246
- package/vendor/@anvil/common/src/__tests__/kimi-k3-god-only.test.ts +0 -77
- package/vendor/@anvil/common/src/__tests__/model-config.test.ts +0 -89
- package/vendor/@anvil/common/src/__tests__/project-file-tree.test.ts +0 -298
- package/vendor/@anvil/common/src/__tests__/provisioned-model-tiers.test.ts +0 -116
- package/vendor/@anvil/common/src/__tests__/reasoning-effort.test.ts +0 -167
- package/vendor/@anvil/common/src/__tests__/reddit-capi.test.ts +0 -132
- package/vendor/@anvil/common/src/__tests__/response-ad-positions.test.ts +0 -72
- package/vendor/@anvil/common/src/__tests__/user-state.test.ts +0 -30
- package/vendor/@anvil/common/src/constants/__tests__/anvil-onboarding-gate.test.ts +0 -63
- package/vendor/@anvil/common/src/constants/__tests__/anvil-onboarding.test.ts +0 -246
- package/vendor/@anvil/common/src/constants/__tests__/cf-worker-signals.test.ts +0 -106
- package/vendor/@anvil/common/src/testing/TESTING_PATTERNS.md +0 -351
- package/vendor/@anvil/common/src/testing/anvil-offer-invariants.ts +0 -169
- package/vendor/@anvil/common/src/testing/errors.ts +0 -33
- package/vendor/@anvil/common/src/testing/fixtures/agent-runtime.ts +0 -334
- package/vendor/@anvil/common/src/testing/impl/agent-runtime.ts +0 -6
- package/vendor/@anvil/common/src/testing/index.ts +0 -84
- package/vendor/@anvil/common/src/testing/mock-modules.ts +0 -53
- package/vendor/@anvil/common/src/testing/mock-types.ts +0 -123
- package/vendor/@anvil/common/src/testing/mocks/analytics.ts +0 -261
- package/vendor/@anvil/common/src/testing/mocks/child-process.ts +0 -93
- package/vendor/@anvil/common/src/testing/mocks/crypto.ts +0 -218
- package/vendor/@anvil/common/src/testing/mocks/database.ts +0 -337
- package/vendor/@anvil/common/src/testing/mocks/fetch.ts +0 -219
- package/vendor/@anvil/common/src/testing/mocks/filesystem.ts +0 -166
- package/vendor/@anvil/common/src/testing/mocks/index.ts +0 -101
- package/vendor/@anvil/common/src/testing/mocks/logger.ts +0 -135
- package/vendor/@anvil/common/src/testing/mocks/stream.ts +0 -313
- package/vendor/@anvil/common/src/testing/mocks/timers.ts +0 -132
- package/vendor/@anvil/common/src/testing/mocks/tree-sitter.ts +0 -127
- package/vendor/@anvil/common/src/testing/setup.ts +0 -282
- package/vendor/@anvil/common/src/tools/__tests__/compile-tool-definitions.test.ts +0 -34
- package/vendor/@anvil/common/src/tools/params/__tests__/coerce-to-array.test.ts +0 -213
- package/vendor/@anvil/common/src/tools/params/__tests__/read-docs.test.ts +0 -47
- package/vendor/@anvil/common/src/tools/params/__tests__/render-ui.test.ts +0 -65
- package/vendor/@anvil/common/src/tools/params/tool/__tests__/run-terminal-command-timeout.test.ts +0 -49
- package/vendor/@anvil/common/src/types/__tests__/dynamic-agent-template.test.ts +0 -20
- package/vendor/@anvil/common/src/util/__tests__/ad-user-agent.test.ts +0 -26
- package/vendor/@anvil/common/src/util/__tests__/analytics-dispatcher.test.ts +0 -122
- package/vendor/@anvil/common/src/util/__tests__/analytics-log.test.ts +0 -102
- package/vendor/@anvil/common/src/util/__tests__/analytics-sampling.test.ts +0 -143
- package/vendor/@anvil/common/src/util/__tests__/anvil-streak.test.ts +0 -202
- package/vendor/@anvil/common/src/util/__tests__/anvil-usage-summary.test.ts +0 -193
- package/vendor/@anvil/common/src/util/__tests__/axiom-only-log.test.ts +0 -140
- package/vendor/@anvil/common/src/util/__tests__/client-user-agent.test.ts +0 -148
- package/vendor/@anvil/common/src/util/__tests__/engagement-tracker.test.ts +0 -115
- package/vendor/@anvil/common/src/util/__tests__/env-file-path.test.ts +0 -57
- package/vendor/@anvil/common/src/util/__tests__/error-abort.test.ts +0 -774
- package/vendor/@anvil/common/src/util/__tests__/error-api-details.test.ts +0 -206
- package/vendor/@anvil/common/src/util/__tests__/file-read-limits.test.ts +0 -173
- package/vendor/@anvil/common/src/util/__tests__/format-code-search.test.ts +0 -60
- package/vendor/@anvil/common/src/util/__tests__/log-mirror.test.ts +0 -31
- package/vendor/@anvil/common/src/util/__tests__/messages.test.ts +0 -1252
- package/vendor/@anvil/common/src/util/__tests__/partial-json-delta.test.ts +0 -505
- package/vendor/@anvil/common/src/util/__tests__/path.test.ts +0 -22
- package/vendor/@anvil/common/src/util/__tests__/project-ignore.test.ts +0 -90
- package/vendor/@anvil/common/src/util/__tests__/promise.test.ts +0 -325
- package/vendor/@anvil/common/src/util/__tests__/rate-limit.test.ts +0 -28
- package/vendor/@anvil/common/src/util/__tests__/reddit-anvil-retention.test.ts +0 -130
- package/vendor/@anvil/common/src/util/__tests__/saxy.test.ts +0 -1008
- package/vendor/@anvil/common/src/util/__tests__/split-data.test.ts +0 -289
- package/vendor/@anvil/common/src/util/__tests__/string.test.ts +0 -239
- package/vendor/@anvil/common/src/util/__tests__/thread-title.test.ts +0 -70
- package/vendor/@anvil/common/src/util/__tests__/tool-result-media-order.test.ts +0 -108
- package/vendor/@anvil/common/src/util/__tests__/ttft-histogram.test.ts +0 -180
- package/vendor/@anvil/common/src/util/__tests__/with-timeout.test.ts +0 -24
- package/vendor/@anvil/common/src/util/__tests__/zoned-time.test.ts +0 -88
- package/vendor/@anvil/common/src/util/skills.test.ts +0 -44
- package/vendor/@anvil/sdk/dist/index.cjs.map +0 -440
- package/vendor/@anvil/sdk/dist/index.mjs.map +0 -440
|
@@ -34580,9 +34580,15 @@ var handleGlob = async (params) => {
|
|
|
34580
34580
|
|
|
34581
34581
|
// ../common/src/constants/deepseek-direct.ts
|
|
34582
34582
|
var DEEPSEEK_BASE_URL = "https://api.deepseek.com";
|
|
34583
|
+
var MANAGED_GATEWAY_URL = "https://tqolntrdmbbaptmxihtq.supabase.co/functions/v1/cli-agent";
|
|
34583
34584
|
var DEFAULT_DIRECT_DEEPSEEK_MODEL = "deepseek-v4-pro";
|
|
34584
34585
|
var getDirectDeepSeekApiKey = () => process.env.DEEPSEEK_API_KEY;
|
|
34585
34586
|
var isDirectDeepSeekMode = () => Boolean(getDirectDeepSeekApiKey());
|
|
34587
|
+
var getManagedGatewayUrl = () => {
|
|
34588
|
+
const explicit = process.env.ANVIL_GATEWAY_URL?.trim();
|
|
34589
|
+
return (explicit || MANAGED_GATEWAY_URL).replace(/\/+$/, "");
|
|
34590
|
+
};
|
|
34591
|
+
var isManagedGatewayMode = () => Boolean(getManagedGatewayUrl());
|
|
34586
34592
|
function remapModelForDirectDeepSeek(model) {
|
|
34587
34593
|
const override = process.env.DEEPSEEK_MODEL;
|
|
34588
34594
|
if (override)
|
|
@@ -39820,6 +39826,7 @@ async function loopAgentSteps(params) {
|
|
|
39820
39826
|
let totalSteps = 0;
|
|
39821
39827
|
let llmStepNumber = 0;
|
|
39822
39828
|
let nResponses = undefined;
|
|
39829
|
+
const isSimpleGreeting = (value) => typeof value === "string" && /^(hi|hey|hello|hiya|good morning|good afternoon|good evening)[!.? ]*$/i.test(value.trim());
|
|
39823
39830
|
try {
|
|
39824
39831
|
while (true) {
|
|
39825
39832
|
totalSteps++;
|
|
@@ -39840,7 +39847,7 @@ async function loopAgentSteps(params) {
|
|
|
39840
39847
|
const messagesWithStepPrompt = buildArray(...currentAgentState.messageHistory, stepPrompt && userMessage({
|
|
39841
39848
|
content: stepPrompt
|
|
39842
39849
|
}));
|
|
39843
|
-
const estimateContextTokensLocally = () => countTokensMessages(messagesWithStepPrompt) + countTokens2(system) + countTokensJson(toolsForTokenCount);
|
|
39850
|
+
const estimateContextTokensLocally = () => countTokensMessages(messagesWithStepPrompt) + countTokens2(system) + countTokensJson(isSimpleGreeting([...currentAgentState.messageHistory].reverse().find((message) => message.role === "user")?.content) ? [] : toolsForTokenCount);
|
|
39844
39851
|
currentAgentState.contextTokenCount = estimateContextTokensLocally();
|
|
39845
39852
|
if (agentTemplate.compactContext) {
|
|
39846
39853
|
const compacted = maybeCompactHistory({
|
|
@@ -45416,7 +45423,7 @@ async function fetchWithRetry(url2, options, logger2) {
|
|
|
45416
45423
|
}
|
|
45417
45424
|
async function getUserInfoFromApiKey(params) {
|
|
45418
45425
|
const { apiKey, fields, logger: logger2 } = params;
|
|
45419
|
-
if (isDirectDeepSeekMode()) {
|
|
45426
|
+
if (isDirectDeepSeekMode() || isManagedGatewayMode()) {
|
|
45420
45427
|
const localUser = {
|
|
45421
45428
|
id: "local-deepseek",
|
|
45422
45429
|
email: "local@deepseek.local"
|
|
@@ -45538,7 +45545,7 @@ async function fetchAgentFromDatabase(params) {
|
|
|
45538
45545
|
}
|
|
45539
45546
|
async function startAgentRun(params) {
|
|
45540
45547
|
const { apiKey, userId, agentId, ancestorRunIds, logger: logger2 } = params;
|
|
45541
|
-
if (isDirectDeepSeekMode()) {
|
|
45548
|
+
if (isDirectDeepSeekMode() || isManagedGatewayMode()) {
|
|
45542
45549
|
return `local-${crypto.randomUUID()}`;
|
|
45543
45550
|
}
|
|
45544
45551
|
const url2 = new URL(`/api/v1/agent-runs`, getWebsiteUrl());
|
|
@@ -45598,7 +45605,7 @@ async function finishAgentRun(params) {
|
|
|
45598
45605
|
} = params;
|
|
45599
45606
|
const steps = pendingAgentSteps.get(runId) ?? [];
|
|
45600
45607
|
pendingAgentSteps.delete(runId);
|
|
45601
|
-
if (isDirectDeepSeekMode()) {
|
|
45608
|
+
if (isDirectDeepSeekMode() || isManagedGatewayMode()) {
|
|
45602
45609
|
return;
|
|
45603
45610
|
}
|
|
45604
45611
|
const url2 = new URL(`/api/v1/agent-runs`, getWebsiteUrl());
|
|
@@ -47583,8 +47590,13 @@ function fetchWithRetryableNetworkErrors(...args) {
|
|
|
47583
47590
|
function getModelForRequest({
|
|
47584
47591
|
apiKey,
|
|
47585
47592
|
model,
|
|
47586
|
-
userId
|
|
47593
|
+
userId,
|
|
47594
|
+
agentId
|
|
47587
47595
|
}) {
|
|
47596
|
+
const gatewayUrl = getManagedGatewayUrl();
|
|
47597
|
+
if (gatewayUrl) {
|
|
47598
|
+
return getGatewayModel({ apiKey, model, userId, agentId, gatewayUrl });
|
|
47599
|
+
}
|
|
47588
47600
|
const directDeepSeekApiKey = getDirectDeepSeekApiKey();
|
|
47589
47601
|
if (directDeepSeekApiKey) {
|
|
47590
47602
|
return getDeepSeekDirectModel({
|
|
@@ -47643,6 +47655,27 @@ function getModelForRequest({
|
|
|
47643
47655
|
supportsStructuredOutputs: true
|
|
47644
47656
|
});
|
|
47645
47657
|
}
|
|
47658
|
+
function getGatewayModel({
|
|
47659
|
+
apiKey,
|
|
47660
|
+
model,
|
|
47661
|
+
userId,
|
|
47662
|
+
agentId,
|
|
47663
|
+
gatewayUrl
|
|
47664
|
+
}) {
|
|
47665
|
+
return new OpenAICompatibleChatLanguageModel(model, {
|
|
47666
|
+
provider: "anvil",
|
|
47667
|
+
url: ({ path: endpoint }) => `${gatewayUrl}${endpoint.startsWith("/") ? endpoint : `/${endpoint}`}`,
|
|
47668
|
+
headers: () => ({
|
|
47669
|
+
Authorization: `Bearer ${apiKey}`,
|
|
47670
|
+
"user-agent": `ai-sdk/openai-compatible/${VERSION2}/anvil-cli`,
|
|
47671
|
+
...agentId ? { "x-anvil-agent": agentId } : {},
|
|
47672
|
+
...userId ? { [ANVIL_ACTING_USER_HEADER]: userId } : {}
|
|
47673
|
+
}),
|
|
47674
|
+
supportsStructuredOutputs: false,
|
|
47675
|
+
fetch: fetchWithRetryableNetworkErrors,
|
|
47676
|
+
includeUsage: undefined
|
|
47677
|
+
});
|
|
47678
|
+
}
|
|
47646
47679
|
function getDeepSeekDirectModel({
|
|
47647
47680
|
apiKey,
|
|
47648
47681
|
model
|
|
@@ -47804,7 +47837,8 @@ async function* promptAiSdkStream(params) {
|
|
|
47804
47837
|
const aiSDKModel = getModelForRequest({
|
|
47805
47838
|
apiKey: params.apiKey,
|
|
47806
47839
|
model: params.model,
|
|
47807
|
-
userId: params.userId
|
|
47840
|
+
userId: params.userId,
|
|
47841
|
+
agentId: params.agentId
|
|
47808
47842
|
});
|
|
47809
47843
|
const response = import_ai3.streamText({
|
|
47810
47844
|
...streamParams,
|
|
@@ -48128,7 +48162,8 @@ async function promptAiSdk(params) {
|
|
|
48128
48162
|
const aiSDKModel = getModelForRequest({
|
|
48129
48163
|
apiKey: params.apiKey,
|
|
48130
48164
|
model: params.model,
|
|
48131
|
-
userId: params.userId
|
|
48165
|
+
userId: params.userId,
|
|
48166
|
+
agentId: params.agentId
|
|
48132
48167
|
});
|
|
48133
48168
|
const response = await import_ai3.generateText({
|
|
48134
48169
|
...params,
|
|
@@ -48181,7 +48216,8 @@ async function promptAiSdkStructured(params) {
|
|
|
48181
48216
|
const aiSDKModel = getModelForRequest({
|
|
48182
48217
|
apiKey: params.apiKey,
|
|
48183
48218
|
model: params.model,
|
|
48184
|
-
userId: params.userId
|
|
48219
|
+
userId: params.userId,
|
|
48220
|
+
agentId: params.agentId
|
|
48185
48221
|
});
|
|
48186
48222
|
const response = await import_ai3.generateText({
|
|
48187
48223
|
...params,
|
|
@@ -52127,7 +52163,7 @@ var userFromJson = (json) => {
|
|
|
52127
52163
|
};
|
|
52128
52164
|
var getConfigDir = (clientEnv = env) => {
|
|
52129
52165
|
const envSuffix = clientEnv.NEXT_PUBLIC_CB_ENVIRONMENT && clientEnv.NEXT_PUBLIC_CB_ENVIRONMENT !== "prod" ? `-${clientEnv.NEXT_PUBLIC_CB_ENVIRONMENT}` : "";
|
|
52130
|
-
return import_node_path2.default.join(import_os5.default.homedir(), ".config", `
|
|
52166
|
+
return import_node_path2.default.join(import_os5.default.homedir(), ".config", `anvil${envSuffix}`);
|
|
52131
52167
|
};
|
|
52132
52168
|
var getCredentialsPath = (clientEnv = env) => {
|
|
52133
52169
|
return import_node_path2.default.join(getConfigDir(clientEnv), "credentials.json");
|
|
@@ -52293,5 +52329,5 @@ function setTreeSitterWasmPath2(wasmPath) {
|
|
|
52293
52329
|
setTreeSitterWasmPath(wasmPath);
|
|
52294
52330
|
}
|
|
52295
52331
|
|
|
52296
|
-
//# debugId=
|
|
52332
|
+
//# debugId=5C15E7A7E1B3AA1764756E2164756E21
|
|
52297
52333
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -34497,9 +34497,15 @@ var handleGlob = async (params) => {
|
|
|
34497
34497
|
|
|
34498
34498
|
// ../common/src/constants/deepseek-direct.ts
|
|
34499
34499
|
var DEEPSEEK_BASE_URL = "https://api.deepseek.com";
|
|
34500
|
+
var MANAGED_GATEWAY_URL = "https://tqolntrdmbbaptmxihtq.supabase.co/functions/v1/cli-agent";
|
|
34500
34501
|
var DEFAULT_DIRECT_DEEPSEEK_MODEL = "deepseek-v4-pro";
|
|
34501
34502
|
var getDirectDeepSeekApiKey = () => process.env.DEEPSEEK_API_KEY;
|
|
34502
34503
|
var isDirectDeepSeekMode = () => Boolean(getDirectDeepSeekApiKey());
|
|
34504
|
+
var getManagedGatewayUrl = () => {
|
|
34505
|
+
const explicit = process.env.ANVIL_GATEWAY_URL?.trim();
|
|
34506
|
+
return (explicit || MANAGED_GATEWAY_URL).replace(/\/+$/, "");
|
|
34507
|
+
};
|
|
34508
|
+
var isManagedGatewayMode = () => Boolean(getManagedGatewayUrl());
|
|
34503
34509
|
function remapModelForDirectDeepSeek(model) {
|
|
34504
34510
|
const override = process.env.DEEPSEEK_MODEL;
|
|
34505
34511
|
if (override)
|
|
@@ -39737,6 +39743,7 @@ async function loopAgentSteps(params) {
|
|
|
39737
39743
|
let totalSteps = 0;
|
|
39738
39744
|
let llmStepNumber = 0;
|
|
39739
39745
|
let nResponses = undefined;
|
|
39746
|
+
const isSimpleGreeting = (value) => typeof value === "string" && /^(hi|hey|hello|hiya|good morning|good afternoon|good evening)[!.? ]*$/i.test(value.trim());
|
|
39740
39747
|
try {
|
|
39741
39748
|
while (true) {
|
|
39742
39749
|
totalSteps++;
|
|
@@ -39757,7 +39764,7 @@ async function loopAgentSteps(params) {
|
|
|
39757
39764
|
const messagesWithStepPrompt = buildArray(...currentAgentState.messageHistory, stepPrompt && userMessage({
|
|
39758
39765
|
content: stepPrompt
|
|
39759
39766
|
}));
|
|
39760
|
-
const estimateContextTokensLocally = () => countTokensMessages(messagesWithStepPrompt) + countTokens2(system) + countTokensJson(toolsForTokenCount);
|
|
39767
|
+
const estimateContextTokensLocally = () => countTokensMessages(messagesWithStepPrompt) + countTokens2(system) + countTokensJson(isSimpleGreeting([...currentAgentState.messageHistory].reverse().find((message) => message.role === "user")?.content) ? [] : toolsForTokenCount);
|
|
39761
39768
|
currentAgentState.contextTokenCount = estimateContextTokensLocally();
|
|
39762
39769
|
if (agentTemplate.compactContext) {
|
|
39763
39770
|
const compacted = maybeCompactHistory({
|
|
@@ -45333,7 +45340,7 @@ async function fetchWithRetry(url2, options, logger2) {
|
|
|
45333
45340
|
}
|
|
45334
45341
|
async function getUserInfoFromApiKey(params) {
|
|
45335
45342
|
const { apiKey, fields, logger: logger2 } = params;
|
|
45336
|
-
if (isDirectDeepSeekMode()) {
|
|
45343
|
+
if (isDirectDeepSeekMode() || isManagedGatewayMode()) {
|
|
45337
45344
|
const localUser = {
|
|
45338
45345
|
id: "local-deepseek",
|
|
45339
45346
|
email: "local@deepseek.local"
|
|
@@ -45455,7 +45462,7 @@ async function fetchAgentFromDatabase(params) {
|
|
|
45455
45462
|
}
|
|
45456
45463
|
async function startAgentRun(params) {
|
|
45457
45464
|
const { apiKey, userId, agentId, ancestorRunIds, logger: logger2 } = params;
|
|
45458
|
-
if (isDirectDeepSeekMode()) {
|
|
45465
|
+
if (isDirectDeepSeekMode() || isManagedGatewayMode()) {
|
|
45459
45466
|
return `local-${crypto.randomUUID()}`;
|
|
45460
45467
|
}
|
|
45461
45468
|
const url2 = new URL(`/api/v1/agent-runs`, getWebsiteUrl());
|
|
@@ -45515,7 +45522,7 @@ async function finishAgentRun(params) {
|
|
|
45515
45522
|
} = params;
|
|
45516
45523
|
const steps = pendingAgentSteps.get(runId) ?? [];
|
|
45517
45524
|
pendingAgentSteps.delete(runId);
|
|
45518
|
-
if (isDirectDeepSeekMode()) {
|
|
45525
|
+
if (isDirectDeepSeekMode() || isManagedGatewayMode()) {
|
|
45519
45526
|
return;
|
|
45520
45527
|
}
|
|
45521
45528
|
const url2 = new URL(`/api/v1/agent-runs`, getWebsiteUrl());
|
|
@@ -47511,8 +47518,13 @@ function fetchWithRetryableNetworkErrors(...args) {
|
|
|
47511
47518
|
function getModelForRequest({
|
|
47512
47519
|
apiKey,
|
|
47513
47520
|
model,
|
|
47514
|
-
userId
|
|
47521
|
+
userId,
|
|
47522
|
+
agentId
|
|
47515
47523
|
}) {
|
|
47524
|
+
const gatewayUrl = getManagedGatewayUrl();
|
|
47525
|
+
if (gatewayUrl) {
|
|
47526
|
+
return getGatewayModel({ apiKey, model, userId, agentId, gatewayUrl });
|
|
47527
|
+
}
|
|
47516
47528
|
const directDeepSeekApiKey = getDirectDeepSeekApiKey();
|
|
47517
47529
|
if (directDeepSeekApiKey) {
|
|
47518
47530
|
return getDeepSeekDirectModel({
|
|
@@ -47571,6 +47583,27 @@ function getModelForRequest({
|
|
|
47571
47583
|
supportsStructuredOutputs: true
|
|
47572
47584
|
});
|
|
47573
47585
|
}
|
|
47586
|
+
function getGatewayModel({
|
|
47587
|
+
apiKey,
|
|
47588
|
+
model,
|
|
47589
|
+
userId,
|
|
47590
|
+
agentId,
|
|
47591
|
+
gatewayUrl
|
|
47592
|
+
}) {
|
|
47593
|
+
return new OpenAICompatibleChatLanguageModel(model, {
|
|
47594
|
+
provider: "anvil",
|
|
47595
|
+
url: ({ path: endpoint }) => `${gatewayUrl}${endpoint.startsWith("/") ? endpoint : `/${endpoint}`}`,
|
|
47596
|
+
headers: () => ({
|
|
47597
|
+
Authorization: `Bearer ${apiKey}`,
|
|
47598
|
+
"user-agent": `ai-sdk/openai-compatible/${VERSION2}/anvil-cli`,
|
|
47599
|
+
...agentId ? { "x-anvil-agent": agentId } : {},
|
|
47600
|
+
...userId ? { [ANVIL_ACTING_USER_HEADER]: userId } : {}
|
|
47601
|
+
}),
|
|
47602
|
+
supportsStructuredOutputs: false,
|
|
47603
|
+
fetch: fetchWithRetryableNetworkErrors,
|
|
47604
|
+
includeUsage: undefined
|
|
47605
|
+
});
|
|
47606
|
+
}
|
|
47574
47607
|
function getDeepSeekDirectModel({
|
|
47575
47608
|
apiKey,
|
|
47576
47609
|
model
|
|
@@ -47732,7 +47765,8 @@ async function* promptAiSdkStream(params) {
|
|
|
47732
47765
|
const aiSDKModel = getModelForRequest({
|
|
47733
47766
|
apiKey: params.apiKey,
|
|
47734
47767
|
model: params.model,
|
|
47735
|
-
userId: params.userId
|
|
47768
|
+
userId: params.userId,
|
|
47769
|
+
agentId: params.agentId
|
|
47736
47770
|
});
|
|
47737
47771
|
const response = streamText({
|
|
47738
47772
|
...streamParams,
|
|
@@ -48056,7 +48090,8 @@ async function promptAiSdk(params) {
|
|
|
48056
48090
|
const aiSDKModel = getModelForRequest({
|
|
48057
48091
|
apiKey: params.apiKey,
|
|
48058
48092
|
model: params.model,
|
|
48059
|
-
userId: params.userId
|
|
48093
|
+
userId: params.userId,
|
|
48094
|
+
agentId: params.agentId
|
|
48060
48095
|
});
|
|
48061
48096
|
const response = await generateText({
|
|
48062
48097
|
...params,
|
|
@@ -48109,7 +48144,8 @@ async function promptAiSdkStructured(params) {
|
|
|
48109
48144
|
const aiSDKModel = getModelForRequest({
|
|
48110
48145
|
apiKey: params.apiKey,
|
|
48111
48146
|
model: params.model,
|
|
48112
|
-
userId: params.userId
|
|
48147
|
+
userId: params.userId,
|
|
48148
|
+
agentId: params.agentId
|
|
48113
48149
|
});
|
|
48114
48150
|
const response = await generateText({
|
|
48115
48151
|
...params,
|
|
@@ -52055,7 +52091,7 @@ var userFromJson = (json) => {
|
|
|
52055
52091
|
};
|
|
52056
52092
|
var getConfigDir = (clientEnv = env) => {
|
|
52057
52093
|
const envSuffix = clientEnv.NEXT_PUBLIC_CB_ENVIRONMENT && clientEnv.NEXT_PUBLIC_CB_ENVIRONMENT !== "prod" ? `-${clientEnv.NEXT_PUBLIC_CB_ENVIRONMENT}` : "";
|
|
52058
|
-
return path22.join(os8.homedir(), ".config", `
|
|
52094
|
+
return path22.join(os8.homedir(), ".config", `anvil${envSuffix}`);
|
|
52059
52095
|
};
|
|
52060
52096
|
var getCredentialsPath = (clientEnv = env) => {
|
|
52061
52097
|
return path22.join(getConfigDir(clientEnv), "credentials.json");
|
|
@@ -52286,5 +52322,5 @@ export {
|
|
|
52286
52322
|
ANVIL_BINARY
|
|
52287
52323
|
};
|
|
52288
52324
|
|
|
52289
|
-
//# debugId=
|
|
52325
|
+
//# debugId=B50622D584101C2364756E2164756E21
|
|
52290
52326
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test'
|
|
2
|
-
|
|
3
|
-
describe('anvil command aliases', () => {
|
|
4
|
-
test('/model aliases /end-session in anvil', () => {
|
|
5
|
-
const slashCommandsUrl = new URL(
|
|
6
|
-
'../../data/slash-commands.ts',
|
|
7
|
-
import.meta.url,
|
|
8
|
-
).href
|
|
9
|
-
const commandRegistryUrl = new URL(
|
|
10
|
-
'../command-registry.ts',
|
|
11
|
-
import.meta.url,
|
|
12
|
-
).href
|
|
13
|
-
|
|
14
|
-
const result = Bun.spawnSync({
|
|
15
|
-
cmd: [
|
|
16
|
-
'bun',
|
|
17
|
-
'--eval',
|
|
18
|
-
`
|
|
19
|
-
import { SLASH_COMMANDS } from ${JSON.stringify(slashCommandsUrl)}
|
|
20
|
-
import { findCommand } from ${JSON.stringify(commandRegistryUrl)}
|
|
21
|
-
|
|
22
|
-
const endSession = SLASH_COMMANDS.find((cmd) => cmd.id === 'end-session')
|
|
23
|
-
if (!endSession) throw new Error('end-session slash command missing')
|
|
24
|
-
if (!endSession.aliases?.includes('model')) {
|
|
25
|
-
throw new Error('end-session slash command is missing model alias')
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const modelCommand = findCommand('model')
|
|
29
|
-
if (!modelCommand) throw new Error('model command alias missing')
|
|
30
|
-
if (modelCommand.name !== 'end-session') {
|
|
31
|
-
throw new Error('model alias did not resolve to end-session')
|
|
32
|
-
}
|
|
33
|
-
`,
|
|
34
|
-
],
|
|
35
|
-
cwd: process.cwd(),
|
|
36
|
-
env: {
|
|
37
|
-
...process.env,
|
|
38
|
-
ANVIL_MODE: 'true',
|
|
39
|
-
NODE_ENV: 'test',
|
|
40
|
-
NEXT_PUBLIC_CB_ENVIRONMENT: 'test',
|
|
41
|
-
NEXT_PUBLIC_ANVIL_APP_URL: 'https://app.codebuff.test',
|
|
42
|
-
NEXT_PUBLIC_SUPPORT_EMAIL: 'support@codebuff.test',
|
|
43
|
-
NEXT_PUBLIC_POSTHOG_API_KEY: 'phc_test_key',
|
|
44
|
-
NEXT_PUBLIC_POSTHOG_HOST_URL: 'https://posthog.codebuff.test',
|
|
45
|
-
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY: 'pk_test_123',
|
|
46
|
-
NEXT_PUBLIC_STRIPE_CUSTOMER_PORTAL: 'https://stripe.codebuff.test',
|
|
47
|
-
NEXT_PUBLIC_WEB_PORT: '3000',
|
|
48
|
-
},
|
|
49
|
-
stderr: 'pipe',
|
|
50
|
-
stdout: 'pipe',
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
const stderr = new TextDecoder().decode(result.stderr)
|
|
54
|
-
expect(result.exitCode, stderr).toBe(0)
|
|
55
|
-
}, 15_000)
|
|
56
|
-
})
|