@garuda-agent/garuda 0.18.1 → 0.18.2

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 (35) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +1 -1
  3. package/dist/{acpCommand-JAYNMIMP.js → acpCommand-PUJHFWYU.js} +11 -12
  4. package/dist/advise-C777SZ5M.js +433 -0
  5. package/dist/buildInfo-Z4P7QAQL.js +8 -0
  6. package/dist/{chunk-QLBCM2YQ.js → chunk-2FIV2VZP.js} +2 -2
  7. package/dist/{chunk-TLA2PDGM.js → chunk-4BELTWP4.js} +5 -5
  8. package/dist/{chunk-JMH5W5DG.js → chunk-65NUEOI7.js} +44 -1
  9. package/dist/chunk-6JQTPW3P.js +88 -0
  10. package/dist/chunk-A5DLAXB4.js +1780 -0
  11. package/dist/{chunk-DQSCCE77.js → chunk-AX3A5KPH.js} +5 -5
  12. package/dist/chunk-CFDRP6XW.js +9 -0
  13. package/dist/chunk-E6YRCDSF.js +9 -0
  14. package/dist/{chunk-34WBDQBL.js → chunk-HP6EGFHV.js} +18 -18
  15. package/dist/{chunk-GKU62MHQ.js → chunk-LWNMEGDF.js} +2 -2
  16. package/dist/{chunk-5UDYQ5MK.js → chunk-STVFWSIL.js} +5 -7
  17. package/dist/{chunk-IKPGHM54.js → chunk-YEH2OONM.js} +3 -3
  18. package/dist/cli/index.js +39 -40
  19. package/dist/{evalCommand-BLJJ4G76.js → evalCommand-MRO6ENCA.js} +70 -42
  20. package/dist/{evalTune-W53KAD4V.js → evalTune-VL5RHYOG.js} +17 -18
  21. package/dist/{export-E677HIQS.js → export-ZPF3AMO6.js} +5 -5
  22. package/dist/{exportHtml-BMV73YRO.js → exportHtml-ISISG5HG.js} +4 -4
  23. package/dist/{inkChat-EVLYDC3K.js → inkChat-UDFX6GH6.js} +11 -12
  24. package/dist/{manager-L25IUXHW.js → manager-YH7722C2.js} +2 -2
  25. package/dist/runner-EBF6EOYM.js +97 -0
  26. package/dist/{setupCommand-OSOMFHDQ.js → setupCommand-YMF6I3MD.js} +8 -9
  27. package/dist/{tune-VX2WQTHS.js → tune-KSNKBPNJ.js} +8 -9
  28. package/package.json +1 -1
  29. package/dist/advise-HDKJGNBL.js +0 -195
  30. package/dist/buildInfo-K73FFI5S.js +0 -8
  31. package/dist/chunk-CWVXOSAA.js +0 -894
  32. package/dist/chunk-DUYLVGPY.js +0 -821
  33. package/dist/chunk-H7LIBGZT.js +0 -9
  34. package/dist/chunk-IYGJWX65.js +0 -9
  35. package/dist/chunk-NH72AELP.js +0 -48
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- serverCallText,
4
- serverResultSummary
5
- } from "./chunk-A2QAIRQL.js";
6
2
  import {
7
3
  receiptText,
8
4
  screenReaderMode
9
5
  } from "./chunk-2OYTNNUJ.js";
6
+ import {
7
+ serverCallText,
8
+ serverResultSummary
9
+ } from "./chunk-A2QAIRQL.js";
10
10
 
11
11
  // src/cli/renderer.ts
12
12
  import { styleText } from "util";
@@ -220,4 +220,4 @@ export {
220
220
  summariseCall,
221
221
  summariseResult
222
222
  };
