@alumbwe/anvil 1.0.13 → 1.0.14

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/dist/bundled.js CHANGED
@@ -66519,6 +66519,80 @@ var init_src = __esm(() => {
66519
66519
  init_credentials2();
66520
66520
  });
66521
66521
 
66522
+ // src/utils/constants.ts
66523
+ var IS_FREEBUFF, IS_DIRECT_MODE2, BACKEND_DISABLED_MESSAGE = "Anvil runs in direct mode: hosted accounts, credits, and login are disabled.", MISSING_PROVIDER_KEY_MESSAGE = "Set DEEPSEEK_API_KEY to your DeepSeek API key, then restart Anvil. You can create one at https://platform.deepseek.com/api_keys", END_SESSION_MESSAGE = "Ending session and returning to the model picker\u2026", HIDDEN_AGENT_IDS, COLLAPSED_BY_DEFAULT_TOOL_NAMES, shouldCollapseToolByDefault = (toolName37) => {
66524
+ return COLLAPSED_BY_DEFAULT_TOOL_NAMES.includes(toolName37);
66525
+ }, shouldHideAgent = (agentId) => {
66526
+ return HIDDEN_AGENT_IDS.some((hiddenId) => agentId.includes(hiddenId));
66527
+ }, COLLAPSED_BY_DEFAULT_AGENT_IDS, shouldCollapseByDefault = (agentType) => {
66528
+ return COLLAPSED_BY_DEFAULT_AGENT_IDS.some((collapsedId) => agentType.includes(collapsedId));
66529
+ }, PARENT_CHILD_COLLAPSE_RULES, shouldCollapseForParent = (childAgentType, parentAgentType) => {
66530
+ if (!parentAgentType) {
66531
+ return false;
66532
+ }
66533
+ for (const [parentPattern, childPatterns] of Object.entries(PARENT_CHILD_COLLAPSE_RULES)) {
66534
+ if (parentAgentType.includes(parentPattern)) {
66535
+ for (const childPattern of childPatterns) {
66536
+ if (childAgentType.includes(childPattern)) {
66537
+ return true;
66538
+ }
66539
+ }
66540
+ }
66541
+ }
66542
+ return false;
66543
+ }, SIMPLE_TEXT_AGENT_IDS, shouldRenderAsSimpleText = (agentType) => {
66544
+ return SIMPLE_TEXT_AGENT_IDS.some((simpleTextId) => agentType.includes(simpleTextId));
66545
+ }, MULTI_PROMPT_EDITOR_IDS, isMultiPromptEditor = (agentType) => {
66546
+ return MULTI_PROMPT_EDITOR_IDS.some((id) => agentType.includes(id));
66547
+ }, CLI_HARNESS = "base3", HARNESS_MODE_IDS, AGENT_MODE_TO_ID, AGENT_MODES, AGENT_MODE_TO_COST_MODE;
66548
+ var init_constants6 = __esm(() => {
66549
+ init_env();
66550
+ IS_FREEBUFF = getCliEnv().FREEBUFF_MODE === "true";
66551
+ IS_DIRECT_MODE2 = !IS_FREEBUFF;
66552
+ HIDDEN_AGENT_IDS = ["context-pruner"];
66553
+ COLLAPSED_BY_DEFAULT_TOOL_NAMES = [
66554
+ "set_output"
66555
+ ];
66556
+ COLLAPSED_BY_DEFAULT_AGENT_IDS = [
66557
+ "file-picker",
66558
+ "code-reviewer-selector",
66559
+ "thinker-selector",
66560
+ "best-of-n-selector",
66561
+ "basher",
66562
+ "code-searcher",
66563
+ "directory-lister",
66564
+ "glob-matcher",
66565
+ "researcher-web",
66566
+ "researcher-docs"
66567
+ ];
66568
+ PARENT_CHILD_COLLAPSE_RULES = {
66569
+ "code-reviewer-multi-prompt": ["code-reviewer"]
66570
+ };
66571
+ SIMPLE_TEXT_AGENT_IDS = [
66572
+ "best-of-n-selector",
66573
+ "best-of-n-selector-gemini",
66574
+ "best-of-n-selector2"
66575
+ ];
66576
+ MULTI_PROMPT_EDITOR_IDS = ["editor-multi-prompt"];
66577
+ HARNESS_MODE_IDS = {
66578
+ base2: { DEFAULT: "base2", LITE: "base2-lite" },
66579
+ base3: { DEFAULT: "base3", LITE: "base3-lite" }
66580
+ };
66581
+ AGENT_MODE_TO_ID = {
66582
+ DEFAULT: HARNESS_MODE_IDS[CLI_HARNESS].DEFAULT,
66583
+ LITE: IS_FREEBUFF ? "base2-free" : HARNESS_MODE_IDS[CLI_HARNESS].LITE,
66584
+ MAX: "base2-max",
66585
+ PLAN: "base2-plan"
66586
+ };
66587
+ AGENT_MODES = Object.keys(AGENT_MODE_TO_ID);
66588
+ AGENT_MODE_TO_COST_MODE = {
66589
+ DEFAULT: "normal",
66590
+ LITE: IS_FREEBUFF ? "free" : "lite",
66591
+ MAX: "max",
66592
+ PLAN: "normal"
66593
+ };
66594
+ });
66595
+
66522
66596
  // src/utils/anvil-api.ts
