@cjhyy/code-shell 0.1.5 → 0.1.6

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 (48) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/arena/index.cjs +4 -4
  3. package/dist/arena/index.js +3 -3
  4. package/dist/{arena-O2L4TN6A.js → arena-2LTLIXOL.js} +3 -3
  5. package/dist/{arena-KBQOPLFV.cjs → arena-ADB7DRFI.cjs} +17 -17
  6. package/dist/{chunk-XDIQWQJ4.js → chunk-3QO25N6E.js} +2 -2
  7. package/dist/{chunk-5ECBT4YA.js → chunk-3SBSUOWZ.js} +0 -3
  8. package/dist/{chunk-YUI524OE.cjs → chunk-7BI3V74Y.cjs} +0 -3
  9. package/dist/{chunk-2EP3CLEN.js → chunk-7QIM3BKD.js} +1 -1
  10. package/dist/{chunk-YJ77GQK5.js → chunk-ABRRONJ7.js} +1 -1
  11. package/dist/{chunk-C5YQBIRK.js → chunk-BZ5TNE7L.js} +1 -1
  12. package/dist/{chunk-VYL4EFRC.cjs → chunk-DDB6QOKJ.cjs} +7 -7
  13. package/dist/{chunk-SNT563K3.cjs → chunk-ILHE7XLT.cjs} +6 -6
  14. package/dist/{chunk-76W334S4.js → chunk-KAQHULYN.js} +1 -1
  15. package/dist/{chunk-W22P377T.js → chunk-KE4EQOWA.js} +6 -11
  16. package/dist/{chunk-R47ROHGL.cjs → chunk-MV7YI4WO.cjs} +6 -11
  17. package/dist/{chunk-7K6SDRRF.js → chunk-PKGRTCCY.js} +54 -9
  18. package/dist/{chunk-RMYKO74M.js → chunk-QARL3IDQ.js} +1 -1
  19. package/dist/{chunk-A5LCRPDP.cjs → chunk-S754JHLR.cjs} +2 -2
  20. package/dist/{chunk-HS2MFNUC.cjs → chunk-TNLGBJYS.cjs} +3 -3
  21. package/dist/{chunk-BUU5PZK2.cjs → chunk-UXOCVJJ6.cjs} +200 -156
  22. package/dist/{chunk-BWTOS5BH.cjs → chunk-WZJV6DJC.cjs} +4 -4
  23. package/dist/{chunk-QRM7IF2S.cjs → chunk-YKIAELDZ.cjs} +2 -2
  24. package/dist/cli/main.cjs +211 -188
  25. package/dist/cli/main.js +44 -21
  26. package/dist/cli/updater.d.ts +8 -0
  27. package/dist/engine/engine.d.ts +7 -0
  28. package/dist/index.cjs +8 -8
  29. package/dist/index.js +9 -9
  30. package/dist/{manager-C2IUXKRC.js → manager-D65VFAPX.js} +1 -1
  31. package/dist/manager-TTF5VHJC.cjs +7 -0
  32. package/dist/{openrouter-models-TGKDKY52.js → openrouter-models-H56GHBHN.js} +1 -1
  33. package/dist/openrouter-models-TWUFWZ5T.cjs +15 -0
  34. package/dist/openrouter-sync-5VMGN6C2.cjs +11 -0
  35. package/dist/{openrouter-sync-UXUSJCIR.js → openrouter-sync-ALEMF5IU.js} +2 -2
  36. package/dist/product/index.cjs +7 -7
  37. package/dist/product/index.js +6 -6
  38. package/dist/run/index.cjs +7 -7
  39. package/dist/run/index.js +6 -6
  40. package/dist/tool-system/investigation-guard.d.ts +9 -0
  41. package/dist/updater-I7QBW4DP.cjs +17 -0
  42. package/dist/{updater-VFUAHCVY.js → updater-NVME5S3Z.js} +1 -1
  43. package/package.json +2 -1
  44. package/skills-builtin/codeshell-help.md +135 -0
  45. package/dist/manager-YYKWYTRM.cjs +0 -7
  46. package/dist/openrouter-models-OU4GRZQY.cjs +0 -15
  47. package/dist/openrouter-sync-BBHUM3R6.cjs +0 -11
  48. package/dist/updater-QW473OF4.cjs +0 -17
package/CHANGELOG.md CHANGED
@@ -8,6 +8,36 @@ breaking.
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.1.6] - 2026-05-13
12
+
13
+ ### Added
14
+ - **Built-in skills bundled with the package.** The skill scanner now also
15
+ reads `skills-builtin/` shipped inside the installed npm package. First
16
+ built-in is `codeshell-help` — answers questions about code-shell itself
17
+ (slash commands, provider/model setup, settings keys, hooks, MCP,
18
+ debugging flags) so a fresh install can self-document without the user
19
+ having to write their own help skill.
20
+ - **Headless mode in Engine.** New `headless: true` config flag (set by the
21
+ `run` command) puts InvestigationGuard into soft mode: the third re-read
22
+ of the same target turns into a stronger reminder instead of a hard
23
+ block, since unattended automations have no human to retry the task.
24
+
25
+ ### Fixed
26
+ - `code-shell run` now resolves API keys / baseUrl / model from
27
+ `settings.providers[]` and `settings.models[]` in addition to the legacy
28
+ `settings.model.*` mirror — matches what Engine reconciles at startup,
29
+ fixes "no API key found" false negatives for users on the new shape.
30
+ - Read-only filesystem (CI containers) no longer floods the log with
31
+ `tool_result.persist_failed` warnings — demoted to debug.
32
+ - **Boot crash on machines with Claude Code installed.** Settings loader
33
+ previously merged `~/.claude/settings.json` into our own config for
34
+ "zero-migration from Claude Code", but CC's schema diverges (`model` is
35
+ a string there, an object here) and the merge crashed startup before
36
+ the onboarding wizard could even render. Dropped the cross-read in
37
+ `SettingsManager`, `hasApiKey()`, and the updater's autoUpdates probe.
38
+ File-level compat (CLAUDE.md scanning, `.claude/skills/` discovery) is
39
+ unaffected — only the settings.json cross-read is removed.
40
+
11
41
  ## [0.1.5] - 2026-05-13
