@sema-ai/core 1.275.1 → 1.277.0

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 (88) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/brain/anthropic.d.ts.map +1 -1
  3. package/dist/brain/anthropic.js +15 -4
  4. package/dist/brain/anthropic.js.map +1 -1
  5. package/dist/brain/openai.d.ts.map +1 -1
  6. package/dist/brain/openai.js +17 -5
  7. package/dist/brain/openai.js.map +1 -1
  8. package/dist/brain/repetition.d.ts +31 -0
  9. package/dist/brain/repetition.d.ts.map +1 -1
  10. package/dist/brain/repetition.js +55 -0
  11. package/dist/brain/repetition.js.map +1 -1
  12. package/dist/brain/stream-engine.d.ts.map +1 -1
  13. package/dist/brain/stream-engine.js +5 -0
  14. package/dist/brain/stream-engine.js.map +1 -1
  15. package/dist/core/auto-mode-prompt-assets.d.ts +11 -0
  16. package/dist/core/auto-mode-prompt-assets.d.ts.map +1 -0
  17. package/dist/core/auto-mode-prompt-assets.js +19 -0
  18. package/dist/core/auto-mode-prompt-assets.js.map +1 -0
  19. package/dist/core/auto-mode-prompt.d.ts +49 -0
  20. package/dist/core/auto-mode-prompt.d.ts.map +1 -0
  21. package/dist/core/auto-mode-prompt.js +125 -0
  22. package/dist/core/auto-mode-prompt.js.map +1 -0
  23. package/dist/core/auto-mode.d.ts +86 -0
  24. package/dist/core/auto-mode.d.ts.map +1 -0
  25. package/dist/core/auto-mode.js +157 -0
  26. package/dist/core/auto-mode.js.map +1 -0
  27. package/dist/core/hooks.d.ts +20 -1
  28. package/dist/core/hooks.d.ts.map +1 -1
  29. package/dist/core/hooks.js +45 -2
  30. package/dist/core/hooks.js.map +1 -1
  31. package/dist/core/memory-engine/file-backend.d.ts +4 -0
  32. package/dist/core/memory-engine/file-backend.d.ts.map +1 -1
  33. package/dist/core/memory-engine/file-backend.js +86 -25
  34. package/dist/core/memory-engine/file-backend.js.map +1 -1
  35. package/dist/core/memory-engine/frontmatter.d.ts +5 -0
  36. package/dist/core/memory-engine/frontmatter.d.ts.map +1 -1
  37. package/dist/core/memory-engine/frontmatter.js +8 -1
  38. package/dist/core/memory-engine/frontmatter.js.map +1 -1
  39. package/dist/core/memory-engine/memory-backend-contract.d.ts.map +1 -1
  40. package/dist/core/memory-engine/memory-backend-contract.js +17 -0
  41. package/dist/core/memory-engine/memory-backend-contract.js.map +1 -1
  42. package/dist/core/memory-engine/sync-client.d.ts +3 -1
  43. package/dist/core/memory-engine/sync-client.d.ts.map +1 -1
  44. package/dist/core/memory-engine/sync-client.js +41 -8
  45. package/dist/core/memory-engine/sync-client.js.map +1 -1
  46. package/dist/core/memory-engine/types.d.ts +4 -2
  47. package/dist/core/memory-engine/types.d.ts.map +1 -1
  48. package/dist/core/roles.d.ts.map +1 -1
  49. package/dist/core/roles.js +2 -0
  50. package/dist/core/roles.js.map +1 -1
  51. package/dist/core/runner/prepare-task.d.ts.map +1 -1
  52. package/dist/core/runner/prepare-task.js +46 -0
  53. package/dist/core/runner/prepare-task.js.map +1 -1
  54. package/dist/core/runner/tool-disclosure.d.ts.map +1 -1
  55. package/dist/core/runner/tool-disclosure.js +0 -0
  56. package/dist/core/runner/tool-disclosure.js.map +1 -1
  57. package/dist/core/stub-env.d.ts.map +1 -1
  58. package/dist/core/stub-env.js +4 -0
  59. package/dist/core/stub-env.js.map +1 -1
  60. package/dist/core/task-registry.d.ts +15 -0
  61. package/dist/core/task-registry.d.ts.map +1 -1
  62. package/dist/core/task-registry.js +62 -0
  63. package/dist/core/task-registry.js.map +1 -1
  64. package/dist/core/types.d.ts +55 -4
  65. package/dist/core/types.d.ts.map +1 -1
  66. package/dist/engine/execution-env/node-execution-env.d.ts +6 -0
  67. package/dist/engine/execution-env/node-execution-env.d.ts.map +1 -1
  68. package/dist/engine/execution-env/node-execution-env.js +37 -0
  69. package/dist/engine/execution-env/node-execution-env.js.map +1 -1
  70. package/dist/engine/harness/types.d.ts +17 -0
  71. package/dist/engine/harness/types.d.ts.map +1 -1
  72. package/dist/engine/harness/types.js.map +1 -1
  73. package/dist/index.d.ts +4 -1
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +12 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/tools/fs/index.d.ts +9 -2
  78. package/dist/tools/fs/index.d.ts.map +1 -1
  79. package/dist/tools/fs/index.js +31 -6
  80. package/dist/tools/fs/index.js.map +1 -1
  81. package/dist/tools/fs/search.d.ts.map +1 -1
  82. package/dist/tools/fs/search.js +17 -7
  83. package/dist/tools/fs/search.js.map +1 -1
  84. package/dist/tools/scheduler-tools.d.ts.map +1 -1
  85. package/dist/tools/scheduler-tools.js +8 -6
  86. package/dist/tools/scheduler-tools.js.map +1 -1
  87. package/docs/KNOWN-ISSUES.md +11 -11
  88. package/package.json +6 -3
