chofex-cli 0.1.202 → 0.1.203

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 (3) hide show
  1. package/README.md +39 -40
  2. package/dist/index.js +87 -80
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -14,57 +14,56 @@ Instala uno de los dos paquetes.
14
14
 
15
15
  ```sh
16
16
  andes register
17
- chofex register
18
17
  ```
19
18
 
20
19
  Para instalarlo dentro de un proyecto, usa `npm install hacktheandes-cli` y
21
- ejecuta `npx andes register` o `npx chofex register`.
20
+ ejecuta `npx andes register`.
22
21
 
23
- Los ejemplos con `chofex` también funcionan con `andes`:
22
+ El comando recomendado es `andes`. `chofex` sigue disponible por compatibilidad.
24
23
 
25
24
  ```sh
26
- chofex
27
- chofex whoami
28
- chofex update
29
- chofex upgrade
30
- chofex register
31
- chofex status
32
- chofex requirements
33
- chofex challenge list
34
- chofex challenge query --challenge black-box
35
- chofex challenge notebook --challenge black-box
36
- chofex challenge test --challenge black-box --source ./shipping.js
37
- chofex challenge evaluate --challenge black-box --source ./shipping.js
38
- chofex challenge ranking --challenge black-box
39
- chofex challenge init --challenge broken-agent
25
+ andes
26
+ andes whoami
27
+ andes update
28
+ andes upgrade
29
+ andes register
30
+ andes status
31
+ andes requirements
32
+ andes challenge list
33
+ andes challenge query --challenge black-box
34
+ andes challenge notebook --challenge black-box
35
+ andes challenge test --challenge black-box --source ./shipping.js
36
+ andes challenge evaluate --challenge black-box --source ./shipping.js
37
+ andes challenge ranking --challenge black-box
38
+ andes challenge init --challenge broken-agent
40
39
  cd broken-agent && npm test
41
- chofex challenge test --challenge broken-agent --source ./scheduler.js
42
- chofex challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json
43
- chofex challenge ranking --challenge broken-agent
44
- chofex confirm
45
- chofex badge
46
- chofex badge regenerate
40
+ andes challenge test --challenge broken-agent --source ./scheduler.js
41
+ andes challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json
42
+ andes challenge ranking --challenge broken-agent
43
+ andes confirm
44
+ andes badge
45
+ andes badge regenerate
47
46
  ```
48
47
 
49
- `chofex update` and `chofex upgrade` are interchangeable; both update the CLI
48
+ `andes update` and `andes upgrade` are interchangeable; both update the CLI
50
49
  to the latest published version.
51
50
 
52
51
  Las actualizaciones conservan el paquete instalado: `hacktheandes-cli` o
53
52
  `chofex-cli`, independientemente del comando que uses.
54
53
 
55
- Las copias instaladas también consultan npm cada vez que se inicia `chofex` e
54
+ Las copias instaladas también consultan npm cada vez que se inicia `andes` e
56
55
  instalan una versión publicada más reciente antes de ejecutar el comando. Si
57
56
  npm o la red no están disponibles temporalmente, se continúa con la versión
58
57
  actual. Usa `CHOFEX_AUTO_UPDATE=0` para desactivar esta comprobación.
59
58
 
60
- `chofex register` collects and submits an application with full name, role,
59
+ `andes register` collects and submits an application with full name, role,
61
60
  optional phone number, bio, portfolio URL, shipped project, LinkedIn and GitHub
62
61
  URLs, and Terms and Conditions. Use `--input` to submit a completed JSON
63
62
  application.
64
63
  Acceptance creates a default badge from the Clerk profile visible to reviewers.
65
- `chofex confirm` updates the public name, one-line description, and picture
64
+ `andes confirm` updates the public name, one-line description, and picture
66
65
  while separately collecting the legal full name and venue details required for attendance. After confirmation,
67
- `chofex badge regenerate` can also update those public fields and the QR
66
+ `andes badge regenerate` can also update those public fields and the QR
68
67
  destination without changing the submitted application.
69
68
  The technical challenges do not block application submission, but they are
70
69
  mandatory for admission. An application does not reserve a seat; organizers
@@ -75,19 +74,19 @@ version; legacy attempts do not count toward admission.
75
74
 
76
75
  The public ranking is read-only at `https://hacktheandes.com/challenges`.
77
76
 
78
- Run `chofex` for a compact retro welcome screen with a pixel Sacred Valley and
79
- the main commands. Run `chofex --help` for the full command reference. The
77
+ Run `andes` for a compact retro welcome screen with a pixel Sacred Valley and
78
+ the main commands. Run `andes --help` for the full command reference. The
80
79
  landscape uses colored terminal cells, with readable text that works with your
81
80
  terminal's line spacing. It adapts to the terminal width and has a plain ASCII
82
81
  fallback when color is disabled with `NO_COLOR`. JSON output and individual
83
82
  command results omit the welcome screen.
84
83
 
85
- For agent or script input, `chofex schema --stage application` and
86
- `chofex schema --stage acceptance` print complete templates containing every
84
+ For agent or script input, `andes schema --stage application` and
85
+ `andes schema --stage acceptance` print complete templates containing every
87
86
  accepted JSON key. Validate a completed input file locally before submitting it:
88
87
 
89
88
  ```sh
90
- chofex --output json validate --stage application --input application.json
89
+ andes --output json validate --stage application --input application.json
91
90
  ```
92
91
 
93
92
  Validation does not contact the API, and a successful result does not echo input
@@ -95,12 +94,12 @@ values. Local validation errors include `acceptedFields` in JSON mode. The
95
94
  `status` response already includes both the registration and its requirements;
96
95
  use `requirements` only when requirements-only human output is preferred.
97
96
 