223
- //# sourceMappingURL=chunk-DQSCCE77.js.map
223
+ //# sourceMappingURL=chunk-AX3A5KPH.js.map
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/version.ts
4
+ var VERSION = "0.18.2";
5
+
6
+ export {
7
+ VERSION
8
+ };
9
+ //# sourceMappingURL=chunk-CFDRP6XW.js.map
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/buildInfo.ts
4
+ var BUILD_COMMIT = true ? "fc82b442119fbfe9c40bd2903b344c7e1166b2a8" : void 0;
5
+
6
+ export {
7
+ BUILD_COMMIT
8
+ };
9
+ //# sourceMappingURL=chunk-E6YRCDSF.js.map
@@ -1,4 +1,18 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ colorDiff
4
+ } from "./chunk-VISKX36R.js";
5
+ import {
6
+ budgetNote,
7
+ chatStopMessage,
8
+ formatTokens,
9
+ formatUsd,
10
+ stopMessage,
11
+ usageLine
12
+ } from "./chunk-2OYTNNUJ.js";
13
+ import {
14
+ tourChoice
15
+ } from "./chunk-Y62J7PTD.js";
2
16
  import {
3
17
  AuditDirError,
4
18
  SPECIALIST_SPECS,
@@ -15,21 +29,10 @@ import {
15
29
  repoMapText,
16
30
  repoMapTool,
17
31
  verifyAuditDir
18
- } from "./chunk-5UDYQ5MK.js";
19
- import {
20
- colorDiff
21
- } from "./chunk-VISKX36R.js";
32
+ } from "./chunk-STVFWSIL.js";
22
33
  import {
23
34
  hasReceipt
24
35
  } from "./chunk-4QRTTRVK.js";
25
- import {
26
- budgetNote,
27
- chatStopMessage,
28
- formatTokens,
29
- formatUsd,
30
- stopMessage,
31
- usageLine
32
- } from "./chunk-2OYTNNUJ.js";
33
36
  import {
34
37
  isCostIncomplete,
35
38
  pendingChildTokens
@@ -38,9 +41,6 @@ import {
38
41
  WEB_SEARCH_USD,
39
42
  totalTokens
40
43
  } from "./chunk-7KBOIPUT.js";
41
- import {
42
- tourChoice
43
- } from "./chunk-Y62J7PTD.js";
44
44
  import {
45
45
  BUILTIN_COMMANDS
46
46
  } from "./chunk-MNE7HHX2.js";
@@ -562,10 +562,10 @@ async function exportCommand(runtime, renderer, file) {
562
562
  renderer.info("There is no conversation to export yet.");
563
563
  return;
564
564
  }
565
- const { sessionMarkdown, writeExport } = await import("./export-E677HIQS.js");
565
+ const { sessionMarkdown, writeExport } = await import("./export-ZPF3AMO6.js");
566
566
  const html = /^--html(\s|$)/.test(file);
567
567
  const name = html ? file.slice("--html".length).trim() : file;
568
- const text = html ? (await import("./exportHtml-BMV73YRO.js")).sessionHtml(records, id) : sessionMarkdown(records, id);
568
+ const text = html ? (await import("./exportHtml-ISISG5HG.js")).sessionHtml(records, id) : sessionMarkdown(records, id);
569
569
  const result = await writeExport(runtime.root, id, text, name, html ? ".html" : ".md");
570
570
  if ("problem" in result) renderer.warn(result.problem);
571
571
  else
@@ -1350,4 +1350,4 @@ export {
1350
1350
  statusOf,
1351
1351
  CommandArgs
1352
1352
  };
1353
- //# sourceMappingURL=chunk-34WBDQBL.js.map
1353
+ //# sourceMappingURL=chunk-HP6EGFHV.js.map
@@ -5,7 +5,7 @@ import {
5
5
  PYPROJECT,
6
6
  PYTEST_CHECK,
7
7
  lines
8
- } from "./chunk-CWVXOSAA.js";
8
+ } from "./chunk-A5DLAXB4.js";
9
9
 
10
10
  // src/evals/taskKit.ts
11
11
  var NODE_PKG = lines("{", ' "type": "module",', ' "private": true', "}");
@@ -5255,4 +5255,4 @@ export {
5255
5255
  chooseTasks,
5256
5256
  requiredToolchains
5257
5257
  };
5258
- //# sourceMappingURL=chunk-GKU62MHQ.js.map
5258
+ //# sourceMappingURL=chunk-LWNMEGDF.js.map
@@ -6,11 +6,9 @@ import {
6
6
  gateProjectSettings
7
7
  } from "./chunk-ULAJPMY7.js";
8
8
  import {
9
- mergedModels
10
- } from "./chunk-JMH5W5DG.js";
11
- import {
9
+ mergedModels,
12
10
  writeFileAtomic
13
- } from "./chunk-NH72AELP.js";
11
+ } from "./chunk-65NUEOI7.js";
14
12
  import {
15
13
  ReceiptCollector
16
14
  } from "./chunk-4QRTTRVK.js";
@@ -68,7 +66,7 @@ import {
68
66
  } from "./chunk-MNE7HHX2.js";
