@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.
Files changed (238) hide show
  1. package/bin/anvil.js +18 -0
  2. package/package.json +13 -6
  3. package/src/agents/bundled-agents.generated.ts +1 -1
  4. package/src/index.tsx +27 -4
  5. package/src/login/plain-login.ts +60 -0
  6. package/src/login/supabase-auth.ts +346 -0
  7. package/src/utils/anvil-client.ts +4 -0
  8. package/src/utils/auth.ts +16 -4
  9. package/src/utils/config-dir.ts +1 -1
  10. package/vendor/@anvil/common/src/constants/deepseek-direct.ts +30 -1
  11. package/vendor/@anvil/common/src/util/project-ignore.ts +4 -3
  12. package/vendor/@anvil/sdk/dist/index.cjs +46 -10
  13. package/vendor/@anvil/sdk/dist/index.mjs +46 -10
  14. package/src/commands/__tests__/anvil-command-aliases.test.ts +0 -56
  15. package/src/commands/__tests__/bash-command.test.ts +0 -445
  16. package/src/commands/__tests__/command-args.test.ts +0 -349
  17. package/src/commands/__tests__/copy-conversation-clipboard.test.ts +0 -108
  18. package/src/commands/__tests__/copy-conversation.test.ts +0 -226
  19. package/src/commands/__tests__/diagnostics-command.test.ts +0 -35
  20. package/src/commands/__tests__/image.test.ts +0 -99
  21. package/src/commands/__tests__/init.test.ts +0 -456
  22. package/src/commands/__tests__/new-command-rotates-chat.test.ts +0 -91
  23. package/src/commands/__tests__/process-diagnostics.test.ts +0 -54
  24. package/src/commands/__tests__/prompt-builders.test.ts +0 -28
  25. package/src/commands/__tests__/router-input.test.ts +0 -298
  26. package/src/components/__tests__/ad-banner.test.tsx +0 -83
  27. package/src/components/__tests__/anvil-landing-heading-row.test.tsx +0 -91
  28. package/src/components/__tests__/anvil-model-selector.test.tsx +0 -519
  29. package/src/components/__tests__/anvil-offer-invariants.test.ts +0 -54
  30. package/src/components/__tests__/anvil-takeover-prompt.test.tsx +0 -212
  31. package/src/components/__tests__/chat-input-bar.test.tsx +0 -130
  32. package/src/components/__tests__/grid-layout.integration.test.tsx +0 -304
  33. package/src/components/__tests__/grid-layout.test.tsx +0 -1051
  34. package/src/components/__tests__/message-block.completion.test.tsx +0 -104
  35. package/src/components/__tests__/message-block.streaming.test.tsx +0 -78
  36. package/src/components/__tests__/message-with-agents.test.tsx +0 -579
  37. package/src/components/__tests__/multiline-input.test.tsx +0 -1132
  38. package/src/components/__tests__/queue-panel.test.tsx +0 -398
  39. package/src/components/__tests__/selectable-list.test.ts +0 -232
  40. package/src/components/__tests__/status-bar.test.tsx +0 -44
  41. package/src/components/__tests__/status-indicator.test.tsx +0 -204
  42. package/src/components/__tests__/terminal-thinking-orb.test.tsx +0 -111
  43. package/src/components/__tests__/user-error-banner.test.tsx +0 -102
  44. package/src/components/ask-user/__tests__/multiple-choice-form.test.ts +0 -432
  45. package/src/components/ask-user/__tests__/validation.test.ts +0 -213
  46. package/src/components/tools/__tests__/apply-patch.test.tsx +0 -84
  47. package/src/components/tools/__tests__/code-search.test.tsx +0 -45
  48. package/src/components/tools/__tests__/gravity-index.test.ts +0 -76
  49. package/src/components/tools/__tests__/render-ui.test.tsx +0 -92
  50. package/src/components/tools/__tests__/run-terminal-command.test.ts +0 -233
  51. package/src/contexts/__tests__/chat-runtime-context.test.tsx +0 -149
  52. package/src/data/slash-commands.test.ts +0 -24
  53. package/src/hooks/__tests__/holds-live-anvil-slot.test.ts +0 -49
  54. package/src/hooks/__tests__/session-fetch-signal.test.ts +0 -63
  55. package/src/hooks/__tests__/use-activity-query.test.ts +0 -1000
  56. package/src/hooks/__tests__/use-ask-user-bridge.test.ts +0 -176
  57. package/src/hooks/__tests__/use-auth-query.test.ts +0 -21
  58. package/src/hooks/__tests__/use-chat-input-remount.test.tsx +0 -66
  59. package/src/hooks/__tests__/use-clipboard.test.tsx +0 -73
  60. package/src/hooks/__tests__/use-connection-status.test.ts +0 -112
  61. package/src/hooks/__tests__/use-directory-browser.test.ts +0 -203
  62. package/src/hooks/__tests__/use-gravity-ad.test.ts +0 -73
  63. package/src/hooks/__tests__/use-grid-layout.test.ts +0 -349
  64. package/src/hooks/__tests__/use-input-history.test.ts +0 -699
  65. package/src/hooks/__tests__/use-message-queue-editing.test.tsx +0 -209
  66. package/src/hooks/__tests__/use-message-queue.test.tsx +0 -71
  67. package/src/hooks/__tests__/use-path-tab-completion.test.ts +0 -315
  68. package/src/hooks/__tests__/use-queue-controls.test.ts +0 -68
  69. package/src/hooks/__tests__/use-queue-ui.test.tsx +0 -83
  70. package/src/hooks/__tests__/use-searchable-list.test.ts +0 -359
  71. package/src/hooks/__tests__/use-send-message-timer.test.ts +0 -146
  72. package/src/hooks/__tests__/use-suggestion-engine-mention.test.ts +0 -361
  73. package/src/hooks/__tests__/use-suggestion-engine.test.ts +0 -485
  74. package/src/hooks/__tests__/use-terminal-focus.test.ts +0 -66
  75. package/src/hooks/__tests__/use-terminal-layout.test.ts +0 -675
  76. package/src/hooks/__tests__/use-timeout.test.ts +0 -330
  77. package/src/hooks/__tests__/use-usage-query.test.ts +0 -502
  78. package/src/hooks/__tests__/use-user-details-query.test.ts +0 -195
  79. package/src/hooks/helpers/__tests__/send-message.test.ts +0 -1918
  80. package/src/init/__tests__/init-direnv.test.ts +0 -526
  81. package/src/state/__tests__/chat-store-focus.test.ts +0 -22
  82. package/src/state/__tests__/feedback-store.test.ts +0 -257
  83. package/src/utils/__tests__/active-run.test.ts +0 -140
  84. package/src/utils/__tests__/activity-tracker.test.ts +0 -440
  85. package/src/utils/__tests__/agent-display.test.ts +0 -139
  86. package/src/utils/__tests__/analytics-client.test.ts +0 -262
  87. package/src/utils/__tests__/anonymous-id.test.ts +0 -74
  88. package/src/utils/__tests__/anvil-api.test.ts +0 -578
  89. package/src/utils/__tests__/anvil-instance-owner.test.ts +0 -69
  90. package/src/utils/__tests__/anvil-model-navigation.test.ts +0 -102
  91. package/src/utils/__tests__/anvil-premium-reset.test.ts +0 -79
  92. package/src/utils/__tests__/anvil-referral-cache.test.ts +0 -116
  93. package/src/utils/__tests__/anvil-session-api.test.ts +0 -215
  94. package/src/utils/__tests__/anvil-session-display.test.ts +0 -23
  95. package/src/utils/__tests__/anvil-streak-line.test.ts +0 -217
  96. package/src/utils/__tests__/arrays.test.ts +0 -264
  97. package/src/utils/__tests__/bash-context-processor.test.ts +0 -38
  98. package/src/utils/__tests__/block-processor.test.ts +0 -810
  99. package/src/utils/__tests__/chat-history.test.ts +0 -203
  100. package/src/utils/__tests__/chat-input-key-intercept.test.ts +0 -40
  101. package/src/utils/__tests__/chat-meta.test.ts +0 -130
  102. package/src/utils/__tests__/clipboard-linux.test.ts +0 -359
  103. package/src/utils/__tests__/clipboard.test.ts +0 -910
  104. package/src/utils/__tests__/code-search-summary.test.ts +0 -84
  105. package/src/utils/__tests__/collapse-helpers.test.ts +0 -1109
  106. package/src/utils/__tests__/error-handling.test.ts +0 -658
  107. package/src/utils/__tests__/exit-cleanly.test.ts +0 -110
  108. package/src/utils/__tests__/feedback-helpers.test.ts +0 -444
  109. package/src/utils/__tests__/feedback-submission.test.ts +0 -26
  110. package/src/utils/__tests__/fetch-usage.test.ts +0 -355
  111. package/src/utils/__tests__/fingerprint.test.ts +0 -144
  112. package/src/utils/__tests__/fixtures/terminal-command-broker-child.ts +0 -7
  113. package/src/utils/__tests__/fixtures/terminal-command-broker-entry.ts +0 -3
  114. package/src/utils/__tests__/fixtures/terminal-command-broker-owner.ts +0 -33
  115. package/src/utils/__tests__/format-elapsed-time.test.ts +0 -103
  116. package/src/utils/__tests__/format-timeout.test.ts +0 -87
  117. package/src/utils/__tests__/image-dimensions.test.ts +0 -249
  118. package/src/utils/__tests__/image-processor.test.ts +0 -209
  119. package/src/utils/__tests__/implementor-helpers.test.ts +0 -1458
  120. package/src/utils/__tests__/keyboard-actions.test.ts +0 -660
  121. package/src/utils/__tests__/layout-helpers.test.ts +0 -36
  122. package/src/utils/__tests__/lazy-response-ads.test.ts +0 -167
  123. package/src/utils/__tests__/log-shipper.test.ts +0 -53
  124. package/src/utils/__tests__/markdown-renderer.test.tsx +0 -421
  125. package/src/utils/__tests__/message-block-helpers.test.ts +0 -1263
  126. package/src/utils/__tests__/message-updater.test.ts +0 -645
  127. package/src/utils/__tests__/osc-timeout-scenarios.test.ts +0 -172
  128. package/src/utils/__tests__/pending-attachments.test.ts +0 -277
  129. package/src/utils/__tests__/polling-backoff.test.ts +0 -51
  130. package/src/utils/__tests__/queue-panel-actions.test.ts +0 -148
  131. package/src/utils/__tests__/run-state-storage.test.ts +0 -919
  132. package/src/utils/__tests__/safe-json.test.ts +0 -77
  133. package/src/utils/__tests__/sdk-event-handlers.test.ts +0 -685
  134. package/src/utils/__tests__/send-message-helpers.test.ts +0 -1898
  135. package/src/utils/__tests__/send-message-timer.test.ts +0 -64
  136. package/src/utils/__tests__/settings.test.ts +0 -99
  137. package/src/utils/__tests__/strings.test.ts +0 -192
  138. package/src/utils/__tests__/terminal-color-detection.test.ts +0 -425
  139. package/src/utils/__tests__/terminal-command-broker.test.ts +0 -528
  140. package/src/utils/__tests__/terminal-enter-detection.test.ts +0 -77
  141. package/src/utils/__tests__/terminal-io.test.ts +0 -137
  142. package/src/utils/__tests__/terminal-protocol-controller.test.ts +0 -119
  143. package/src/utils/__tests__/text-layout.test.ts +0 -82
  144. package/src/utils/__tests__/theme-platform-detection.test.ts +0 -125
  145. package/src/utils/__tests__/think-tag-parser.test.ts +0 -159
  146. package/src/utils/__tests__/trace-writer.test.ts +0 -223
  147. package/src/utils/__tests__/trim-chat-logs.test.ts +0 -78
  148. package/src/utils/__tests__/usage-banner-state.test.ts +0 -298
  149. package/src/utils/__tests__/validation-error-formatting.test.ts +0 -126
  150. package/src/utils/__tests__/windows-terminal-health.test.ts +0 -101
  151. package/src/utils/__tests__/write-file-atomic.test.ts +0 -127
  152. package/vendor/@anvil/common/src/__tests__/agent-validation.test.ts +0 -846
  153. package/vendor/@anvil/common/src/__tests__/anvil-model-availability.test.ts +0 -101
  154. package/vendor/@anvil/common/src/__tests__/anvil-models.test.ts +0 -1408
  155. package/vendor/@anvil/common/src/__tests__/anvil-public-data-use-copy.test.ts +0 -258
  156. package/vendor/@anvil/common/src/__tests__/anvil-referral-tiers.test.ts +0 -48
  157. package/vendor/@anvil/common/src/__tests__/anvil-spend-ceilings.test.ts +0 -282
  158. package/vendor/@anvil/common/src/__tests__/anvil-trust.test.ts +0 -526
  159. package/vendor/@anvil/common/src/__tests__/deepseek-direct.test.ts +0 -68
  160. package/vendor/@anvil/common/src/__tests__/disposable-email.test.ts +0 -132
  161. package/vendor/@anvil/common/src/__tests__/dynamic-agent-template-schema.test.ts +0 -422
  162. package/vendor/@anvil/common/src/__tests__/env-ci.test.ts +0 -167
  163. package/vendor/@anvil/common/src/__tests__/env-process.test.ts +0 -145
  164. package/vendor/@anvil/common/src/__tests__/foreign-client-shipped-agents.test.ts +0 -234
  165. package/vendor/@anvil/common/src/__tests__/foreign-client-signals.test.ts +0 -379
  166. package/vendor/@anvil/common/src/__tests__/free-agents.test.ts +0 -807
  167. package/vendor/@anvil/common/src/__tests__/gravity-capi.test.ts +0 -154
  168. package/vendor/@anvil/common/src/__tests__/handlesteps-parsing.test.ts +0 -246
  169. package/vendor/@anvil/common/src/__tests__/kimi-k3-god-only.test.ts +0 -77
  170. package/vendor/@anvil/common/src/__tests__/model-config.test.ts +0 -89
  171. package/vendor/@anvil/common/src/__tests__/project-file-tree.test.ts +0 -298
  172. package/vendor/@anvil/common/src/__tests__/provisioned-model-tiers.test.ts +0 -116
  173. package/vendor/@anvil/common/src/__tests__/reasoning-effort.test.ts +0 -167
  174. package/vendor/@anvil/common/src/__tests__/reddit-capi.test.ts +0 -132
  175. package/vendor/@anvil/common/src/__tests__/response-ad-positions.test.ts +0 -72
  176. package/vendor/@anvil/common/src/__tests__/user-state.test.ts +0 -30
  177. package/vendor/@anvil/common/src/constants/__tests__/anvil-onboarding-gate.test.ts +0 -63
  178. package/vendor/@anvil/common/src/constants/__tests__/anvil-onboarding.test.ts +0 -246
  179. package/vendor/@anvil/common/src/constants/__tests__/cf-worker-signals.test.ts +0 -106
  180. package/vendor/@anvil/common/src/testing/TESTING_PATTERNS.md +0 -351
  181. package/vendor/@anvil/common/src/testing/anvil-offer-invariants.ts +0 -169
  182. package/vendor/@anvil/common/src/testing/errors.ts +0 -33
  183. package/vendor/@anvil/common/src/testing/fixtures/agent-runtime.ts +0 -334
  184. package/vendor/@anvil/common/src/testing/impl/agent-runtime.ts +0 -6
  185. package/vendor/@anvil/common/src/testing/index.ts +0 -84
  186. package/vendor/@anvil/common/src/testing/mock-modules.ts +0 -53
  187. package/vendor/@anvil/common/src/testing/mock-types.ts +0 -123
  188. package/vendor/@anvil/common/src/testing/mocks/analytics.ts +0 -261
  189. package/vendor/@anvil/common/src/testing/mocks/child-process.ts +0 -93
  190. package/vendor/@anvil/common/src/testing/mocks/crypto.ts +0 -218
  191. package/vendor/@anvil/common/src/testing/mocks/database.ts +0 -337
  192. package/vendor/@anvil/common/src/testing/mocks/fetch.ts +0 -219
  193. package/vendor/@anvil/common/src/testing/mocks/filesystem.ts +0 -166
  194. package/vendor/@anvil/common/src/testing/mocks/index.ts +0 -101
  195. package/vendor/@anvil/common/src/testing/mocks/logger.ts +0 -135
  196. package/vendor/@anvil/common/src/testing/mocks/stream.ts +0 -313
  197. package/vendor/@anvil/common/src/testing/mocks/timers.ts +0 -132
  198. package/vendor/@anvil/common/src/testing/mocks/tree-sitter.ts +0 -127
  199. package/vendor/@anvil/common/src/testing/setup.ts +0 -282
  200. package/vendor/@anvil/common/src/tools/__tests__/compile-tool-definitions.test.ts +0 -34
  201. package/vendor/@anvil/common/src/tools/params/__tests__/coerce-to-array.test.ts +0 -213
  202. package/vendor/@anvil/common/src/tools/params/__tests__/read-docs.test.ts +0 -47
  203. package/vendor/@anvil/common/src/tools/params/__tests__/render-ui.test.ts +0 -65
  204. package/vendor/@anvil/common/src/tools/params/tool/__tests__/run-terminal-command-timeout.test.ts +0 -49
  205. package/vendor/@anvil/common/src/types/__tests__/dynamic-agent-template.test.ts +0 -20
  206. package/vendor/@anvil/common/src/util/__tests__/ad-user-agent.test.ts +0 -26
  207. package/vendor/@anvil/common/src/util/__tests__/analytics-dispatcher.test.ts +0 -122
  208. package/vendor/@anvil/common/src/util/__tests__/analytics-log.test.ts +0 -102
  209. package/vendor/@anvil/common/src/util/__tests__/analytics-sampling.test.ts +0 -143
  210. package/vendor/@anvil/common/src/util/__tests__/anvil-streak.test.ts +0 -202
  211. package/vendor/@anvil/common/src/util/__tests__/anvil-usage-summary.test.ts +0 -193
  212. package/vendor/@anvil/common/src/util/__tests__/axiom-only-log.test.ts +0 -140
  213. package/vendor/@anvil/common/src/util/__tests__/client-user-agent.test.ts +0 -148
  214. package/vendor/@anvil/common/src/util/__tests__/engagement-tracker.test.ts +0 -115
  215. package/vendor/@anvil/common/src/util/__tests__/env-file-path.test.ts +0 -57
  216. package/vendor/@anvil/common/src/util/__tests__/error-abort.test.ts +0 -774
  217. package/vendor/@anvil/common/src/util/__tests__/error-api-details.test.ts +0 -206
  218. package/vendor/@anvil/common/src/util/__tests__/file-read-limits.test.ts +0 -173
  219. package/vendor/@anvil/common/src/util/__tests__/format-code-search.test.ts +0 -60
  220. package/vendor/@anvil/common/src/util/__tests__/log-mirror.test.ts +0 -31
  221. package/vendor/@anvil/common/src/util/__tests__/messages.test.ts +0 -1252
  222. package/vendor/@anvil/common/src/util/__tests__/partial-json-delta.test.ts +0 -505
  223. package/vendor/@anvil/common/src/util/__tests__/path.test.ts +0 -22
  224. package/vendor/@anvil/common/src/util/__tests__/project-ignore.test.ts +0 -90
  225. package/vendor/@anvil/common/src/util/__tests__/promise.test.ts +0 -325
  226. package/vendor/@anvil/common/src/util/__tests__/rate-limit.test.ts +0 -28
  227. package/vendor/@anvil/common/src/util/__tests__/reddit-anvil-retention.test.ts +0 -130
  228. package/vendor/@anvil/common/src/util/__tests__/saxy.test.ts +0 -1008
  229. package/vendor/@anvil/common/src/util/__tests__/split-data.test.ts +0 -289
  230. package/vendor/@anvil/common/src/util/__tests__/string.test.ts +0 -239
  231. package/vendor/@anvil/common/src/util/__tests__/thread-title.test.ts +0 -70
  232. package/vendor/@anvil/common/src/util/__tests__/tool-result-media-order.test.ts +0 -108
  233. package/vendor/@anvil/common/src/util/__tests__/ttft-histogram.test.ts +0 -180
  234. package/vendor/@anvil/common/src/util/__tests__/with-timeout.test.ts +0 -24
  235. package/vendor/@anvil/common/src/util/__tests__/zoned-time.test.ts +0 -88
  236. package/vendor/@anvil/common/src/util/skills.test.ts +0 -44
  237. package/vendor/@anvil/sdk/dist/index.cjs.map +0 -440
  238. 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", `manicode${envSuffix}`);
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=68626CF23310DED964756E2164756E21
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", `manicode${envSuffix}`);
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=E0C66561A06A653864756E2164756E21
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
- })