98
- Run `chofex login` to authenticate. For automation, provide an OAuth access
97
+ Run `andes login` to authenticate. For automation, provide an OAuth access
99
98
  token with `CHOFEX_TOKEN`.
100
99
 
101
100
  ### Authentication troubleshooting
102
101
 
103
- If `chofex login` succeeds but `whoami` or an authenticated challenge command
102
+ If `andes login` succeeds but `whoami` or an authenticated challenge command
104
103
  returns `AUTHENTICATION_REQUIRED`, first remove any token or API URL overrides
105
104
  from the shell. In Bash or Zsh:
106
105
 
@@ -117,7 +116,7 @@ Remove-Item Env:CHOFEX_TOKEN, Env:CHOFEX_API_URL -ErrorAction SilentlyContinue
117
116
  Update by repeating the installation method you originally used. For npm:
118
117
 
119
118
  ```sh
120
- npm install --global chofex-cli@latest
119
+ npm install --global hacktheandes-cli@latest
121
120
  ```
122
121
 
123
122
  For the standalone installer:
@@ -129,10 +128,10 @@ curl -fsSL https://hacktheandes.com/install | bash
129
128
  Then renew the stored session and verify it:
130
129
 
131
130
  ```sh
132
- chofex --version
133
- chofex logout
134
- chofex login
135
- chofex --output json whoami
131
+ andes --version
132
+ andes logout
133
+ andes login
134
+ andes --output json whoami
136
135
  ```
137
136
 
138
137
  Versions before `0.1.140` used a retired API origin whose cross-origin redirect
package/dist/index.js CHANGED
@@ -59516,7 +59516,7 @@ var jwtExpiry = (token) => {
59516
59516
  };
59517
59517
  var refresh = async (credentials) => {
59518
59518
  if (!credentials.refreshToken) {
59519
- throw new Error("Session expired. Run `chofex login` again.");
59519
+ throw new Error("Session expired. Run `andes login` again.");
59520
59520
  }
59521
59521
  const body = await tokenRequest({
59522
59522
  grant_type: "refresh_token",
@@ -59533,7 +59533,7 @@ var authentication = async (forceRefresh = false) => {
59533
59533
  }
59534
59534
  const credentials = await readCredentials();
59535
59535
  if (!credentials)
59536
- throw new Error("Not logged in. Run `chofex login`.");
59536
+ throw new Error("Not logged in. Run `andes login`.");
59537
59537
  if (forceRefresh || credentials.expiresAt !== undefined && credentials.expiresAt <= Date.now() + 30000) {
59538
59538
  return await refresh(credentials);
59539
59539
  }
@@ -59560,7 +59560,7 @@ var openBrowser = (url2) => {
59560
59560
  };
59561
59561
  var assertInteractiveLogin = (interactive = process.stdin.isTTY === true) => {
59562
59562
  if (!interactive) {
59563
- throw new Error("OAuth login requires an interactive terminal. Run `chofex login` yourself in a local terminal and leave it open until the browser confirms login.");
59563
+ throw new Error("OAuth login requires an interactive terminal. Run `andes login` yourself in a local terminal and leave it open until the browser confirms login.");
59564
59564
  }
59565
59565
  };
59566
59566
  var login = async () => {
@@ -59715,7 +59715,7 @@ var authenticationRecoveryMessage = (code, message) => {
59715
59715
  return message;
59716
59716
  if (message !== "Authentication failed")
59717
59717
  return message;
59718
- return `${message}. If login just succeeded, update the CLI with \`chofex update\` or \`npm install --global chofex-cli@latest\`, then run \`chofex logout\` and \`chofex login\`.`;
59718
+ return `${message}. If login just succeeded, update the CLI with \`andes update\` or \`npm install --global hacktheandes-cli@latest\`, then run \`andes logout\` and \`andes login\`.`;
59719
59719
  };
59720
59720
  var endpoint = (apiUrl, path4) => `${apiUrl.replace(/\/$/, "")}${path4}`;
59721
59721
  var resolveAuthentication = (suppliedToken, campaignAttribution, authenticate, forceRefresh = false) => {
@@ -59986,7 +59986,7 @@ var challengeListText = (catalog) => {
59986
59986
  }
59987
59987
  const hasOpenChallenge = catalog.challenges.some((challenge) => challenge.open && challenge.playable);
59988
59988
  if (hasOpenChallenge) {
59989
- lines2.push("Empieza el challenge abierto: chofex challenge");
59989
+ lines2.push("Empieza el challenge abierto: andes challenge");
59990
59990
  } else {
59991
59991
  lines2.push("No hay un challenge abierto. Los rankings finales siguen visibles.");
59992
59992
  }
@@ -60023,7 +60023,7 @@ var challengeShowText = (attempt) => {
60023
60023
  if (progress.shareCode)
60024
60024
  lines3.push(`Código #${progress.shareCode}`);
60025
60025
  }
60026
- lines3.push("", "SIGUIENTE PASO", "Lee el contrato. Antes de editar, discute tres trazas de falla y elige cuál investigar primero.", " cd broken-agent && npm test", " chofex challenge test --challenge broken-agent --source ./scheduler.js");
60026
+ lines3.push("", "SIGUIENTE PASO", "Lee el contrato. Antes de editar, discute tres trazas de falla y elige cuál investigar primero.", " cd broken-agent && npm test", " andes challenge test --challenge broken-agent --source ./scheduler.js");
60027
60027
  return lines3.join(`
60028
60028
  `);
60029
60029
  }
@@ -60063,17 +60063,17 @@ var challengeShowText = (attempt) => {
60063
60063
  lines2.push(`Share code #${progress.shareCode}`);
60064
60064
  }
60065
60065
  if (challenge.closed) {
60066
- lines2.push("", "SIGUIENTE PASO", "Revisa tu historial y el ranking final.", " chofex challenge notebook", " chofex challenge ranking");
60066
+ lines2.push("", "SIGUIENTE PASO", "Revisa tu historial y el ranking final.", " andes challenge notebook", " andes challenge ranking");
60067
60067
  return lines2.join(`
60068
60068
  `);
60069
60069
  }
60070
60070
  lines2.push("", "YOUR NEXT MOVE");
60071
60071
  if (attempt.observations.length === 0) {
60072
- lines2.push("Ask the machine to price one ordinary shipment.", " chofex challenge query");
60072
+ lines2.push("Ask the machine to price one ordinary shipment.", " andes challenge query");
60073
60073
  } else if (attempt.latestEvaluation === undefined) {
60074
- lines2.push("Run controlled experiments, study the notebook, then test your model.", " chofex challenge query", " chofex challenge notebook", " chofex challenge init", " chofex challenge test --source ./shipping.js");
60074
+ lines2.push("Run controlled experiments, study the notebook, then test your model.", " andes challenge query", " andes challenge notebook", " andes challenge init", " andes challenge test --source ./shipping.js");
60075
60075
  } else {
60076
- lines2.push("Inspect your rank, then use remaining attempts only after improving your model.", " chofex challenge ranking", " chofex challenge test --source ./shipping.js");
60076
+ lines2.push("Inspect your rank, then use remaining attempts only after improving your model.", " andes challenge ranking", " andes challenge test --source ./shipping.js");
60077
60077
  }
60078
60078
  return lines2.join(`
60079
60079
  `);
@@ -60089,11 +60089,11 @@ var challengeQueryText = (result3) => {
60089
60089
  ""
60090
60090
  ];
60091
60091
  if (result3.queriesRemaining > 0) {
60092
- lines2.push("Next experiment", "Change one variable at a time. Keep the others fixed so the output difference means something.", " chofex challenge query", "");
60092
+ lines2.push("Next experiment", "Change one variable at a time. Keep the others fixed so the output difference means something.", " andes challenge query", "");
60093
60093
  } else {
60094
60094
  lines2.push("The oracle is now silent. Your notebook contains all the evidence you will get.", "");
60095
60095
  }
60096
- lines2.push("Review your evidence", " chofex challenge notebook", " chofex challenge notebook --format csv > observations.csv");
60096
+ lines2.push("Review your evidence", " andes challenge notebook", " andes challenge notebook --format csv > observations.csv");
60097
60097
  return lines2.join(`
60098
60098
  `);
60099
60099
  };
@@ -60124,7 +60124,7 @@ var notebookTableText = (observations, challengeClosed = false) => {
60124
60124
  "CASE FILE: no observations",
60125
60125
  "El challenge está cerrado. Revisa el ranking final.",
60126
60126
  "",
60127
- "Siguiente: chofex challenge ranking"
60127
+ "Siguiente: andes challenge ranking"
60128
60128
  ].join(`
60129
60129
  `);
60130
60130
  }
@@ -60132,7 +60132,7 @@ var notebookTableText = (observations, challengeClosed = false) => {
60132
60132
  "CASE FILE: no observations yet",
60133
60133
  "The machine has not revealed anything. Start with one ordinary shipment.",
60134
60134
  "",
60135
- "Next: chofex challenge query"
60135
+ "Next: andes challenge query"
60136
60136
  ].join(`
60137
60137
  `);
60138
60138
  }
@@ -60162,16 +60162,16 @@ var notebookTableText = (observations, challengeClosed = false) => {
60162
60162
  });
