@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.
- package/CHANGELOG.md +30 -0
- package/dist/arena/index.cjs +4 -4
- package/dist/arena/index.js +3 -3
- package/dist/{arena-O2L4TN6A.js → arena-2LTLIXOL.js} +3 -3
- package/dist/{arena-KBQOPLFV.cjs → arena-ADB7DRFI.cjs} +17 -17
- package/dist/{chunk-XDIQWQJ4.js → chunk-3QO25N6E.js} +2 -2
- package/dist/{chunk-5ECBT4YA.js → chunk-3SBSUOWZ.js} +0 -3
- package/dist/{chunk-YUI524OE.cjs → chunk-7BI3V74Y.cjs} +0 -3
- package/dist/{chunk-2EP3CLEN.js → chunk-7QIM3BKD.js} +1 -1
- package/dist/{chunk-YJ77GQK5.js → chunk-ABRRONJ7.js} +1 -1
- package/dist/{chunk-C5YQBIRK.js → chunk-BZ5TNE7L.js} +1 -1
- package/dist/{chunk-VYL4EFRC.cjs → chunk-DDB6QOKJ.cjs} +7 -7
- package/dist/{chunk-SNT563K3.cjs → chunk-ILHE7XLT.cjs} +6 -6
- package/dist/{chunk-76W334S4.js → chunk-KAQHULYN.js} +1 -1
- package/dist/{chunk-W22P377T.js → chunk-KE4EQOWA.js} +6 -11
- package/dist/{chunk-R47ROHGL.cjs → chunk-MV7YI4WO.cjs} +6 -11
- package/dist/{chunk-7K6SDRRF.js → chunk-PKGRTCCY.js} +54 -9
- package/dist/{chunk-RMYKO74M.js → chunk-QARL3IDQ.js} +1 -1
- package/dist/{chunk-A5LCRPDP.cjs → chunk-S754JHLR.cjs} +2 -2
- package/dist/{chunk-HS2MFNUC.cjs → chunk-TNLGBJYS.cjs} +3 -3
- package/dist/{chunk-BUU5PZK2.cjs → chunk-UXOCVJJ6.cjs} +200 -156
- package/dist/{chunk-BWTOS5BH.cjs → chunk-WZJV6DJC.cjs} +4 -4
- package/dist/{chunk-QRM7IF2S.cjs → chunk-YKIAELDZ.cjs} +2 -2
- package/dist/cli/main.cjs +211 -188
- package/dist/cli/main.js +44 -21
- package/dist/cli/updater.d.ts +8 -0
- package/dist/engine/engine.d.ts +7 -0
- package/dist/index.cjs +8 -8
- package/dist/index.js +9 -9
- package/dist/{manager-C2IUXKRC.js → manager-D65VFAPX.js} +1 -1
- package/dist/manager-TTF5VHJC.cjs +7 -0
- package/dist/{openrouter-models-TGKDKY52.js → openrouter-models-H56GHBHN.js} +1 -1
- package/dist/openrouter-models-TWUFWZ5T.cjs +15 -0
- package/dist/openrouter-sync-5VMGN6C2.cjs +11 -0
- package/dist/{openrouter-sync-UXUSJCIR.js → openrouter-sync-ALEMF5IU.js} +2 -2
- package/dist/product/index.cjs +7 -7
- package/dist/product/index.js +6 -6
- package/dist/run/index.cjs +7 -7
- package/dist/run/index.js +6 -6
- package/dist/tool-system/investigation-guard.d.ts +9 -0
- package/dist/updater-I7QBW4DP.cjs +17 -0
- package/dist/{updater-VFUAHCVY.js → updater-NVME5S3Z.js} +1 -1
- package/package.json +2 -1
- package/skills-builtin/codeshell-help.md +135 -0
- package/dist/manager-YYKWYTRM.cjs +0 -7
- package/dist/openrouter-models-OU4GRZQY.cjs +0 -15
- package/dist/openrouter-sync-BBHUM3R6.cjs +0 -11
- 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
|
package/dist/arena/index.cjs
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var
|
|
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
|
|
52
|
-
require('../chunk-
|
|
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 =
|
|
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;
|
package/dist/arena/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
diffRatio,
|
|
6
6
|
documentFormat,
|
|
7
7
|
getFormat
|
|
8
|
-
} from "../chunk-
|
|
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-
|
|
52
|
-
import "../chunk-
|
|
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-
|
|
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-
|
|
17
|
-
import "./chunk-
|
|
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
|
|
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
|
|
17
|
-
require('./chunk-
|
|
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]) ?
|
|
44
|
-
const arena = new (0,
|
|
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(
|
|
58
|
+
resultSink(_chunkWZJV6DJCcjs.formatArenaResultForSession.call(void 0, result));
|
|
59
59
|
} else {
|
|
60
|
-
|
|
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,
|
|
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, () => (
|
|
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:
|
|
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, () => (
|
|
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 =
|
|
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,
|
|
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:
|
|
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:
|
|
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(
|
|
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 =
|
|
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-
|
|
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:
|
|
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,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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
64
|
+
_chunkUXOCVJJ6cjs.registerPreset.call(void 0, agentPreset);
|
|
65
65
|
let evaluator;
|
|
66
66
|
if (!_optionalChain([contract, 'optionalAccess', _4 => _4.evaluator])) {
|
|
67
|
-
evaluator = new (0,
|
|
67
|
+
evaluator = new (0, _chunkUXOCVJJ6cjs.NoopEvaluator)();
|
|
68
68
|
} else if (Array.isArray(contract.evaluator)) {
|
|
69
|
-
evaluator = new (0,
|
|
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,
|
|
80
|
-
const manager = new (0,
|
|
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,
|
|
@@ -259,17 +259,12 @@ function isAutoUpdaterDisabled() {
|
|
|
259
259
|
return null;
|
|
260
260
|
}
|
|
261
261
|
function readAutoUpdatesFlagFromDisk() {
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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.
|
|
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
|
-
|
|
6106
|
-
|
|
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
|
"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
|
|
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
|
-
|
|
40
|
+
_chunkYKIAELDZcjs.setOpenRouterSnapshot.call(void 0, {
|
|
41
41
|
fetchedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
42
42
|
source: ENDPOINT,
|
|
43
43
|
count: models.length,
|