12
42
 
13
43
  ### Added
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var _chunkVYL4EFRCcjs = require('../chunk-VYL4EFRC.cjs');
8
+ var _chunkDDB6QOKJcjs = require('../chunk-DDB6QOKJ.cjs');
9
9
 
10
10
 
11
11
 
@@ -48,8 +48,8 @@ var _chunkVYL4EFRCcjs = require('../chunk-VYL4EFRC.cjs');
48
48
 
49
49
 
50
50
 
51
- var _chunkBWTOS5BHcjs = require('../chunk-BWTOS5BH.cjs');
52
- require('../chunk-QRM7IF2S.cjs');
51
+ var _chunkWZJV6DJCcjs = require('../chunk-WZJV6DJC.cjs');
52
+ require('../chunk-YKIAELDZ.cjs');
53
53
  require('../chunk-2YW4FPFG.cjs');
54
54
  require('../chunk-IK4EWJBP.cjs');
55
55
  require('../chunk-KS3RYAYL.cjs');
@@ -101,4 +101,4 @@ require('../chunk-KS3RYAYL.cjs');
101
101
 
102
102
 
103
103
 
104
- exports.Arena = _chunkBWTOS5BHcjs.Arena; exports.ArenaLedger = _chunkBWTOS5BHcjs.ArenaLedger; exports.DiscussionStrategy = _chunkBWTOS5BHcjs.DiscussionStrategy; exports.IterativeArena = _chunkVYL4EFRCcjs.IterativeArena; exports.LENS_NAMES = _chunkBWTOS5BHcjs.LENS_NAMES; exports.MODEL_PRESETS = _chunkBWTOS5BHcjs.MODEL_PRESETS; exports.PlanningStrategy = _chunkBWTOS5BHcjs.PlanningStrategy; exports.ReviewStrategy = _chunkBWTOS5BHcjs.ReviewStrategy; exports.applyReviewResult = _chunkBWTOS5BHcjs.applyReviewResult; exports.buildConsensus = _chunkBWTOS5BHcjs.buildConsensus; exports.buildDigest = _chunkBWTOS5BHcjs.buildDigest; exports.buildLensPrompt = _chunkBWTOS5BHcjs.buildLensPrompt; exports.collectEvidence = _chunkBWTOS5BHcjs.collectEvidence; exports.createProgressRenderer = _chunkBWTOS5BHcjs.createProgressRenderer; exports.defaultIterateConvergence = _chunkVYL4EFRCcjs.defaultConvergence; exports.formatArenaResult = _chunkBWTOS5BHcjs.formatArenaResult; exports.formatArenaResultForSession = _chunkBWTOS5BHcjs.formatArenaResultForSession; exports.formatDigest = _chunkBWTOS5BHcjs.formatDigest; exports.getIterateFormat = _chunkVYL4EFRCcjs.getFormat; exports.getLens = _chunkBWTOS5BHcjs.getLens; exports.getMaxOutputTokens = _chunkBWTOS5BHcjs.getMaxOutputTokens; exports.getStrategy = _chunkBWTOS5BHcjs.getStrategy; exports.getStrategyForPlan = _chunkBWTOS5BHcjs.getStrategyForPlan; exports.hasTools = _chunkBWTOS5BHcjs.hasTools; exports.isStrategyV2 = _chunkBWTOS5BHcjs.isStrategyV2; exports.isTerminal = _chunkBWTOS5BHcjs.isTerminal; exports.iterateCodeFormat = _chunkVYL4EFRCcjs.codeFormat; exports.iterateDiffRatio = _chunkVYL4EFRCcjs.diffRatio; exports.iterateDocumentFormat = _chunkVYL4EFRCcjs.documentFormat; exports.markUnderReview = _chunkBWTOS5BHcjs.markUnderReview; exports.markUnresolved = _chunkBWTOS5BHcjs.markUnresolved; exports.planArena = _chunkBWTOS5BHcjs.planArena; exports.printArenaResult = _chunkBWTOS5BHcjs.printArenaResult; exports.registerClaims = _chunkBWTOS5BHcjs.registerClaims; exports.renderProgress = _chunkBWTOS5BHcjs.renderProgress; exports.resolveClaimStatus = _chunkBWTOS5BHcjs.resolveClaimStatus; exports.resolveLenses = _chunkBWTOS5BHcjs.resolveLenses; exports.runAdjudication = _chunkBWTOS5BHcjs.runAdjudication; exports.runCrossReview = _chunkBWTOS5BHcjs.runCrossReview; exports.runDebateRounds = _chunkBWTOS5BHcjs.runDebateRounds; exports.runParticipantResearch = _chunkBWTOS5BHcjs.runParticipantResearch; exports.runParticipantResearchWithDossiers = _chunkBWTOS5BHcjs.runParticipantResearchWithDossiers; exports.runVerificationReview = _chunkBWTOS5BHcjs.runVerificationReview; exports.selectClaimsForReview = _chunkBWTOS5BHcjs.selectClaimsForReview; exports.selectTools = _chunkBWTOS5BHcjs.selectTools; exports.transitionClaim = _chunkBWTOS5BHcjs.transitionClaim; exports.validTransitions = _chunkBWTOS5BHcjs.validTransitions;
104
+ exports.Arena = _chunkWZJV6DJCcjs.Arena; exports.ArenaLedger = _chunkWZJV6DJCcjs.ArenaLedger; exports.DiscussionStrategy = _chunkWZJV6DJCcjs.DiscussionStrategy; exports.IterativeArena = _chunkDDB6QOKJcjs.IterativeArena; exports.LENS_NAMES = _chunkWZJV6DJCcjs.LENS_NAMES; exports.MODEL_PRESETS = _chunkWZJV6DJCcjs.MODEL_PRESETS; exports.PlanningStrategy = _chunkWZJV6DJCcjs.PlanningStrategy; exports.ReviewStrategy = _chunkWZJV6DJCcjs.ReviewStrategy; exports.applyReviewResult = _chunkWZJV6DJCcjs.applyReviewResult; exports.buildConsensus = _chunkWZJV6DJCcjs.buildConsensus; exports.buildDigest = _chunkWZJV6DJCcjs.buildDigest; exports.buildLensPrompt = _chunkWZJV6DJCcjs.buildLensPrompt; exports.collectEvidence = _chunkWZJV6DJCcjs.collectEvidence; exports.createProgressRenderer = _chunkWZJV6DJCcjs.createProgressRenderer; exports.defaultIterateConvergence = _chunkDDB6QOKJcjs.defaultConvergence; exports.formatArenaResult = _chunkWZJV6DJCcjs.formatArenaResult; exports.formatArenaResultForSession = _chunkWZJV6DJCcjs.formatArenaResultForSession; exports.formatDigest = _chunkWZJV6DJCcjs.formatDigest; exports.getIterateFormat = _chunkDDB6QOKJcjs.getFormat; exports.getLens = _chunkWZJV6DJCcjs.getLens; exports.getMaxOutputTokens = _chunkWZJV6DJCcjs.getMaxOutputTokens; exports.getStrategy = _chunkWZJV6DJCcjs.getStrategy; exports.getStrategyForPlan = _chunkWZJV6DJCcjs.getStrategyForPlan; exports.hasTools = _chunkWZJV6DJCcjs.hasTools; exports.isStrategyV2 = _chunkWZJV6DJCcjs.isStrategyV2; exports.isTerminal = _chunkWZJV6DJCcjs.isTerminal; exports.iterateCodeFormat = _chunkDDB6QOKJcjs.codeFormat; exports.iterateDiffRatio = _chunkDDB6QOKJcjs.diffRatio; exports.iterateDocumentFormat = _chunkDDB6QOKJcjs.documentFormat; exports.markUnderReview = _chunkWZJV6DJCcjs.markUnderReview; exports.markUnresolved = _chunkWZJV6DJCcjs.markUnresolved; exports.planArena = _chunkWZJV6DJCcjs.planArena; exports.printArenaResult = _chunkWZJV6DJCcjs.printArenaResult; exports.registerClaims = _chunkWZJV6DJCcjs.registerClaims; exports.renderProgress = _chunkWZJV6DJCcjs.renderProgress; exports.resolveClaimStatus = _chunkWZJV6DJCcjs.resolveClaimStatus; exports.resolveLenses = _chunkWZJV6DJCcjs.resolveLenses; exports.runAdjudication = _chunkWZJV6DJCcjs.runAdjudication; exports.runCrossReview = _chunkWZJV6DJCcjs.runCrossReview; exports.runDebateRounds = _chunkWZJV6DJCcjs.runDebateRounds; exports.runParticipantResearch = _chunkWZJV6DJCcjs.runParticipantResearch; exports.runParticipantResearchWithDossiers = _chunkWZJV6DJCcjs.runParticipantResearchWithDossiers; exports.runVerificationReview = _chunkWZJV6DJCcjs.runVerificationReview; exports.selectClaimsForReview = _chunkWZJV6DJCcjs.selectClaimsForReview; exports.selectTools = _chunkWZJV6DJCcjs.selectTools; exports.transitionClaim = _chunkWZJV6DJCcjs.transitionClaim; exports.validTransitions = _chunkWZJV6DJCcjs.validTransitions;
@@ -5,7 +5,7 @@ import {
5
5
  diffRatio,
6
6
  documentFormat,
7
7
  getFormat
8
- } from "../chunk-RMYKO74M.js";
8
+ } from "../chunk-QARL3IDQ.js";
9
9
  import {
10
10
  Arena,
11
11
  ArenaLedger,
@@ -48,8 +48,8 @@ import {
48
48
  selectTools,
49
49
  transitionClaim,
50
50
  validTransitions
51
- } from "../chunk-C5YQBIRK.js";
52
- import "../chunk-XDIQWQJ4.js";
51
+ } from "../chunk-BZ5TNE7L.js";
52
+ import "../chunk-3QO25N6E.js";
53
53
  import "../chunk-SFXHZSRF.js";