69
67
  import {
70
68
  VERSION
71
- } from "./chunk-IYGJWX65.js";
69
+ } from "./chunk-CFDRP6XW.js";
72
70
  import {
73
71
  TrustStore
74
72
  } from "./chunk-5DEWP3YX.js";
@@ -10188,7 +10186,7 @@ ${result.stderr.text}`)
10188
10186
  async startMcp(signal) {
10189
10187
  if (this.mcpServers.length === 0) return;
10190
10188
  this.mcpStarted ??= (async () => {
10191
- const { McpManager } = await import("./manager-L25IUXHW.js");
10189
+ const { McpManager } = await import("./manager-YH7722C2.js");
10192
10190
  const { AuthStore } = await import("./oauth-W6OK6XXO.js");
10193
10191
  const manager = new McpManager({
10194
10192
  root: this.root,
@@ -10487,4 +10485,4 @@ export {
10487
10485
  modelFacts,
10488
10486
  Runtime
10489
10487
  };
10490
- //# sourceMappingURL=chunk-5UDYQ5MK.js.map
10488
+ //# sourceMappingURL=chunk-STVFWSIL.js.map
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  taskHash
4
- } from "./chunk-DUYLVGPY.js";
4
+ } from "./chunk-6JQTPW3P.js";
5
5
  import {
6
6
  compareReports,
7
7
  costPerPass,
8
8
  formatComparison
9
- } from "./chunk-CWVXOSAA.js";
9
+ } from "./chunk-A5DLAXB4.js";
10
10
 
11
11
  // src/evals/tune.ts
12
12
  import { readFile } from "fs/promises";
@@ -331,4 +331,4 @@ export {
331
331
  parseProposal,
332
332
  tune
333
333
  };
334
- //# sourceMappingURL=chunk-IKPGHM54.js.map
334
+ //# sourceMappingURL=chunk-YEH2OONM.js.map
package/dist/cli/index.js CHANGED
@@ -16,29 +16,15 @@ import {
16
16
  runCommand,
17
17
  runTurnInTerminal,
18
18
  stopHandoff
19
- } from "../chunk-34WBDQBL.js";
19
+ } from "../chunk-HP6EGFHV.js";
20
20
  import {
21
- AutoApprover
22
- } from "../chunk-NXJ4XLB5.js";
23
- import {
24
- DEFAULT_MAX_TOKENS,
25
- Runtime,
26
- ToolRegistry,
27
- auditDirFor,
28
- defaultTools,
29
- rebuildState,
30
- runAgent,
31
- signature
32
- } from "../chunk-5UDYQ5MK.js";
33
- import "../chunk-G2AX7MGS.js";
21
+ SwitchApprover,
22
+ TerminalApprover
23
+ } from "../chunk-VISKX36R.js";
34
24
  import {
35
25
  Notifier,
36
26
  pickChannel
37
27
  } from "../chunk-N4I6YS3E.js";
38
- import "../chunk-ULAJPMY7.js";
39
- import {
40
- loadCatalog
41
- } from "../chunk-JMH5W5DG.js";
42
28
  import {
43
29
  NO_MODEL,
44
30
  chooseModel,
@@ -46,21 +32,37 @@ import {
46
32
  loadModelsConfig,
47
33
  providerKeySource,
48
34
  resolveModel
49
- } from "../chunk-QLBCM2YQ.js";
50
- import "../chunk-NH72AELP.js";
51
- import {
52
- SwitchApprover,
53
- TerminalApprover
54
- } from "../chunk-VISKX36R.js";
35
+ } from "../chunk-2FIV2VZP.js";
55
36
  import {
56
37
  PlainRenderer
57
- } from "../chunk-DQSCCE77.js";
58
- import "../chunk-4QRTTRVK.js";
59
- import "../chunk-A2QAIRQL.js";
38
+ } from "../chunk-AX3A5KPH.js";
60
39
  import {
61
40
  formatTokens,
62
41
  stopMessage
63
42
  } from "../chunk-2OYTNNUJ.js";
43
+ import {
44
+ tourChoice
45
+ } from "../chunk-Y62J7PTD.js";
46
+ import {
47
+ AutoApprover
48
+ } from "../chunk-NXJ4XLB5.js";
49
+ import {
50
+ DEFAULT_MAX_TOKENS,
51
+ Runtime,
52
+ ToolRegistry,
53
+ auditDirFor,
54
+ defaultTools,
55
+ rebuildState,
56
+ runAgent,
57
+ signature
58
+ } from "../chunk-STVFWSIL.js";
59
+ import "../chunk-G2AX7MGS.js";
60
+ import "../chunk-ULAJPMY7.js";
61
+ import {
62
+ loadCatalog
63
+ } from "../chunk-65NUEOI7.js";
64
+ import "../chunk-4QRTTRVK.js";
65
+ import "../chunk-A2QAIRQL.js";
64
66
  import {
65
67
  FileSessionStore,
66
68
  closeOpenToolCalls,
@@ -73,9 +75,6 @@ import {
73
75
  redoPoint
74
76
  } from "../chunk-NLS7GMF7.js";
75
77
  import "../chunk-7KBOIPUT.js";
76
- import {
77
- tourChoice
78
- } from "../chunk-Y62J7PTD.js";
79
78
  import {
80
79
  loadSearchConfig
81
80
  } from "../chunk-B25VL4RU.js";
@@ -86,7 +85,7 @@ import "../chunk-42DSA4EA.js";
86
85
  import "../chunk-EU7PA45O.js";
87
86
  import {
88
87
  VERSION
89
- } from "../chunk-IYGJWX65.js";
88
+ } from "../chunk-CFDRP6XW.js";
90
89
  import "../chunk-5DEWP3YX.js";
91
90
  import "../chunk-PZS3V6P3.js";
92
91
  import "../chunk-QANRZW7W.js";
@@ -967,7 +966,7 @@ async function main() {
967
966
  "--test-command <cmd>",
968
967
  "with --from-git: the test command; {files} takes the test files (default: detected)"
969
968
  ).action(async (options) => {
970
- const { runEvalCommand } = await import("../evalCommand-BLJJ4G76.js");
969
+ const { runEvalCommand } = await import("../evalCommand-MRO6ENCA.js");
971
970
  process.exitCode = await runEvalCommand({
972
971
  ...options,
973
972
  model: options.model ?? process.env.GARUDA_MODEL,
@@ -984,14 +983,14 @@ async function main() {
984
983
  "stop before a round that would pass this (default 20)",
985
984
  (v) => Number(v)
986
985
  ).option("--seed <n>", "seed for the run order and the intervals (default 1)", (v) => Number(v)).option("--yes", "start without the question").option("--parallel <n>", "runs at the same time in each score (default 4)", (v) => Number(v)).action(async (options) => {
987
- const { runEvalTune } = await import("../evalTune-W53KAD4V.js");
986
+ const { runEvalTune } = await import("../evalTune-VL5RHYOG.js");
988
987
  process.exitCode = await runEvalTune({
989
988
  ...options,
990
989
  model: options.model ?? process.env.GARUDA_MODEL
991
990
  });
992
991
  });
993
992
  evalCommand.command("compare").description("compare two eval reports of the same tasks (pass rates with a paired interval)").argument("<a>", "report.json, or its run folder (.garuda/evals/<run-id>)").argument("<b>", "the second report").option("--seed <n>", "seed for the bootstrap (default 1)", (v) => Number(v)).action(async (a, b, options) => {
994
- const { runEvalCompare } = await import("../evalCommand-BLJJ4G76.js");
993
+ const { runEvalCompare } = await import("../evalCommand-MRO6ENCA.js");
995
994
  process.exitCode = await runEvalCompare(a, b, options);
996
995
  });
997
996
  program.command("advise").description(
@@ -1004,8 +1003,8 @@ async function main() {
1004
1003
  "--max-cost <usd>",
1005
1004
  "stop before a model that would pass this (default 2)",
1006
1005
  (v) => Number(v)
1007
- ).option("--seed <n>", "seed for the run order and the intervals (default 1)", (v) => Number(v)).option("--yes", "start without the question").action(async (options) => {
1008
- const { runAdvise } = await import("../advise-HDKJGNBL.js");
1006
+ ).option("--seed <n>", "seed for the run order and the intervals (default 1)", (v) => Number(v)).option("--parallel <n>", "runs at the same time (default 4)", (v) => Number(v)).option("--yes", "start without the question").action(async (options) => {
1007
+ const { runAdvise } = await import("../advise-C777SZ5M.js");
1009
1008
  process.exitCode = await runAdvise(options);
1010
1009
  });
1011
1010
  program.command("init").description(
@@ -1029,13 +1028,13 @@ async function main() {
1029
1028
  program.command("setup").description(
1030
1029
  "choose a provider and model and store its key (~/.garuda/credentials, only you can read it); editors run it to sign in"
1031
1030
  ).option("--show", "show the model and where each key comes from (keys masked)").option("--forget [key-name]", "remove a stored key, or all of them").action(async (options) => {
1032
- const { setupCommand, terminalIO } = await import("../setupCommand-OSOMFHDQ.js");
1031
+ const { setupCommand, terminalIO } = await import("../setupCommand-YMF6I3MD.js");
1033
1032
  process.exitCode = await setupCommand(options, { io: await terminalIO() });
1034
1033
  });
1035
1034
  program.command("acp").description(
1036
1035
  "run as an agent for an editor over the Agent Client Protocol (VS Code with an extension, Zed, JetBrains, Neovim, Emacs); the editor starts it"
1037
1036
  ).argument("[action]", "setup: run garuda setup (the editor's sign-in, ACP Terminal Auth)").option("-m, --model <id>", "model id (or set GARUDA_MODEL)").action(async (action, options) => {
1038
- const { acpCommand } = await import("../acpCommand-JAYNMIMP.js");
1037
+ const { acpCommand } = await import("../acpCommand-PUJHFWYU.js");
1039
1038
  process.exitCode = await acpCommand({
1040
1039
  ...options,
1041
1040
  ...action === void 0 ? {} : { action }
@@ -1345,7 +1344,7 @@ async function start(options, program) {
1345
1344
  screenReader: screenReaderMode()
1346
1345
  });
1347
1346
  {
1348
- const { BUILD_COMMIT } = await import("../buildInfo-K73FFI5S.js");
1347
+ const { BUILD_COMMIT } = await import("../buildInfo-Z4P7QAQL.js");
1349
1348
  const { CHAT_STALE, garudaCommit, staleBuildNote } = await import("../buildCheck-HB46NWLX.js");
1350
1349
  const stale = staleBuildNote(BUILD_COMMIT, await garudaCommit(), CHAT_STALE);
1351
1350
  if (stale !== void 0) {
@@ -1438,7 +1437,7 @@ function wantsInk() {
1438
1437
  }
1439
1438
  async function loadInk(renderer) {
1440
1439
  try {
1441
- return await import("../inkChat-EVLYDC3K.js");
1440
+ return await import("../inkChat-UDFX6GH6.js");
1442
1441
  } catch (error) {
1443
1442
  renderer.info(`Plain chat (Ink is not available: ${error.message.split("\n")[0]}).`);
1444
1443
  return void 0;
@@ -4,16 +4,17 @@ import {
4
4
  HELD_OUT_TASKS,
5
5
  chooseTasks,
6
6
  requiredToolchains
7
- } from "./chunk-GKU62MHQ.js";
7
+ } from "./chunk-LWNMEGDF.js";
8
8
  import {
9
- formatReport,
10
- isAuthFailure,
11
- isMcpFailure,
12
- isSetupFailure,
13
- reportV2,
14
- runEvals,
15
- summarize
16
- } from "./chunk-DUYLVGPY.js";
9
+ reportV2
10
+ } from "./chunk-6JQTPW3P.js";
11
+ import {
12
+ garudaCommit,
13
+ staleBuildNote
14
+ } from "./chunk-YAQ6QLKB.js";
15
+ import {
16
+ BUILD_COMMIT
17
+ } from "./chunk-E6YRCDSF.js";
17
18
  import {
18
19
  DEFAULT_COMMITS,
19
20
  DEFAULT_SEED,
@@ -22,39 +23,37 @@ import {
22
23
  checkToolchains,
23
24
  compareReports,
24
25
  formatComparison,
26
+ formatReport,
27
+ isAuthFailure,
28
+ isMcpFailure,
29
+ isSetupFailure,
25
30
  loadRepoSuite,
26
31
  loadReport,
27
32
  prepareToolchain,
28
33
  repoEvalTasks,
34
+ runEvals,
29
35
  saveRepoSuite,
30
36
  shuffled,
37
+ summarize,
31
38
  toolchainId
32
- } from "./chunk-CWVXOSAA.js";
39
+ } from "./chunk-A5DLAXB4.js";
33
40
  import {
34
- BUILD_COMMIT
35
- } from "./chunk-H7LIBGZT.js";
36
- import {
37
- garudaCommit,
38
- staleBuildNote
39
- } from "./chunk-YAQ6QLKB.js";
41
+ NO_MODEL,
42
+ chooseModel,
43
+ keepProviderKeys,
44
+ loadModelsConfig,
45
+ providerKeyValue,
46
+ resolveModel
47
+ } from "./chunk-2FIV2VZP.js";
40
48
  import "./chunk-NXJ4XLB5.js";
41
49
  import {
42
50
  CODE_INDEX_MODES,
43
51
  DEFAULT_CODE_INDEX_MODE,
44
52
  detectProfiles
45
- } from "./chunk-5UDYQ5MK.js";
53
+ } from "./chunk-STVFWSIL.js";
46
54
  import "./chunk-G2AX7MGS.js";
47
55
  import "./chunk-ULAJPMY7.js";
48
- import "./chunk-JMH5W5DG.js";
49
- import {
50
- NO_MODEL,
51
- chooseModel,
52
- keepProviderKeys,
53
- loadModelsConfig,
54
- providerKeyValue,
55
- resolveModel
56
- } from "./chunk-QLBCM2YQ.js";
57
- import "./chunk-NH72AELP.js";
56
+ import "./chunk-65NUEOI7.js";
58
57
  import "./chunk-4QRTTRVK.js";
59
58
  import "./chunk-A2QAIRQL.js";
60
59
  import {
@@ -63,7 +62,7 @@ import {
63
62
  import "./chunk-7KBOIPUT.js";
64
63
  import "./chunk-B25VL4RU.js";
65
64
  import "./chunk-MNE7HHX2.js";
66
- import "./chunk-IYGJWX65.js";
65
+ import "./chunk-CFDRP6XW.js";
67
66
  import "./chunk-5DEWP3YX.js";
68
67
  import "./chunk-PZS3V6P3.js";
69
68
  import "./chunk-QANRZW7W.js";
@@ -92,6 +91,7 @@ import { existsSync, mkdirSync, realpathSync, writeFileSync } from "fs";
92
91
  import { createRequire } from "module";
93
92
  import { homedir } from "os";
94
93
  import { delimiter, dirname, join } from "path";
94
+ var progressHead = (label, done, total) => label === void 0 ? "" : `[${label} ${done}/${total}] `;
95
95
  var BATCH_TASK_TIMEOUT_MS = 12 * 60 * 6e4;
96
96
  async function runEvalCommand(options) {
97
97
  if (options.fromGit) return buildFromGit(options);
@@ -325,7 +325,7 @@ ${detail === "" ? "" : ` ${detail}
325
325
  }
