@wrongstack/core 0.291.0 → 0.291.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/boot.d.ts.map +1 -1
- package/dist/chronicle/index.js +20 -1
- package/dist/chronicle/index.js.map +2 -2
- package/dist/chronicle/tool-adapter.d.ts.map +1 -1
- package/dist/coordination/director.d.ts +18 -0
- package/dist/coordination/director.d.ts.map +1 -1
- package/dist/coordination/fleet-spawn.d.ts.map +1 -1
- package/dist/coordination/index.js +37 -15
- package/dist/coordination/index.js.map +2 -2
- package/dist/core/agent-response.d.ts.map +1 -1
- package/dist/defaults/index.js +660 -391
- package/dist/defaults/index.js.map +4 -4
- package/dist/execution/index.js +61 -12
- package/dist/execution/index.js.map +3 -3
- package/dist/execution/tool-executor.d.ts.map +1 -1
- package/dist/hq/index.js +17 -0
- package/dist/hq/index.js.map +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1304 -882
- package/dist/index.js.map +4 -4
- package/dist/infrastructure/index.js +15 -10
- package/dist/infrastructure/index.js.map +2 -2
- package/dist/kernel/events/tool-events.d.ts +24 -0
- package/dist/kernel/events/tool-events.d.ts.map +1 -1
- package/dist/plugins/auto-review-plugin.d.ts +10 -0
- package/dist/plugins/auto-review-plugin.d.ts.map +1 -1
- package/dist/security/index.js +148 -0
- package/dist/security/index.js.map +3 -3
- package/dist/security/permission-policy.d.ts +8 -1
- package/dist/security/permission-policy.d.ts.map +1 -1
- package/dist/storage/config-loader.d.ts +8 -0
- package/dist/storage/config-loader.d.ts.map +1 -1
- package/dist/storage/index.js +457 -379
- package/dist/storage/index.js.map +4 -4
- package/dist/storage/provider-config-watcher.d.ts +6 -0
- package/dist/storage/provider-config-watcher.d.ts.map +1 -1
- package/dist/types/permission.d.ts +38 -0
- package/dist/types/permission.d.ts.map +1 -1
- package/dist/utils/config-backup.d.ts +20 -0
- package/dist/utils/config-backup.d.ts.map +1 -0
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +172 -106
- package/dist/utils/index.js.map +4 -4
- package/dist/utils/message-invariants.d.ts +12 -9
- package/dist/utils/message-invariants.d.ts.map +1 -1
- package/dist/utils/term.d.ts +6 -0
- package/dist/utils/term.d.ts.map +1 -1
- package/dist/utils/wstack-paths.d.ts +10 -0
- package/dist/utils/wstack-paths.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -56,6 +56,30 @@ export interface ToolEventMap {
|
|
|
56
56
|
id: string;
|
|
57
57
|
event: ToolProgressEvent;
|
|
58
58
|
};
|
|
59
|
+
/**
|
|
60
|
+
* Fired once the permission policy and executor-level safety ceilings have
|
|
61
|
+
* produced the effective authorization decision for a valid tool call.
|
|
62
|
+
* Raw tool input is deliberately excluded; inputHash is computed after
|
|
63
|
+
* secret scrubbing so Chronicle can correlate decisions without storing
|
|
64
|
+
* credentials or command arguments.
|
|
65
|
+
*/
|
|
66
|
+
'permission.evaluated': {
|
|
67
|
+
sessionId?: string | undefined;
|
|
68
|
+
traceId?: string | undefined;
|
|
69
|
+
agentId?: string | undefined;
|
|
70
|
+
name: string;
|
|
71
|
+
id: string;
|
|
72
|
+
inputHash: string;
|
|
73
|
+
policyDecision: PermissionDecision['permission'];
|
|
74
|
+
effectiveDecision: PermissionDecision['permission'];
|
|
75
|
+
decisionSource: PermissionDecision['source'];
|
|
76
|
+
reason?: string | undefined;
|
|
77
|
+
riskTier?: RiskTier | undefined;
|
|
78
|
+
yoloEnabled: boolean;
|
|
79
|
+
boundaryDecision?: 'allow' | 'confirm' | 'block' | undefined;
|
|
80
|
+
boundaryReason?: string | undefined;
|
|
81
|
+
capabilityDowngraded: boolean;
|
|
82
|
+
};
|
|
59
83
|
/**
|
|
60
84
|
* Fired when a tool call needs confirmation
|
|
61
85
|
* is registered on the executor. The TUI renders a confirmation dialog
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-events.d.ts","sourceRoot":"","sources":["../../../src/kernel/events/tool-events.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tool-events.d.ts","sourceRoot":"","sources":["../../../src/kernel/events/tool-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,16 @@ export interface ResolvedAutoReviewConfig {
|
|
|
45
45
|
cascadeOn: 'off' | 'critical' | 'high';
|
|
46
46
|
maxCascadeDepth: number;
|
|
47
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Default reviewer rotation chain, used when the configured fallbackProfile is
|
|
50
|
+
* absent, unknown, or resolves to an empty chain. Without this, the reviewer
|
|
51
|
+
* would spawn against the bare session model with no fallback; if that model
|
|
52
|
+
* returns an empty response the subagent dies at 1 iter / 0 tools (surfaced as
|
|
53
|
+
* provider_auth). Kept in sync with the CLI-side default in
|
|
54
|
+
* packages/cli/src/execution.ts so both spawn seams share one safety net.
|
|
55
|
+
* Parsed downstream as `provider/model` refs.
|
|
56
|
+
*/
|
|
57
|
+
export declare const DEFAULT_REVIEW_FALLBACK_MODELS: readonly string[];
|
|
48
58
|
export declare function resolveAutoReviewConfig(cfg: AutoReviewConfig, sessionConfig: Config): ResolvedAutoReviewConfig;
|
|
49
59
|
export interface ParsedSeverities {
|
|
50
60
|
critical: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-review-plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/auto-review-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,qBAAqB,CAAC;AAO7B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,oDAAoD;IACpD,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;IACpD;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC;CACzB;AAOD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,gBAAgB,EACrB,aAAa,EAAE,MAAM,GACpB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"auto-review-plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/auto-review-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,qBAAqB,CAAC;AAO7B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,oDAAoD;IACpD,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;IACpD;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC;CACzB;AAOD;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,EAAE,SAAS,MAAM,EAM3D,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,gBAAgB,EACrB,aAAa,EAAE,MAAM,GACpB,wBAAwB,CAiD1B;AAMD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CA4BlE;AA6BD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAoBlG;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,EACtC,UAAU,EAAE,gBAAgB,GAC3B,MAAM,GAAG,UAAU,GAAG,IAAI,CAK5B;AA4KD,wBAAgB,sBAAsB,IAAI,MAAM,CA4U/C"}
|
package/dist/security/index.js
CHANGED
|
@@ -1859,6 +1859,136 @@ var DefaultPermissionPolicy = class {
|
|
|
1859
1859
|
this.sessionAllowed.set(`${rule.tool}::${rule.pattern}`, true);
|
|
1860
1860
|
this._evalCache.clear();
|
|
1861
1861
|
}
|
|
1862
|
+
/**
|
|
1863
|
+
* Side-effect-free permission evaluation trace. Mirrors `evaluate()`
|
|
1864
|
+
* step-by-step without prompting the user, writing to trust files, or
|
|
1865
|
+
* mutating session state. Returns the full ordered trace and winner.
|
|
1866
|
+
*/
|
|
1867
|
+
async explain(tool, input, ctx) {
|
|
1868
|
+
if (!this.loaded) await this.reload();
|
|
1869
|
+
const subject = subjectForToolInput(tool.name, input, tool.subjectKey);
|
|
1870
|
+
const steps = [];
|
|
1871
|
+
let winnerIndex = -1;
|
|
1872
|
+
const add = (rule, matched, decision, source, detail) => {
|
|
1873
|
+
steps.push({ rule, matched, decision, source, detail });
|
|
1874
|
+
};
|
|
1875
|
+
if (this.policyInvalid) {
|
|
1876
|
+
add("policy invalid", true, "deny", "deny", "trust policy is invalid; all tools are denied");
|
|
1877
|
+
winnerIndex = 0;
|
|
1878
|
+
return { toolName: tool.name, subject, steps, winnerIndex, decision: { permission: "deny", source: "deny", reason: "trust policy is invalid" } };
|
|
1879
|
+
}
|
|
1880
|
+
add("policy valid", false, "auto", "default", "trust policy loaded successfully");
|
|
1881
|
+
const namespaceEntry = this.findNamespaceEntry(tool.name);
|
|
1882
|
+
const entry = this.policy[tool.name] ?? namespaceEntry;
|
|
1883
|
+
const namespaceSource = namespaceEntry ? `wildcard entry matched (${Object.keys(this.policy).find((k) => k.includes("*") && matchGlob(k, tool.name))})` : "no namespace match";
|
|
1884
|
+
const cacheKey = `${tool.name}::${subject ?? tool.name}`;
|
|
1885
|
+
if (this.sessionDenied.has(cacheKey)) {
|
|
1886
|
+
add("session soft deny", true, "deny", "deny", 'user pressed "no" earlier in this session \u2014 blocked until reload');
|
|
1887
|
+
winnerIndex = steps.length - 1;
|
|
1888
|
+
return { toolName: tool.name, subject, steps, winnerIndex, decision: { permission: "deny", source: "deny", reason: "session soft deny (user pressed no)" } };
|
|
1889
|
+
}
|
|
1890
|
+
add("session soft deny", false, "deny", "deny", "no session-level soft deny for this tool+subject");
|
|
1891
|
+
if (this.sessionAllowed.has(cacheKey)) {
|
|
1892
|
+
add("session soft allow", true, "auto", "trust", 'user pressed "yes" in current session \u2014 one-shot auto-approve (consumed)');
|
|
1893
|
+
winnerIndex = steps.length - 1;
|
|
1894
|
+
return { toolName: tool.name, subject, steps, winnerIndex, decision: { permission: "auto", source: "trust", reason: "session one-shot allow (user pressed yes)" } };
|
|
1895
|
+
}
|
|
1896
|
+
add("session soft allow", false, "auto", "trust", "no session-level one-shot allow for this tool+subject");
|
|
1897
|
+
if (entry?.deny && subject && matchesTrust(entry.deny, subject)) {
|
|
1898
|
+
add("trust deny", true, "deny", "deny", `subject "${subject}" matched a deny pattern in trust file`);
|
|
1899
|
+
winnerIndex = steps.length - 1;
|
|
1900
|
+
return { toolName: tool.name, subject, steps, winnerIndex, decision: { permission: "deny", source: "deny", reason: "matched deny pattern" } };
|
|
1901
|
+
}
|
|
1902
|
+
add("trust deny", false, "deny", "deny", `no deny pattern matched (namespace: ${namespaceSource})`);
|
|
1903
|
+
if (tool.permission === "deny") {
|
|
1904
|
+
add("tool default deny", true, "deny", "default", `tool "${tool.name}" has permission: deny by default`);
|
|
1905
|
+
winnerIndex = steps.length - 1;
|
|
1906
|
+
return { toolName: tool.name, subject, steps, winnerIndex, decision: { permission: "deny", source: "default", reason: "tool default deny" } };
|
|
1907
|
+
}
|
|
1908
|
+
add("tool default deny", false, "deny", "default", `tool "${tool.name}" has permission: "${tool.permission}"`);
|
|
1909
|
+
if (entry?.allow && subject && matchesTrust(entry.allow, subject)) {
|
|
1910
|
+
add("trust allow", true, "auto", "trust", `subject "${subject}" matched an allow pattern in trust file`);
|
|
1911
|
+
winnerIndex = steps.length - 1;
|
|
1912
|
+
return { toolName: tool.name, subject, steps, winnerIndex, decision: { permission: "auto", source: "trust", reason: "matched allow pattern" } };
|
|
1913
|
+
}
|
|
1914
|
+
add("trust allow", false, "auto", "trust", `no allow pattern matched (namespace: ${namespaceSource})`);
|
|
1915
|
+
if (entry?.auto) {
|
|
1916
|
+
add("trust auto", true, "auto", "trust", `trust file has auto: true for "${tool.name}"`);
|
|
1917
|
+
winnerIndex = steps.length - 1;
|
|
1918
|
+
return { toolName: tool.name, subject, steps, winnerIndex, decision: { permission: "auto", source: "trust", reason: "trust auto" } };
|
|
1919
|
+
}
|
|
1920
|
+
add("trust auto", false, "auto", "trust", `no auto flag for "${tool.name}" in trust file`);
|
|
1921
|
+
if (!this.yolo && this.isSensitiveReadCall(tool, input)) {
|
|
1922
|
+
const hasDelegate2 = this.promptDelegate !== void 0;
|
|
1923
|
+
add(
|
|
1924
|
+
"sensitive read",
|
|
1925
|
+
true,
|
|
1926
|
+
hasDelegate2 ? "confirm" : "confirm",
|
|
1927
|
+
"default",
|
|
1928
|
+
hasDelegate2 ? "sensitive file read detected \u2014 would prompt user for approval" : "sensitive file read detected \u2014 returns confirm (no prompt delegate)"
|
|
1929
|
+
);
|
|
1930
|
+
winnerIndex = steps.length - 1;
|
|
1931
|
+
return { toolName: tool.name, subject, steps, winnerIndex, decision: { permission: "confirm", source: "default", riskTier: "standard", reason: "sensitive file read needs explicit approval" } };
|
|
1932
|
+
}
|
|
1933
|
+
add("sensitive read", false, "confirm", "default", "not a sensitive read call (or YOLO bypasses this check)");
|
|
1934
|
+
if (this.yolo) {
|
|
1935
|
+
add("yolo", true, "auto", "yolo", "YOLO mode is active \u2014 auto-approving every non-denied call");
|
|
1936
|
+
winnerIndex = steps.length - 1;
|
|
1937
|
+
return { toolName: tool.name, subject, steps, winnerIndex, decision: { permission: "auto", source: "yolo" } };
|
|
1938
|
+
}
|
|
1939
|
+
add("yolo", false, "auto", "yolo", "YOLO mode is not active");
|
|
1940
|
+
if (tool.name === "write" && subject) {
|
|
1941
|
+
const hasRead = ctx.hasRead(subject);
|
|
1942
|
+
add(
|
|
1943
|
+
"write smart bypass",
|
|
1944
|
+
hasRead,
|
|
1945
|
+
"auto",
|
|
1946
|
+
"context",
|
|
1947
|
+
hasRead ? `file "${subject}" was already read in this session \u2014 auto-approving write` : `file "${subject}" was not read in this session \u2014 bypass does not apply`
|
|
1948
|
+
);
|
|
1949
|
+
if (hasRead) {
|
|
1950
|
+
winnerIndex = steps.length - 1;
|
|
1951
|
+
return { toolName: tool.name, subject, steps, winnerIndex, decision: { permission: "auto", source: "context", reason: "file already read in this session" } };
|
|
1952
|
+
}
|
|
1953
|
+
} else {
|
|
1954
|
+
add("write smart bypass", false, "auto", "context", 'tool is not "write" or has no subject \u2014 bypass does not apply');
|
|
1955
|
+
}
|
|
1956
|
+
const hasWriteCap = hasCapability(tool, ToolCapabilities.FS_WRITE);
|
|
1957
|
+
const hasShellCap = hasCapability(tool, [
|
|
1958
|
+
ToolCapabilities.SHELL_ARBITRARY,
|
|
1959
|
+
ToolCapabilities.SHELL_RESTRICTED,
|
|
1960
|
+
ToolCapabilities.SHELL_EXEC
|
|
1961
|
+
]);
|
|
1962
|
+
const hasInstallCap = hasCapability(tool, ToolCapabilities.PACKAGE_INSTALL);
|
|
1963
|
+
const hasConfigCap = hasCapability(tool, ToolCapabilities.CONFIG_MUTATE);
|
|
1964
|
+
const hasSubagentCap = hasCapability(tool, ToolCapabilities.SUBAGENT_SPAWN);
|
|
1965
|
+
const isMutating = tool.mutating || hasWriteCap || hasShellCap || hasInstallCap || hasConfigCap || hasSubagentCap;
|
|
1966
|
+
if (tool.permission === "auto" && !isMutating) {
|
|
1967
|
+
add("safe default auto", true, "auto", "default", `tool "${tool.name}" has auto permission and is not mutating \u2014 safe to auto-approve`);
|
|
1968
|
+
winnerIndex = steps.length - 1;
|
|
1969
|
+
return { toolName: tool.name, subject, steps, winnerIndex, decision: { permission: "auto", source: "default" } };
|
|
1970
|
+
}
|
|
1971
|
+
add(
|
|
1972
|
+
"mutating default confirm",
|
|
1973
|
+
true,
|
|
1974
|
+
"confirm",
|
|
1975
|
+
"default",
|
|
1976
|
+
isMutating ? `tool "${tool.name}" is mutating (default auto not enough) \u2014 needs confirmation` : `tool "${tool.name}" has "${tool.permission}" permission \u2014 needs confirmation`
|
|
1977
|
+
);
|
|
1978
|
+
winnerIndex = steps.length - 1;
|
|
1979
|
+
const hasDelegate = this.promptDelegate !== void 0;
|
|
1980
|
+
return {
|
|
1981
|
+
toolName: tool.name,
|
|
1982
|
+
subject,
|
|
1983
|
+
steps,
|
|
1984
|
+
winnerIndex,
|
|
1985
|
+
decision: {
|
|
1986
|
+
permission: "confirm",
|
|
1987
|
+
source: "default",
|
|
1988
|
+
...hasDelegate ? { reason: "would prompt user via delegate" } : {}
|
|
1989
|
+
}
|
|
1990
|
+
};
|
|
1991
|
+
}
|
|
1862
1992
|
findNamespaceEntry(toolName) {
|
|
1863
1993
|
for (const { pattern, value } of this.wildcardEntries) {
|
|
1864
1994
|
if (matchGlob(pattern, toolName)) return value;
|
|
@@ -1904,6 +2034,24 @@ var AutoApprovePermissionPolicy = class _AutoApprovePermissionPolicy {
|
|
|
1904
2034
|
}
|
|
1905
2035
|
allowOnce() {
|
|
1906
2036
|
}
|
|
2037
|
+
async explain(tool) {
|
|
2038
|
+
const decision = await this.evaluate(tool);
|
|
2039
|
+
return {
|
|
2040
|
+
toolName: tool.name,
|
|
2041
|
+
subject: null,
|
|
2042
|
+
steps: [
|
|
2043
|
+
{
|
|
2044
|
+
rule: "subagent auto",
|
|
2045
|
+
matched: decision.permission === "auto",
|
|
2046
|
+
decision: decision.permission,
|
|
2047
|
+
source: decision.source,
|
|
2048
|
+
detail: decision.reason ?? `subagent policy: ${decision.permission}`
|
|
2049
|
+
}
|
|
2050
|
+
],
|
|
2051
|
+
winnerIndex: 0,
|
|
2052
|
+
decision
|
|
2053
|
+
};
|
|
2054
|
+
}
|
|
1907
2055
|
async reload() {
|
|
1908
2056
|
}
|
|
1909
2057
|
};
|