66523
66597
  function getTlsCertificateError(error, depth = 0) {
66524
66598
  const code = error && typeof error === "object" && "code" in error && typeof error.code === "string" ? error.code : undefined;
@@ -66556,6 +66630,9 @@ function createAnvilApiClient(config = {}) {
66556
66630
  ...defaultRetryConfig
66557
66631
  };
66558
66632
  async function request(method, path24, body, options2 = {}) {
66633
+ if (IS_DIRECT_MODE2) {
66634
+ return { ok: false, status: 0, error: BACKEND_DISABLED_MESSAGE };
66635
+ }
66559
66636
  const {
66560
66637
  query,
66561
66638
  includeAuth = true,
@@ -66738,6 +66815,7 @@ var DEFAULT_RETRY_CONFIG, TLS_CERTIFICATE_ERROR_CODES, sleep = (ms) => new Promi
66738
66815
  }, sharedClient = null, sharedAuthToken, clientCreatedWithToken;
66739
66816
  var init_anvil_api = __esm(() => {
66740
66817
  init_src();
66818
+ init_constants6();
66741
66819
  DEFAULT_RETRY_CONFIG = {
66742
66820
  maxRetries: 3,
66743
66821
  initialDelayMs: 1000,
@@ -66782,6 +66860,8 @@ function createClientLogFlusher(deps) {
66782
66860
  return { flush, drain };
66783
66861
  }
66784
66862
  function enabled() {
66863
+ if (IS_DIRECT_MODE2)
66864
+ return false;
66785
66865
  const flag = getCliEnv().ANVIL_SHIP_LOGS;
66786
66866
  if (flag === "true")
66787
66867
  return true;
@@ -66829,6 +66909,7 @@ var MAX_BATCH = 50, FLUSH_INTERVAL_MS = 1e4, MAX_BUFFER = 1000, buffer, timer =
66829
66909
  var init_log_shipper = __esm(() => {
66830
66910
  init_env2();
66831
66911
  init_anvil_api();
66912
+ init_constants6();
66832
66913
  init_env();
66833
66914
  buffer = [];
66834
66915
  clientLogFlusher = createClientLogFlusher({
@@ -66938,7 +67019,7 @@ import { z as z88 } from "zod";
66938
67019
  async function logoutUser() {
66939
67020
  try {
66940
67021
  const user = getUserCredentials();
66941
- if (user?.authToken) {
67022
+ if (user?.authToken && !IS_DIRECT_MODE2) {
66942
67023
  setApiClientAuthToken(user.authToken);
66943
67024
  const apiClient = getApiClient();
66944
67025
  try {
@@ -66995,7 +67076,7 @@ var userSchema2, credentialsSchema, getConfigDir2 = () => getConfigDir(), getCre
66995
67076
  }, "Error reading credentials");
66996
67077
  return null;
66997
67078
  }
66998
- }, getAuthTokenDetails = (ciEnv2 = getCiEnv()) => {
67079
+ }, LOCAL_DIRECT_TOKEN = "anvil-local-direct", getAuthTokenDetails = (ciEnv2 = getCiEnv()) => {
66999
67080
  const userCredentials = getUserCredentials();
67000
67081
  if (userCredentials?.authToken) {
67001
67082
  return { token: userCredentials.authToken, source: "credentials" };
@@ -67008,6 +67089,9 @@ var userSchema2, credentialsSchema, getConfigDir2 = () => getConfigDir(), getCre
67008
67089
  if (deepseekToken) {
67009
67090
  return { token: deepseekToken, source: "environment" };
67010
67091
  }
67092
+ if (IS_DIRECT_MODE2) {
67093
+ return { token: LOCAL_DIRECT_TOKEN, source: "direct" };
67094
+ }
67011
67095
  return { source: null };
67012
67096
  }, getAuthToken = () => {
67013
67097
  return getAuthTokenDetails().token;
@@ -67057,6 +67141,7 @@ var userSchema2, credentialsSchema, getConfigDir2 = () => getConfigDir(), getCre
67057
67141
  var init_auth3 = __esm(() => {
67058
67142
  init_env_ci();
67059
67143
  init_anvil_api();
67144
+ init_constants6();
67060
67145
  init_config_dir();
67061
67146
  init_logger();
67062
67147
  userSchema2 = z88.object({
@@ -68111,79 +68196,6 @@ var init_open_url = __esm(() => {
68111
68196
  init_logger();
68112
68197
  });
68113
68198
 
68114
- // src/utils/constants.ts
68115
- var IS_FREEBUFF, END_SESSION_MESSAGE = "Ending session and returning to the model picker\u2026", HIDDEN_AGENT_IDS, COLLAPSED_BY_DEFAULT_TOOL_NAMES, shouldCollapseToolByDefault = (toolName37) => {
68116
- return COLLAPSED_BY_DEFAULT_TOOL_NAMES.includes(toolName37);
68117
- }, shouldHideAgent = (agentId) => {
68118
- return HIDDEN_AGENT_IDS.some((hiddenId) => agentId.includes(hiddenId));
68119
- }, COLLAPSED_BY_DEFAULT_AGENT_IDS, shouldCollapseByDefault = (agentType) => {
68120
- return COLLAPSED_BY_DEFAULT_AGENT_IDS.some((collapsedId) => agentType.includes(collapsedId));
68121
- }, PARENT_CHILD_COLLAPSE_RULES, shouldCollapseForParent = (childAgentType, parentAgentType) => {
68122
- if (!parentAgentType) {
68123
- return false;
68124
- }
68125
- for (const [parentPattern, childPatterns] of Object.entries(PARENT_CHILD_COLLAPSE_RULES)) {
68126
- if (parentAgentType.includes(parentPattern)) {
68127
- for (const childPattern of childPatterns) {
68128
- if (childAgentType.includes(childPattern)) {
68129
- return true;
68130
- }
68131
- }
68132
- }
68133
- }
68134
- return false;
68135
- }, SIMPLE_TEXT_AGENT_IDS, shouldRenderAsSimpleText = (agentType) => {
68136
- return SIMPLE_TEXT_AGENT_IDS.some((simpleTextId) => agentType.includes(simpleTextId));
68137
- }, MULTI_PROMPT_EDITOR_IDS, isMultiPromptEditor = (agentType) => {
68138
- return MULTI_PROMPT_EDITOR_IDS.some((id) => agentType.includes(id));
68139
- }, CLI_HARNESS = "base3", HARNESS_MODE_IDS, AGENT_MODE_TO_ID, AGENT_MODES, AGENT_MODE_TO_COST_MODE;
68140
- var init_constants6 = __esm(() => {
68141
- init_env();
68142
- IS_FREEBUFF = getCliEnv().FREEBUFF_MODE === "true";
68143
- HIDDEN_AGENT_IDS = ["context-pruner"];
68144
- COLLAPSED_BY_DEFAULT_TOOL_NAMES = [
68145
- "set_output"
68146
- ];
68147
- COLLAPSED_BY_DEFAULT_AGENT_IDS = [
68148
- "file-picker",
68149
- "code-reviewer-selector",
68150
- "thinker-selector",
68151
- "best-of-n-selector",
68152
- "basher",
68153
- "code-searcher",
68154
- "directory-lister",
68155
- "glob-matcher",
68156
- "researcher-web",
68157
- "researcher-docs"
68158
- ];
68159
- PARENT_CHILD_COLLAPSE_RULES = {
68160
- "code-reviewer-multi-prompt": ["code-reviewer"]
68161
- };
68162
- SIMPLE_TEXT_AGENT_IDS = [
68163
- "best-of-n-selector",
68164
- "best-of-n-selector-gemini",
68165
- "best-of-n-selector2"
68166
- ];
68167
- MULTI_PROMPT_EDITOR_IDS = ["editor-multi-prompt"];
68168
- HARNESS_MODE_IDS = {
68169
- base2: { DEFAULT: "base2", LITE: "base2-lite" },
68170
- base3: { DEFAULT: "base3", LITE: "base3-lite" }
68171
- };
68172
- AGENT_MODE_TO_ID = {
68173
- DEFAULT: HARNESS_MODE_IDS[CLI_HARNESS].DEFAULT,
68174
- LITE: IS_FREEBUFF ? "base2-free" : HARNESS_MODE_IDS[CLI_HARNESS].LITE,
68175
- MAX: "base2-max",
68176
- PLAN: "base2-plan"
68177
- };
68178
- AGENT_MODES = Object.keys(AGENT_MODE_TO_ID);
68179
- AGENT_MODE_TO_COST_MODE = {
68180
- DEFAULT: "normal",
68181
- LITE: IS_FREEBUFF ? "free" : "lite",
68182
- MAX: "max",
68183
- PLAN: "normal"
68184
- };
68185
- });
68186
-
68187
68199
  // src/utils/helpers.ts
68188
68200
  function initTimestampFormatter() {
68189
68201
  if (timestampFormatter)
@@ -78793,7 +78805,7 @@ function useSubscriptionQuery(deps = {}) {
78793
78805
  return useActivityQuery({
78794
78806
  queryKey: subscriptionQueryKeys.current(),
78795
78807
  queryFn: () => fetchSubscriptionData(logger2),
78796
- enabled: enabled2 && !!authToken && !IS_FREEBUFF,
78808
+ enabled: enabled2 && !!authToken && !IS_FREEBUFF && !IS_DIRECT_MODE2,
78797
78809
  staleTime: 30 * 1000,
78798
78810
  gcTime: 5 * 60 * 1000,
78799
78811
  retry: 1,
@@ -79814,7 +79826,7 @@ function useUsageQuery(deps = {}) {
79814
79826
  return useActivityQuery({
79815
79827
  queryKey: usageQueryKeys.current(),
79816
79828
  queryFn: () => fetchUsageData({ authToken, logger: logger2 }),
79817
- enabled: enabled2 && !!authToken,
79829
+ enabled: enabled2 && !!authToken && !IS_DIRECT_MODE2,
79818
79830
  staleTime: 0,
79819
79831
  gcTime: 5 * 60 * 1000,
79820
79832
  retry: false,
@@ -79830,6 +79842,7 @@ var init_use_usage_query = __esm(() => {
79830
79842
  init_env2();
79831
79843
  init_use_activity_query();
79832
79844
  init_auth3();
79845
+ init_constants6();
79833
79846
  init_logger();
79834
79847
  usageQueryKeys = {
79835
79848
  all: ["usage"],
@@ -113137,7 +113150,7 @@ var resolveAgent = (agentMode, agentId, agentDefinitions) => {
113137
113150
  logger.error({ error }, "[send-message] Failed to create Anvil client");
113138
113151
  setMessages((prev) => [
113139
113152
  ...prev,
113140
- createErrorMessage("\u26A0\uFE0F Unable to create the client. Please check your authentication and try again.")
113153
+ createErrorMessage(IS_DIRECT_MODE2 ? `\u26A0\uFE0F Couldn't start Anvil. ${MISSING_PROVIDER_KEY_MESSAGE}` : "\u26A0\uFE0F Unable to create the client. Please check your authentication and try again.")
113141
113154
  ]);
113142
113155
  finishPreflight();
113143
113156
  return;
@@ -113149,7 +113162,7 @@ var resolveAgent = (agentMode, agentId, agentDefinitions) => {
113149
113162
  const brandName2 = IS_FREEBUFF ? "Freebuff" : "Anvil";
113150
113163
  setMessages((prev) => [
113151
113164
  ...prev,
113152
- createErrorMessage(`\u26A0\uFE0F Unable to connect to ${brandName2}. Please check your authentication and try again.`)
113165
+ createErrorMessage(IS_DIRECT_MODE2 ? `\u26A0\uFE0F No model provider configured. ${MISSING_PROVIDER_KEY_MESSAGE}` : `\u26A0\uFE0F Unable to connect to ${brandName2}. Please check your authentication and try again.`)
113153
113166
  ]);
113154
113167
  await yieldToEventLoop();
113155
113168
  if (releaseIfStopped())
@@ -114358,7 +114371,7 @@ function useAuthQuery(deps = {}) {
114358
114371
  return useQuery({
114359
114372
  queryKey: authQueryKeys.validation(apiKey),
114360
114373
  queryFn: () => validateApiKey({ apiKey, getUserInfoFromApiKey: getUserInfoFromApiKey2, logger: logger2 }),
114361
- enabled: !!apiKey,
114374
+ enabled: !!apiKey && !IS_DIRECT_MODE2,
114362
114375
  staleTime: 5 * 60 * 1000,
114363
114376
  gcTime: 10 * 60 * 1000,
114364
114377
  retry: (failureCount, error) => {
@@ -114429,6 +114442,7 @@ var init_use_auth_query = __esm(() => {
114429
114442
  init_src();
114430
114443
  init_auth3();
114431
114444
  init_anvil_client();
114445
+ init_constants6();
114432
114446
  init_logger();
114433
114447
  authQueryKeys = {
114434
114448
  all: ["auth"],
@@ -114452,6 +114466,10 @@ var HEALTH_CHECK_CONFIG, useConnectionStatus = (onReconnect) => {
114452
114466
  const [isConnected, setIsConnected] = useState45(true);
114453
114467
  const previousConnectedRef = useRef22(null);
114454
114468
  useEffect35(() => {
114469
+ if (IS_DIRECT_MODE2) {
114470
+ setIsConnected(true);
114471
+ return;
114472
+ }
114455
114473
  let isMounted = true;
114456
114474
  let timeoutId = null;
114457
114475
  let consecutiveSuccesses = 0;
@@ -114522,6 +114540,7 @@ var HEALTH_CHECK_CONFIG, useConnectionStatus = (onReconnect) => {
114522
114540
  };
114523
114541
  var init_use_connection_status = __esm(() => {
114524
114542
  init_anvil_client();
114543
+ init_constants6();
114525
114544
  init_logger();
114526
114545
  HEALTH_CHECK_CONFIG = {
114527
114546
  INITIAL_INTERVAL: 1e4,
@@ -123315,8 +123334,9 @@ async function main() {
123315
123334
  const [currentProjectRoot, setCurrentProjectRoot] = React60.useState(projectRoot2);
123316
123335
  const [showProjectPickerScreen, setShowProjectPickerScreen] = React60.useState(showProjectPicker);
123317
123336
  React60.useEffect(() => {
123318
- if (!IS_FREEBUFF) {
123337
+ if (IS_DIRECT_MODE) {
123319
123338
  setRequireAuth(false);
123339
+ setHasInvalidCredentials(false);
123320
123340
  return;
123321
123341
  }
123322
123342
  const apiKey = getAuthTokenDetails().token ?? "";
@@ -123439,5 +123459,5 @@ if (isTerminalCommandBrokerInvocation(process.argv)) {
123439
123459
  await Promise.resolve().then(() => (init_src2(), exports_src));
123440
123460
  }
123441
123461
 
123442
- //# debugId=E87372B0D79FD42764756E2164756E21
123462
+ //# debugId=BE5E3A7580FC7A0C64756E2164756E21
123443
123463
  //# sourceMappingURL=bundled.js.map