326
326
  let addendum;
327
327
  if (options.addendum !== void 0) {
328
- const { readAddendum } = await import("./tune-VX2WQTHS.js");
328
+ const { readAddendum } = await import("./tune-KSNKBPNJ.js");
329
329
  const read = await readAddendum(options.addendum);
330
330
  if ("problem" in read) {
331
331
  process.stderr.write(`${read.problem}
@@ -387,6 +387,7 @@ ${where}, in scratch folders.
387
387
  );
388
388
  }
389
389
  const started = Date.now();
390
+ let done = 0;
390
391
  const results = await runEvals(
391
392
  tasks,
392
393
  {
@@ -414,8 +415,10 @@ ${where}, in scratch folders.
414
415
  executor: executor.name === "host" ? "host" : "os",
415
416
  ...options.keep ? { keep: true } : {},
416
417
  onEvent: (taskId, event) => {
417
- if (event.type === "tool_call") process.stderr.write(` [${taskId}] ${event.call.name}
418
+ if (event.type === "tool_call" && options.progress === void 0) {
419
+ process.stderr.write(` [${taskId}] ${event.call.name}
418
420
  `);
421
+ }
419
422
  if (event.type === "notice") process.stderr.write(` [${taskId}] ${event.text}
420
423
  `);
421
424
  if (event.type === "model_retry")
@@ -425,11 +428,15 @@ ${where}, in scratch folders.
425
428
  );
426
429
  }
427
430
  },