54
54
  import "../chunk-BXCY2FSE.js";
55
55
  import "../chunk-MD32R22I.js";
@@ -4,7 +4,7 @@ import {
4
4
  import "./chunk-3OA5G4TM.js";
5
5
  import {
6
6
  SettingsManager
7
- } from "./chunk-5ECBT4YA.js";
7
+ } from "./chunk-3SBSUOWZ.js";
8
8
  import {
9
9
  Arena,
10
10
  MODEL_PRESETS,
@@ -13,8 +13,8 @@ import {
13
13
  getMaxOutputTokens,
14
14
  printArenaResult,
15
15
  renderProgress
16
- } from "./chunk-C5YQBIRK.js";
17
- import "./chunk-XDIQWQJ4.js";
16
+ } from "./chunk-BZ5TNE7L.js";
17
+ import "./chunk-3QO25N6E.js";
18
18
  import "./chunk-SFXHZSRF.js";
19
19
  import "./chunk-BXCY2FSE.js";
20
20
  import {
@@ -4,7 +4,7 @@ var _chunk55XGPMAPcjs = require('./chunk-55XGPMAP.cjs');
4
4
  require('./chunk-52LGZKT3.cjs');
5
5
 
6
6
 
7
- var _chunkYUI524OEcjs = require('./chunk-YUI524OE.cjs');
7
+ var _chunk7BI3V74Ycjs = require('./chunk-7BI3V74Y.cjs');
8
8
 
9
9
 
10
10
 
@@ -13,8 +13,8 @@ var _chunkYUI524OEcjs = require('./chunk-YUI524OE.cjs');
13
13
 
14
14
 
15
15
 
16
- var _chunkBWTOS5BHcjs = require('./chunk-BWTOS5BH.cjs');
17
- require('./chunk-QRM7IF2S.cjs');
16
+ var _chunkWZJV6DJCcjs = require('./chunk-WZJV6DJC.cjs');
17
+ require('./chunk-YKIAELDZ.cjs');
18
18
  require('./chunk-2YW4FPFG.cjs');
19
19
  require('./chunk-IK4EWJBP.cjs');
20
20
 
@@ -40,8 +40,8 @@ async function runArenaReview(arg, engineConfig, opts) {
40
40
  out(_chalk2.default.bold(`\u2550\u2550\u2550 Arena ${modeLabel} \u2550\u2550\u2550`));
41
41
  out(_chalk2.default.dim(`Topic: ${topic}`));
42
42
  out(_chalk2.default.dim(`Models: ${participants.map((p) => p.name).join(" vs ")}`));
43
- const progressRenderer = _optionalChain([opts, 'optionalAccess', _2 => _2.output]) ? _chunkBWTOS5BHcjs.createProgressRenderer.call(void 0, opts.output) : _chunkBWTOS5BHcjs.renderProgress;
44
- const arena = new (0, _chunkBWTOS5BHcjs.Arena)({
43
+ const progressRenderer = _optionalChain([opts, 'optionalAccess', _2 => _2.output]) ? _chunkWZJV6DJCcjs.createProgressRenderer.call(void 0, opts.output) : _chunkWZJV6DJCcjs.renderProgress;
44
+ const arena = new (0, _chunkWZJV6DJCcjs.Arena)({
45
45
  participants,
46
46
  mode: explicitMode,
47
47
  enableContextTools: true,
@@ -55,9 +55,9 @@ async function runArenaReview(arg, engineConfig, opts) {
55
55
  });
56
56
  const resultSink = _nullishCoalesce(_optionalChain([opts, 'optionalAccess', _3 => _3.outputMessage]), () => ( _optionalChain([opts, 'optionalAccess', _4 => _4.output])));
57
57
  if (resultSink) {
58
- resultSink(_chunkBWTOS5BHcjs.formatArenaResultForSession.call(void 0, result));
58
+ resultSink(_chunkWZJV6DJCcjs.formatArenaResultForSession.call(void 0, result));
59
59
  } else {
60
- _chunkBWTOS5BHcjs.printArenaResult.call(void 0, result);
60
+ _chunkWZJV6DJCcjs.printArenaResult.call(void 0, result);
61
61
  }
62
62
  return result;
63
63
  } catch (err) {
@@ -68,7 +68,7 @@ async function runArenaReview(arg, engineConfig, opts) {
68
68
  function buildModelPool(engineConfig) {
69
69
  const pool = new (0, _chunk55XGPMAPcjs.ModelPool)();
70
70
  try {
71
- const settings = new (0, _chunkYUI524OEcjs.SettingsManager)(process.cwd()).get();
71
+ const settings = new (0, _chunk7BI3V74Ycjs.SettingsManager)(process.cwd()).get();
72
72
  if (_optionalChain([settings, 'access', _5 => _5.models, 'optionalAccess', _6 => _6.length])) {
73
73
  for (const m of settings.models) {
74
74
  pool.register({
@@ -98,7 +98,7 @@ function resolveOneParticipant(entry, pool, engineConfig) {
98
98
  apiKey: _nullishCoalesce(m.apiKey, () => ( engineConfig.llm.apiKey)),
99
99
  baseUrl: _nullishCoalesce(m.baseUrl, () => ( engineConfig.llm.baseUrl)),
100
100
  temperature: 0.3,
101
- maxTokens: _nullishCoalesce(m.maxOutputTokens, () => ( _chunkBWTOS5BHcjs.getMaxOutputTokens.call(void 0, m.model))),
101
+ maxTokens: _nullishCoalesce(m.maxOutputTokens, () => ( _chunkWZJV6DJCcjs.getMaxOutputTokens.call(void 0, m.model))),
102
102
  enableStreaming: false
103
103
  }
104
104
  };
@@ -111,7 +111,7 @@ function resolveOneParticipant(entry, pool, engineConfig) {
111
111
  apiKey: _nullishCoalesce(entry.apiKey, () => ( engineConfig.llm.apiKey)),
112
112
  baseUrl: _nullishCoalesce(entry.baseUrl, () => ( engineConfig.llm.baseUrl)),
113
113
  temperature: 0.3,
114
- maxTokens: _chunkBWTOS5BHcjs.getMaxOutputTokens.call(void 0, entry.model),
114
+ maxTokens: _chunkWZJV6DJCcjs.getMaxOutputTokens.call(void 0, entry.model),
115
115
  enableStreaming: false
116
116
  }
117
117
  };
@@ -131,12 +131,12 @@ function resolveParticipants(engineConfig, modelsFlag) {
131
131
  apiKey: _nullishCoalesce(fromPool.apiKey, () => ( engineConfig.llm.apiKey)),
132
132
  baseUrl: _nullishCoalesce(fromPool.baseUrl, () => ( engineConfig.llm.baseUrl)),
133
133
  temperature: 0.3,
134
- maxTokens: _nullishCoalesce(fromPool.maxOutputTokens, () => ( _chunkBWTOS5BHcjs.getMaxOutputTokens.call(void 0, fromPool.model))),
134
+ maxTokens: _nullishCoalesce(fromPool.maxOutputTokens, () => ( _chunkWZJV6DJCcjs.getMaxOutputTokens.call(void 0, fromPool.model))),
135
135
  enableStreaming: false
136
136
  }
137
137
  };
138
138
  }
139
- const preset = _chunkBWTOS5BHcjs.MODEL_PRESETS[name];
139
+ const preset = _chunkWZJV6DJCcjs.MODEL_PRESETS[name];
140
140
  if (preset) {
141
141
  return {
142
142
  name: modelDisplayName(preset.model),
@@ -157,7 +157,7 @@ function resolveParticipants(engineConfig, modelsFlag) {
157
157
  };
158
158
  });
159
159
  }
160
- const settings = new (0, _chunkYUI524OEcjs.SettingsManager)(process.cwd()).get();
160
+ const settings = new (0, _chunk7BI3V74Ycjs.SettingsManager)(process.cwd()).get();
161
161
  if (_optionalChain([settings, 'access', _7 => _7.arena, 'optionalAccess', _8 => _8.participants, 'optionalAccess', _9 => _9.length]) >= 2) {
162
162
  const resolved = settings.arena.participants.map((p) => resolveOneParticipant(p, pool, engineConfig)).filter((p) => p !== void 0);
163
163
  if (resolved.length >= 2) return resolved;
@@ -167,7 +167,7 @@ function resolveParticipants(engineConfig, modelsFlag) {
167
167
  name: modelDisplayName(engineConfig.llm.model),
168
168
  llm: {
169
169
  ...engineConfig.llm,
170
- maxTokens: _chunkBWTOS5BHcjs.getMaxOutputTokens.call(void 0, engineConfig.llm.model),
170
+ maxTokens: _chunkWZJV6DJCcjs.getMaxOutputTokens.call(void 0, engineConfig.llm.model),
171
171
  enableStreaming: false
172
172
  }
173
173
  }
@@ -180,7 +180,7 @@ function resolveParticipants(engineConfig, modelsFlag) {
180
180
  llm: {
181
181
  ...engineConfig.llm,
182
182
  model: opponent,
183
- maxTokens: _chunkBWTOS5BHcjs.getMaxOutputTokens.call(void 0, opponent),
183
+ maxTokens: _chunkWZJV6DJCcjs.getMaxOutputTokens.call(void 0, opponent),
184
184
  enableStreaming: false
185
185
  }
186
186
  });
@@ -234,7 +234,7 @@ function formatUsage() {
234
234
  " --base <ref> Base branch/ref for comparison",
235
235
  " --head <ref> Head branch/ref (default: HEAD)",
236
236
  "",
237
- `${_chalk2.default.dim("Available model presets:")} ${Object.keys(_chunkBWTOS5BHcjs.MODEL_PRESETS).join(", ")}`
237
+ `${_chalk2.default.dim("Available model presets:")} ${Object.keys(_chunkWZJV6DJCcjs.MODEL_PRESETS).join(", ")}`
238
238
  ].join("\n");
239
239
  }
240
240
  function formatModelHelp(engineConfig) {
@@ -258,4 +258,4 @@ function modelDisplayName(model) {
258
258
 
259
259
 
260
260
 
261
- exports.formatArenaResultForSession = _chunkBWTOS5BHcjs.formatArenaResultForSession; exports.runArenaReview = runArenaReview;
261
+ exports.formatArenaResultForSession = _chunkWZJV6DJCcjs.formatArenaResultForSession; exports.runArenaReview = runArenaReview;
@@ -7,7 +7,7 @@ init_esm_shims();
7
7
 
8
8
  // src/data/openrouter-models.json
9
9
  var openrouter_models_default = {
10
- fetchedAt: "2026-05-13T08:42:44.941Z",
10
+ fetchedAt: "2026-05-13T11:22:58.240Z",
11
11
  source: "https://openrouter.ai/api/v1/models",
12
12
  count: 363,
13
13
  models: [
@@ -3699,7 +3699,7 @@ var openrouter_models_default = {
3699
3699
  id: "google/gemini-2.0-flash-001",
3700
3700
  name: "Google: Gemini 2.0 Flash",
3701
3701
  created: 1738769413,
3702
- contextLength: 1048576,
3702
+ contextLength: 1e6,
3703
3703
  maxOutputTokens: 8192,
3704
3704
  inputPricePerMillion: 0.09999999999999999,
3705
3705
  outputPricePerMillion: 0.39999999999999997,
@@ -321,11 +321,8 @@ var SettingsManager = class {
321
321
  this.sources = [];
322
322
  this.loadJsonFile(join(userHome(), ".code-shell", "settings.managed.json"), "managed", 0);
323
323
  this.loadJsonFile(join(userHome(), ".code-shell", "settings.json"), "user", 1);
324
- this.loadJsonFile(join(userHome(), ".claude", "settings.json"), "user", 1);
325
324
  this.loadJsonFile(join(this.cwd, ".code-shell", "settings.json"), "project", 2);
326
- this.loadJsonFile(join(this.cwd, ".claude", "settings.json"), "project", 2);
327
325
  this.loadJsonFile(join(this.cwd, ".code-shell", "settings.local.json"), "local", 3);
328
- this.loadJsonFile(join(this.cwd, ".claude", "settings.local.json"), "local", 3);
329
326
  if (flagOverrides && Object.keys(flagOverrides).length > 0) {
330
327
  this.sources.push({ name: "flag", priority: 4, data: flagOverrides });
331
328
  }
@@ -321,11 +321,8 @@ var SettingsManager = (_class = class {
321
321
  this.sources = [];
322
322
  this.loadJsonFile(_path.join.call(void 0, userHome(), ".code-shell", "settings.managed.json"), "managed", 0);
323
323
  this.loadJsonFile(_path.join.call(void 0, userHome(), ".code-shell", "settings.json"), "user", 1);
324
- this.loadJsonFile(_path.join.call(void 0, userHome(), ".claude", "settings.json"), "user", 1);
325
324
  this.loadJsonFile(_path.join.call(void 0, this.cwd, ".code-shell", "settings.json"), "project", 2);
326
- this.loadJsonFile(_path.join.call(void 0, this.cwd, ".claude", "settings.json"), "project", 2);
327
325
  this.loadJsonFile(_path.join.call(void 0, this.cwd, ".code-shell", "settings.local.json"), "local", 3);
328
- this.loadJsonFile(_path.join.call(void 0, this.cwd, ".claude", "settings.local.json"), "local", 3);
329
326
  if (flagOverrides && Object.keys(flagOverrides).length > 0) {
330
327
  this.sources.push({ name: "flag", priority: 4, data: flagOverrides });
331
328
  }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  FileRunStore,
3
3
  RunManager
4
- } from "./chunk-7K6SDRRF.js";
4
+ } from "./chunk-PKGRTCCY.js";
5
5
  import {
6
6
  init_esm_shims
7
7
  } from "./chunk-MD32R22I.js";
@@ -4,7 +4,7 @@ import {
4
4
  NoopEvaluator,
5
5
  RunManager,
6
6
  registerPreset
7
- } from "./chunk-7K6SDRRF.js";
7
+ } from "./chunk-PKGRTCCY.js";
8
8
  import {
9
9
  init_esm_shims
10
10
  } from "./chunk-MD32R22I.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getOpenRouterModels
3
- } from "./chunk-XDIQWQJ4.js";
3
+ } from "./chunk-3QO25N6E.js";
4
4
  import {
5
5
  LLMError
6
6
  } from "./chunk-SFXHZSRF.js";
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkBWTOS5BHcjs = require('./chunk-BWTOS5BH.cjs');
3
+ var _chunkWZJV6DJCcjs = require('./chunk-WZJV6DJC.cjs');
4
4
 
5
5
 
6
6
  var _chunkIK4EWJBPcjs = require('./chunk-IK4EWJBP.cjs');
@@ -784,7 +784,7 @@ async function runArgueRound(args) {
784
784
  }
785
785
  async function argueSingleShot(args) {
786
786
  const { critic, subject, format, draft, idPrefix, signal } = args;
787
- const client = await _chunkBWTOS5BHcjs.createLLMClient.call(void 0, { ...critic.llm, enableStreaming: false });
787
+ const client = await _chunkWZJV6DJCcjs.createLLMClient.call(void 0, { ...critic.llm, enableStreaming: false });
788
788
  const resp = await client.createMessage({
789
789
  systemPrompt: format.argueSystem(format.format),
790
790
  messages: [{ role: "user", content: format.argueUser(subject, draft) }],
@@ -800,7 +800,7 @@ async function argueSingleShot(args) {
800
800
  }
801
801
  async function argueWithToolLoop(args) {
802
802
  const { critic, subject, format, draft, idPrefix, maxToolRounds, signal } = args;
803
- const client = await _chunkBWTOS5BHcjs.createLLMClient.call(void 0, { ...critic.llm, enableStreaming: false });
803
+ const client = await _chunkWZJV6DJCcjs.createLLMClient.call(void 0, { ...critic.llm, enableStreaming: false });
804
804
  const messages = [
805
805
  { role: "user", content: format.argueUser(subject, draft) }
806
806
  ];
@@ -879,7 +879,7 @@ _chunkKS3RYAYLcjs.init_cjs_shims.call(void 0, );
879
879
  async function runRevise(args) {
880
880
  const { subject, format, previous, critiques, author, minDraftLength, signal, onProgress } = args;
881
881
  _optionalChain([onProgress, 'optionalCall', _12 => _12({ type: "revise_start", round: previous.version + 1, participant: author.name })]);
882
- const client = await _chunkBWTOS5BHcjs.createLLMClient.call(void 0, { ...author.llm, enableStreaming: false });
882
+ const client = await _chunkWZJV6DJCcjs.createLLMClient.call(void 0, { ...author.llm, enableStreaming: false });
883
883
  const prompt = format.revisePrompt(subject, previous, critiques, minDraftLength);
884
884
  const resp = await client.createMessage({
885
885
  systemPrompt: prompt,
@@ -934,7 +934,7 @@ async function runTournamentCandidates(args) {
934
934
  _optionalChain([onProgress, 'optionalCall', _20 => _20({ type: "v1_tournament_start", data: { count: participants.length } })]);
935
935
  const tasks = participants.map(async (p, idx) => {
936
936
  _optionalChain([signal, 'optionalAccess', _21 => _21.throwIfAborted, 'call', _22 => _22()]);
937
- const client = await _chunkBWTOS5BHcjs.createLLMClient.call(void 0, { ...p.llm, enableStreaming: false });
937
+ const client = await _chunkWZJV6DJCcjs.createLLMClient.call(void 0, { ...p.llm, enableStreaming: false });
938
938
  const prompt = format.draftPrompt(subject, minDraftLength);
939
939
  const resp = await client.createMessage({
940
940
  systemPrompt: prompt,
@@ -982,7 +982,7 @@ async function runTournamentCandidates(args) {
982
982
  async function mergeCandidatesToV1(args) {
983
983
  const { subject, format, author, candidates, minDraftLength, signal, onProgress } = args;
984
984
  _optionalChain([onProgress, 'optionalCall', _26 => _26({ type: "v1_merge_start", participant: author.name })]);
985
- const client = await _chunkBWTOS5BHcjs.createLLMClient.call(void 0, { ...author.llm, enableStreaming: false });
985
+ const client = await _chunkWZJV6DJCcjs.createLLMClient.call(void 0, { ...author.llm, enableStreaming: false });
986
986
  const prompt = format.mergePrompt(subject, candidates, minDraftLength);
987
987
  const resp = await client.createMessage({
988
988
  systemPrompt: prompt,
@@ -1010,7 +1010,7 @@ async function mergeCandidatesToV1(args) {
1010
1010
  }
1011
1011
  async function singleAuthorV1(args) {
1012
1012
  const { subject, format, author, minDraftLength, signal } = args;
1013
- const client = await _chunkBWTOS5BHcjs.createLLMClient.call(void 0, { ...author.llm, enableStreaming: false });
1013
+ const client = await _chunkWZJV6DJCcjs.createLLMClient.call(void 0, { ...author.llm, enableStreaming: false });
1014
1014
  const prompt = format.draftPrompt(subject, minDraftLength);
1015
1015
  const resp = await client.createMessage({
1016
1016
  systemPrompt: prompt,
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkBUU5PZK2cjs = require('./chunk-BUU5PZK2.cjs');
7
+ var _chunkUXOCVJJ6cjs = require('./chunk-UXOCVJJ6.cjs');
8
8
 
9
9
 
10
10
  var _chunkKS3RYAYLcjs = require('./chunk-KS3RYAYL.cjs');
@@ -61,12 +61,12 @@ function defineProduct(definition, runtime) {
61
61
  builtinTools: [...enabledSet],
62
62
  defaultPermissionRules: permissionRules
63
63
  };
64
- _chunkBUU5PZK2cjs.registerPreset.call(void 0, agentPreset);
64
+ _chunkUXOCVJJ6cjs.registerPreset.call(void 0, agentPreset);
65
65
  let evaluator;
66
66
  if (!_optionalChain([contract, 'optionalAccess', _4 => _4.evaluator])) {
67
- evaluator = new (0, _chunkBUU5PZK2cjs.NoopEvaluator)();
67
+ evaluator = new (0, _chunkUXOCVJJ6cjs.NoopEvaluator)();
68
68
  } else if (Array.isArray(contract.evaluator)) {
69
- evaluator = new (0, _chunkBUU5PZK2cjs.CompositeEvaluator)(contract.evaluator);
69
+ evaluator = new (0, _chunkUXOCVJJ6cjs.CompositeEvaluator)(contract.evaluator);
70
70
  } else {
71
71
  evaluator = contract.evaluator;
72
72
  }
@@ -76,8 +76,8 @@ function defineProduct(definition, runtime) {
76
76
  execute: ct.execute
77
77
  }));
78
78
  const runsDir = _nullishCoalesce(runtime.runsDir, () => ( _path.join.call(void 0, _os.homedir.call(void 0, ), ".code-shell", "runs")));
79
- const store = new (0, _chunkBUU5PZK2cjs.FileRunStore)(runsDir);
80
- const manager = new (0, _chunkBUU5PZK2cjs.RunManager)({
79
+ const store = new (0, _chunkUXOCVJJ6cjs.FileRunStore)(runsDir);
80
+ const manager = new (0, _chunkUXOCVJJ6cjs.RunManager)({
81
81
  store,
82
82
  executor: {
83
83
  llm: runtime.llm,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  setOpenRouterSnapshot
3
- } from "./chunk-XDIQWQJ4.js";
3
+ } from "./chunk-3QO25N6E.js";
4
4
  import {
5
5
  init_esm_shims
6
6
  } from "./chunk-MD32R22I.js";
@@ -259,17 +259,12 @@ function isAutoUpdaterDisabled() {
259
259
  return null;
260
260
  }
261
261
  function readAutoUpdatesFlagFromDisk() {
262
- const candidates = [
263
- join(userHome(), ".code-shell", "settings.json"),
264
- join(userHome(), ".claude", "settings.json")
265
- ];
266
- for (const path of candidates) {
267
- try {
268
- const raw = readFileSync(path, "utf8");
269
- const parsed = JSON.parse(raw);
270
- if (typeof parsed.autoUpdates === "boolean") return parsed.autoUpdates;
271
- } catch {
272
- }
262
+ const path = join(userHome(), ".code-shell", "settings.json");
263
+ try {
264
+ const raw = readFileSync(path, "utf8");
265
+ const parsed = JSON.parse(raw);
266
+ if (typeof parsed.autoUpdates === "boolean") return parsed.autoUpdates;
267
+ } catch {
273
268
  }
274
269
  return void 0;
275
270
  }
@@ -258,17 +258,12 @@ function isAutoUpdaterDisabled() {
258
258
  return null;
259
259
  }
260
260
  function readAutoUpdatesFlagFromDisk() {
261
- const candidates = [
262
- _path.join.call(void 0, userHome(), ".code-shell", "settings.json"),
263
- _path.join.call(void 0, userHome(), ".claude", "settings.json")
264
- ];
265
- for (const path of candidates) {
266
- try {
267
- const raw = _fs.readFileSync.call(void 0, path, "utf8");
268
- const parsed = JSON.parse(raw);
269
- if (typeof parsed.autoUpdates === "boolean") return parsed.autoUpdates;
270
- } catch (e17) {
271
- }
261
+ const path = _path.join.call(void 0, userHome(), ".code-shell", "settings.json");
262
+ try {
263
+ const raw = _fs.readFileSync.call(void 0, path, "utf8");
264
+ const parsed = JSON.parse(raw);
265
+ if (typeof parsed.autoUpdates === "boolean") return parsed.autoUpdates;
266
+ } catch (e17) {
272
267
  }
273
268
  return void 0;
274
269
  }
@@ -27,7 +27,7 @@ import {
27
27
  } from "./chunk-76HYEPDM.js";
28
28
  import {
29
29
  SettingsManager
30
- } from "./chunk-5ECBT4YA.js";
30
+ } from "./chunk-3SBSUOWZ.js";
31
31
  import {
32
32
  FileHistory
33
33
  } from "./chunk-T6VYG46N.js";
@@ -36,7 +36,7 @@ import {
36
36
  webFetchToolDef,
37
37
  webSearchTool,
38
38
  webSearchToolDef
39
- } from "./chunk-RMYKO74M.js";
39
+ } from "./chunk-QARL3IDQ.js";
40
40
  import {
41
41
  Arena,
42
42
  MODEL_PRESETS,
@@ -46,7 +46,7 @@ import {
46
46
  detectProviderFromApiKey,
47
47
  formatArenaResultForSession,
48
48
  getMaxOutputTokens
49
- } from "./chunk-C5YQBIRK.js";
49
+ } from "./chunk-BZ5TNE7L.js";
50
50
  import {
51
51
  ConfigError,
52
52
  ContextLimitError,
@@ -59,6 +59,7 @@ import {
59
59
  logger
60
60
  } from "./chunk-BXCY2FSE.js";
61
61
  import {
62
+ __dirname,
62
63
  __require,
63
64
  __toCommonJS,
64
65
  init_esm_shims
@@ -4956,7 +4957,7 @@ function persistToFile(dir, toolUseId, content) {
4956
4957
  } catch (err) {
4957
4958
  const code = err.code;
4958
4959
  if (code !== "EEXIST") {
4959
- logger.warn("tool_result.persist_failed", {
4960
+ logger.debug("tool_result.persist_failed", {
4960
4961
  toolUseId,
4961
4962
  code,
4962
4963
  error: err.message
@@ -5580,18 +5581,23 @@ function sourceLabel(entry) {
5580
5581
  // src/skills/scanner.ts
5581
5582
  init_esm_shims();
5582
5583
  import { existsSync as existsSync10, readdirSync as readdirSync5, readFileSync as readFileSync5, statSync as statSync3 } from "fs";
5583
- import { join as join7, resolve as resolve5 } from "path";
5584
+ import { dirname as dirname5, join as join7, resolve as resolve5 } from "path";
5584
5585
  import { homedir as homedir3 } from "os";
5586
+ import { fileURLToPath } from "url";
5585
5587
  function scanSkills(cwd) {
5586
5588
  const skills = [];
5587
5589
  const seen = /* @__PURE__ */ new Set();
5590
+ const builtin = resolveBuiltinSkillsDir();
5588
5591
  const dirs = [
5589
5592
  // Project-level
5590
5593
  join7(cwd, ".code-shell", "skills"),
5591
5594
  join7(cwd, ".claude", "skills"),
5592
5595
  // User-level
5593
5596
  join7(homedir3(), ".code-shell", "skills"),
5594
- join7(homedir3(), ".claude", "skills")
5597
+ join7(homedir3(), ".claude", "skills"),
5598
+ // Built-in (shipped inside the npm package). Listed last so user/project
5599
+ // skills with the same filename win deduplication on filePath.
5600
+ ...builtin ? [builtin] : []
5595
5601
  ];
5596
5602
  for (const dir of dirs) {
5597
5603
  if (!existsSync10(dir)) continue;
@@ -5611,6 +5617,30 @@ function scanSkills(cwd) {
5611
5617
  }
5612
5618
  return skills;
5613
5619
  }
5620
+ function resolveBuiltinSkillsDir() {
5621
+ let here;
5622
+ try {
5623
+ here = typeof import.meta !== "undefined" && import.meta.url ? dirname5(fileURLToPath(import.meta.url)) : __dirname;
5624
+ } catch {
5625
+ return null;
5626
+ }
5627
+ let dir = here;
5628
+ for (let i = 0; i < 6; i++) {
5629
+ const pkgPath = join7(dir, "package.json");
5630
+ try {
5631
+ const pkg = JSON.parse(readFileSync5(pkgPath, "utf-8"));
5632
+ if (pkg?.name === "@cjhyy/code-shell") {
5633
+ const candidate = join7(dir, "skills-builtin");
5634
+ return existsSync10(candidate) ? candidate : null;
5635
+ }
5636
+ } catch {
5637
+ }
5638
+ const parent = dirname5(dir);
5639
+ if (parent === dir) break;
5640
+ dir = parent;
5641
+ }
5642
+ return null;
5643
+ }
5614
5644
  function parseSkillFile(filePath) {
5615
5645
  try {
5616
5646
  const raw = readFileSync5(filePath, "utf-8");
@@ -6082,6 +6112,17 @@ var InvestigationGuard = class {
6082
6112
  turnHasText = false;
6083
6113
  turnHasSideEffect = false;
6084
6114
  lastReminderSilent = -1;
6115
+ /**
6116
+ * Soft mode replaces hard blocks (3rd-read dedupe) with a stronger
6117
+ * reminder. Used in headless runs (`code-shell run …`) where there is
6118
+ * no human to retry the task, so an unattended automation should not
6119
+ * be killed by the guard — it should still get the signal to change
6120
+ * strategy, but the tool call goes through.
6121
+ */
6122
+ softMode = false;
6123
+ setSoftMode(soft) {
6124
+ this.softMode = soft;
6125
+ }
6085
6126
  preToolCheck(call) {
6086
6127
  const tool = call.toolName;
6087
6128
  if (!READ_ONLY_TOOLS.has(tool)) {
@@ -6102,9 +6143,12 @@ var InvestigationGuard = class {
6102
6143
  this.consecutiveReads += 1;
6103
6144
  const prependParts = [];
6104
6145
  if (hits >= 3) {
6105
- return {
6106
- block: `Investigation guard: ${tool} on this exact target has been called ${hits} times in this session. Re-reading the same content will not produce new information. Switch strategy: run a command with side effects (Bash, debug log, repro), make a code change, or ask the user a specific question. If you genuinely need this content, summarize what you already know about it from prior reads instead of re-fetching.`
6107
- };
6146
+ const message = `Investigation guard: ${tool} on this exact target has been called ${hits} times in this session. Re-reading the same content will not produce new information. Switch strategy: run a command with side effects (Bash, debug log, repro), make a code change, or ask the user a specific question. If you genuinely need this content, summarize what you already know about it from prior reads instead of re-fetching.`;
6147
+ if (this.softMode) {
6148
+ prependParts.push(`<system-reminder>${message}</system-reminder>`);
6149
+ } else {
6150
+ return { block: message };
6151
+ }
6108
6152
  }
6109
6153
  if (hits === 2) {
6110
6154
  prependParts.push(
@@ -7215,6 +7259,7 @@ Extracted text: ${noise.cleaned.slice(0, 200)}` : "");
7215
7259
  }
7216
7260
  const toolExecutor = new ToolExecutor(this.toolRegistry, permission, this.hooks);
7217
7261
  const investigationGuard = new InvestigationGuard();
7262
+ if (this.config.headless) investigationGuard.setSoftMode(true);
7218
7263
  toolExecutor.setInvestigationGuard(investigationGuard);
7219
7264
  toolExecutor.setSignal(options?.signal);
7220
7265
  toolExecutor.setContext(toolCtx);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createLLMClient
3
- } from "./chunk-C5YQBIRK.js";
3
+ } from "./chunk-BZ5TNE7L.js";
4
4
  import {
5
5
  logger
6
6
  } from "./chunk-BXCY2FSE.js";
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkQRM7IF2Scjs = require('./chunk-QRM7IF2S.cjs');
3
+ var _chunkYKIAELDZcjs = require('./chunk-YKIAELDZ.cjs');
4
4
 
5
5
 
6
6
  var _chunkKS3RYAYLcjs = require('./chunk-KS3RYAYL.cjs');
@@ -37,7 +37,7 @@ async function syncOpenRouterCatalog(timeoutMs = 15e3) {
37
37
  const payload = await res.json();
38
38
  const raw = _nullishCoalesce(payload.data, () => ( []));
39
39
  const models = raw.map(slim).sort((a, b) => b.created - a.created);
40
- _chunkQRM7IF2Scjs.setOpenRouterSnapshot.call(void 0, {
40
+ _chunkYKIAELDZcjs.setOpenRouterSnapshot.call(void 0, {
41
41
  fetchedAt: (/* @__PURE__ */ new Date()).toISOString(),
42
42
  source: ENDPOINT,
43
43
  count: models.length,