60163
60163
  const lines2 = [`CASE FILE: ${observationLabel}`, "", header, ...rows, ""];
60164
60164
  if (challengeClosed) {
60165
- lines2.push("El challenge está cerrado. Este cuaderno queda disponible como historial.", "Siguiente: chofex challenge ranking");
60165
+ lines2.push("El challenge está cerrado. Este cuaderno queda disponible como historial.", "Siguiente: andes challenge ranking");
60166
60166
  return lines2.join(`
60167
60167
  `);
60168
60168
  }
60169
60169
  if (observations.length === 1) {
60170
- lines2.push("One answer is a clue, not a rule.", "Next: run a controlled experiment. Change one field and keep the other four fixed.", " chofex challenge query", "");
60170
+ lines2.push("One answer is a clue, not a rule.", "Next: run a controlled experiment. Change one field and keep the other four fixed.", " andes challenge query", "");
60171
60171
  } else {
60172
- lines2.push("Look for thresholds, fixed surcharges, and interactions between fields.", "Next: test a hypothesis with a controlled query, or encode it in your solution.", " chofex challenge query", "");
60172
+ lines2.push("Look for thresholds, fixed surcharges, and interactions between fields.", "Next: test a hypothesis with a controlled query, or encode it in your solution.", " andes challenge query", "");
60173
60173
  }
60174
- lines2.push("Prepare your replacement", " chofex challenge init", " chofex challenge test --source ./shipping.js");
60174
+ lines2.push("Prepare your replacement", " andes challenge init", " andes challenge test --source ./shipping.js");
60175
60175
  return lines2.join(`
60176
60176
  `);
60177
60177
  };
@@ -60199,7 +60199,7 @@ var challengeTestText = (result3) => {
60199
60199
  `${result3.matchedObservations} / ${result3.observationCount} comportamientos visibles pasan`
60200
60200
  ];
60201
60201
  if (result3.accuracy === 1) {
60202
- lines3.push("", "Todo pasa.", "Eso todavía no significa que el scheduler sea correcto en producción.", "Antes de evaluar, el participante debe revisar la evidencia y tomar la decisión de release.", "", "Siguiente: discutan una traza de falla concreta y creen review.json con las palabras del participante.", "Luego usa una evaluación oficial solo si su decisión lo permite", " chofex challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json");
60202
+ lines3.push("", "Todo pasa.", "Eso todavía no significa que el scheduler sea correcto en producción.", "Antes de evaluar, el participante debe revisar la evidencia y tomar la decisión de release.", "", "Siguiente: discutan una traza de falla concreta y creen review.json con las palabras del participante.", "Luego usa una evaluación oficial solo si su decisión lo permite", " andes challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json");
60203
60203
  return lines3.join(`
60204
60204
  `);
60205
60205
  }