428
- (r) => process.stderr.write(
429
- `${r.passed ? "\u2713" : "\u2717"} ${r.id}: ${r.passed ? "pass" : "fail"} (${r.steps} steps)${r.reason ? `
431
+ (r) => {
432
+ done++;
433
+ const head = progressHead(options.progress, done, tasks.length);
434
+ process.stderr.write(
435
+ `${head}${r.passed ? "\u2713" : "\u2717"} ${r.id}: ${r.passed ? "pass" : "fail"} (${r.steps} steps)${r.reason ? `
430
436
  ${r.reason.split("\n").slice(0, 3).join("\n ")}` : ""}
431
437
  `
432
- ),
438
+ );
439
+ },
433
440
  // A refused key or an unreachable API fails every run: stop at the first one (0.17).
434
441
  isSetupFailure
435
442
  );
@@ -504,20 +511,35 @@ async function buildFromGit(options) {
504
511
  return 1;
505
512
  }
506
513
  }
514
+ const { loadTeamPolicy } = await import("./policy-ZJ7RMOFN.js");
515
+ let team;
516
+ try {
517
+ team = await loadTeamPolicy();
518
+ } catch (error) {
519
+ process.stderr.write(`Team policy: ${error.message}
520
+ `);
521
+ return 1;
522
+ }
523
+ const { checkAsEval } = await import("./runner-EBF6EOYM.js");
507
524
  process.stderr.write(
508
525
  `Building the repo suite from ${options.commits ?? DEFAULT_COMMITS} recent commits${options.since === void 0 ? "" : ` since ${options.since}`} in ${root}.
509
- Each candidate runs its own test files with \`${testCommand}\` twice on this machine (no sandbox), in a git worktree; your checkout does not change.
526
+ Each candidate runs its own test files with \`${testCommand}\` twice on this machine (no sandbox), in a git worktree; your checkout does not change. A kept one runs a third time as an eval runs it: in a copy, in the sandbox.
510
527
 
511
528
  `
512
529
  );