@@ -0,0 +1,86 @@
1
+ import type { ToolCallRequest } from "./tool-policy.js";
2
+ /** The classifier's verdict over one pending `ask`. */
3
+ export type AutoModeVerdict = {
4
+ kind: "allow";
5
+ }
6
+ /** `category` is the matched BLOCK rule name (207 output contract); `reason` starts with `[Rule Name]`. */
7
+ | {
8
+ kind: "block";
9
+ category: string;
10
+ reason: string;
11
+ }
12
+ /** The classifier could not run: model error/timeout, or the session breaker is open. NOT a decision. */
13
+ | {
14
+ kind: "unavailable";
15
+ cause: "error" | "timeout" | "breaker_open";
16
+ }
17
+ /** The model responded but not in the `<block>…` contract shape. NOT a decision. */
18
+ | {
19
+ kind: "parse_error";
20
+ raw: string;
21
+ };
22
+ /**
23
+ * Parse the 207 classifier output contract:
24
+ * blocked: `<block>yes</block><category>Rule Name</category><reason>[Rule Name] …</reason>`
25
+ * allowed: `<block>no</block>`
26
+ * The contract says the ENTIRE response must begin with `<block>` — we strip `<thinking>` blocks
27
+ * first (CC-anchored: the 206 body's `dJi` removes closed thinking blocks AND a dangling unclosed
28
+ * tail before its own block-scan — a reasoning model's scratch space is not part of the verdict),
29
+ * then tolerate leading whitespace (models routinely emit a leading newline) but nothing else: any
30
+ * other preamble is a `parse_error` (fail-closed; 207 vocabulary: `automode-parsing-error`).
31
+ *
32
+ * Declared STRICTER than the CC parser (`iJi`: first `<block>` ANYWHERE in the response, closing tag
33
+ * optional): a free-scan lets a prompt-injected preamble seed the verdict; our contract-anchored
34
+ * parse costs only a fallback to the original human chain on the mismatch, never a silent allow.
35
+ *
36
+ * Strictness is polarity-asymmetric (codex review, confirmed HIGH):
37
+ * - an ALLOW must be UNAMBIGUOUS: `<block>no</block>` followed by anything but whitespace —
38
+ * a second conflicting `<block>yes</block>`, trailing prose, any tail at all — violates the
39
+ * contract and maps to `parse_error` (the ask flows the original human chain, never a silent
40
+ * allow on a malformed response);
41
+ * - a stated BLOCK tolerates a tail (that is where `<category>`/`<reason>` live, and extra
42
+ * content after a block verdict can only ever be judged in the blocking direction) — a
43
+ * `<block>yes</block>` with MISSING/empty `<category>`/`<reason>` still maps to `block`
44
+ * (with "" placeholders): the block intent is unambiguous, and downgrading a stated block
45
+ * to parse_error (⇒ the ask may later auto-deny OR a human may approve) would weaken the
46
+ * classifier's explicit verdict on the exact calls it flagged.
47
+ */
48
+ export declare function parseAutoModeResponse(text: string): AutoModeVerdict;
49
+ /** What the decider hands the deployment's `classify` hook (the assembled prompt is the hook's job
50
+ * when it owns assembly; when using {@link buildAutoModePrompt} the decider passes its output). */
51
+ export interface AutoModeClassifyInput {
52
+ /** The pending tool call — FINAL post-hook/post-rewrite args (the same args the gate adjudicated). */
53
+ req: ToolCallRequest;
54
+ /** The human-readable text of the ask being decided (policy/safety message), when present. */
55
+ askMessage?: string;
56
+ }
57
+ /** The pluggable model leg: given the classify input, return the model's raw text response.
58
+ * Deployment-injected (roster cheap tier per [672]③); MAY throw / reject — the decider fail-closes. */
59
+ export type AutoModeClassifyFn = (input: AutoModeClassifyInput, signal?: AbortSignal) => Promise<string>;
60
+ export interface AutoModeDeciderOptions {
61
+ classify: AutoModeClassifyFn;
62
+ /** Hard cap on one classification round-trip. Default 15_000 ms (sema 裁量 — CC's constant is not
63
+ * established; a permission gate must not stall the whole run on a slow classifier). */
64
+ timeoutMs?: number;
65
+ /** Consecutive-failure threshold that opens the session breaker (default 3, [672]② "连续 N 失败").
66
+ * Failures = unavailable(error|timeout) + parse_error. A successful round (allow/block) resets it. */
67
+ failureThreshold?: number;
68
+ /** Fired ONCE when the breaker opens ([672]②: "本 session 退回非 auto + 一次性告警"). */
69
+ onBreakerOpen?: (info: {
70
+ consecutiveFailures: number;
71
+ lastCause: string;
72
+ }) => void;
73
+ }
74
+ export interface AutoModeDecider {
75
+ /** Never rejects. Any internal failure surfaces as `unavailable`/`parse_error` (fail-closed). */
76
+ decide(input: AutoModeClassifyInput, signal?: AbortSignal): Promise<AutoModeVerdict>;
77
+ /** True once the session breaker has opened (it never half-opens: [672]② is a SESSION fallback
78
+ * to non-auto, not a retry window — a flapping classifier must not oscillate the permission mode). */
79
+ breakerOpen(): boolean;
80
+ }
81
+ /**
82
+ * Session-scoped decider: timeout + fail-closed error mapping + a one-way circuit breaker.
83
+ * One instance per run/session — the breaker state is the session's "退回非 auto" latch.
84
+ */
85
+ export declare function createAutoModeDecider(opts: AutoModeDeciderOptions): AutoModeDecider;
86
+ //# sourceMappingURL=auto-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-mode.d.ts","sourceRoot":"","sources":["../../src/core/auto-mode.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,uDAAuD;AACvD,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE;AACnB,2GAA2G;GACzG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACrD,yGAAyG;GACvG;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,cAAc,CAAA;CAAE;AACtE,oFAAoF;GAClF;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAenE;AAED;oGACoG;AACpG,MAAM,WAAW,qBAAqB;IACpC,sGAAsG;IACtG,GAAG,EAAE,eAAe,CAAC;IACrB,8FAA8F;IAC9F,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;wGACwG;AACxG,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEzG,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B;6FACyF;IACzF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;2GACuG;IACvG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,mBAAmB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACpF;AAED,MAAM,WAAW,eAAe;IAC9B,iGAAiG;IACjG,MAAM,CAAC,KAAK,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACrF;2GACuG;IACvG,WAAW,IAAI,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,eAAe,CAgFnF"}
@@ -0,0 +1,157 @@
1
+ // design/143 批2 ([672]-A, clay 拍 A 案): the auto-mode CLASSIFIER decides a permission `ask` in the
2
+ // core permission chain — CC 2.1.207 parity. In auto mode a surviving `ask` is routed to a small-model
3
+ // policy classifier instead of a human; the classifier's verdict maps to:
4
+ // allow → the ask resolves to allow (decisionReason "classifier") — no human, no suspend;
5
+ // block → deny (decisionReason "classifier"; the CC outcome vocabulary calls this `automode-blocked`);
6
+ // anything else (unreachable model / unparseable response / open breaker / timeout) → FAIL-CLOSED:
7
+ // the ask stays an ask and flows down the ORIGINAL resolution chain (durable suspend / onAsk /
8
+ // headless auto-deny). CC vocabulary: `automode-unavailable` / `automode-parsing-error` — explicitly
9
+ // "NOT a policy decision"; the classifier can never silently allow by failing (207 anchor, the BASE
10
+ // prompt's own outcome legend).
11
+ //
12
+ // Trust gate (207 `psl`, [672]①): classifier RULES are accepted from the user / flags / policy planes
13
+ // only — never from a repo-controlled layer. core enforces this STRUCTURALLY: there is no TaskSpec /
14
+ // file-plane field that feeds rules into the classifier; rules enter exclusively through the
15
+ // deployment-injected decider options (the caps/deps assembly face, which the repo cannot write).
16
+ /**
17
+ * Parse the 207 classifier output contract:
18
+ * blocked: `<block>yes</block><category>Rule Name</category><reason>[Rule Name] …</reason>`
19
+ * allowed: `<block>no</block>`
20
+ * The contract says the ENTIRE response must begin with `<block>` — we strip `<thinking>` blocks
21
+ * first (CC-anchored: the 206 body's `dJi` removes closed thinking blocks AND a dangling unclosed
22
+ * tail before its own block-scan — a reasoning model's scratch space is not part of the verdict),
23
+ * then tolerate leading whitespace (models routinely emit a leading newline) but nothing else: any
24
+ * other preamble is a `parse_error` (fail-closed; 207 vocabulary: `automode-parsing-error`).
25
+ *
26
+ * Declared STRICTER than the CC parser (`iJi`: first `<block>` ANYWHERE in the response, closing tag
27
+ * optional): a free-scan lets a prompt-injected preamble seed the verdict; our contract-anchored
28
+ * parse costs only a fallback to the original human chain on the mismatch, never a silent allow.
29
+ *
30
+ * Strictness is polarity-asymmetric (codex review, confirmed HIGH):
31
+ * - an ALLOW must be UNAMBIGUOUS: `<block>no</block>` followed by anything but whitespace —
32
+ * a second conflicting `<block>yes</block>`, trailing prose, any tail at all — violates the
33
+ * contract and maps to `parse_error` (the ask flows the original human chain, never a silent
34
+ * allow on a malformed response);
35
+ * - a stated BLOCK tolerates a tail (that is where `<category>`/`<reason>` live, and extra
36
+ * content after a block verdict can only ever be judged in the blocking direction) — a
37
+ * `<block>yes</block>` with MISSING/empty `<category>`/`<reason>` still maps to `block`
38
+ * (with "" placeholders): the block intent is unambiguous, and downgrading a stated block
39
+ * to parse_error (⇒ the ask may later auto-deny OR a human may approve) would weaken the
40
+ * classifier's explicit verdict on the exact calls it flagged.
41
+ */
42
+ export function parseAutoModeResponse(text) {
43
+ // CC `dJi` verbatim: closed <thinking> blocks anywhere, then an unclosed trailing one.
44
+ const t = text
45
+ .replace(/<thinking>[\s\S]*?<\/thinking>/g, "")
46
+ .replace(/<thinking>[\s\S]*$/, "")
47
+ .trimStart();
48
+ const m = /^<block>\s*(yes|no)\s*<\/block>/i.exec(t);
49
+ if (!m)
50
+ return { kind: "parse_error", raw: text };
51
+ if (m[1].toLowerCase() === "no") {
52
+ if (t.slice(m[0].length).trim() !== "")
53
+ return { kind: "parse_error", raw: text };
54
+ return { kind: "allow" };
55
+ }
56
+ const category = /<category>([\s\S]*?)<\/category>/i.exec(t)?.[1]?.trim() ?? "";
57
+ const reason = /<reason>([\s\S]*?)<\/reason>/i.exec(t)?.[1]?.trim() ?? "";
58
+ return { kind: "block", category, reason };
59
+ }
60
+ /**
61
+ * Session-scoped decider: timeout + fail-closed error mapping + a one-way circuit breaker.
62
+ * One instance per run/session — the breaker state is the session's "退回非 auto" latch.
63
+ */
64
+ export function createAutoModeDecider(opts) {
65
+ const timeoutMs = opts.timeoutMs ?? 15_000;
66
+ const threshold = Math.max(1, Math.floor(opts.failureThreshold ?? 3));
67
+ let consecutiveFailures = 0;
68
+ let open = false;
69
+ const recordFailure = (cause) => {
70
+ consecutiveFailures++;
71
+ if (!open && consecutiveFailures >= threshold) {
72
+ open = true;
73
+ try {
74
+ opts.onBreakerOpen?.({ consecutiveFailures, lastCause: cause });
75
+ }
76
+ catch {
77
+ // the alarm hook must never break the gate
78
+ }
79
+ }
80
+ };
81
+ return {
82
+ breakerOpen: () => open,
83
+ async decide(input, signal) {
84
+ if (open)
85
+ return { kind: "unavailable", cause: "breaker_open" };
86
+ let timer;
87
+ // fable review (INFO, 收编): thread a timeout-linked signal into classify so the losing model
88
+ // call is CANCELLED at the deadline, not left running to completion on a verdict nobody reads.
89
+ const inner = new AbortController();
90
+ const onOuterAbort = () => inner.abort();
91
+ if (signal !== undefined) {
92
+ if (signal.aborted)
93
+ inner.abort();
94
+ else
95
+ signal.addEventListener("abort", onOuterAbort, { once: true });
96
+ }
97
+ try {
98
+ const raw = await new Promise((resolve, reject) => {
99
+ let settled = false;
100
+ timer = setTimeout(() => {
101
+ if (!settled) {
102
+ settled = true;
103
+ inner.abort(); // stop burning tokens on a round the gate already gave up on
104
+ reject(new AutoModeTimeout());
105
+ }
106
+ }, timeoutMs);
107
+ opts.classify(input, inner.signal).then((v) => {
108
+ if (!settled) {
109
+ settled = true;
110
+ resolve(v);
111
+ }
112
+ }, (e) => {
113
+ if (!settled) {
114
+ settled = true;
115
+ reject(e);
116
+ }
117
+ });
118
+ });
119
+ // codex review (confirmed MED): re-check the latch AFTER the round-trip. Concurrent decides
120
+ // all enter while `open === false`; if the OTHER calls' failures opened the breaker while this
121
+ // classify was in flight, its late verdict must not leak through — the one-way "session fell
122
+ // back to non-auto" latch covers in-flight rounds too (no allow/block escapes an open breaker).
123
+ if (open)
124
+ return { kind: "unavailable", cause: "breaker_open" };
125
+ const verdict = parseAutoModeResponse(raw);
126
+ if (verdict.kind === "parse_error")
127
+ recordFailure("parse_error");
128
+ else
129
+ consecutiveFailures = 0; // allow AND block both prove the leg healthy
130
+ return verdict;
131
+ }
132
+ catch (e) {
133
+ // fable review (confirmed LOW): a CANCELLED classify (the task/run abort signal fired) says
134
+ // nothing about classifier health — counting it would let one cancelled parallel batch open
135
+ // the one-way session breaker and fire a misattributed alarm. Still fail-closed (unavailable
136
+ // → the ask flows the original chain); just not a failure-streak event.
137
+ if (signal?.aborted)
138
+ return { kind: "unavailable", cause: "error" };
139
+ const timedOut = e instanceof AutoModeTimeout;
140
+ recordFailure(timedOut ? "timeout" : "error");
141
+ return { kind: "unavailable", cause: timedOut ? "timeout" : "error" };
142
+ }
143
+ finally {
144
+ if (timer !== undefined)
145
+ clearTimeout(timer);
146
+ if (signal !== undefined)
147
+ signal.removeEventListener("abort", onOuterAbort);
148
+ }
149
+ },
150
+ };
151
+ }
152
+ class AutoModeTimeout extends Error {
153
+ constructor() {
154
+ super("auto-mode classify timeout");
155
+ }
156
+ }
157
+ //# sourceMappingURL=auto-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-mode.js","sourceRoot":"","sources":["../../src/core/auto-mode.ts"],"names":[],"mappings":"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"}
@@ -107,7 +107,7 @@ export interface Hooks {
107
107
  * `TaskSpec.shellGate` doctrine (design/80 D-E), not an explicit per-tool mark.
108
108
  * - `"planMode"` — the design/108 plan-mode write-deny short-circuit (a read-only fidelity gate).
109
109
  */
110
- export type PermissionDeniedSource = "policy" | "hook" | "safety" | "shellGate" | "planMode";
110
+ export type PermissionDeniedSource = "policy" | "hook" | "safety" | "shellGate" | "planMode" | "classifier";
111
111
  /** The payload a {@link Hooks.permissionDenied} callback observes (CC-exact fields + `source`). */
112
112
  export interface PermissionDeniedPayload {
113
113
  toolName: string;
@@ -351,6 +351,25 @@ export interface ToolGateInput {
351
351
  * per-tool mark — attributes a tighten-deny to `source:"shellGate"` instead of `"safety"`.
352
352
  */
353
353
  shellGated?: boolean;
354
+ /**
355
+ * design/143 批2 ([672]-A, CC 2.1.207 auto mode): when present, a surviving `ask` is routed to the
356
+ * small-model policy CLASSIFIER before any human/durable resolution:
357
+ * - verdict `allow` → the ask resolves to allow (`decisionReason:"classifier"`) — no suspend, no onAsk;
358
+ * - verdict `block` → deny (`decisionReason:"classifier"`, `source:"classifier"`; CC `automode-blocked`);
359
+ * - `unavailable`/`parse_error` → FAIL-CLOSED: the ask continues down the ORIGINAL chain
360
+ * (durable suspend / onAsk / headless auto-deny) exactly as if auto mode were absent
361
+ * (CC `automode-unavailable`/`automode-parsing-error` — "NOT a policy decision").
362
+ * SCOPE (declared semantic): this covers EVERY surviving ask, INCLUDING the deterministic egress/
363
+ * irreversibility safety tightens — auto mode is the deployment's explicit choice to let the
364
+ * classifier be the "explicit ask-resolution" for this session (its rule set covers exactly those
365
+ * action classes: outbound writes, irreversible operations, and sensitive-value handling). A
366
+ * deployment that wants human-only
367
+ * resolution for safety asks simply does not arm auto mode. The classifier can never AUTO-ALLOW by
368
+ * failing — only an affirmative `<block>no</block>` allows.
369
+ */
370
+ autoMode?: {
371
+ decider: import("./auto-mode.js").AutoModeDecider;
372
+ };
354
373
  }
355
374
  /**
356
375
  * The design/37 **two-phase tool gate** — the single chokepoint that makes the load-bearing invariant
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { decisionText } from "./tool-policy.js";
2
+ import { inlineUntrusted } from "./untrusted-text.js";
2
3
  /**
3
4
  * 1.256 复审 MED-1 — observe-only payload isolation for {@link Hooks.permissionDenied}: clone the tool
4
5
  * args before they ride the observer payload, so a hook mutating `payload.input` can never pollute the
@@ -194,10 +195,49 @@ export async function runToolGate(input) {
194
195
  currentInput = policyRewrite;
195
196
  req.args = policyRewrite;
196
197
  }
198
+ // design/143 批2 (CC 207 auto mode): route the surviving ask to the classifier FIRST — before the
199
+ // durable-suspend / onAsk legs — on the FINAL post-rewrite args (the same args a human would see).
200
+ // Ordering is load-bearing: after the policyRewrite merge (the classifier judges redacted args, and
201
+ // an allow executes the redacted form), before suspendAsk (an allow/deny must not mint a checkpoint).
202
+ // Fail-closed by construction: only an affirmative `allow` verdict skips the human chain; `block`
203
+ // funnels into the single deny exit below; anything else leaves `decision` untouched as the ask.
204
+ if (input.autoMode && decision.action === "ask") {
205
+ // The decider CONTRACT says decide never rejects — but the field is an interface a deployment
206
+ // may hand-implement, and a throwing classifier must degrade to "unavailable" (the ask flows
207
+ // the original chain), never fault the whole gate.
208
+ const verdict = await input.autoMode.decider
209
+ .decide({ req, askMessage: decisionText(decision) }, input.abortSignal)
210
+ .catch(() => ({ kind: "unavailable", cause: "error" }));
211
+ if (verdict.kind === "allow") {
212
+ decision = {
213
+ action: "allow",
214
+ message: "auto-mode classifier allowed this call",
215
+ decisionReason: "classifier",
216
+ ...(policyRewrite !== undefined ? { updatedInput: policyRewrite } : {}),
217
+ };
218
+ }
219
+ else if (verdict.kind === "block") {
220
+ // codex review (confirmed MED): the category/reason are CLASSIFIER-MODEL output — untrusted
221
+ // text headed for a model-facing feedback line (`formatHookFeedback` deliberately does not
222
+ // escape). Inline-sanitize so a crafted reason cannot forge a `</system-reminder>` boundary
223
+ // or smuggle a new top-level prompt line into the deny message.
224
+ const reason = verdict.reason ? inlineUntrusted(verdict.reason) : "";
225
+ const category = verdict.category ? inlineUntrusted(verdict.category) : "";
226
+ decision = {
227
+ action: "deny",
228
+ message: `auto-mode classifier blocked this call${reason ? `: ${reason}` : category ? `: [${category}]` : ""}`,
229
+ decisionReason: "classifier",
230
+ };
231
+ denySource = "classifier";
232
+ }
233
+ // unavailable / parse_error: fall through — the ask continues down the original chain.
234
+ }
197
235
  // design/45: in durable mode, persist a checkpoint + abort instead of asking synchronously. The
198
236
  // suspend decision lives ONLY in this `ask` branch (the policy already ran and stays pure). On
199
237
  // `undefined` (no durable mode, or capture failed) fall through to the synchronous onAsk path.
200
- if (suspendAsk) {
238
+ // design/143: guarded on the decision STILL being an ask — a classifier allow/deny above must not
239
+ // mint a checkpoint or invoke onAsk (the ask is already resolved).
240
+ if (suspendAsk && decision.action === "ask") {
201
241
  // design/80 D-2 (council BLOCKER fix): thread the SAFETY grade to the mint-site from the AUTHORITATIVE
202
242
  // TOOL MARKS (`input.egress` / `input.irreversibility`), NOT from how the ask arose. The gate's egress/
203
243
  // irreversibility tightens only fire from a surviving `allow`; if a POLICY or PreToolUse HOOK already
@@ -217,7 +257,10 @@ export async function runToolGate(input) {
217
257
  return { suspend: suspended, preToolContext };
218
258
  }
219
259
  }
220
- decision = await resolveAsk(decision, req);
260
+ // design/143: same guard — a classifier-resolved decision never re-enters the onAsk chain.
261
+ if (decision.action === "ask") {
262
+ decision = await resolveAsk(decision, req);
263
+ }
221
264
  }
222
265
  if (decision.action === "deny") {
223
266
  // design/134 R5 — the SINGLE deny exit of the adjudicate chain (every path funnels here: a direct
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"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"}
@@ -60,6 +60,10 @@ export declare class FileMemoryEngineBackend implements MemoryBackend {
60
60
  /** B2 — inbound-gate findings accumulated by read-side syncs; the engine drains them into
61
61
  * `HarvestReport.inboundFindings` at harvest. */
62
62
  private inboundFindings;
63
+ /** Batch-planning scan memo (applyPatchesLocked only): planning reads pre-batch disk exclusively,
64
+ * so one `readScope(scope, false)` per scope serves every patch of the batch. Set for the planning
65
+ * loop, cleared before EXECUTE mutates the disk. Never caches `sync:true` reads. */
66
+ private batchScan;
63
67
  /** ⚠️ [508] service 逮的分家坑:不显式传 `controlDir` 时,控制平面按无参 `resolveMemoryEngineRoot()`
64
68
  * 派生(env/默认 config 根)——若你的记忆目录带自定义根,控制面会与记忆目录分家。自建 backend 的
65
69
  * consumer 应显式钉 `controlDir`(engine 同参)。`now` = 注入时钟(determinism,engine 同款)。 */
@@ -1 +1 @@
1
- {"version":3,"file":"file-backend.d.ts","sourceRoot":"","sources":["../../../src/core/memory-engine/file-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-backend.d.ts","sourceRoot":"","sources":["../../../src/core/memory-engine/file-backend.ts"],"names":[],"mappings":"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"}