@@ -60231,9 +60231,9 @@ var challengeTestText = (result3) => {
60231
60231
  }
60232
60232
  }
60233
60233
  if (result3.accuracy === 1) {
60234
- lines2.push("", "Your model explains the notebook. That is necessary, but hidden cases may expose missing rules.", "Next: evaluate only when your experiments cover meaningful boundaries", " chofex challenge evaluate --source ./shipping.js");
60234
+ lines2.push("", "Your model explains the notebook. That is necessary, but hidden cases may expose missing rules.", "Next: evaluate only when your experiments cover meaningful boundaries", " andes challenge evaluate --source ./shipping.js");
60235
60235
  } else {
60236
- lines2.push("", "Next: edit shipping.js, explain the mismatches, and test again for free", " chofex challenge test --source ./shipping.js");
60236
+ lines2.push("", "Next: edit shipping.js, explain the mismatches, and test again for free", " andes challenge test --source ./shipping.js");
60237
60237
  }
60238
60238
  return lines2.join(`
60239
60239
  `);
@@ -60247,9 +60247,9 @@ var challengeEvaluateText = (result3) => {
60247
60247
  if (result3.rank !== undefined) {
60248
60248
  lines3.push(`Puesto #${result3.rank}`);
60249
60249
  }
60250
- lines3.push(`Evaluaciones oficiales restantes ${result3.evaluationsRemaining} / ${result3.evaluationsLimit}`, "", result3.shareText, "", "Siguiente: consulta el ranking", " chofex challenge ranking --challenge broken-agent");
60250
+ lines3.push(`Evaluaciones oficiales restantes ${result3.evaluationsRemaining} / ${result3.evaluationsLimit}`, "", result3.shareText, "", "Siguiente: consulta el ranking", " andes challenge ranking --challenge broken-agent");
60251
60251
  if (result3.evaluationsRemaining > 0) {
60252
- lines3.push("", "El veredicto es un solo puntaje. No dice qué caso falló. Razona antes de volver a enviar.", " chofex challenge test --challenge broken-agent --source ./scheduler.js");
60252
+ lines3.push("", "El veredicto es un solo puntaje. No dice qué caso falló. Razona antes de volver a enviar.", " andes challenge test --challenge broken-agent --source ./scheduler.js");
60253
60253
  }
60254
60254
  return lines3.join(`
60255
60255
  `);
@@ -60263,9 +60263,9 @@ var challengeEvaluateText = (result3) => {
60263
60263
  ];
60264
60264
  if (result3.rank !== undefined)
60265
60265
  lines2.push(`Rank #${result3.rank}`);
60266
- lines2.push(`Official evaluations remaining ${result3.evaluationsRemaining} / ${result3.evaluationsLimit}`, "", result3.shareText, "", "Next: inspect the leaderboard", " chofex challenge ranking");
60266
+ lines2.push(`Official evaluations remaining ${result3.evaluationsRemaining} / ${result3.evaluationsLimit}`, "", result3.shareText, "", "Next: inspect the leaderboard", " andes challenge ranking");
60267
60267
  if (result3.evaluationsRemaining > 0) {
60268
- lines2.push("", "Before spending another evaluation, improve and retest your model against the notebook.", " chofex challenge test --source ./shipping.js");
60268
+ lines2.push("", "Before spending another evaluation, improve and retest your model against the notebook.", " andes challenge test --source ./shipping.js");
60269
60269
  }
60270
60270
  return lines2.join(`
60271
60271
  `);
@@ -60324,9 +60324,9 @@ var registrationPartsText = (result3) => {
60324
60324
  lines2.push(` ${mark} ${part.title}${detail}`);
60325
60325
  }
60326
60326
  if (result3.requirements.canSubmitApplication) {
60327
- lines2.push("", "Ready to submit: chofex register");
60327
+ lines2.push("", "Ready to submit: andes register");
60328
60328
  } else if (result3.requirements.stage === "draft") {
60329
- lines2.push("", "Complete and submit with `chofex register`.");
60329
+ lines2.push("", "Complete and submit with `andes register`.");
60330
60330
  }
60331
60331
  return lines2.join(`
60332
60332
  `);
@@ -60509,8 +60509,8 @@ Repara \`scheduler.js\` sin cambiar la interfaz exportada
60509
60509
 
60510
60510
  \`\`\`sh
60511
60511
  npm test
60512
- chofex challenge test --challenge broken-agent --source ./scheduler.js
60513
- chofex challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json
60512
+ andes challenge test --challenge broken-agent --source ./scheduler.js
60513
+ andes challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json
60514
60514
  \`\`\`
60515
60515
 
60516
60516
  Los tests locales y públicos son ilimitados. Tienes **5 evaluaciones oficiales**
@@ -60833,6 +60833,7 @@ var createChallengeScaffold = exports_Effect.fn("createChallengeScaffold")(funct
60833
60833
  // src/metadata.ts
60834
60834
  import { readFileSync } from "node:fs";
60835
60835
  import { basename } from "node:path";
60836
+ var isStandaloneBuild = typeof CHOFEX_VERSION !== "undefined";
60836
60837
  var readMetadata = () => {
60837
60838
  if (typeof CHOFEX_VERSION !== "undefined") {
60838
60839
  return { name: "chofex-cli", version: CHOFEX_VERSION };
@@ -60845,7 +60846,11 @@ var readMetadata = () => {
60845
60846
  var metadata = readMetadata();
60846
60847
  var cliVersion = metadata.version;
60847
60848
  var cliPackageName = metadata.name;
60848
- var invokedAsAndes = /^andes(?:\.cmd|\.exe)?$/.test(basename(process.argv[1] ?? ""));
60849
+ var commandPath = process.argv[1] ?? "";
60850
+ if (isStandaloneBuild) {
60851
+ commandPath = process.argv0;
60852
+ }
60853
+ var invokedAsAndes = /^andes(?:\.cmd|\.exe)?$/.test(basename(commandPath));
60849
60854
  var cliCommandName = invokedAsAndes ? "andes" : "chofex";
60850
60855
 
60851
60856
  // src/cli-root.ts
@@ -60925,7 +60930,7 @@ var registrationLookupErrorText = (error2) => {
60925
60930
  if (error2.code !== "REGISTRATION_NOT_FOUND")
60926
60931
  return;
60927
60932
  return `No registration found.
60928
- Next command: chofex register`;
60933
+ Next command: andes register`;
60929
60934
  };