513
- const { suite, checked, skipped, failure } = await buildRepoSuite(new HostExecutor(), root, {
514
- testCommand,
515
- ...options.commits === void 0 ? {} : { commits: options.commits },
516
- ...options.since === void 0 ? {} : { since: options.since },
517
- ...options.maxTasks === void 0 ? {} : { maxTasks: options.maxTasks },
518
- onProgress: (line) => process.stderr.write(` ${line}
530
+ const { suite, checked, skipped, failure, evalFailure } = await buildRepoSuite(
531
+ new HostExecutor(),
532
+ root,
533
+ {
534
+ testCommand,
535
+ evalCheck: (sha, check) => checkAsEval(root, sha, check, team === void 0 ? {} : { policy: team.policy }),
536
+ ...options.commits === void 0 ? {} : { commits: options.commits },
537
+ ...options.since === void 0 ? {} : { since: options.since },
538
+ ...options.maxTasks === void 0 ? {} : { maxTasks: options.maxTasks },
539
+ onProgress: (line) => process.stderr.write(` ${line}
519
540
  `)
520
- });
541
+ }
542
+ );
521
543
  const file = await saveRepoSuite(suite);
522
544
  const reasons = Object.entries(skipped).sort((a, b) => b[1] - a[1]).map(([why, n]) => ` ${String(n).padStart(4)} ${why}`);
523
545
  process.stdout.write(
@@ -530,6 +552,11 @@ ${suite.tasks.length} task(s) kept; ${checked} candidate(s) checked with the tes
530
552
  ...failure.tail.split("\n").map((line) => ` ${line}`),
531
553
  'If every commit fails like this, the tests do not run in a worktree on this machine; give a working command with --test-command ("{files}" takes the test files).'
532
554
  ],
555
+ ...evalFailure === void 0 ? [] : [
556
+ `The first commit whose tests pass here but fail as an eval runs them (${evalFailure.sha.slice(0, 7)}: \`${evalFailure.command}\`):`,
557
+ ...evalFailure.tail.split("\n").map((line) => ` ${line}`),
558
+ "No model could pass such a task, so it is left out. A test that needs the network, or starts its own sandbox, fails like this."
559
+ ],
533
560
  `Suite: ${file}`,
534
561
  ...suite.tasks.length === 0 ? ["No task: try more commits (--commits 500) or an older --since."] : ["Run it: garuda eval -s repo -m <model> (add --list to see the tasks)"]
535
562
  ].join("\n")}
@@ -689,8 +716,9 @@ export {
689
716
  BATCH_TASK_TIMEOUT_MS,
690
717
  chooseMcp,
691
718
  claudeCodeAgent,
719
+ progressHead,
692
720
  repoSuite,
693
721
  runEvalCommand,
694
722
  runEvalCompare
695
723
  };
696
- //# sourceMappingURL=evalCommand-BLJJ4G76.js.map
724
+ //# sourceMappingURL=evalCommand-MRO6ENCA.js.map
@@ -4,38 +4,37 @@ import {
4
4
  parseProposal,
5
5
  readAddendum,
6
6
  tune
7
- } from "./chunk-IKPGHM54.js";
7
+ } from "./chunk-YEH2OONM.js";
8
8
  import {
9
9
  EVAL_SUITES,
10
10
  HELD_OUT_TASKS,
11
11
  requiredToolchains
12
- } from "./chunk-GKU62MHQ.js";
12
+ } from "./chunk-LWNMEGDF.js";
13
13
  import {
14
- formatReport,
15
- reportV2,
16
- runEvals
17
- } from "./chunk-DUYLVGPY.js";
14
+ reportV2
15
+ } from "./chunk-6JQTPW3P.js";
16
+ import "./chunk-YAQ6QLKB.js";
17
+ import "./chunk-E6YRCDSF.js";
18
18
  import {
19
19
  DEFAULT_SEED,
20
20
  TOOLCHAINS,
21
21
  checkToolchains,
22
+ formatReport,
23
+ runEvals,
22
24
  shuffled
23
- } from "./chunk-CWVXOSAA.js";
24
- import "./chunk-H7LIBGZT.js";
25
- import "./chunk-YAQ6QLKB.js";
26
- import "./chunk-NXJ4XLB5.js";
27
- import "./chunk-5UDYQ5MK.js";
28
- import "./chunk-G2AX7MGS.js";
29
- import "./chunk-ULAJPMY7.js";
30
- import "./chunk-JMH5W5DG.js";
25
+ } from "./chunk-A5DLAXB4.js";
31
26
  import {
32
27
  NO_MODEL,
33
28
  chooseModel,
34
29
  keepProviderKeys,
35
30
  loadModelsConfig,
36
31
  resolveModel
37
- } from "./chunk-QLBCM2YQ.js";
38
- import "./chunk-NH72AELP.js";
32
+ } from "./chunk-2FIV2VZP.js";
33
+ import "./chunk-NXJ4XLB5.js";
34
+ import "./chunk-STVFWSIL.js";
35
+ import "./chunk-G2AX7MGS.js";
36
+ import "./chunk-ULAJPMY7.js";
37
+ import "./chunk-65NUEOI7.js";
39
38
  import "./chunk-4QRTTRVK.js";
