@verboo/code 0.7.16 → 0.7.18

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 (2) hide show
  1. package/dist/cli.mjs +116 -44
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -111230,6 +111230,7 @@ __export(exports_model, {
111230
111230
  isOpus1mMergeEnabled: () => isOpus1mMergeEnabled,
111231
111231
  isNonCustomOpusModel: () => isNonCustomOpusModel,
111232
111232
  isLegacyModelRemapEnabled: () => isLegacyModelRemapEnabled,
111233
+ isClaudeModelLike: () => isClaudeModelLike,
111233
111234
  getUserSpecifiedModelSetting: () => getUserSpecifiedModelSetting,
111234
111235
  getSmallFastModel: () => getSmallFastModel,
111235
111236
  getRuntimeMainLoopModel: () => getRuntimeMainLoopModel,
@@ -111238,6 +111239,7 @@ __export(exports_model, {
111238
111239
  getOpus46PricingSuffix: () => getOpus46PricingSuffix,
111239
111240
  getMarketingNameForModel: () => getMarketingNameForModel,
111240
111241
  getMainLoopModel: () => getMainLoopModel,
111242
+ getDefaultVerbooModel: () => getDefaultVerbooModel,
111241
111243
  getDefaultSonnetModel: () => getDefaultSonnetModel,
111242
111244
  getDefaultOpusModel: () => getDefaultOpusModel,
111243
111245
  getDefaultMainLoopModelSetting: () => getDefaultMainLoopModelSetting,
@@ -111254,15 +111256,47 @@ function normalizeModelSetting(value) {
111254
111256
  const trimmed = value.trim();
111255
111257
  return trimmed.length > 0 ? trimmed : undefined;
111256
111258
  }
111259
+ function isClaudeModelLike(model) {
111260
+ if (typeof model !== "string")
111261
+ return false;
111262
+ const normalized = model.trim().toLowerCase();
111263
+ if (!normalized)
111264
+ return false;
111265
+ const withoutContext = normalized.replace(/\[1m]$/i, "").trim();
111266
+ return withoutContext.includes("claude") || withoutContext === "sonnet" || withoutContext === "opus" || withoutContext === "haiku" || withoutContext === "best" || withoutContext === "opusplan";
111267
+ }
111268
+ function getDefaultVerbooModel() {
111269
+ const cached2 = getCachedVerbooModels();
111270
+ const cachedModel = cached2?.find((m) => !isClaudeModelLike(m.id))?.id;
111271
+ if (cachedModel)
111272
+ return cachedModel;
111273
+ const envFallback = normalizeModelSetting(process.env.VERBOO_DEFAULT_MODEL) ?? normalizeModelSetting(process.env.OPENAI_MODEL);
111274
+ if (envFallback && !isClaudeModelLike(envFallback)) {
111275
+ return envFallback.replace(/\[1m\]$/i, "").trim();
111276
+ }
111277
+ return VERBOO_FALLBACK_MODEL;
111278
+ }
111279
+ function getVerbooSpecifiedModel(specifiedModel) {
111280
+ if (specifiedModel === undefined || specifiedModel === null) {
111281
+ return specifiedModel;
111282
+ }
111283
+ const normalized = normalizeModelSetting(specifiedModel);
111284
+ if (!normalized || isClaudeModelLike(normalized)) {
111285
+ return;
111286
+ }
111287
+ const modelWithoutContext = normalized.replace(/\[1m\]$/i, "").trim();
111288
+ const cached2 = getCachedVerbooModels();
111289
+ if (cached2 && cached2.length > 0) {
111290
+ return cached2.some((m) => m.id === modelWithoutContext && !isClaudeModelLike(m.id)) ? modelWithoutContext : undefined;
111291
+ }
111292
+ return modelWithoutContext;
111293
+ }
111257
111294
  function getSmallFastModel() {
111258
- if (process.env.ANTHROPIC_SMALL_FAST_MODEL)
111259
- return process.env.ANTHROPIC_SMALL_FAST_MODEL;
111260
111295
  if (isVerbooMode()) {
111261
- const cached2 = getCachedVerbooModels();
111262
- if (cached2 && cached2.length > 0) {
111263
- return cached2[0].id;
111264
- }
111296
+ return getDefaultVerbooModel();
111265
111297
  }
111298
+ if (process.env.ANTHROPIC_SMALL_FAST_MODEL)
111299
+ return process.env.ANTHROPIC_SMALL_FAST_MODEL;
111266
111300
  if (getAPIProvider() === "gemini") {
111267
111301
  return process.env.GEMINI_MODEL || "gemini-2.0-flash-lite";
111268
111302
  }
@@ -111304,18 +111338,12 @@ function getUserSpecifiedModelSetting() {
111304
111338
  const isOpenAIShimProvider = provider === "openai" || provider === "codex" || provider === "github" || provider === "nvidia-nim" || provider === "minimax" || provider === "xai";
111305
111339
  specifiedModel = (provider === "gemini" ? process.env.GEMINI_MODEL : undefined) || (provider === "mistral" ? process.env.MISTRAL_MODEL : undefined) || (isOpenAIShimProvider ? process.env.OPENAI_MODEL : undefined) || (provider === "firstParty" ? process.env.ANTHROPIC_MODEL : undefined) || setting || undefined;
111306
111340
  }
111341
+ if (isVerbooMode()) {
111342
+ return getVerbooSpecifiedModel(specifiedModel);
111343
+ }
111307
111344
  if (specifiedModel && !isModelAllowed(specifiedModel)) {
111308
111345
  return;
111309
111346
  }
111310
- if (specifiedModel && isVerbooMode()) {
111311
- const cached2 = getCachedVerbooModels();
111312
- if (cached2 && cached2.length > 0) {
111313
- const verbooIds = new Set(cached2.map((m) => m.id));
111314
- if (!verbooIds.has(specifiedModel)) {
111315
- return;
111316
- }
111317
- }
111318
- }
111319
111347
  return specifiedModel;
111320
111348
  }
111321
111349
  function getMainLoopModel() {
@@ -111329,6 +111357,9 @@ function getBestModel() {
111329
111357
  return getDefaultOpusModel();
111330
111358
  }
111331
111359
  function getDefaultOpusModel() {
111360
+ if (isVerbooMode()) {
111361
+ return getDefaultVerbooModel();
111362
+ }
111332
111363
  if (process.env.ANTHROPIC_DEFAULT_OPUS_MODEL) {
111333
111364
  return process.env.ANTHROPIC_DEFAULT_OPUS_MODEL;
111334
111365
  }
@@ -111362,6 +111393,9 @@ function getDefaultOpusModel() {
111362
111393
  return getModelStrings2().opus46;
111363
111394
  }
111364
111395
  function getDefaultSonnetModel() {
111396
+ if (isVerbooMode()) {
111397
+ return getDefaultVerbooModel();
111398
+ }
111365
111399
  if (process.env.ANTHROPIC_DEFAULT_SONNET_MODEL) {
111366
111400
  return process.env.ANTHROPIC_DEFAULT_SONNET_MODEL;
111367
111401
  }
@@ -111395,6 +111429,9 @@ function getDefaultSonnetModel() {
111395
111429
  return getModelStrings2().sonnet46;
111396
111430
  }
111397
111431
  function getDefaultHaikuModel() {
111432
+ if (isVerbooMode()) {
111433
+ return getDefaultVerbooModel();
111434
+ }
111398
111435
  if (process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL) {
111399
111436
  return process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL;
111400
111437
  }
@@ -111435,6 +111472,9 @@ function getRuntimeMainLoopModel(params) {
111435
111472
  return mainLoopModel;
111436
111473
  }
111437
111474
  function getDefaultMainLoopModelSetting() {
111475
+ if (isVerbooMode()) {
111476
+ return getDefaultVerbooModel();
111477
+ }
111438
111478
  if (getAPIProvider() === "github") {
111439
111479
  const settings = getSettings_DEPRECATED() || {};
111440
111480
  return normalizeModelSetting(settings.model) || normalizeModelSetting(process.env.OPENAI_MODEL) || "github:copilot";
@@ -111688,6 +111728,18 @@ function parseUserSpecifiedModel(modelInput) {
111688
111728
  const normalizedModel = modelInputTrimmed.toLowerCase();
111689
111729
  const has1mTag = has1mContext(normalizedModel);
111690
111730
  const modelString = has1mTag ? normalizedModel.replace(/\[1m]$/i, "").trim() : normalizedModel;
111731
+ if (isVerbooMode()) {
111732
+ if (modelString === "codexplan") {
111733
+ return "gpt-5.5";
111734
+ }
111735
+ if (modelString === "codexspark") {
111736
+ return "gpt-5.3-codex-spark";
111737
+ }
111738
+ if (isClaudeModelLike(modelString)) {
111739
+ return getDefaultVerbooModel();
111740
+ }
111741
+ return modelInputTrimmed.replace(/\[1m\]$/i, "").trim();
111742
+ }
111691
111743
  if (isModelAlias(modelString)) {
111692
111744
  switch (modelString) {
111693
111745
  case "opusplan":
@@ -111797,7 +111849,7 @@ function getMarketingNameForModel(modelId) {
111797
111849
  function normalizeModelStringForAPI(model) {
111798
111850
  return model.replace(/\[(1|2)m\]/gi, "");
111799
111851
  }
111800
- var LEGACY_OPUS_FIRSTPARTY;
111852
+ var VERBOO_FALLBACK_MODEL = "gpt-5.5", LEGACY_OPUS_FIRSTPARTY;
111801
111853
  var init_model = __esm(() => {
111802
111854
  init_state();
111803
111855
  init_oauth();
@@ -115518,7 +115570,7 @@ function printStartupScreen(modelOverride) {
115518
115570
  const home = process.env.HOME || process.env.USERPROFILE || "";
115519
115571
  const cwd2 = process.cwd();
115520
115572
  const displayCwd = home && cwd2.startsWith(home) ? `~${cwd2.slice(home.length)}` : cwd2;
115521
- const version2 = "0.7.16";
115573
+ const version2 = "0.7.18";
115522
115574
  const bold2 = `${ESC}1m`;
115523
115575
  const PURPLE = rgb(...ACCENT);
115524
115576
  const SOFT = rgb(...CREAM);
@@ -201092,13 +201144,18 @@ async function getAnthropicClient({
201092
201144
  if (!accessToken) {
201093
201145
  process.stderr.write("[Verboo] ERRO: token de acesso não encontrado. Execute `verboo /login`.\n");
201094
201146
  }
201147
+ const requestedModel = model?.trim();
201148
+ const safeVerbooModel = requestedModel && !isClaudeModelLike(requestedModel) ? requestedModel.replace(/\[1m\]$/i, "").trim() : getDefaultVerbooModel();
201149
+ if (requestedModel && requestedModel !== safeVerbooModel) {
201150
+ logForDebugging2(`[Verboo] Ignoring Claude/unsupported model "${requestedModel}" and using "${safeVerbooModel}"`, { level: "warn" });
201151
+ }
201095
201152
  const { createOpenAIShimClient: createOpenAIShimClient2 } = await Promise.resolve().then(() => (init_openaiShim(), exports_openaiShim));
201096
201153
  return createOpenAIShimClient2({
201097
201154
  defaultHeaders,
201098
201155
  maxRetries,
201099
201156
  timeout: parseInt(process.env.API_TIMEOUT_MS || String(600000), 10),
201100
201157
  providerOverride: {
201101
- model: model ?? "",
201158
+ model: safeVerbooModel,
201102
201159
  baseURL: VERBOO_ROUTER_URL,
201103
201160
  apiKey: accessToken ?? ""
201104
201161
  }
@@ -365571,6 +365628,7 @@ var init_AgentTool = __esm(() => {
365571
365628
  init_ids();
365572
365629
  init_agentContext();
365573
365630
  init_agentSwarmsEnabled();
365631
+ init_abortController();
365574
365632
  init_cwd2();
365575
365633
  init_debug();
365576
365634
  init_envUtils();
@@ -366047,6 +366105,7 @@ var init_AgentTool = __esm(() => {
366047
366105
  let foregroundTaskId;
366048
366106
  let backgroundPromise;
366049
366107
  let cancelAutoBackground;
366108
+ let foregroundAbortController;
366050
366109
  if (!isBackgroundTasksDisabled2) {
366051
366110
  const registration = registerAgentForeground({
366052
366111
  agentId: syncAgentId,
@@ -366062,6 +366121,7 @@ var init_AgentTool = __esm(() => {
366062
366121
  type: "background"
366063
366122
  }));
366064
366123
  cancelAutoBackground = registration.cancelAutoBackground;
366124
+ foregroundAbortController = createChildAbortController(registration.abortController);
366065
366125
  }
366066
366126
  let backgroundHintShown = false;
366067
366127
  let wasBackgrounded = false;
@@ -366071,7 +366131,10 @@ var init_AgentTool = __esm(() => {
366071
366131
  ...runAgentParams,
366072
366132
  override: {
366073
366133
  ...runAgentParams.override,
366074
- agentId: syncAgentId
366134
+ agentId: syncAgentId,
366135
+ ...foregroundAbortController && {
366136
+ abortController: foregroundAbortController
366137
+ }
366075
366138
  },
366076
366139
  onCacheSafeParams: summaryTaskId && getSdkAgentProgressSummariesEnabled() ? (params) => {
366077
366140
  const {
@@ -366110,6 +366173,7 @@ var init_AgentTool = __esm(() => {
366110
366173
  const backgroundedTaskId = foregroundTaskId;
366111
366174
  wasBackgrounded = true;
366112
366175
  stopForegroundSummarization?.();
366176
+ foregroundAbortController?.abort("backgrounded");
366113
366177
  runWithAgentContext(syncAgentContext, async () => {
366114
366178
  let stopBackgroundedSummarization;
366115
366179
  try {
@@ -367671,6 +367735,7 @@ function registerAgentForeground({
367671
367735
  }
367672
367736
  return {
367673
367737
  taskId: agentId,
367738
+ abortController,
367674
367739
  backgroundSignal,
367675
367740
  cancelAutoBackground
367676
367741
  };
@@ -376910,7 +376975,7 @@ function getAnthropicEnvMetadata() {
376910
376975
  function getBuildAgeMinutes() {
376911
376976
  if (false)
376912
376977
  ;
376913
- const buildTime = new Date("2026-05-02T16:01:58.016Z").getTime();
376978
+ const buildTime = new Date("2026-05-02T19:45:06.160Z").getTime();
376914
376979
  if (isNaN(buildTime))
376915
376980
  return;
376916
376981
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -417446,7 +417511,7 @@ function buildPrimarySection() {
417446
417511
  }, undefined, false, undefined, this);
417447
417512
  return [{
417448
417513
  label: "Version",
417449
- value: "0.7.16"
417514
+ value: "0.7.18"
417450
417515
  }, {
417451
417516
  label: "Session name",
417452
417517
  value: nameValue
@@ -485396,7 +485461,7 @@ var init_bridge_kick = __esm(() => {
485396
485461
  var call60 = async () => {
485397
485462
  return {
485398
485463
  type: "text",
485399
- value: `${"99.0.0"} (built ${"2026-05-02T16:01:58.016Z"})`
485464
+ value: `${"99.0.0"} (built ${"2026-05-02T19:45:06.160Z"})`
485400
485465
  };
485401
485466
  }, version2, version_default;
485402
485467
  var init_version = __esm(() => {
@@ -487890,6 +487955,12 @@ async function validateModel(model) {
487890
487955
  return { valid: false, error: "Model name cannot be empty" };
487891
487956
  }
487892
487957
  if (isVerbooMode()) {
487958
+ if (isClaudeModelLike(normalizedModel)) {
487959
+ return {
487960
+ valid: false,
487961
+ error: `Modelo '${normalizedModel}' não pode ser usado no Verboo Code.`
487962
+ };
487963
+ }
487893
487964
  const verbooModels = getCachedVerbooModels();
487894
487965
  if (verbooModels && verbooModels.length > 0) {
487895
487966
  const found = verbooModels.some((m) => m.id === normalizedModel);
@@ -488058,6 +488129,7 @@ var init_validateModel = __esm(() => {
488058
488129
  init_minimaxModels();
488059
488130
  init_oauth();
488060
488131
  init_verbooModels();
488132
+ init_model();
488061
488133
  validModelCache = new Map;
488062
488134
  });
488063
488135
 
@@ -561178,7 +561250,7 @@ function WelcomeV2() {
561178
561250
  dimColor: true,
561179
561251
  children: [
561180
561252
  "v",
561181
- "0.7.16",
561253
+ "0.7.18",
561182
561254
  " "
561183
561255
  ]
561184
561256
  }, undefined, true, undefined, this)
@@ -561365,7 +561437,7 @@ function WelcomeV2() {
561365
561437
  dimColor: true,
561366
561438
  children: [
561367
561439
  "v",
561368
- "0.7.16",
561440
+ "0.7.18",
561369
561441
  " "
561370
561442
  ]
561371
561443
  }, undefined, true, undefined, this)
@@ -561581,7 +561653,7 @@ function AppleTerminalWelcomeV2(t0) {
561581
561653
  dimColor: true,
561582
561654
  children: [
561583
561655
  "v",
561584
- "0.7.16",
561656
+ "0.7.18",
561585
561657
  " "
561586
561658
  ]
561587
561659
  }, undefined, true, undefined, this);
@@ -561790,7 +561862,7 @@ function AppleTerminalWelcomeV2(t0) {
561790
561862
  dimColor: true,
561791
561863
  children: [
561792
561864
  "v",
561793
- "0.7.16",
561865
+ "0.7.18",
561794
561866
  " "
561795
561867
  ]
561796
561868
  }, undefined, true, undefined, this);
@@ -579921,7 +579993,7 @@ __export(exports_update, {
579921
579993
  async function update() {
579922
579994
  if (getAPIProvider() !== "firstParty") {
579923
579995
  writeToStdout(source_default.yellow(`Auto-update is not available for third-party provider builds.
579924
- `) + `Current version: ${"0.7.16"}
579996
+ `) + `Current version: ${"0.7.18"}
579925
579997
 
579926
579998
  ` + `To update, reinstall from npm:
579927
579999
  ` + source_default.bold(` npm install -g ${"@verboo/code"}@latest`) + `
@@ -579932,7 +580004,7 @@ async function update() {
579932
580004
  await gracefulShutdown(0);
579933
580005
  }
579934
580006
  logEvent("tengu_update_check", {});
579935
- writeToStdout(`Current version: ${"0.7.16"}
580007
+ writeToStdout(`Current version: ${"0.7.18"}
579936
580008
  `);
579937
580009
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
579938
580010
  writeToStdout(`Checking for updates to ${channel} version...
@@ -580017,8 +580089,8 @@ async function update() {
580017
580089
  writeToStdout(`Claude is managed by Homebrew.
580018
580090
  `);
580019
580091
  const latest = await getLatestVersion(channel);
580020
- if (latest && !gte("0.7.16", latest)) {
580021
- writeToStdout(`Update available: ${"0.7.16"} → ${latest}
580092
+ if (latest && !gte("0.7.18", latest)) {
580093
+ writeToStdout(`Update available: ${"0.7.18"} → ${latest}
580022
580094
  `);
580023
580095
  writeToStdout(`
580024
580096
  `);
@@ -580034,8 +580106,8 @@ async function update() {
580034
580106
  writeToStdout(`Claude is managed by winget.
580035
580107
  `);
580036
580108
  const latest = await getLatestVersion(channel);
580037
- if (latest && !gte("0.7.16", latest)) {
580038
- writeToStdout(`Update available: ${"0.7.16"} → ${latest}
580109
+ if (latest && !gte("0.7.18", latest)) {
580110
+ writeToStdout(`Update available: ${"0.7.18"} → ${latest}
580039
580111
  `);
580040
580112
  writeToStdout(`
580041
580113
  `);
@@ -580051,8 +580123,8 @@ async function update() {
580051
580123
  writeToStdout(`Claude is managed by apk.
580052
580124
  `);
580053
580125
  const latest = await getLatestVersion(channel);
580054
- if (latest && !gte("0.7.16", latest)) {
580055
- writeToStdout(`Update available: ${"0.7.16"} → ${latest}
580126
+ if (latest && !gte("0.7.18", latest)) {
580127
+ writeToStdout(`Update available: ${"0.7.18"} → ${latest}
580056
580128
  `);
580057
580129
  writeToStdout(`
580058
580130
  `);
@@ -580117,11 +580189,11 @@ async function update() {
580117
580189
  `);
580118
580190
  await gracefulShutdown(1);
580119
580191
  }
580120
- if (result.latestVersion === "0.7.16") {
580121
- writeToStdout(source_default.green(`Verboo Code is up to date (${"0.7.16"})`) + `
580192
+ if (result.latestVersion === "0.7.18") {
580193
+ writeToStdout(source_default.green(`Verboo Code is up to date (${"0.7.18"})`) + `
580122
580194
  `);
580123
580195
  } else {
580124
- writeToStdout(source_default.green(`Successfully updated from ${"0.7.16"} to version ${result.latestVersion}`) + `
580196
+ writeToStdout(source_default.green(`Successfully updated from ${"0.7.18"} to version ${result.latestVersion}`) + `
580125
580197
  `);
580126
580198
  await regenerateCompletionCache();
580127
580199
  }
@@ -580181,12 +580253,12 @@ async function update() {
580181
580253
  `);
580182
580254
  await gracefulShutdown(1);
580183
580255
  }
580184
- if (latestVersion === "0.7.16") {
580185
- writeToStdout(source_default.green(`Verboo Code is up to date (${"0.7.16"})`) + `
580256
+ if (latestVersion === "0.7.18") {
580257
+ writeToStdout(source_default.green(`Verboo Code is up to date (${"0.7.18"})`) + `
580186
580258
  `);
580187
580259
  await gracefulShutdown(0);
580188
580260
  }
580189
- writeToStdout(`New version available: ${latestVersion} (current: ${"0.7.16"})
580261
+ writeToStdout(`New version available: ${latestVersion} (current: ${"0.7.18"})
580190
580262
  `);
580191
580263
  writeToStdout(`Installing update...
580192
580264
  `);
@@ -580231,7 +580303,7 @@ async function update() {
580231
580303
  logForDebugging2(`update: Installation status: ${status2}`);
580232
580304
  switch (status2) {
580233
580305
  case "success":
580234
- writeToStdout(source_default.green(`Successfully updated from ${"0.7.16"} to version ${latestVersion}`) + `
580306
+ writeToStdout(source_default.green(`Successfully updated from ${"0.7.18"} to version ${latestVersion}`) + `
580235
580307
  `);
580236
580308
  await regenerateCompletionCache();
580237
580309
  break;
@@ -582284,7 +582356,7 @@ Usage: verboo --remote "your task description"`, () => gracefulShutdown(1));
582284
582356
  pendingHookMessages
582285
582357
  }, renderAndRun);
582286
582358
  }
582287
- }).version(`0.7.16 (${cliDesc})`, "-v, --version", "Output the version number");
582359
+ }).version(`0.7.18 (${cliDesc})`, "-v, --version", "Output the version number");
582288
582360
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
582289
582361
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
582290
582362
  if (canUserConfigureAdvisor()) {
@@ -582852,7 +582924,7 @@ if (false) {}
582852
582924
  async function main2() {
582853
582925
  const args = process.argv.slice(2);
582854
582926
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
582855
- console.log(`${"0.7.16"} (Verboo Code)`);
582927
+ console.log(`${"0.7.18"} (Verboo Code)`);
582856
582928
  return;
582857
582929
  }
582858
582930
  if (args.includes("--provider")) {
@@ -583008,4 +583080,4 @@ async function main2() {
583008
583080
  }
583009
583081
  main2();
583010
583082
 
583011
- //# debugId=01D19E1713D2CE3D64756E2164756E21
583083
+ //# debugId=01A4722BC92A534764756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verboo/code",
3
- "version": "0.7.16",
3
+ "version": "0.7.18",
4
4
  "description": "Verboo Code — coding agent for the Verboo platform",
5
5
  "type": "module",
6
6
  "bin": {