60930
60935
  var requirementsText = (result3) => {
60931
60936
  const { registration, requirements } = result3;
@@ -60941,7 +60946,7 @@ var requirementsText = (result3) => {
60941
60946
  return [
60942
60947
  "Application received. A seat has not been assigned.",
60943
60948
  result3.admission?.notice ?? challengeAdmissionNotice,
60944
- "Next command: chofex challenge"
60949
+ "Next command: andes challenge"
60945
60950
  ].join(`
60946
60951
  `);
60947
60952
  }
@@ -60954,7 +60959,7 @@ Review feedback: ${rejectionReason}`;
60954
60959
  let nextCommand = "";
60955
60960
  if (requirements.stage === "accepted") {
60956
60961
  nextCommand = `
60957
- Next command: chofex confirm`;
60962
+ Next command: andes confirm`;
60958
60963
  }
60959
60964
  let missing2 = "";
60960
60965
  if (requirements.missing.length > 0) {
@@ -60989,7 +60994,7 @@ var badgeText = (result3) => {
60989
60994
  return "Tu carnet se está generando.";
60990
60995
  }
60991
60996
  if (result3.status === "failed") {
60992
- return "No se pudo generar tu carnet. Ejecuta `chofex badge regenerate` para intentarlo de nuevo.";
60997
+ return "No se pudo generar tu carnet. Ejecuta `andes badge regenerate` para intentarlo de nuevo.";
60993
60998
  }
60994
60999
  return "Todavía no tienes un carnet.";
60995
61000
  };