40
39
  import "./chunk-A2QAIRQL.js";
41
40
  import {
@@ -46,7 +45,7 @@ import {
46
45
  } from "./chunk-7KBOIPUT.js";
47
46
  import "./chunk-B25VL4RU.js";
48
47
  import "./chunk-MNE7HHX2.js";
49
- import "./chunk-IYGJWX65.js";
48
+ import "./chunk-CFDRP6XW.js";
50
49
  import "./chunk-5DEWP3YX.js";
51
50
  import "./chunk-PZS3V6P3.js";
52
51
  import "./chunk-QANRZW7W.js";
@@ -299,4 +298,4 @@ export {
299
298
  progressLine,
300
299
  runEvalTune
301
300
  };
302
- //# sourceMappingURL=evalTune-W53KAD4V.js.map
301
+ //# sourceMappingURL=evalTune-VL5RHYOG.js.map
@@ -2,7 +2,10 @@
2
2
  import {
3
3
  summariseCall,
4
4
  summariseResult
5
- } from "./chunk-DQSCCE77.js";
5
+ } from "./chunk-AX3A5KPH.js";
6
+ import {
7
+ receiptText
8
+ } from "./chunk-2OYTNNUJ.js";
6
9
  import {
7
10
  hasReceipt
8
11
  } from "./chunk-4QRTTRVK.js";
@@ -10,9 +13,6 @@ import {
10
13
  serverCallText,
11
14
  serverResultSummary
12
15
  } from "./chunk-A2QAIRQL.js";
13
- import {
14
- receiptText
15
- } from "./chunk-2OYTNNUJ.js";
16
16
  import "./chunk-NLS7GMF7.js";
17
17
  import "./chunk-7KBOIPUT.js";
18
18
  import "./chunk-BHZ6G65V.js";
@@ -178,4 +178,4 @@ export {
178
178
  sessionMarkdown,
179
179
  writeExport
180
180
  };
181
- //# sourceMappingURL=export-E677HIQS.js.map
181
+ //# sourceMappingURL=export-ZPF3AMO6.js.map