@nexrall/code-core 1.4.77 → 1.4.78
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/dist/agent/effortCap.d.ts +24 -0
- package/dist/agent/effortCap.d.ts.map +1 -0
- package/dist/agent/effortCap.js +66 -0
- package/dist/agent/hooks.d.ts +10 -2
- package/dist/agent/hooks.d.ts.map +1 -1
- package/dist/agent/hooks.js +9 -3
- package/dist/agent/skills.d.ts.map +1 -1
- package/dist/agent/skills.js +14 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/mcp/manager.d.ts +8 -0
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +64 -57
- package/dist/permissions/destructiveTokens.d.ts +1 -0
- package/dist/permissions/destructiveTokens.d.ts.map +1 -1
- package/dist/permissions/destructiveTokens.js +93 -0
- package/dist/permissions/rules.d.ts +12 -0
- package/dist/permissions/rules.d.ts.map +1 -1
- package/dist/permissions/rules.js +89 -7
- package/dist/plugins/configStore.d.ts +43 -0
- package/dist/plugins/configStore.d.ts.map +1 -0
- package/dist/plugins/configStore.js +253 -0
- package/dist/plugins/files.d.ts +10 -0
- package/dist/plugins/files.d.ts.map +1 -0
- package/dist/plugins/files.js +85 -0
- package/dist/plugins/index.d.ts +3 -22
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +30 -40
- package/dist/plugins/resolve.d.ts +18 -0
- package/dist/plugins/resolve.d.ts.map +1 -0
- package/dist/plugins/resolve.js +152 -0
- package/dist/plugins/userConfig.d.ts +90 -0
- package/dist/plugins/userConfig.d.ts.map +1 -0
- package/dist/plugins/userConfig.js +332 -0
- package/dist/plugins/validate.d.ts +14 -0
- package/dist/plugins/validate.d.ts.map +1 -0
- package/dist/plugins/validate.js +222 -0
- package/package.json +1 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Canonical ladder, low → high. A resolved cap normalizes to one of these. */
|
|
2
|
+
export declare const EFFORT_CAP_LEVELS: readonly ["low", "medium", "high", "xhigh", "max"];
|
|
3
|
+
export type EffortCapLevel = (typeof EFFORT_CAP_LEVELS)[number];
|
|
4
|
+
/** Canonical rank of an effort token, or null when it is not on the ladder. */
|
|
5
|
+
export declare function effortRank(level: string): number | null;
|
|
6
|
+
export interface EffortCapResolution {
|
|
7
|
+
/** The effective cap (canonical name), or null when no tier sets a valid one. */
|
|
8
|
+
cap: EffortCapLevel | null;
|
|
9
|
+
/** Which tier supplied the deciding (strictest) value. Null when cap is null. */
|
|
10
|
+
tier: string | null;
|
|
11
|
+
/** Tier values that were ignored because they are not on the ladder. */
|
|
12
|
+
ignored: Array<{
|
|
13
|
+
tier: string;
|
|
14
|
+
value: string;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the effective `maxEffortLevel` across the settings tiers. A value the
|
|
19
|
+
* ladder does not know is IGNORED and reported (`ignored`) rather than guessed
|
|
20
|
+
* at — a typo must not silently disable the cap, but it must not silently clamp
|
|
21
|
+
* to the wrong level either; the caller surfaces it in one line.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveMaxEffortCap(workDir: string): EffortCapResolution;
|
|
24
|
+
//# sourceMappingURL=effortCap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effortCap.d.ts","sourceRoot":"","sources":["../../src/agent/effortCap.ts"],"names":[],"mappings":"AAeA,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,oDAAqD,CAAC;AACpF,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAgBhE,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIvD;AAED,MAAM,WAAW,mBAAmB;IAClC,iFAAiF;IACjF,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC;IAC3B,iFAAiF;IACjF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,wEAAwE;IACxE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAexE"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// S25b — `maxEffortLevel`: a CAP on the thinking-effort level (Claude Code W37
|
|
3
|
+
// parity — "caps the effort level on every provider… users can still pick a
|
|
4
|
+
// lower level"). The cap is read from every settings tier, and the STRICTEST
|
|
5
|
+
// value wins: a cap can only be TIGHTENED, never loosened, by a lower-precedence
|
|
6
|
+
// file — a cloned repo's `.nexrall/settings.json` cannot raise the ceiling the
|
|
7
|
+
// user or an admin set.
|
|
8
|
+
//
|
|
9
|
+
// One ladder for every provider: each model scale (anthropic low…ultra,
|
|
10
|
+
// deepseek low/high/max, qwen thinking off/on, glm low/high/max, openai
|
|
11
|
+
// low/medium/high) resolves onto the canonical ranks below, so a single cap
|
|
12
|
+
// value means the same thing on every model. The CLI half that walks a model's
|
|
13
|
+
// own wire scale lives in packages/cli/src/effortCap.ts.
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.EFFORT_CAP_LEVELS = void 0;
|
|
16
|
+
exports.effortRank = effortRank;
|
|
17
|
+
exports.resolveMaxEffortCap = resolveMaxEffortCap;
|
|
18
|
+
const rules_1 = require("../permissions/rules");
|
|
19
|
+
/** Canonical ladder, low → high. A resolved cap normalizes to one of these. */
|
|
20
|
+
exports.EFFORT_CAP_LEVELS = ['low', 'medium', 'high', 'xhigh', 'max'];
|
|
21
|
+
/** Wire/UI tokens (aliases included) → canonical rank. `extra`/`ultra` are this
|
|
22
|
+
* codebase's legacy anthropic UI labels (extra→xhigh, ultra→max, translated
|
|
23
|
+
* server-side by routes/code.js's EFFORT_MAP); the rest are the real wire values
|
|
24
|
+
* across the provider styles. */
|
|
25
|
+
const EFFORT_RANK = {
|
|
26
|
+
low: 0,
|
|
27
|
+
medium: 1,
|
|
28
|
+
high: 2,
|
|
29
|
+
extra: 3,
|
|
30
|
+
xhigh: 3,
|
|
31
|
+
max: 4,
|
|
32
|
+
ultra: 4,
|
|
33
|
+
};
|
|
34
|
+
/** Canonical rank of an effort token, or null when it is not on the ladder. */
|
|
35
|
+
function effortRank(level) {
|
|
36
|
+
if (typeof level !== 'string')
|
|
37
|
+
return null;
|
|
38
|
+
const r = EFFORT_RANK[level.trim().toLowerCase()];
|
|
39
|
+
return r === undefined ? null : r;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolve the effective `maxEffortLevel` across the settings tiers. A value the
|
|
43
|
+
* ladder does not know is IGNORED and reported (`ignored`) rather than guessed
|
|
44
|
+
* at — a typo must not silently disable the cap, but it must not silently clamp
|
|
45
|
+
* to the wrong level either; the caller surfaces it in one line.
|
|
46
|
+
*/
|
|
47
|
+
function resolveMaxEffortCap(workDir) {
|
|
48
|
+
let best = null;
|
|
49
|
+
const ignored = [];
|
|
50
|
+
for (const { tier, raw } of (0, rules_1.settingsTiersRaw)(workDir)) {
|
|
51
|
+
const v = raw.maxEffortLevel;
|
|
52
|
+
if (v === undefined)
|
|
53
|
+
continue;
|
|
54
|
+
const rank = typeof v === 'string' ? effortRank(v) : null;
|
|
55
|
+
if (rank === null) {
|
|
56
|
+
ignored.push({ tier, value: typeof v === 'string' ? v : (JSON.stringify(v) ?? 'null') });
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (!best || rank < best.rank)
|
|
60
|
+
best = { rank, tier };
|
|
61
|
+
}
|
|
62
|
+
if (!best)
|
|
63
|
+
return { cap: null, tier: null, ignored };
|
|
64
|
+
return { cap: exports.EFFORT_CAP_LEVELS[best.rank], tier: best.tier, ignored };
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=effortCap.js.map
|
package/dist/agent/hooks.d.ts
CHANGED
|
@@ -36,7 +36,15 @@ export interface HookDef {
|
|
|
36
36
|
*/
|
|
37
37
|
asyncRewake?: boolean;
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
39
|
+
* S24: the plugin's resolved userConfig as environment variables
|
|
40
|
+
* (NEXRALL_PLUGIN_OPTION_<KEY> — baked in by resolvePluginHooks). A shell-form
|
|
41
|
+
* hook reads a value from here because `${user_config.*}` is rejected inside
|
|
42
|
+
* a shell-form command (the substituted value would be re-parsed by the
|
|
43
|
+
* shell; validate.ts reports the reference).
|
|
44
|
+
*/
|
|
45
|
+
pluginOptions?: Record<string, string>;
|
|
46
|
+
/**
|
|
47
|
+
* `once`: run the hook once per session — after its first SUCCESSFUL run (exit 0) it is
|
|
40
48
|
* skipped; a failure, exit 2 or a timeout leaves it armed. Claude Code only honours
|
|
41
49
|
* this in skill frontmatter; Nexrall honours it wherever the hook is declared.
|
|
42
50
|
*/
|
|
@@ -56,7 +64,7 @@ export interface HookDef {
|
|
|
56
64
|
input?: Record<string, unknown>;
|
|
57
65
|
/**
|
|
58
66
|
* Which plugin this handler came from (stamped by the loader when it merges a
|
|
59
|
-
* plugin's hooks.json — see
|
|
67
|
+
* plugin's hooks.json — see resolvePluginHooks in ../plugins/resolve). Its processes are
|
|
60
68
|
* then started with NEXRALL_PLUGIN_DATA pointing at that plugin's OWN persistent
|
|
61
69
|
* data directory, the one place it may keep files across plugin updates.
|
|
62
70
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/agent/hooks.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/agent/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/hooks.js
CHANGED
|
@@ -63,7 +63,7 @@ const client_1 = require("../api/client");
|
|
|
63
63
|
const executor_1 = require("../tools/executor");
|
|
64
64
|
const agentTypes_1 = require("./agentTypes");
|
|
65
65
|
const rules_1 = require("../permissions/rules");
|
|
66
|
-
const
|
|
66
|
+
const resolve_1 = require("../plugins/resolve");
|
|
67
67
|
const data_1 = require("../plugins/data");
|
|
68
68
|
const fs = __importStar(require("fs"));
|
|
69
69
|
const path = __importStar(require("path"));
|
|
@@ -99,7 +99,7 @@ function loadHooks(workDir) {
|
|
|
99
99
|
fromSettings = base;
|
|
100
100
|
}
|
|
101
101
|
// Merge plugin-provided hooks AFTER the project's own (project hooks run first).
|
|
102
|
-
const fromPlugins = (0,
|
|
102
|
+
const fromPlugins = (0, resolve_1.resolvePluginHooks)(workDir);
|
|
103
103
|
const merged = { ...fromSettings };
|
|
104
104
|
for (const phase of Object.keys(fromPlugins)) {
|
|
105
105
|
const extra = fromPlugins[phase];
|
|
@@ -666,7 +666,13 @@ async function runHookHandler(hook, payload, opts) {
|
|
|
666
666
|
// forgot would silently break the plugin's only place to keep state. HTTP and model
|
|
667
667
|
// handlers ignore the variable; passing it costs nothing.
|
|
668
668
|
const env = hook.plugin
|
|
669
|
-
? {
|
|
669
|
+
? {
|
|
670
|
+
...(opts.env ?? process.env),
|
|
671
|
+
NEXRALL_PLUGIN_DATA: (0, data_1.ensurePluginDataDir)(hook.plugin),
|
|
672
|
+
// S24: the plugin's resolved userConfig rides in as env vars for EVERY
|
|
673
|
+
// handler of that plugin (mcp_tool/http handlers simply ignore them).
|
|
674
|
+
...(hook.pluginOptions ?? {}),
|
|
675
|
+
}
|
|
670
676
|
: opts.env;
|
|
671
677
|
return runWithHookEvents(hook, opts.event ?? 'hook', (onData) => {
|
|
672
678
|
if (hook.type === 'http')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/agent/skills.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/agent/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/skills.js
CHANGED
|
@@ -50,6 +50,7 @@ const path = __importStar(require("path"));
|
|
|
50
50
|
const os = __importStar(require("os"));
|
|
51
51
|
const child_process_1 = require("child_process");
|
|
52
52
|
const index_1 = require("../plugins/index");
|
|
53
|
+
const resolve_1 = require("../plugins/resolve");
|
|
53
54
|
const loader_1 = require("../commands/loader");
|
|
54
55
|
const frontmatter_1 = require("../util/frontmatter");
|
|
55
56
|
const agentTypes_1 = require("./agentTypes");
|
|
@@ -730,7 +731,19 @@ function resolveNestedSkill(workDir, ref) {
|
|
|
730
731
|
* guidance without loading them into context up front.
|
|
731
732
|
*/
|
|
732
733
|
function expandSkill(skill, argString, workDir) {
|
|
733
|
-
|
|
734
|
+
let expanded = (0, loader_1.expandBody)(skill.body, argString, workDir);
|
|
735
|
+
// S24: a PLUGIN skill's body may embed ${user_config.KEY} references — that is
|
|
736
|
+
// how a skill targets the value the user configured for its plugin. Only
|
|
737
|
+
// NON-sensitive values are substituted here: a sensitive reference stays the
|
|
738
|
+
// literal token, so a token never rides a skill into model context (the
|
|
739
|
+
// command/agent can still read it from NEXRALL_PLUGIN_OPTION_<KEY> in its own
|
|
740
|
+
// processes). Flat plugin commands have no `dir` and cannot be attributed to
|
|
741
|
+
// one plugin — they are skipped.
|
|
742
|
+
if (skill.source === 'plugin' && skill.dir) {
|
|
743
|
+
const cfg = (0, resolve_1.pluginConfigForSkillDir)(workDir, skill.dir);
|
|
744
|
+
if (cfg)
|
|
745
|
+
expanded = (0, resolve_1.substituteSkillBody)(expanded, cfg);
|
|
746
|
+
}
|
|
734
747
|
if (!skill.dir)
|
|
735
748
|
return expanded;
|
|
736
749
|
let siblings = [];
|
package/dist/index.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export * from './mcp/stats';
|
|
|
27
27
|
export * from './checkpoint/manager';
|
|
28
28
|
export * from './commands/loader';
|
|
29
29
|
export * from './agent/agentTypes';
|
|
30
|
+
export * from './agent/effortCap';
|
|
30
31
|
export * from './agent/planMode';
|
|
31
32
|
export * from './agent/agentRegistry';
|
|
32
33
|
export * from './agent/backgroundAgents';
|
|
@@ -40,6 +41,10 @@ export * from './plugins/installer';
|
|
|
40
41
|
export * from './plugins/sources';
|
|
41
42
|
export * from './plugins/data';
|
|
42
43
|
export * from './plugins/eval';
|
|
44
|
+
export * from './plugins/userConfig';
|
|
45
|
+
export * from './plugins/configStore';
|
|
46
|
+
export * from './plugins/validate';
|
|
47
|
+
export * from './plugins/resolve';
|
|
43
48
|
export * from './agent/trust';
|
|
44
49
|
export * from './agent/crossProcessLock';
|
|
45
50
|
export * from './agent/worktree';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -43,6 +43,7 @@ __exportStar(require("./mcp/stats"), exports);
|
|
|
43
43
|
__exportStar(require("./checkpoint/manager"), exports);
|
|
44
44
|
__exportStar(require("./commands/loader"), exports);
|
|
45
45
|
__exportStar(require("./agent/agentTypes"), exports);
|
|
46
|
+
__exportStar(require("./agent/effortCap"), exports);
|
|
46
47
|
__exportStar(require("./agent/planMode"), exports);
|
|
47
48
|
__exportStar(require("./agent/agentRegistry"), exports);
|
|
48
49
|
__exportStar(require("./agent/backgroundAgents"), exports);
|
|
@@ -56,6 +57,10 @@ __exportStar(require("./plugins/installer"), exports);
|
|
|
56
57
|
__exportStar(require("./plugins/sources"), exports);
|
|
57
58
|
__exportStar(require("./plugins/data"), exports);
|
|
58
59
|
__exportStar(require("./plugins/eval"), exports);
|
|
60
|
+
__exportStar(require("./plugins/userConfig"), exports);
|
|
61
|
+
__exportStar(require("./plugins/configStore"), exports);
|
|
62
|
+
__exportStar(require("./plugins/validate"), exports);
|
|
63
|
+
__exportStar(require("./plugins/resolve"), exports);
|
|
59
64
|
__exportStar(require("./agent/trust"), exports);
|
|
60
65
|
__exportStar(require("./agent/crossProcessLock"), exports);
|
|
61
66
|
__exportStar(require("./agent/worktree"), exports);
|
package/dist/mcp/manager.d.ts
CHANGED
|
@@ -71,6 +71,14 @@ export declare class McpManager {
|
|
|
71
71
|
* poll in executor.ts), just without the ability to also kill a remote
|
|
72
72
|
* server's in-flight work the way `bash` can kill a local child process.
|
|
73
73
|
*/
|
|
74
|
+
/**
|
|
75
|
+
* S25e (Claude Code 2.1.288 parity): a mid-call 401/insufficient_scope already flips
|
|
76
|
+
* the server to needs-auth (see trackAuth below); when the HOST can ask a user, it may
|
|
77
|
+
* re-authorize on the spot and request ONE retry of the same call. Unset = no retry
|
|
78
|
+
* (headless runs), so the enriched error still reaches the caller. A hook that throws
|
|
79
|
+
* is treated as "no retry" — the original OAuth error must stay the thing the model sees.
|
|
80
|
+
*/
|
|
81
|
+
onAuthRequired?: (serverName: string, missingScope: string) => Promise<boolean>;
|
|
74
82
|
callTool(prefixedName: string, input: Record<string, unknown>, abortSignal?: {
|
|
75
83
|
aborted: boolean;
|
|
76
84
|
}): Promise<string | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,eAAe,EAAE,iBAAiB,EAAgB,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC/G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/manager.js
CHANGED
|
@@ -41,6 +41,7 @@ const client_1 = require("./client");
|
|
|
41
41
|
const httpClient_1 = require("./httpClient");
|
|
42
42
|
const sseClient_1 = require("./sseClient");
|
|
43
43
|
const index_1 = require("../plugins/index");
|
|
44
|
+
const resolve_1 = require("../plugins/resolve");
|
|
44
45
|
const stats_1 = require("./stats");
|
|
45
46
|
// ─── McpManager ───────────────────────────────────────────────────────────────
|
|
46
47
|
class McpManager {
|
|
@@ -119,7 +120,8 @@ class McpManager {
|
|
|
119
120
|
// Plugins first, then user, then project — later assignments override, so
|
|
120
121
|
// a user/project server definition beats a plugin's same-name one.
|
|
121
122
|
try {
|
|
122
|
-
|
|
123
|
+
// resolvePluginMcpServers = pluginMcpServers + `${user_config.KEY}` substitution (S24).
|
|
124
|
+
Object.assign(merged.mcpServers, (0, resolve_1.resolvePluginMcpServers)(workDir));
|
|
123
125
|
}
|
|
124
126
|
catch {
|
|
125
127
|
/* plugin scan is best-effort */
|
|
@@ -196,23 +198,6 @@ class McpManager {
|
|
|
196
198
|
}
|
|
197
199
|
return tools;
|
|
198
200
|
}
|
|
199
|
-
/**
|
|
200
|
-
* Execute an MCP tool call. Returns null if this tool is not an MCP tool.
|
|
201
|
-
*
|
|
202
|
-
* `abortSignal` is optional and best-effort: the underlying transports (stdio
|
|
203
|
-
* JSON-RPC / HTTP / SSE) have no cancellation message in this client, so an
|
|
204
|
-
* abort here does NOT stop the server from finishing its work — it only stops
|
|
205
|
-
* THIS CALL from making the caller wait for it. Before this was added, Ctrl+C
|
|
206
|
-
* during an MCP tool call was silently swallowed: loop.ts set
|
|
207
|
-
* `abortSignal.aborted = true` but nothing downstream of `options.mcpManager
|
|
208
|
-
* .callTool(name, input)` ever looked at it, so the user's only way out was
|
|
209
|
-
* to wait out the full 60s MCP_TOOL_TIMEOUT_MS (or however long the server
|
|
210
|
-
* actually took). Racing the same abortSignal the 60s timeout already races
|
|
211
|
-
* against makes Ctrl+C return control immediately instead of up to a minute
|
|
212
|
-
* later — matching how the `bash` tool already behaves (its own 200ms abort
|
|
213
|
-
* poll in executor.ts), just without the ability to also kill a remote
|
|
214
|
-
* server's in-flight work the way `bash` can kill a local child process.
|
|
215
|
-
*/
|
|
216
201
|
async callTool(prefixedName, input, abortSignal) {
|
|
217
202
|
const serverName = this._toolMap.get(prefixedName);
|
|
218
203
|
if (!serverName)
|
|
@@ -222,48 +207,70 @@ class McpManager {
|
|
|
222
207
|
return null;
|
|
223
208
|
// Strip the server prefix to get the real tool name
|
|
224
209
|
const toolName = prefixedName.slice(serverName.length + 2);
|
|
225
|
-
//
|
|
210
|
+
// One attempt's full race — a fresh timeout, abort poll and stat pairing per try,
|
|
211
|
+
// because a promise cannot be awaited twice and S25e's retry below builds new ones.
|
|
226
212
|
const MCP_TOOL_TIMEOUT_MS = 60000;
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
const racers = [timed(client.callTool(toolName, input)), timed(timeoutPromise)];
|
|
250
|
-
if (abortSignal) {
|
|
251
|
-
let pollId;
|
|
252
|
-
const abortPromise = new Promise((_, reject) => {
|
|
253
|
-
pollId = setInterval(() => {
|
|
254
|
-
if (abortSignal.aborted) {
|
|
255
|
-
clearInterval(pollId);
|
|
256
|
-
reject(Object.assign(new Error('Aborted'), { name: 'AbortError' }));
|
|
257
|
-
}
|
|
258
|
-
}, 100);
|
|
213
|
+
const once = () => {
|
|
214
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`MCP tool "${prefixedName}" timed out after ${MCP_TOOL_TIMEOUT_MS / 1000}s`)), MCP_TOOL_TIMEOUT_MS));
|
|
215
|
+
// Timing covers the whole path the user waits on (server round-trip AND the
|
|
216
|
+
// race against the 60s timeout / abort), which is what "how long did that take"
|
|
217
|
+
// means from the outside. The tool name recorded is the PREFIXED one, so the
|
|
218
|
+
// stats of two servers with a same-named tool never merge.
|
|
219
|
+
const startedAt = Date.now();
|
|
220
|
+
this.stats.begin();
|
|
221
|
+
const timed = (p) => p.then((v) => {
|
|
222
|
+
this.stats.ok(prefixedName, Date.now() - startedAt);
|
|
223
|
+
return v;
|
|
224
|
+
}, (e) => {
|
|
225
|
+
this.stats.fail(prefixedName, Date.now() - startedAt, e.message || String(e));
|
|
226
|
+
throw e;
|
|
227
|
+
});
|
|
228
|
+
// A 401 mid-CALL is different from one at connect: the server is already up and
|
|
229
|
+
// some tools work — record it so /mcp flips to needs-auth (with the missing
|
|
230
|
+
// scope) and let the enriched message reach the caller (the model sees WHY).
|
|
231
|
+
const trackAuth = (p) => p.catch((err) => {
|
|
232
|
+
if (err instanceof httpClient_1.McpOAuthRequiredError)
|
|
233
|
+
this._needsAuth.set(serverName, err.wwwAuthenticate);
|
|
234
|
+
throw err;
|
|
259
235
|
});
|
|
260
|
-
racers.
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
236
|
+
const racers = [timed(client.callTool(toolName, input)), timed(timeoutPromise)];
|
|
237
|
+
if (abortSignal) {
|
|
238
|
+
let pollId;
|
|
239
|
+
const abortPromise = new Promise((_, reject) => {
|
|
240
|
+
pollId = setInterval(() => {
|
|
241
|
+
if (abortSignal.aborted) {
|
|
242
|
+
clearInterval(pollId);
|
|
243
|
+
reject(Object.assign(new Error('Aborted'), { name: 'AbortError' }));
|
|
244
|
+
}
|
|
245
|
+
}, 100);
|
|
246
|
+
});
|
|
247
|
+
racers.push(timed(abortPromise));
|
|
248
|
+
// Clearing the poll on whichever branch wins avoids leaving a live interval
|
|
249
|
+
// (and the closure it holds) running for the rest of the process lifetime —
|
|
250
|
+
// the same leak-prevention pattern client.ts uses for its own abort poll.
|
|
251
|
+
return trackAuth(Promise.race(racers).finally(() => clearInterval(pollId)));
|
|
252
|
+
}
|
|
253
|
+
return trackAuth(Promise.race(racers));
|
|
254
|
+
};
|
|
255
|
+
try {
|
|
256
|
+
return await once();
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
const hook = this.onAuthRequired;
|
|
260
|
+
if (!hook || !(err instanceof httpClient_1.McpOAuthRequiredError))
|
|
261
|
+
throw err;
|
|
262
|
+
let retry;
|
|
263
|
+
try {
|
|
264
|
+
retry = await hook(serverName, err.missingScope ?? '');
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
retry = false; // a broken host hook must not mask the OAuth error
|
|
268
|
+
}
|
|
269
|
+
if (!retry)
|
|
270
|
+
throw err;
|
|
271
|
+
// The host re-authorized (fresh tokens are in): one retry, no loop.
|
|
272
|
+
return await once();
|
|
265
273
|
}
|
|
266
|
-
return trackAuth(Promise.race(racers));
|
|
267
274
|
}
|
|
268
275
|
/** Resources across connected, enabled servers. One server failing never hides the others. */
|
|
269
276
|
async listResources(server) {
|
|
@@ -32,4 +32,5 @@ export interface TokenMatch {
|
|
|
32
32
|
/** Split `src` into simple commands, each a list of unquoted words. */
|
|
33
33
|
export declare function tokenize(src: string): string[][];
|
|
34
34
|
export declare function classifyTokens(tokens: string[], recurse: (command: string) => TokenMatch | null, rawSql: (command: string) => TokenMatch | null): TokenMatch | null;
|
|
35
|
+
export declare function unwrappedViews(command: string): string[];
|
|
35
36
|
//# sourceMappingURL=destructiveTokens.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"destructiveTokens.d.ts","sourceRoot":"","sources":["../../src/permissions/destructiveTokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAID,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CA6DhD;AAsVD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,UAAU,GAAG,IAAI,EAC/C,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,UAAU,GAAG,IAAI,GAC7C,UAAU,GAAG,IAAI,CA+HnB"}
|
|
1
|
+
{"version":3,"file":"destructiveTokens.d.ts","sourceRoot":"","sources":["../../src/permissions/destructiveTokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAID,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CA6DhD;AAsVD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,UAAU,GAAG,IAAI,EAC/C,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,UAAU,GAAG,IAAI,GAC7C,UAAU,GAAG,IAAI,CA+HnB;AAyBD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAKxD"}
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
24
|
exports.tokenize = tokenize;
|
|
25
25
|
exports.classifyTokens = classifyTokens;
|
|
26
|
+
exports.unwrappedViews = unwrappedViews;
|
|
26
27
|
const hit = (category, reason) => ({ category, reason });
|
|
27
28
|
/** Split `src` into simple commands, each a list of unquoted words. */
|
|
28
29
|
function tokenize(src) {
|
|
@@ -552,4 +553,96 @@ function classifyTokens(tokens, recurse, rawSql) {
|
|
|
552
553
|
}
|
|
553
554
|
return null;
|
|
554
555
|
}
|
|
556
|
+
// ─── Every spelling of the command, for the permission-rule matcher ─────────
|
|
557
|
+
//
|
|
558
|
+
// A deny/ask rule must not be skippable by dressing the command up. Claude Code
|
|
559
|
+
// fixed exactly this class (2.1.288/289): "a deny or ask rule … missing a
|
|
560
|
+
// command behind an environment variable prefix with an expanded value (e.g.
|
|
561
|
+
// `TZ="$HOME" rm -rf build`)" and "a bare variable assignment came before the
|
|
562
|
+
// command". The destructive guard has always seen through these (tokenize +
|
|
563
|
+
// classifyTokens above); the RULE matcher had not, so `permissions.deny:
|
|
564
|
+
// ["Bash(rm:*)"]` silently did nothing against `FOO=bar rm -rf build`.
|
|
565
|
+
//
|
|
566
|
+
// unwrappedViews returns every "command actually run" spelling hiding in one
|
|
567
|
+
// command line, using this module's tokenizer and the same wrapper tables as
|
|
568
|
+
// classifyTokens, so anything the guard can see, a rule can see too:
|
|
569
|
+
//
|
|
570
|
+
// 'FOO=bar sudo rm -rf build' → 'sudo rm -rf build', 'rm -rf build'
|
|
571
|
+
// 'cd /tmp && FOO=1 rm -rf x' → 'cd /tmp', 'rm -rf x'
|
|
572
|
+
// 'echo $(rm -rf build)' → 'echo $', 'rm -rf build'
|
|
573
|
+
//
|
|
574
|
+
// Deliberately NOT unwrapped (same as classifyTokens's guard scope):
|
|
575
|
+
// ssh / docker exec / kubectl exec — reaching into those needs the remote or
|
|
576
|
+
// container branch, tracked separately.
|
|
577
|
+
//
|
|
578
|
+
// Order: most literal first (wrappers still attached), then each peeled form.
|
|
579
|
+
function unwrappedViews(command) {
|
|
580
|
+
if (typeof command !== 'string' || command.length === 0)
|
|
581
|
+
return [];
|
|
582
|
+
const out = new Set();
|
|
583
|
+
collectViews(command, out, 0);
|
|
584
|
+
return [...out];
|
|
585
|
+
}
|
|
586
|
+
/** Flags of a peelable wrapper that consume a following value (mirror of classifyTokens). */
|
|
587
|
+
const WRAPPER_VALUE_FLAGS = {
|
|
588
|
+
sudo: new Set(['-u', '-g', '-h', '-p', '-C', '-D', '-R', '-T', '-U']),
|
|
589
|
+
doas: new Set(['-u', '-g', '-h', '-p', '-C', '-D', '-R', '-T', '-U']),
|
|
590
|
+
env: new Set(['-u', '-C', '-S']),
|
|
591
|
+
nice: new Set(['-n']),
|
|
592
|
+
ionice: new Set(['-c', '-n', '-p']),
|
|
593
|
+
command: new Set(),
|
|
594
|
+
builtin: new Set(),
|
|
595
|
+
nohup: new Set(),
|
|
596
|
+
exec: new Set(),
|
|
597
|
+
time: new Set(),
|
|
598
|
+
setsid: new Set(),
|
|
599
|
+
caffeinate: new Set(),
|
|
600
|
+
stdbuf: new Set(),
|
|
601
|
+
unbuffer: new Set(),
|
|
602
|
+
};
|
|
603
|
+
/** `command -v rm` (or `-V`, `-pv`) only PRINTS where rm is — never peel it into `rm`. */
|
|
604
|
+
const LOOKUP_FLAG = /^-p?[vV]+$/;
|
|
605
|
+
function collectViews(src, out, depth) {
|
|
606
|
+
if (depth > 3)
|
|
607
|
+
return;
|
|
608
|
+
for (const tokens of tokenize(src)) {
|
|
609
|
+
let t = tokens;
|
|
610
|
+
for (let guard = 0; guard < 12; guard++) {
|
|
611
|
+
while (t.length && (ENV_ASSIGN.test(t[0]) || CONTROL_WORDS.has(t[0])))
|
|
612
|
+
t = t.slice(1);
|
|
613
|
+
if (t.length === 0)
|
|
614
|
+
break;
|
|
615
|
+
out.add(t.join(' '));
|
|
616
|
+
const bin = base(t[0]);
|
|
617
|
+
const args = t.slice(1);
|
|
618
|
+
// bash -c "…" / eval "…" carry the command as a STRING — read it too.
|
|
619
|
+
if (SHELLS.has(bin)) {
|
|
620
|
+
const i = args.findIndex((a) => /^-[A-Za-z]*c[A-Za-z]*$/.test(a));
|
|
621
|
+
if (i >= 0 && args[i + 1] !== undefined)
|
|
622
|
+
collectViews(args[i + 1], out, depth + 1);
|
|
623
|
+
break;
|
|
624
|
+
}
|
|
625
|
+
if (bin === 'eval') {
|
|
626
|
+
collectViews(args.join(' '), out, depth + 1);
|
|
627
|
+
break;
|
|
628
|
+
}
|
|
629
|
+
if (bin === 'timeout') {
|
|
630
|
+
t = dropOpts(args, new Set(['-s', '-k'])).slice(1); // timeout DURATION cmd
|
|
631
|
+
continue;
|
|
632
|
+
}
|
|
633
|
+
if (bin === 'xargs') {
|
|
634
|
+
t = dropOpts(args, new Set(['-I', '-n', '-P', '-L', '-s', '-d', '-E', '-a', '-J']));
|
|
635
|
+
continue;
|
|
636
|
+
}
|
|
637
|
+
if ((bin === 'command' || bin === 'builtin') && args.some((a) => LOOKUP_FLAG.test(a)))
|
|
638
|
+
break;
|
|
639
|
+
const valueFlags = WRAPPER_VALUE_FLAGS[bin];
|
|
640
|
+
if (valueFlags) {
|
|
641
|
+
t = dropOpts(args, valueFlags);
|
|
642
|
+
continue;
|
|
643
|
+
}
|
|
644
|
+
break;
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
}
|
|
555
648
|
//# sourceMappingURL=destructiveTokens.js.map
|
|
@@ -15,6 +15,18 @@ export declare function setSessionRules(r: Partial<PermissionRules>): void;
|
|
|
15
15
|
export declare function setSessionSettings(obj: Record<string, unknown> | null): void;
|
|
16
16
|
export declare function getSessionSettings(): Record<string, unknown> | null;
|
|
17
17
|
export declare function loadSettings(workDir: string): MergedSettings;
|
|
18
|
+
/**
|
|
19
|
+
* S25b: the raw object of every settings tier, in precedence order (managed →
|
|
20
|
+
* user → project → local → `--settings` session settings). For resolvers where
|
|
21
|
+
* the STRICTEST value must win regardless of tier — `maxEffortLevel` (a cap can
|
|
22
|
+
* only be tightened by a lower-precedence file, never loosened), and anything
|
|
23
|
+
* with the same one-way semantics added later. `loadSettings().raw` cannot serve
|
|
24
|
+
* those: it merges with LAST-wins, which is the opposite direction.
|
|
25
|
+
*/
|
|
26
|
+
export declare function settingsTiersRaw(workDir: string): Array<{
|
|
27
|
+
tier: string;
|
|
28
|
+
raw: Record<string, unknown>;
|
|
29
|
+
}>;
|
|
18
30
|
/** The first ALLOW rule that matches this call, or null. S20's classifier gate
|
|
19
31
|
* reads this to tell a NARROW pre-approval (wins, no review) from a BROAD one
|
|
20
32
|
* (suspended while the classifier is on — see isBroadAllowRule). */
|