@@ -61014,13 +61019,13 @@ var challengeQuickstart = {
61014
61019
  {
61015
61020
  step: 1,
61016
61021
  action: "Inicia sesión",
61017
- command: "chofex login",
61022
+ command: "andes login",
61018
61023
  note: "Abre la autenticación de Clerk en tu navegador."
61019
61024
  },
61020
61025
  {
61021
61026
  step: 2,
61022
61027
  action: "Crea el repositorio del challenge",
61023
- command: "chofex challenge init --challenge broken-agent",
61028
+ command: "andes challenge init --challenge broken-agent",
61024
61029
  note: "Crea broken-agent/ con el contrato, el scheduler y siete tests públicos sin sobrescribir trabajo existente."
61025
61030
  },
61026
61031
  {
@@ -61032,7 +61037,7 @@ var challengeQuickstart = {
61032
61037
  {
61033
61038
  step: 4,
61034
61039
  action: "Revisa tu presupuesto",
61035
- command: "chofex challenge show --challenge broken-agent",
61040
+ command: "andes challenge show --challenge broken-agent",
61036
61041
  note: "Muestra las evaluaciones oficiales restantes y tu mejor puntaje."
61037
61042
  },
61038
61043
  {
@@ -61050,7 +61055,7 @@ var challengeQuickstart = {
61050
61055
  {
61051
61056
  step: 7,
61052
61057
  action: "Ejecuta los tests públicos",
61053
- command: "chofex challenge test --challenge broken-agent --source ./scheduler.js",
61058
+ command: "andes challenge test --challenge broken-agent --source ./scheduler.js",
61054
61059
  note: "Es seguro repetirlos y no consumen evaluaciones oficiales."
61055
61060
  },
61056
61061
  {
@@ -61062,7 +61067,7 @@ var challengeQuickstart = {
61062
61067
  {
61063
61068
  step: 9,
61064
61069
  action: "Crea el handoff de evaluación",
61065
- command: "chofex challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json",
61070
+ command: "andes challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json",
61066
61071
  note: "Devuelve un enlace de aprobación sin consumir una evaluación oficial."
61067
61072
  },
61068
61073
  {
@@ -61074,17 +61079,17 @@ var challengeQuickstart = {
61074
61079
  {
61075
61080
  step: 11,
61076
61081
  action: "Solicita el veredicto oculto",
61077
- command: "chofex challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json",
61082
+ command: "andes challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json",
61078
61083
  note: "Repite el mismo comando antes de que venza la aprobación; recién entonces consume una evaluación."
61079
61084
  },
61080
61085
  {
61081
61086
  step: 12,
61082
61087
  action: "Consulta el ranking",
61083
- command: "chofex challenge ranking --challenge broken-agent",
61088
+ command: "andes challenge ranking --challenge broken-agent",
61084
61089
  note: "Se revela el 1 de octubre a las 15:00, hora de Perú."
61085
61090
  }
61086
61091
  ],
61087
- helpCommand: "chofex challenge test --help"
61092
+ helpCommand: "andes challenge test --help"
61088
61093
  };
61089
61094
  var launchNoticeFor = (slug) => {
61090
61095
  const challenge = challengeBySlug(slug);
@@ -61108,12 +61113,12 @@ var challengeQuickstartText = (participationState, launchNotice) => {
61108
61113
  if (launchNotice)
61109
61114
  lines2.push("", "LAUNCH NOTICE", launchNotice);
61110
61115
  if (participationState === "closed") {
61111
- lines2.push("", "RANKING FINAL", " chofex challenge ranking");
61116
+ lines2.push("", "RANKING FINAL", " andes challenge ranking");
61112
61117
  return lines2.join(`
61113
61118
  `);
61114
61119
  }
61115
61120
  if (participationState === "scheduled") {
61116
- lines2.push("", "PRÓXIMAMENTE", " chofex challenge list");
61121
+ lines2.push("", "PRÓXIMAMENTE", " andes challenge list");
61117
61122
  return lines2.join(`
61118
61123
  `);
61119
61124
  }
@@ -61131,7 +61136,7 @@ var optionalString = (name, description) => exports_Flag.string(name).pipe(expor
61131
61136
  var challengeFlag = exports_Flag.string("challenge").pipe(exports_Flag.withDefault(defaultChallengeSlug), exports_Flag.withDescription("Challenge slug (default: broken-agent)"));
61132
61137
  var sourceFlag = optionalString("source", "JavaScript challenge solution file");
61133
61138
  var reviewFlag = optionalString("review", "Participant-authored Broken Agent engineering review JSON");
61134
- var officialEvaluateRetryCommand = "chofex challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json";
61139
+ var officialEvaluateRetryCommand = "andes challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json";
61135
61140
  var evaluationErrorText = (error2) => {
61136
61141
  if (error2.code === "CHALLENGE_ENGINE_UNAVAILABLE") {
61137
61142
  return [
@@ -61193,7 +61198,7 @@ var challengeInitText = (result3) => {
61193
61198
  "",
61194
61199
  "Siguiente: continúa endureciendo el scheduler y ejecuta los tests públicos",
61195
61200
  ` cd ${result3.path} && npm test`,
61196
- " chofex challenge test --challenge broken-agent --source ./scheduler.js"
61201
+ " andes challenge test --challenge broken-agent --source ./scheduler.js"
61197
61202
  ].join(`
61198
61203
  `);
61199
61204
  }
@@ -61206,7 +61211,7 @@ var challengeInitText = (result3) => {
61206
61211
  ` cd ${result3.path} && npm test`,
61207
61212
  "",
61208
61213
  "Luego repara scheduler.js y pruébalo sin consumir evaluaciones:",
61209
- " chofex challenge test --challenge broken-agent --source ./scheduler.js"
61214
+ " andes challenge test --challenge broken-agent --source ./scheduler.js"
61210
61215
  ].join(`
61211
61216
  `);
61212
61217
  }
@@ -61215,8 +61220,8 @@ var challengeInitText = (result3) => {
61215
61220
  `${result3.path} already exists. Left it unchanged.`,
61216
61221
  "",
61217
61222
  "Next: keep investigating, then test your current solution",
61218
- " chofex challenge query",
61219
- ` chofex challenge test --source ./${result3.path}`
61223
+ " andes challenge query",
61224
+ ` andes challenge test --source ./${result3.path}`
61220
61225
  ].join(`
61221
61226
  `);
61222
61227
  }
@@ -61225,10 +61230,10 @@ var challengeInitText = (result3) => {
61225
61230
  "A documented baseline is ready for the rules you discover.",
61226
61231
  "",
61227
61232
  "Next: probe the machine",
61228
- " chofex challenge query",
61233
+ " andes challenge query",
61229
61234
  "",
61230
61235
  `Then edit ${result3.path} and test it safely:`,
61231
- ` chofex challenge test --source ./${result3.path}`
61236
+ ` andes challenge test --source ./${result3.path}`
61232
61237
  ].join(`
61233
61238
  `);
61234
61239
  };
@@ -61237,7 +61242,7 @@ var listCommand = exports_Command.make("list", {}, exports_Effect.fn("challengeL
61237
61242
  yield* execute(options.output, listChallenges({ apiUrl: options.apiUrl }), challengeListText);
61238
61243
  })).pipe(exports_Command.withDescription("Discover available challenges, opening dates, and scoring formats. No login required."), exports_Command.withExamples([
61239
61244
  {
61240
- command: "chofex challenge list",
61245
+ command: "andes challenge list",
61241
61246
  description: "See which challenge is currently playable"
61242
61247
  }
61243
61248
  ]));
@@ -61261,11 +61266,11 @@ var initCommand = exports_Command.make("init", { challenge: challengeFlag }, exp
61261
61266
  yield* execute(options.output, operation, challengeInitText);
61262
61267
  })).pipe(exports_Command.withDescription("Crea el starter de un challenge sin sobrescribir trabajo existente."), exports_Command.withExamples([
61263
61268
  {
61264
- command: "chofex challenge init --challenge broken-agent",
61269
+ command: "andes challenge init --challenge broken-agent",
61265
61270
  description: "Prepara el repositorio de Broken Agent"
61266
61271
  },
61267
61272
  {
61268
- command: "chofex challenge init --challenge broken-agent",
61273
+ command: "andes challenge init --challenge broken-agent",
61269
61274
  description: "Usa explícitamente el slug del challenge"
61270
61275
  }
61271
61276
  ]));
@@ -61275,7 +61280,7 @@ var showCommand = exports_Command.make("show", { challenge: challengeFlag }, exp
61275
61280
  yield* execute(options.output, getChallengeAttempt({ apiUrl: options.apiUrl, token }, challenge), challengeShowText);
61276
61281
  })).pipe(exports_Command.withDescription("Consulta presupuesto, puntaje y progreso del challenge. Requiere iniciar sesión."), exports_Command.withExamples([
61277
61282
  {
61278
- command: "chofex challenge show",
61283
+ command: "andes challenge show",
61279
61284
  description: "Revisa tu progreso antes de consumir intentos limitados"
61280
61285
  }
61281
61286
  ]));
@@ -61311,11 +61316,11 @@ var queryCommand = exports_Command.make("query", {
61311
61316
  yield* execute(options.output, operation, challengeQueryText);
61312
61317
  })).pipe(exports_Command.withDescription("Send one shipment to the undocumented oracle. A successful query consumes one limited request. Requires sign-in."), exports_Command.withExamples([
61313
61318
  {
61314
- command: "chofex challenge query --challenge black-box --distance 10 --weight 3 --hour 14 --fragile false --express false",
61319
+ command: "andes challenge query --challenge black-box --distance 10 --weight 3 --hour 14 --fragile false --express false",
61315
61320
  description: "Spend one oracle query"
61316
61321
  },
61317
61322
  {
61318
- command: "chofex challenge query --challenge black-box --input shipment.json",
61323
+ command: "andes challenge query --challenge black-box --input shipment.json",
61319
61324
  description: "Read the shipment fields from a JSON file"
61320
61325
  }
61321
61326
  ]));
@@ -61333,11 +61338,11 @@ var notebookCommand = exports_Command.make("notebook", { challenge: challengeFla
61333
61338
  });
61334
61339
  })).pipe(exports_Command.withDescription("Review every input and price you observed. Export table, JSON, or CSV for analysis. Requires sign-in."), exports_Command.withExamples([
61335
61340
  {
61336
- command: "chofex challenge notebook --challenge black-box",
61341
+ command: "andes challenge notebook --challenge black-box",
61337
61342
  description: "Read observations in a terminal table"
61338
61343
  },
61339
61344
  {
61340
- command: "chofex challenge notebook --challenge black-box --format csv > observations.csv",
61345
+ command: "andes challenge notebook --challenge black-box --format csv > observations.csv",
61341
61346
  description: "Save observations for a spreadsheet"
61342
61347
  }
61343
61348
  ]));
