@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.
Files changed (52) hide show
  1. package/dist/boot.d.ts.map +1 -1
  2. package/dist/chronicle/index.js +20 -1
  3. package/dist/chronicle/index.js.map +2 -2
  4. package/dist/chronicle/tool-adapter.d.ts.map +1 -1
  5. package/dist/coordination/director.d.ts +18 -0
  6. package/dist/coordination/director.d.ts.map +1 -1
  7. package/dist/coordination/fleet-spawn.d.ts.map +1 -1
  8. package/dist/coordination/index.js +37 -15
  9. package/dist/coordination/index.js.map +2 -2
  10. package/dist/core/agent-response.d.ts.map +1 -1
  11. package/dist/defaults/index.js +660 -391
  12. package/dist/defaults/index.js.map +4 -4
  13. package/dist/execution/index.js +61 -12
  14. package/dist/execution/index.js.map +3 -3
  15. package/dist/execution/tool-executor.d.ts.map +1 -1
  16. package/dist/hq/index.js +17 -0
  17. package/dist/hq/index.js.map +2 -2
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1304 -882
  21. package/dist/index.js.map +4 -4
  22. package/dist/infrastructure/index.js +15 -10
  23. package/dist/infrastructure/index.js.map +2 -2
  24. package/dist/kernel/events/tool-events.d.ts +24 -0
  25. package/dist/kernel/events/tool-events.d.ts.map +1 -1
  26. package/dist/plugins/auto-review-plugin.d.ts +10 -0
  27. package/dist/plugins/auto-review-plugin.d.ts.map +1 -1
  28. package/dist/security/index.js +148 -0
  29. package/dist/security/index.js.map +3 -3
  30. package/dist/security/permission-policy.d.ts +8 -1
  31. package/dist/security/permission-policy.d.ts.map +1 -1
  32. package/dist/storage/config-loader.d.ts +8 -0
  33. package/dist/storage/config-loader.d.ts.map +1 -1
  34. package/dist/storage/index.js +457 -379
  35. package/dist/storage/index.js.map +4 -4
  36. package/dist/storage/provider-config-watcher.d.ts +6 -0
  37. package/dist/storage/provider-config-watcher.d.ts.map +1 -1
  38. package/dist/types/permission.d.ts +38 -0
  39. package/dist/types/permission.d.ts.map +1 -1
  40. package/dist/utils/config-backup.d.ts +20 -0
  41. package/dist/utils/config-backup.d.ts.map +1 -0
  42. package/dist/utils/index.d.ts +2 -1
  43. package/dist/utils/index.d.ts.map +1 -1
  44. package/dist/utils/index.js +172 -106
  45. package/dist/utils/index.js.map +4 -4
  46. package/dist/utils/message-invariants.d.ts +12 -9
  47. package/dist/utils/message-invariants.d.ts.map +1 -1
  48. package/dist/utils/term.d.ts +6 -0
  49. package/dist/utils/term.d.ts.map +1 -1
  50. package/dist/utils/wstack-paths.d.ts +10 -0
  51. package/dist/utils/wstack-paths.d.ts.map +1 -1
  52. 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,CAwB1B;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"}
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"}
@@ -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
  };