@xrkseek/harness 0.5.5 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/node_modules/@xrkseek/code-runtime/dist/index.d.ts +4 -0
- package/node_modules/@xrkseek/code-runtime/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/code-runtime/dist/index.js +61 -34
- package/node_modules/@xrkseek/code-runtime/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/context-fragments/README.md +34 -30
- package/node_modules/@xrkseek/context-fragments/dist/index.d.ts +5 -25
- package/node_modules/@xrkseek/context-fragments/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/context-fragments/dist/index.js +5 -41
- package/node_modules/@xrkseek/context-fragments/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/index.js +18 -8
- package/node_modules/@xrkseek/core-agent-loop/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/compaction.d.ts +3 -0
- package/node_modules/@xrkseek/core-session/dist/compaction.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/compaction.js +27 -3
- package/node_modules/@xrkseek/core-session/dist/compaction.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/image-offload.d.ts +14 -1
- package/node_modules/@xrkseek/core-session/dist/image-offload.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/image-offload.js +33 -0
- package/node_modules/@xrkseek/core-session/dist/image-offload.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/index.d.ts +1 -1
- package/node_modules/@xrkseek/core-session/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/index.js +22 -1
- package/node_modules/@xrkseek/core-session/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/safety/mistake.d.ts +2 -1
- package/node_modules/@xrkseek/core-session/dist/safety/mistake.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/safety/mistake.js +8 -4
- package/node_modules/@xrkseek/core-session/dist/safety/mistake.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/sqlite-store.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/sqlite-store.js +54 -0
- package/node_modules/@xrkseek/core-session/dist/sqlite-store.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/store.d.ts +7 -0
- package/node_modules/@xrkseek/core-session/dist/store.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/definition.d.ts +2 -0
- package/node_modules/@xrkseek/core-tools/dist/definition.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/definition.js.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/index.d.ts +1 -1
- package/node_modules/@xrkseek/core-tools/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/pipeline.d.ts +1 -0
- package/node_modules/@xrkseek/core-tools/dist/pipeline.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/pipeline.js +59 -1
- package/node_modules/@xrkseek/core-tools/dist/pipeline.js.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/run-tool.d.ts +6 -0
- package/node_modules/@xrkseek/core-tools/dist/run-tool.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/run-tool.js +3 -0
- package/node_modules/@xrkseek/core-tools/dist/run-tool.js.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/types.d.ts +64 -1
- package/node_modules/@xrkseek/core-tools/dist/types.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/types.js.map +1 -1
- package/node_modules/@xrkseek/llm/dist/index.d.ts +11 -0
- package/node_modules/@xrkseek/llm/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm/dist/index.js +16 -1
- package/node_modules/@xrkseek/llm/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/llm-anthropic/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm-anthropic/dist/index.js +5 -2
- package/node_modules/@xrkseek/llm-anthropic/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/llm-gemini/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm-gemini/dist/index.js +5 -2
- package/node_modules/@xrkseek/llm-gemini/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/llm-openai-compatible/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm-openai-compatible/dist/index.js +39 -5
- package/node_modules/@xrkseek/llm-openai-compatible/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/llm-openai-responses/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm-openai-responses/dist/index.js +5 -2
- package/node_modules/@xrkseek/llm-openai-responses/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts +12 -5
- package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/preset.js +25 -6
- package/node_modules/@xrkseek/preset-harness/dist/preset.js.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/preset-server/dist/preset.js +2 -2
- package/node_modules/@xrkseek/preset-server/dist/preset.js.map +1 -1
- package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/protocol/dist/tools.d.ts +2 -0
- package/node_modules/@xrkseek/protocol/dist/tools.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/approvals.d.ts +9 -2
- package/node_modules/@xrkseek/server-face/dist/approvals.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/approvals.js +8 -4
- package/node_modules/@xrkseek/server-face/dist/approvals.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/auto-review-approve.d.ts +24 -0
- package/node_modules/@xrkseek/server-face/dist/auto-review-approve.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/auto-review-approve.js +43 -0
- package/node_modules/@xrkseek/server-face/dist/auto-review-approve.js.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/canvas-store.d.ts +10 -0
- package/node_modules/@xrkseek/server-face/dist/canvas-store.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/canvas-store.js +43 -6
- package/node_modules/@xrkseek/server-face/dist/canvas-store.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/canvas-tools.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/canvas-tools.js +6 -3
- package/node_modules/@xrkseek/server-face/dist/canvas-tools.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/context.d.ts +12 -2
- package/node_modules/@xrkseek/server-face/dist/context.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/dispatch.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/dispatch.js +3 -1
- package/node_modules/@xrkseek/server-face/dist/dispatch.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/face-schema.d.ts +14 -1
- package/node_modules/@xrkseek/server-face/dist/face-schema.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/face-schema.js +14 -1
- package/node_modules/@xrkseek/server-face/dist/face-schema.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session.js +92 -17
- package/node_modules/@xrkseek/server-face/dist/handlers/session.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.d.ts +5 -3
- package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.js +5 -3
- package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/model-catalog.d.ts +11 -0
- package/node_modules/@xrkseek/server-face/dist/model-catalog.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/model-catalog.js +25 -3
- package/node_modules/@xrkseek/server-face/dist/model-catalog.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/permission-auto.d.ts +51 -0
- package/node_modules/@xrkseek/server-face/dist/permission-auto.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/permission-auto.js +106 -0
- package/node_modules/@xrkseek/server-face/dist/permission-auto.js.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/permissions.d.ts +38 -4
- package/node_modules/@xrkseek/server-face/dist/permissions.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/permissions.js +131 -24
- package/node_modules/@xrkseek/server-face/dist/permissions.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/projections/install-defaults.d.ts +8 -0
- package/node_modules/@xrkseek/server-face/dist/projections/install-defaults.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/projections/install-defaults.js +9 -3
- package/node_modules/@xrkseek/server-face/dist/projections/install-defaults.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/projections/units/auto-review.d.ts +22 -1
- package/node_modules/@xrkseek/server-face/dist/projections/units/auto-review.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/projections/units/auto-review.js +18 -15
- package/node_modules/@xrkseek/server-face/dist/projections/units/auto-review.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/projections/units/permissions.d.ts +4 -1
- package/node_modules/@xrkseek/server-face/dist/projections/units/permissions.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/projections/units/permissions.js +8 -5
- package/node_modules/@xrkseek/server-face/dist/projections/units/permissions.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/runtime.d.ts +6 -0
- package/node_modules/@xrkseek/server-face/dist/runtime.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/runtime.js +39 -7
- package/node_modules/@xrkseek/server-face/dist/runtime.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-status.d.ts +0 -2
- package/node_modules/@xrkseek/server-face/dist/session-status.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-status.js +7 -5
- package/node_modules/@xrkseek/server-face/dist/session-status.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.js +6 -9
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/slash.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/slash.js +20 -5
- package/node_modules/@xrkseek/server-face/dist/slash.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/types.d.ts +12 -0
- package/node_modules/@xrkseek/server-face/dist/types.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-face.d.ts +2 -0
- package/node_modules/@xrkseek/server-face/dist/workspace-face.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-face.js +85 -8
- package/node_modules/@xrkseek/server-face/dist/workspace-face.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-registry.d.ts +30 -3
- package/node_modules/@xrkseek/server-face/dist/workspace-registry.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-registry.js +87 -17
- package/node_modules/@xrkseek/server-face/dist/workspace-registry.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-store.d.ts +2 -0
- package/node_modules/@xrkseek/server-face/dist/workspace-store.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-store.js +4 -0
- package/node_modules/@xrkseek/server-face/dist/workspace-store.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/auto-review-bridge.d.ts +5 -0
- package/node_modules/@xrkseek/server-host/dist/auto-review-bridge.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/auto-review-bridge.js +3 -2
- package/node_modules/@xrkseek/server-host/dist/auto-review-bridge.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.d.ts +6 -2
- package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.js +105 -16
- package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-providers.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-providers.js +3 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-providers.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-types.d.ts +12 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-types.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-classifier.d.ts +168 -4
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-classifier.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-classifier.js +466 -13
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-classifier.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-history.d.ts +53 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-history.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-history.js +177 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-history.js.map +1 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-http.d.ts +45 -2
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-http.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-http.js +148 -10
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-http.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-tool-pre.d.ts +123 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-tool-pre.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-tool-pre.js +299 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-tool-pre.js.map +1 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.d.ts +5 -3
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.js +4 -2
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.d.ts +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.js +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-prefs-store.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-prefs-store.js +3 -1
- package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-prefs-store.js.map +1 -1
- package/node_modules/@xrkseek/server-http/package.json +2 -0
- package/package.json +1 -1
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSH-aligned auto-review history filter: PROJECT_INSTRUCTIONS + FILTERED_HISTORY
|
|
3
|
+
* with fixed source roles. Excludes system, assistant text/reasoning, and tool
|
|
4
|
+
* results; keeps human/parent/constraint/checkpoint/fact + prior tool calls.
|
|
5
|
+
*/
|
|
6
|
+
import { asContentBlocks, flattenText, isHumanUserMessageSource, } from "@xrkseek/protocol";
|
|
7
|
+
function sourceKindOf(source) {
|
|
8
|
+
if (!source)
|
|
9
|
+
return "user";
|
|
10
|
+
return source.kind;
|
|
11
|
+
}
|
|
12
|
+
function contentBlocksForReview(content, roleForText) {
|
|
13
|
+
if (typeof content === "string") {
|
|
14
|
+
const text = content.trim();
|
|
15
|
+
if (!text)
|
|
16
|
+
return [];
|
|
17
|
+
return [
|
|
18
|
+
{
|
|
19
|
+
kind: "user-message",
|
|
20
|
+
role: roleForText,
|
|
21
|
+
sourceKind: "user",
|
|
22
|
+
content: [{ type: "text", text }],
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
const out = [];
|
|
27
|
+
for (const block of asContentBlocks(content)) {
|
|
28
|
+
if (block.type === "text") {
|
|
29
|
+
const text = block.text.trim();
|
|
30
|
+
if (!text)
|
|
31
|
+
continue;
|
|
32
|
+
out.push({
|
|
33
|
+
kind: "user-message",
|
|
34
|
+
role: roleForText,
|
|
35
|
+
sourceKind: "user",
|
|
36
|
+
content: [{ type: "text", text }],
|
|
37
|
+
});
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
// Images / files are facts only (DSH non-text → fact).
|
|
41
|
+
out.push({
|
|
42
|
+
kind: "user-message",
|
|
43
|
+
role: "fact",
|
|
44
|
+
sourceKind: "user",
|
|
45
|
+
content: [
|
|
46
|
+
{
|
|
47
|
+
type: block.type,
|
|
48
|
+
...(block.type === "image"
|
|
49
|
+
? { text: `image:${block.attachment.attachmentId}` }
|
|
50
|
+
: { text: `file:${block.attachment.attachmentId}` }),
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
function textRoleForUserMessage(source, seq, options) {
|
|
58
|
+
if (options.directParentPromptSeq === seq) {
|
|
59
|
+
return "direct-parent-instruction";
|
|
60
|
+
}
|
|
61
|
+
if (isHumanUserMessageSource(source)) {
|
|
62
|
+
return "human-instruction";
|
|
63
|
+
}
|
|
64
|
+
if (source?.kind === "agent-instructions") {
|
|
65
|
+
return "constraint";
|
|
66
|
+
}
|
|
67
|
+
if (source?.kind === "context-fragment" && source.fragmentKind === "recap") {
|
|
68
|
+
return "checkpoint";
|
|
69
|
+
}
|
|
70
|
+
// skill-catalog / session-reference / plugin / auto-continue / other → fact
|
|
71
|
+
return "fact";
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Durable-log index for parent-prompt matching. Prefer an explicit `seq` when
|
|
75
|
+
* fixtures / wire carry one; otherwise use the 0-based array index
|
|
76
|
+
* (same convention as {@link import("@xrkseek/protocol").ImageOffloadTarget}).
|
|
77
|
+
*/
|
|
78
|
+
function durableSeq(event, index) {
|
|
79
|
+
const raw = event.seq;
|
|
80
|
+
return typeof raw === "number" && Number.isFinite(raw) ? raw : index;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Fold session events into reviewer PROJECT_INSTRUCTIONS + FILTERED_HISTORY.
|
|
84
|
+
*
|
|
85
|
+
* Kept: human/parent/constraint/checkpoint/fact user messages; prior tool/call
|
|
86
|
+
* as fact. Dropped: assistant text & reasoning, tool/result, request/header
|
|
87
|
+
* system, admits, titles, and other non-instructional log noise.
|
|
88
|
+
*/
|
|
89
|
+
export function filterAutoReviewSessionHistory(events, options = {}) {
|
|
90
|
+
const projectInstructions = [];
|
|
91
|
+
const history = [];
|
|
92
|
+
const excludeId = options.excludeToolCallId?.trim();
|
|
93
|
+
const maxHistory = Math.max(1, options.maxHistoryEntries ?? 48);
|
|
94
|
+
for (let index = 0; index < events.length; index += 1) {
|
|
95
|
+
const event = events[index];
|
|
96
|
+
if (event.type === "user/message") {
|
|
97
|
+
const source = event.source;
|
|
98
|
+
// Tool-echoed user rows are not instructions.
|
|
99
|
+
if (source?.kind === "plugin" && source.form === "tool")
|
|
100
|
+
continue;
|
|
101
|
+
if (source?.kind === "agent-instructions") {
|
|
102
|
+
const rows = contentBlocksForReview(event.content, "constraint").map((row) => ({
|
|
103
|
+
...row,
|
|
104
|
+
sourceKind: "agent-instructions",
|
|
105
|
+
role: "constraint",
|
|
106
|
+
}));
|
|
107
|
+
for (const row of rows) {
|
|
108
|
+
if (row.content.length > 0)
|
|
109
|
+
projectInstructions.push(row);
|
|
110
|
+
}
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const role = textRoleForUserMessage(source, durableSeq(event, index), options);
|
|
114
|
+
const rows = contentBlocksForReview(event.content, role).map((row) => ({
|
|
115
|
+
...row,
|
|
116
|
+
sourceKind: sourceKindOf(source),
|
|
117
|
+
// Non-text already forced to fact inside contentBlocksForReview.
|
|
118
|
+
role: row.role === "fact" ? "fact" : role,
|
|
119
|
+
}));
|
|
120
|
+
history.push(...rows);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (event.type === "context/compaction") {
|
|
124
|
+
const summary = event.summary.trim();
|
|
125
|
+
if (!summary)
|
|
126
|
+
continue;
|
|
127
|
+
history.push({
|
|
128
|
+
kind: "user-message",
|
|
129
|
+
role: "checkpoint",
|
|
130
|
+
sourceKind: "compact-checkpoint",
|
|
131
|
+
content: [{ type: "text", text: summary }],
|
|
132
|
+
});
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (event.type === "tool/call") {
|
|
136
|
+
if (excludeId && event.call.id === excludeId)
|
|
137
|
+
continue;
|
|
138
|
+
let argumentsText;
|
|
139
|
+
try {
|
|
140
|
+
argumentsText = JSON.stringify(event.call.arguments ?? {});
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
argumentsText = String(event.call.arguments ?? "");
|
|
144
|
+
}
|
|
145
|
+
history.push({
|
|
146
|
+
kind: "tool-call",
|
|
147
|
+
role: "fact",
|
|
148
|
+
mode: "native",
|
|
149
|
+
name: event.call.name,
|
|
150
|
+
arguments: argumentsText,
|
|
151
|
+
});
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
// Explicitly skipped (DSH exclusions):
|
|
155
|
+
// assistant/message · assistant/chunk (text/reasoning)
|
|
156
|
+
// tool/result · request/header (system) · prompt/* · titles · …
|
|
157
|
+
}
|
|
158
|
+
const trimmedHistory = history.length <= maxHistory
|
|
159
|
+
? history
|
|
160
|
+
: history.slice(history.length - maxHistory);
|
|
161
|
+
return {
|
|
162
|
+
projectInstructions,
|
|
163
|
+
history: trimmedHistory,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/** Flatten one history entry for tests / diagnostics. */
|
|
167
|
+
export function autoReviewHistoryEntryText(entry) {
|
|
168
|
+
if (entry.kind === "tool-call") {
|
|
169
|
+
return `${entry.name} ${entry.arguments}`;
|
|
170
|
+
}
|
|
171
|
+
return entry.content.map((c) => c.text ?? "").join("");
|
|
172
|
+
}
|
|
173
|
+
/** Convenience: flatten MessageContent the same way Host/Face does. */
|
|
174
|
+
export function autoReviewFlattenContent(content) {
|
|
175
|
+
return flattenText(content);
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=auto-review-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-review-history.js","sourceRoot":"","sources":["../../src/dsh-compat/auto-review-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,11 +8,54 @@ import type { IncomingMessage, ServerResponse } from "node:http";
|
|
|
8
8
|
import { type AutoReviewClassifierOptions } from "./auto-review-classifier.js";
|
|
9
9
|
export interface AutoReviewOptions extends AutoReviewClassifierOptions {
|
|
10
10
|
readonly xrkHome?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Host Face bridge: allow the Nth pending Auto-review approval (0-based).
|
|
13
|
+
* When omitted, HTTP `/auto-review/approve` only mutates stats.
|
|
14
|
+
*/
|
|
15
|
+
readonly approvePending?: (args: {
|
|
16
|
+
readonly index: number;
|
|
17
|
+
readonly sessionId?: string;
|
|
18
|
+
}) => {
|
|
19
|
+
readonly allowed: boolean;
|
|
20
|
+
readonly note: string;
|
|
21
|
+
readonly toolName?: string;
|
|
22
|
+
};
|
|
11
23
|
}
|
|
24
|
+
/** Immutable slice Face `autoReview` projection overlays from tool-pre / HTTP. */
|
|
25
|
+
export interface AutoReviewStatsSnapshot {
|
|
26
|
+
readonly allows: number;
|
|
27
|
+
readonly denies: number;
|
|
28
|
+
readonly verdictsUsed: number;
|
|
29
|
+
readonly failuresUsed: number;
|
|
30
|
+
readonly fallbacks: number;
|
|
31
|
+
readonly neverRejects: number;
|
|
32
|
+
/** Rounded mean classify duration; `0` when no samples. */
|
|
33
|
+
readonly avgDurationMs: number;
|
|
34
|
+
readonly recentDenies: ReadonlyArray<{
|
|
35
|
+
readonly reviewId: string;
|
|
36
|
+
readonly toolName: string;
|
|
37
|
+
}>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Read durable tool-pre / classify / approve counters under `~/.xrk`.
|
|
41
|
+
* Face projection overlays these onto session `autoReview` wire (circuit deferred).
|
|
42
|
+
*/
|
|
43
|
+
export declare function readAutoReviewStats(options?: AutoReviewOptions): AutoReviewStatsSnapshot;
|
|
44
|
+
/** Host / tool-pre read of dsh-compat auto-review enable (slash · HTTP toggle). */
|
|
45
|
+
export declare function isAutoReviewEnabled(options?: AutoReviewOptions): boolean;
|
|
46
|
+
/** Persist Face Settings `auto-review.enabled` into the dsh-compat store. */
|
|
47
|
+
export declare function setAutoReviewEnabled(options: AutoReviewOptions, enabled: boolean): void;
|
|
12
48
|
export declare function handleAutoReviewHttp(req: IncomingMessage, res: ServerResponse, pathname: string, options?: AutoReviewOptions): Promise<boolean>;
|
|
13
49
|
export declare function isAutoReviewPath(pathname: string): boolean;
|
|
14
|
-
/** Record a
|
|
15
|
-
export declare function recordAutoReviewDeny(options: AutoReviewOptions, toolName: string): void;
|
|
50
|
+
/** Record a final hard deny (approval `never` / fail-closed). */
|
|
51
|
+
export declare function recordAutoReviewDeny(options: AutoReviewOptions, toolName: string, durationMs?: number): void;
|
|
52
|
+
/** Record an allow (tool-pre / classify path). */
|
|
53
|
+
export declare function recordAutoReviewAllow(options?: AutoReviewOptions, durationMs?: number): void;
|
|
54
|
+
/**
|
|
55
|
+
* Record a deny remapped to Face ask (DSH user-approval fallback).
|
|
56
|
+
* Does not append {@link recentDenies} — those track final hard rejects.
|
|
57
|
+
*/
|
|
58
|
+
export declare function recordAutoReviewFallback(options?: AutoReviewOptions, durationMs?: number): void;
|
|
16
59
|
/**
|
|
17
60
|
* Mirror Face `/auto-review` slash into ~/.xrk persistence (DSH panel polls HTTP).
|
|
18
61
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-review-http.d.ts","sourceRoot":"","sources":["../../src/dsh-compat/auto-review-http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKjE,OAAO,EAGL,KAAK,2BAA2B,EACjC,MAAM,6BAA6B,CAAC;AAOrC,MAAM,WAAW,iBAAkB,SAAQ,2BAA2B;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-review-http.d.ts","sourceRoot":"","sources":["../../src/dsh-compat/auto-review-http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKjE,OAAO,EAGL,KAAK,2BAA2B,EACjC,MAAM,6BAA6B,CAAC;AAOrC,MAAM,WAAW,iBAAkB,SAAQ,2BAA2B;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE;QAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B,KAAK;QACJ,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AAkBD,kFAAkF;AAClF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;QACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;CACJ;AAsED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,iBAAsB,GAC9B,uBAAuB,CAezB;AAcD,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAE5E;AAMD,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,OAAO,GACf,IAAI,CAEN;AAmCD,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,OAAO,CAAC,CAiKlB;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAYN;AAED,kDAAkD;AAClD,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,iBAAsB,EAC/B,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAON;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,iBAAsB,EAC/B,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,GACX,IAAI,CAkBN"}
|
|
@@ -13,14 +13,69 @@ const EMPTY_STATS = {
|
|
|
13
13
|
denies: 0,
|
|
14
14
|
verdictsUsed: 0,
|
|
15
15
|
failuresUsed: 0,
|
|
16
|
+
fallbacks: 0,
|
|
17
|
+
neverRejects: 0,
|
|
18
|
+
totalDurationMs: 0,
|
|
19
|
+
verdictSamples: 0,
|
|
16
20
|
recentDenies: [],
|
|
17
21
|
};
|
|
22
|
+
/** Coerce older `stats.json` rows missing newer counters to zeros. */
|
|
23
|
+
function normalizeStats(raw) {
|
|
24
|
+
return {
|
|
25
|
+
allows: Number(raw.allows ?? 0) || 0,
|
|
26
|
+
denies: Number(raw.denies ?? 0) || 0,
|
|
27
|
+
verdictsUsed: Number(raw.verdictsUsed ?? 0) || 0,
|
|
28
|
+
failuresUsed: Number(raw.failuresUsed ?? 0) || 0,
|
|
29
|
+
fallbacks: Number(raw.fallbacks ?? 0) || 0,
|
|
30
|
+
neverRejects: Number(raw.neverRejects ?? 0) || 0,
|
|
31
|
+
totalDurationMs: Number(raw.totalDurationMs ?? 0) || 0,
|
|
32
|
+
verdictSamples: Number(raw.verdictSamples ?? 0) || 0,
|
|
33
|
+
recentDenies: Array.isArray(raw.recentDenies) ? raw.recentDenies : [],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function avgDurationMsFrom(stats) {
|
|
37
|
+
return stats.verdictSamples > 0
|
|
38
|
+
? Math.round(stats.totalDurationMs / stats.verdictSamples)
|
|
39
|
+
: 0;
|
|
40
|
+
}
|
|
41
|
+
function withDuration(stats, durationMs) {
|
|
42
|
+
if (durationMs === undefined ||
|
|
43
|
+
!Number.isFinite(durationMs) ||
|
|
44
|
+
durationMs < 0) {
|
|
45
|
+
return stats;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
...stats,
|
|
49
|
+
totalDurationMs: stats.totalDurationMs + Math.round(durationMs),
|
|
50
|
+
verdictSamples: stats.verdictSamples + 1,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
18
53
|
const STATS_STORE = createXrkDocStore(["auto-review", "stats.json"], EMPTY_STATS);
|
|
19
54
|
function settingsStore(options) {
|
|
20
55
|
return createPersistedSettingsDocStore(options.xrkHome, "autoReview", dshSettingsDefaults("autoReview"));
|
|
21
56
|
}
|
|
22
57
|
function loadStats(options) {
|
|
23
|
-
return STATS_STORE.read(options.xrkHome).data;
|
|
58
|
+
return normalizeStats(STATS_STORE.read(options.xrkHome).data);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Read durable tool-pre / classify / approve counters under `~/.xrk`.
|
|
62
|
+
* Face projection overlays these onto session `autoReview` wire (circuit deferred).
|
|
63
|
+
*/
|
|
64
|
+
export function readAutoReviewStats(options = {}) {
|
|
65
|
+
const stats = loadStats(options);
|
|
66
|
+
return {
|
|
67
|
+
allows: stats.allows,
|
|
68
|
+
denies: stats.denies,
|
|
69
|
+
verdictsUsed: stats.verdictsUsed,
|
|
70
|
+
failuresUsed: stats.failuresUsed,
|
|
71
|
+
fallbacks: stats.fallbacks,
|
|
72
|
+
neverRejects: stats.neverRejects,
|
|
73
|
+
avgDurationMs: avgDurationMsFrom(stats),
|
|
74
|
+
recentDenies: stats.recentDenies.map((row) => ({
|
|
75
|
+
reviewId: row.reviewId,
|
|
76
|
+
toolName: row.toolName,
|
|
77
|
+
})),
|
|
78
|
+
};
|
|
24
79
|
}
|
|
25
80
|
function saveStats(options, stats) {
|
|
26
81
|
return STATS_STORE.write(options.xrkHome, stats).data;
|
|
@@ -29,9 +84,17 @@ function isEnabled(options) {
|
|
|
29
84
|
const row = settingsStore(options).value();
|
|
30
85
|
return row.enabled === true;
|
|
31
86
|
}
|
|
87
|
+
/** Host / tool-pre read of dsh-compat auto-review enable (slash · HTTP toggle). */
|
|
88
|
+
export function isAutoReviewEnabled(options = {}) {
|
|
89
|
+
return isEnabled(options);
|
|
90
|
+
}
|
|
32
91
|
function setEnabled(options, enabled) {
|
|
33
92
|
settingsStore(options).replaceUser({ enabled });
|
|
34
93
|
}
|
|
94
|
+
/** Persist Face Settings `auto-review.enabled` into the dsh-compat store. */
|
|
95
|
+
export function setAutoReviewEnabled(options, enabled) {
|
|
96
|
+
setEnabled(options, enabled);
|
|
97
|
+
}
|
|
35
98
|
function statusPayload(options) {
|
|
36
99
|
const store = settingsStore(options);
|
|
37
100
|
const stats = loadStats(options);
|
|
@@ -50,10 +113,17 @@ function statusPayload(options) {
|
|
|
50
113
|
denies: stats.denies,
|
|
51
114
|
verdictsUsed: stats.verdictsUsed,
|
|
52
115
|
failuresUsed: stats.failuresUsed,
|
|
116
|
+
fallbacks: stats.fallbacks,
|
|
117
|
+
neverRejects: stats.neverRejects,
|
|
118
|
+
avgDurationMs: avgDurationMsFrom(stats),
|
|
53
119
|
recentDenies: stats.recentDenies,
|
|
54
120
|
note: classifier.kind === "heuristic"
|
|
55
|
-
? "
|
|
56
|
-
:
|
|
121
|
+
? "Classifier tiers: heuristic (active) | http (Settings URL / XRK_AUTO_REVIEW_CLASSIFIER_URL) | session-llm (Host resolveLlm). Auto permission = no sandbox + per-call review (not a context-fragment)."
|
|
122
|
+
: classifier.kind === "http"
|
|
123
|
+
? "Classifier tier http (active). Tiers: heuristic | http | session-llm. Auto = no sandbox + per-call review."
|
|
124
|
+
: classifier.kind === "session-llm"
|
|
125
|
+
? "Classifier tier session-llm (active). Tiers: heuristic | http | session-llm. Auto = no sandbox + per-call review."
|
|
126
|
+
: `Classifier seam active (${classifier.kind}). Tiers: heuristic | http | session-llm.`,
|
|
57
127
|
};
|
|
58
128
|
}
|
|
59
129
|
export async function handleAutoReviewHttp(req, res, pathname, options = {}) {
|
|
@@ -87,16 +157,61 @@ export async function handleAutoReviewHttp(req, res, pathname, options = {}) {
|
|
|
87
157
|
const index = typeof body.index === "number"
|
|
88
158
|
? body.index
|
|
89
159
|
: Number(body.index ?? 1) - 1;
|
|
160
|
+
const sessionId = typeof body.sessionId === "string" && body.sessionId.trim()
|
|
161
|
+
? body.sessionId.trim()
|
|
162
|
+
: undefined;
|
|
163
|
+
let pendingNote;
|
|
164
|
+
let pendingAllowed = false;
|
|
165
|
+
if (options.approvePending) {
|
|
166
|
+
if (!sessionId) {
|
|
167
|
+
pendingNote =
|
|
168
|
+
"no sessionId in approve body; cannot locate a pending Face approval";
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
const pending = options.approvePending({ index, sessionId });
|
|
172
|
+
pendingAllowed = pending.allowed;
|
|
173
|
+
pendingNote = pending.note;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
pendingNote =
|
|
178
|
+
"no Face approval bridge; stats-only approve (no pending respond)";
|
|
179
|
+
}
|
|
90
180
|
const stats = loadStats(options);
|
|
91
|
-
|
|
181
|
+
let clearedRecentDeny = false;
|
|
182
|
+
if (Number.isSafeInteger(index) &&
|
|
183
|
+
index >= 0 &&
|
|
184
|
+
index < stats.recentDenies.length) {
|
|
92
185
|
const recentDenies = stats.recentDenies.filter((_, i) => i !== index);
|
|
93
186
|
saveStats(options, {
|
|
94
187
|
...stats,
|
|
95
188
|
recentDenies,
|
|
96
189
|
allows: stats.allows + 1,
|
|
97
190
|
});
|
|
191
|
+
clearedRecentDeny = true;
|
|
98
192
|
}
|
|
99
|
-
|
|
193
|
+
else if (pendingAllowed) {
|
|
194
|
+
saveStats(options, {
|
|
195
|
+
...stats,
|
|
196
|
+
allows: stats.allows + 1,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
const noteParts = [
|
|
200
|
+
pendingNote,
|
|
201
|
+
clearedRecentDeny
|
|
202
|
+
? `cleared recent deny #${index + 1}`
|
|
203
|
+
: pendingAllowed
|
|
204
|
+
? undefined
|
|
205
|
+
: Number.isSafeInteger(index) && index >= 0
|
|
206
|
+
? `no recent deny at index ${index + 1}`
|
|
207
|
+
: undefined,
|
|
208
|
+
].filter((part) => typeof part === "string" && part !== "");
|
|
209
|
+
sendJson(res, 200, {
|
|
210
|
+
...statusPayload(options),
|
|
211
|
+
approved: pendingAllowed,
|
|
212
|
+
clearedRecentDeny,
|
|
213
|
+
note: noteParts.join("; "),
|
|
214
|
+
});
|
|
100
215
|
return true;
|
|
101
216
|
}
|
|
102
217
|
if (sub === "classify" ||
|
|
@@ -132,6 +247,7 @@ export async function handleAutoReviewHttp(req, res, pathname, options = {}) {
|
|
|
132
247
|
saveStats(options, {
|
|
133
248
|
...stats,
|
|
134
249
|
denies: stats.denies + 1,
|
|
250
|
+
neverRejects: stats.neverRejects + 1,
|
|
135
251
|
verdictsUsed: stats.verdictsUsed + 1,
|
|
136
252
|
recentDenies: [
|
|
137
253
|
{
|
|
@@ -156,8 +272,8 @@ export async function handleAutoReviewHttp(req, res, pathname, options = {}) {
|
|
|
156
272
|
adapter: DSH_COMPAT_ADAPTER,
|
|
157
273
|
...(result.error ? { error: result.error } : {}),
|
|
158
274
|
note: result.ok
|
|
159
|
-
? "Classifier seam. Default is
|
|
160
|
-
: "Classifier failed closed (
|
|
275
|
+
? "Classifier seam. Default is session LLM when no URL; else heuristic."
|
|
276
|
+
: "Classifier failed closed (deny).",
|
|
161
277
|
});
|
|
162
278
|
return true;
|
|
163
279
|
}
|
|
@@ -169,12 +285,13 @@ export async function handleAutoReviewHttp(req, res, pathname, options = {}) {
|
|
|
169
285
|
export function isAutoReviewPath(pathname) {
|
|
170
286
|
return pathname.startsWith("/auto-review");
|
|
171
287
|
}
|
|
172
|
-
/** Record a
|
|
173
|
-
export function recordAutoReviewDeny(options, toolName) {
|
|
174
|
-
const stats = loadStats(options);
|
|
288
|
+
/** Record a final hard deny (approval `never` / fail-closed). */
|
|
289
|
+
export function recordAutoReviewDeny(options, toolName, durationMs) {
|
|
290
|
+
const stats = withDuration(loadStats(options), durationMs);
|
|
175
291
|
saveStats(options, {
|
|
176
292
|
...stats,
|
|
177
293
|
denies: stats.denies + 1,
|
|
294
|
+
neverRejects: stats.neverRejects + 1,
|
|
178
295
|
verdictsUsed: stats.verdictsUsed + 1,
|
|
179
296
|
recentDenies: [
|
|
180
297
|
{ reviewId: randomUUID(), toolName },
|
|
@@ -182,6 +299,27 @@ export function recordAutoReviewDeny(options, toolName) {
|
|
|
182
299
|
].slice(0, 8),
|
|
183
300
|
});
|
|
184
301
|
}
|
|
302
|
+
/** Record an allow (tool-pre / classify path). */
|
|
303
|
+
export function recordAutoReviewAllow(options = {}, durationMs) {
|
|
304
|
+
const stats = withDuration(loadStats(options), durationMs);
|
|
305
|
+
saveStats(options, {
|
|
306
|
+
...stats,
|
|
307
|
+
allows: stats.allows + 1,
|
|
308
|
+
verdictsUsed: stats.verdictsUsed + 1,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Record a deny remapped to Face ask (DSH user-approval fallback).
|
|
313
|
+
* Does not append {@link recentDenies} — those track final hard rejects.
|
|
314
|
+
*/
|
|
315
|
+
export function recordAutoReviewFallback(options = {}, durationMs) {
|
|
316
|
+
const stats = withDuration(loadStats(options), durationMs);
|
|
317
|
+
saveStats(options, {
|
|
318
|
+
...stats,
|
|
319
|
+
fallbacks: stats.fallbacks + 1,
|
|
320
|
+
verdictsUsed: stats.verdictsUsed + 1,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
185
323
|
/**
|
|
186
324
|
* Mirror Face `/auto-review` slash into ~/.xrk persistence (DSH panel polls HTTP).
|
|
187
325
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-review-http.js","sourceRoot":"","sources":["../../src/dsh-compat/auto-review-http.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auto-review-http.js","sourceRoot":"","sources":["../../src/dsh-compat/auto-review-http.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,2BAA2B,GAE5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAkDzD,MAAM,WAAW,GAAoB;IACnC,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,SAAS,EAAE,CAAC;IACZ,YAAY,EAAE,CAAC;IACf,eAAe,EAAE,CAAC;IAClB,cAAc,EAAE,CAAC;IACjB,YAAY,EAAE,EAAE;CACjB,CAAC;AAEF,sEAAsE;AACtE,SAAS,cAAc,CAAC,GAA+C;IACrE,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;QACpC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC;QAChD,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC;QAChD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC;QAC1C,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC;QAChD,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC;QACtD,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC;QACpD,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;KACtE,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAsB;IAC/C,OAAO,KAAK,CAAC,cAAc,GAAG,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC;QAC1D,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,YAAY,CACnB,KAAsB,EACtB,UAAmB;IAEnB,IACE,UAAU,KAAK,SAAS;QACxB,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,UAAU,GAAG,CAAC,EACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO;QACL,GAAG,KAAK;QACR,eAAe,EAAE,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QAC/D,cAAc,EAAE,KAAK,CAAC,cAAc,GAAG,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,iBAAiB,CACnC,CAAC,aAAa,EAAE,YAAY,CAAC,EAC7B,WAAW,CACZ,CAAC;AAEF,SAAS,aAAa,CAAC,OAA0B;IAC/C,OAAO,+BAA+B,CACpC,OAAO,CAAC,OAAO,EACf,YAAY,EACZ,mBAAmB,CAAC,YAAY,CAAC,CAClC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,OAA0B;IAC3C,OAAO,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAA6B,EAAE;IAE/B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,iBAAiB,CAAC,KAAK,CAAC;QACvC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC7C,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;SACvB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAChB,OAA0B,EAC1B,KAAsB;IAEtB,OAAO,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,OAA0B;IAC3C,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3C,OAAO,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC;AAC9B,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,mBAAmB,CAAC,UAA6B,EAAE;IACjE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,UAAU,CAAC,OAA0B,EAAE,OAAgB;IAC9D,aAAa,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,oBAAoB,CAClC,OAA0B,EAC1B,OAAgB;IAEhB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,aAAa,CAAC,OAA0B;IAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACrC,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,kBAAkB;QAC3B,UAAU,EAAE,UAAU,CAAC,EAAE;QACzB,cAAc,EAAE,UAAU,CAAC,IAAI;QAC/B,gBAAgB,EAAE,KAAK,CAAC,QAAQ,EAAE;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,iBAAiB,CAAC,KAAK,CAAC;QACvC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,IAAI,EACF,UAAU,CAAC,IAAI,KAAK,WAAW;YAC7B,CAAC,CAAC,uMAAuM;YACzM,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM;gBAC1B,CAAC,CAAC,4GAA4G;gBAC9G,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,aAAa;oBACjC,CAAC,CAAC,mHAAmH;oBACrH,CAAC,CAAC,2BAA2B,UAAU,CAAC,IAAI,2CAA2C;KAChG,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAoB,EACpB,GAAmB,EACnB,QAAgB,EAChB,UAA6B,EAAE;IAE/B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IACvD,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC;IAElE,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACnC,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACtC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC1C,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,IAAI,GACR,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS;gBAC/B,CAAC,CAAC,IAAI,CAAC,OAAO;gBACd,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC1B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,KAAK,GACT,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAC5B,CAAC,CAAC,IAAI,CAAC,KAAK;YACZ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,SAAS,GACb,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACzD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACvB,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,WAA+B,CAAC;QACpC,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,WAAW;oBACT,qEAAqE,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC7D,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;gBACjC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAC7B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW;gBACT,kEAAkE,CAAC;QACvE,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAC9B,IACE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;YAC3B,KAAK,IAAI,CAAC;YACV,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EACjC,CAAC;YACD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;YACtE,SAAS,CAAC,OAAO,EAAE;gBACjB,GAAG,KAAK;gBACR,YAAY;gBACZ,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;aACzB,CAAC,CAAC;YACH,iBAAiB,GAAG,IAAI,CAAC;QAC3B,CAAC;aAAM,IAAI,cAAc,EAAE,CAAC;YAC1B,SAAS,CAAC,OAAO,EAAE;gBACjB,GAAG,KAAK;gBACR,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;aACzB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,SAAS,GAAG;YAChB,WAAW;YACX,iBAAiB;gBACf,CAAC,CAAC,wBAAwB,KAAK,GAAG,CAAC,EAAE;gBACrC,CAAC,CAAC,cAAc;oBACd,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;wBACzC,CAAC,CAAC,2BAA2B,KAAK,GAAG,CAAC,EAAE;wBACxC,CAAC,CAAC,SAAS;SAClB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QAC5E,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;YACjB,GAAG,aAAa,CAAC,OAAO,CAAC;YACzB,QAAQ,EAAE,cAAc;YACxB,iBAAiB;YACjB,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IACE,GAAG,KAAK,UAAU;QAClB,GAAG,KAAK,QAAQ;QAChB,GAAG,KAAK,SAAS;QACjB,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAC3B,CAAC;QACD,MAAM,IAAI,GACR,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK;YACnC,CAAC,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC;YAC1B,CAAC,CAAC,EAAE,CAAC;QACT,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;YACxD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;gBACjB,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE,GAAG;gBACb,UAAU,EAAE,UAAU,CAAC,EAAE;gBACzB,OAAO,EAAE,kBAAkB;gBAC3B,OAAO,EAAE,yBAAyB;aACnC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,SAAS,CAAC,OAAO,EAAE;gBACjB,GAAG,KAAK;gBACR,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,CAAC;aACrC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,SAAS,CAAC,OAAO,EAAE;gBACjB,GAAG,KAAK;gBACR,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;gBACxB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,CAAC;gBACpC,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,CAAC;gBACpC,YAAY,EAAE;oBACZ;wBACE,QAAQ,EAAE,UAAU,EAAE;wBACtB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC;qBACvD;oBACD,GAAG,KAAK,CAAC,YAAY;iBACtB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACd,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YAC/B,SAAS,CAAC,OAAO,EAAE;gBACjB,GAAG,KAAK;gBACR,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;gBACxB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,CAAC;aACrC,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;YACjB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,GAAG,MAAM,CAAC,cAAc;YACxB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,kBAAkB;YAC3B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,IAAI,EAAE,MAAM,CAAC,EAAE;gBACb,CAAC,CAAC,sEAAsE;gBACxE,CAAC,CAAC,kCAAkC;SACvC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK;QAAE,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IACpE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AAC7C,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,oBAAoB,CAClC,OAA0B,EAC1B,QAAgB,EAChB,UAAmB;IAEnB,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;IAC3D,SAAS,CAAC,OAAO,EAAE;QACjB,GAAG,KAAK;QACR,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;QACxB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,CAAC;QACpC,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,CAAC;QACpC,YAAY,EAAE;YACZ,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE;YACpC,GAAG,KAAK,CAAC,YAAY;SACtB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;KACd,CAAC,CAAC;AACL,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,qBAAqB,CACnC,UAA6B,EAAE,EAC/B,UAAmB;IAEnB,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;IAC3D,SAAS,CAAC,OAAO,EAAE;QACjB,GAAG,KAAK;QACR,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;QACxB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,CAAC;KACrC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAA6B,EAAE,EAC/B,UAAmB;IAEnB,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;IAC3D,SAAS,CAAC,OAAO,EAAE;QACjB,GAAG,KAAK;QACR,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,CAAC;KACrC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAA0B,EAC1B,IAAY;IAEZ,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM;QAAE,OAAO;IAC1E,SAAS,CAAC,OAAO,EAAE;QACjB,GAAG,KAAK;QACR,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC;QACrE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;KACzB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool-pipeline pre-handler for Auto Review (DSH Guardian parity).
|
|
3
|
+
*
|
|
4
|
+
* Gates (both required — not redundant):
|
|
5
|
+
* 1. **Session permission preset === `auto`** — only Auto sessions are reviewed
|
|
6
|
+
* (DSH `permissionPresets.current(session) === AUTO_PRESET`).
|
|
7
|
+
* 2. **Settings `auto-review.enabled` (or `isEnabled`)** — process-level master
|
|
8
|
+
* switch; when off, no review even while the session is on Auto.
|
|
9
|
+
*
|
|
10
|
+
* Deny mapping: under session approval `never`, deny is final
|
|
11
|
+
* (`AUTO_REVIEW_DENIED`); under `ask` (default), remaps to Face approval.
|
|
12
|
+
* Classifier / stream failures fail-closed as final deny (DSH `failed`).
|
|
13
|
+
*/
|
|
14
|
+
import type { PreHandler } from "@xrkseek/core-tools";
|
|
15
|
+
import { type SessionEvent } from "@xrkseek/protocol";
|
|
16
|
+
import { type AutoReviewClassifierOptions } from "./auto-review-classifier.js";
|
|
17
|
+
import { type AutoReviewOptions } from "./auto-review-http.js";
|
|
18
|
+
/** Structured error persisted on every final Auto-review denial. */
|
|
19
|
+
export declare const AUTO_REVIEW_DENIED_ERROR_NAME = "AutoReviewDeniedError";
|
|
20
|
+
/** Structured error code persisted on every final Auto-review denial. */
|
|
21
|
+
export declare const AUTO_REVIEW_DENIED_CODE = "AUTO_REVIEW_DENIED";
|
|
22
|
+
/** Durable Auto identity written by Face `/permission auto`. */
|
|
23
|
+
export declare const AUTO_REVIEW_SESSION_PRESET: "auto";
|
|
24
|
+
/**
|
|
25
|
+
* Code Mode / PTC outer transport (DSH `RUN_CODE_NAME`). Auto-review skips this
|
|
26
|
+
* call and reviews each nested `tools.*` re-entry once (`ptc-inner`).
|
|
27
|
+
*/
|
|
28
|
+
export declare const AUTO_REVIEW_RUN_CODE_NAME: "run_code";
|
|
29
|
+
export interface AutoReviewToolPreOptions extends Omit<AutoReviewOptions, "product"> {
|
|
30
|
+
/**
|
|
31
|
+
* Process master switch (Face Settings `auto-review.enabled` / Host).
|
|
32
|
+
* When omitted, falls back to the dsh-compat store. Off → no review even on Auto.
|
|
33
|
+
*/
|
|
34
|
+
readonly isEnabled?: () => boolean;
|
|
35
|
+
/** Live classifier product (Face Settings URL + Credentials token). */
|
|
36
|
+
readonly product?: () => AutoReviewClassifierOptions["product"] | undefined;
|
|
37
|
+
/** @deprecated Ask UI localizes via displayReason en/zh; audit reason stays English. */
|
|
38
|
+
readonly locale?: () => "zh" | "en" | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* How classifier `deny` should land: `deny` = final (structured error);
|
|
41
|
+
* `ask` = Face approval (DSH under session approval ask). Default `ask`.
|
|
42
|
+
* Independent of {@link onClassifierError} (technical / parse failures).
|
|
43
|
+
*/
|
|
44
|
+
readonly resolveDenyAction?: () => "deny" | "ask";
|
|
45
|
+
/**
|
|
46
|
+
* How classifier **technical** failures land (`!ok`: HTTP / parse / empty /
|
|
47
|
+
* illegal risk×decision). Default **`ask`** → Face approval (`defer-ask`) so
|
|
48
|
+
* a broken reviewer does not silently hard-block the tool. Set **`deny`** for
|
|
49
|
+
* fail-closed final `AUTO_REVIEW_DENIED` (CI / headless). Abort / dispose still
|
|
50
|
+
* cancel via {@link TOOL_ABORTED_BEFORE_DISPATCH} and ignore this knob.
|
|
51
|
+
*/
|
|
52
|
+
readonly onClassifierError?: "ask" | "deny";
|
|
53
|
+
/**
|
|
54
|
+
* Session working directory for ENVIRONMENT.cwd in the reviewer prompt.
|
|
55
|
+
* Host wires Face session cwd / workspace root.
|
|
56
|
+
*/
|
|
57
|
+
readonly resolveCwd?: () => string | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* Live session log for PROJECT_INSTRUCTIONS + FILTERED_HISTORY and for the
|
|
60
|
+
* Auto preset gate. Host wires `readSessionEvents(store, sessionId)`.
|
|
61
|
+
*/
|
|
62
|
+
readonly resolveSessionEvents?: () => readonly SessionEvent[] | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Override the Auto preset gate (tests). Default: folded
|
|
65
|
+
* `permission/preset` from {@link resolveSessionEvents}.
|
|
66
|
+
*/
|
|
67
|
+
readonly resolvePermissionPreset?: () => string | null | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Live Auto integration lifecycle (Host `permissionAuto.lifecycle()`).
|
|
70
|
+
* When accepting is false or the signal aborts, reviews cancel without
|
|
71
|
+
* dispatching the tool body (DSH dispose).
|
|
72
|
+
*/
|
|
73
|
+
readonly lifecycle?: {
|
|
74
|
+
readonly signal: AbortSignal;
|
|
75
|
+
isAccepting(): boolean;
|
|
76
|
+
track(work: Promise<unknown>): void;
|
|
77
|
+
};
|
|
78
|
+
/** Optional seq of the direct-parent creation prompt (subagent). */
|
|
79
|
+
readonly resolveDirectParentPromptSeq?: () => number | undefined;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Whether the session log's last `permission/preset` is Auto.
|
|
83
|
+
* Missing events / null preset → false (fail closed: no review).
|
|
84
|
+
*/
|
|
85
|
+
export declare function sessionPermissionPresetIsAuto(events: readonly SessionEvent[] | undefined): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Review payload: cwd + tool name/args/schema + filtered history /
|
|
88
|
+
* project instructions when session events are available.
|
|
89
|
+
*/
|
|
90
|
+
export declare function buildAutoReviewToolPayload(ctx: {
|
|
91
|
+
readonly call: {
|
|
92
|
+
readonly id?: string;
|
|
93
|
+
readonly name: string;
|
|
94
|
+
};
|
|
95
|
+
readonly args: unknown;
|
|
96
|
+
readonly definition?: {
|
|
97
|
+
readonly name: string;
|
|
98
|
+
readonly description: string;
|
|
99
|
+
readonly parameters: Record<string, unknown>;
|
|
100
|
+
};
|
|
101
|
+
}, options?: {
|
|
102
|
+
readonly cwd?: string;
|
|
103
|
+
readonly projectInstructions?: readonly unknown[];
|
|
104
|
+
readonly history?: readonly unknown[];
|
|
105
|
+
/** DSH PENDING_ACTION.mode — nested Code Mode / PTC inners are `ptc-inner`. */
|
|
106
|
+
readonly mode?: "native" | "ptc-inner";
|
|
107
|
+
}): Record<string, unknown>;
|
|
108
|
+
/**
|
|
109
|
+
* Pre-execute auto-review: maps classifier verdicts to pipeline continue /
|
|
110
|
+
* deny / ask (Face approval). Mid-review abort / dispose returns
|
|
111
|
+
* {@link TOOL_ABORTED_BEFORE_DISPATCH} (DSH cancel), never ordinary deny/ask.
|
|
112
|
+
* No-op unless session preset is Auto and the Settings master switch is on.
|
|
113
|
+
*
|
|
114
|
+
* **Install with {@link import("@xrkseek/core-tools").ToolPipeline.prependPre}**
|
|
115
|
+
* (harness composition does). Soft floors stay on `onPre` so classify /
|
|
116
|
+
* `defer-ask` still sees downstream deny · ask · cancel (DSH next()).
|
|
117
|
+
*
|
|
118
|
+
* **Classifier error:** {@link AutoReviewToolPreOptions.onClassifierError}
|
|
119
|
+
* (`ask` default · `deny` fail-closed). Distinct from
|
|
120
|
+
* {@link AutoReviewToolPreOptions.resolveDenyAction} (reviewer `deny` verdict).
|
|
121
|
+
*/
|
|
122
|
+
export declare function createAutoReviewToolPre(options?: AutoReviewToolPreOptions): PreHandler;
|
|
123
|
+
//# sourceMappingURL=auto-review-tool-pre.d.ts.map
|