@@ -61351,7 +61356,7 @@ var testCommand = exports_Command.make("test", { challenge: challengeFlag, sourc
61351
61356
  yield* execute(options.output, operation, challengeTestText);
61352
61357
  })).pipe(exports_Command.withDescription("Run the challenge's public tests. Safe to repeat; official evaluations are not consumed. Requires sign-in."), exports_Command.withExamples([
61353
61358
  {
61354
- command: "chofex challenge test --challenge broken-agent --source ./scheduler.js",
61359
+ command: "andes challenge test --challenge broken-agent --source ./scheduler.js",
61355
61360
  description: "Ejecuta los tests públicos de Broken Agent"
61356
61361
  }
61357
61362
  ]));
@@ -61369,7 +61374,7 @@ var evaluateCommand = exports_Command.make("evaluate", { challenge: challengeFla
61369
61374
  yield* execute(options.output, operation, challengeEvaluateText, evaluationErrorText);
61370
61375
  })).pipe(exports_Command.withDescription("Score a solution on hidden cases. Broken Agent requires participant browser approval before a limited evaluation is consumed."), exports_Command.withExamples([
61371
61376
  {
61372
- command: "chofex challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json",
61377
+ command: "andes challenge evaluate --challenge broken-agent --source ./scheduler.js --review ./review.json",
61373
61378
  description: "Consume una evaluación oficial cuando tu solución esté lista"
61374
61379
  }
61375
61380
  ]));
@@ -61378,7 +61383,7 @@ var rankingCommand = exports_Command.make("ranking", { challenge: challengeFlag
61378
61383
  yield* execute(options.output, getChallengeRanking({ apiUrl: options.apiUrl }, challenge), challengeRankingText);
61379
61384
  })).pipe(exports_Command.withDescription("View the public leaderboard. No login required and no challenge budget consumed."), exports_Command.withExamples([
61380
61385
  {
61381
- command: "chofex challenge ranking --challenge broken-agent",
61386
+ command: "andes challenge ranking --challenge broken-agent",
61382
61387
  description: "Compara puntajes oficiales"
61383
61388
  }
61384
61389
  ]));
@@ -61396,13 +61401,13 @@ var challengeCommand = exports_Command.make("challenge", {}, exports_Effect.fn("
61396
61401
  if (participationState === "closed") {
61397
61402
  const rankingStep = challengeQuickstart.workflow.at(-1);
61398
61403
  workflow = rankingStep ? [rankingStep] : [];
61399
- helpCommand = "chofex challenge ranking --help";
61404
+ helpCommand = "andes challenge ranking --help";
61400
61405
  story = [];
61401
61406
  mission = "El Challenge 2 terminó. El ranking final sigue disponible.";
61402
61407
  rules = [];
61403
61408
  } else if (participationState === "scheduled") {
61404
61409
  workflow = [];
61405
- helpCommand = "chofex challenge list --help";
61410
+ helpCommand = "andes challenge list --help";
61406
61411
  story = [];
61407
61412
  mission = "El challenge todavía no está disponible.";
61408
61413
  rules = [];
@@ -61430,15 +61435,15 @@ var challengeCommand = exports_Command.make("challenge", {}, exports_Effect.fn("
61430
61435
  yield* exports_Console.log(challengeQuickstartText(participationState, launchNotice));
61431
61436
  })).pipe(exports_Command.withDescription("Compite en challenges técnicos obligatorios por un cupo. Ejecuta el comando sin subcomandos para abrir la guía del challenge actual."), exports_Command.withExamples([
61432
61437
  {
61433
- command: "chofex challenge",
61438
+ command: "andes challenge",
61434
61439
  description: "Abre la guía de Broken Agent"
61435
61440
  },
61436
61441
  {
61437
- command: "chofex challenge init --challenge broken-agent",
61442
+ command: "andes challenge init --challenge broken-agent",
61438
61443
  description: "Crea el repositorio de Broken Agent"
61439
61444
  },
61440
61445
  {
61441
- command: "chofex challenge test --help",
61446
+ command: "andes challenge test --help",
61442
61447
  description: "Revisa cómo ejecutar los tests públicos"
61443
61448
  }
61444
61449
  ]), exports_Command.withSubcommands([
@@ -63598,7 +63603,7 @@ var runInstaller = async (installDirectory, version) => {
63598
63603
  }
63599
63604
  return runProcess("bash", arguments_, script);
63600
63605
  };
63601
- var isStandaloneExecutable = () => typeof Bun !== "undefined" && Bun.isStandaloneExecutable;
63606
+ var isStandaloneExecutable = () => isStandaloneBuild;
63602
63607
  var assertSuccessful = (result3, program) => {
63603
63608
  if (result3.exitCode === 0)
63604
63609
  return;
@@ -63770,7 +63775,9 @@ var shouldAutoUpdateCli = async ({
63770
63775
  return pathIsInside(join3(npmRoot, cliPackageName), entryPath);
63771
63776
  };
63772
63777
  var runUpdatedCli = () => new Promise((resolve4, reject) => {
63773
- const child = spawn3(process.execPath, process.argv.slice(1), {
63778
+ const arguments_ = process.argv.slice(isStandaloneBuild ? 2 : 1);
63779
+ const child = spawn3(process.execPath, arguments_, {
63780
+ argv0: process.argv0,
63774
63781
  env: { ...process.env, CHOFEX_AUTO_UPDATE: "0" },
63775
63782
  stdio: "inherit"
63776
63783
  });
@@ -63799,7 +63806,7 @@ var rejectIfApplicationLocked = exports_Effect.fn("rejectIfApplicationLocked")(f
63799
63806
  if (status === "accepted") {
63800
63807
  message = "Already accepted. Your registration is complete.";
63801
63808
  if (requirements.stage === "accepted") {
63802
- message = "Already accepted. Run `chofex confirm` to complete your registration.";
63809
+ message = "Already accepted. Run `andes confirm` to complete your registration.";
63803
63810
  }
63804
63811
  }
63805
63812
  return yield* cliError("ACTIVE_APPLICATION_EXISTS", message, false, {
@@ -63825,11 +63832,11 @@ var registerCommand = exports_Command.make("register", { input: inputFlag2 }, ex
63825
63832
  yield* execute(options.output, operation, createdText);
63826
63833
  })).pipe(exports_Command.withDescription("Complete and submit an application for review"), exports_Command.withExamples([
63827
63834
  {
63828
- command: "chofex register",
63835
+ command: "andes register",
63829
63836
  description: "Fill or resume the application interactively"
63830
63837
  },
63831
63838
  {
63832
- command: "chofex --output json register --input application.json",
63839
+ command: "andes --output json register --input application.json",
63833
63840
  description: "Submit an application from an agent or script"
63834
63841
  }
63835
63842
  ]));
@@ -63941,11 +63948,11 @@ var confirmCommand = exports_Command.make("confirm", {
63941
63948
  yield* execute(options.output, operation, registrationText);
63942
63949
  })).pipe(exports_Command.withDescription("Provide private attendance details after acceptance"), exports_Command.withExamples([
63943
63950
  {
63944
- command: "chofex confirm",
63951
+ command: "andes confirm",
63945
63952
  description: "Complete accepted-participant details interactively"
63946
63953
  },
63947
63954
  {
63948
- command: "chofex --output json confirm --input attendance.json",
63955
+ command: "andes --output json confirm --input attendance.json",
63949
63956
  description: "Submit accepted-participant details from JSON"
63950
63957
  }
63951
63958
  ]));
@@ -64048,7 +64055,7 @@ var validateCommand = exports_Command.make("validate", { input: inputFlag2, stag
64048
64055
  yield* execute(options.output, operation, (result3) => `${result3.stage} input is valid.`);
64049
64056
  })).pipe(exports_Command.withDescription("Validate input without submitting it"), exports_Command.withExamples([
64050
64057
  {
64051
- command: "chofex --output json validate --stage application --input application.json",
64058
+ command: "andes --output json validate --stage application --input application.json",
64052
64059
  description: "Validate an application file locally"
64053
64060
  }
64054
64061
  ]));
@@ -64087,7 +64094,7 @@ var schemaCommand = exports_Command.make("schema", { stage: stageFlag }, exports
64087
64094
  yield* printJson(templateFor(stage));
64088
64095
  })).pipe(exports_Command.withDescription("Print a complete machine-readable input template"), exports_Command.withExamples([
64089
64096
  {
64090
- command: "chofex schema --stage acceptance",
64097
+ command: "andes schema --stage acceptance",
64091
64098
  description: "Print the post-acceptance input template"
64092
64099
  }
64093
64100
  ]));
@@ -64249,10 +64256,10 @@ var welcomeFormatter = (options) => {
64249
64256
  ${help}`;
64250
64257
  const width = Math.max(1, Math.min(options.columns ?? 80, 72));
64251
64258
  const shortcuts = [
64252
- "chofex login Sign in",
64253
- "chofex register Apply",
64254
- "chofex status Check your application",
64255
- "chofex --help All commands"
64259
+ "andes login Sign in",
64260
+ "andes register Apply",
64261
+ "andes status Check your application",
64262
+ "andes --help All commands"
64256
64263
  ];
64257
64264
  return `${welcome}
64258
64265
  ${shortcuts.flatMap((line) => wrap(line, width)).join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chofex-cli",
3
- "version": "0.1.202",
3
+ "version": "0.1.203",
4
4
  "description": "Command-line client for Hack the Andes",
5
5
  "type": "module",
6
6
  "bin": {