@namzu/sdk 53.2.2 → 55.0.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.
- package/CHANGELOG.md +56 -0
- package/dist/agents/QueryAgent.d.ts.map +1 -1
- package/dist/agents/QueryAgent.js +1 -0
- package/dist/agents/QueryAgent.js.map +1 -1
- package/dist/compaction/context-breakdown.d.ts +85 -0
- package/dist/compaction/context-breakdown.d.ts.map +1 -0
- package/dist/compaction/context-breakdown.js +149 -0
- package/dist/compaction/context-breakdown.js.map +1 -0
- package/dist/compaction/extractor.d.ts.map +1 -1
- package/dist/compaction/extractor.js +5 -1
- package/dist/compaction/extractor.js.map +1 -1
- package/dist/compaction/managers/structured.d.ts.map +1 -1
- package/dist/compaction/managers/structured.js +5 -0
- package/dist/compaction/managers/structured.js.map +1 -1
- package/dist/compaction/manual.d.ts.map +1 -1
- package/dist/compaction/manual.js +6 -0
- package/dist/compaction/manual.js.map +1 -1
- package/dist/compaction/serializer.d.ts +6 -0
- package/dist/compaction/serializer.d.ts.map +1 -1
- package/dist/compaction/serializer.js +21 -3
- package/dist/compaction/serializer.js.map +1 -1
- package/dist/compaction/token-estimate.d.ts +2 -0
- package/dist/compaction/token-estimate.d.ts.map +1 -1
- package/dist/compaction/token-estimate.js +4 -0
- package/dist/compaction/token-estimate.js.map +1 -1
- package/dist/compaction/verifier.d.ts.map +1 -1
- package/dist/compaction/verifier.js +27 -6
- package/dist/compaction/verifier.js.map +1 -1
- package/dist/constants/compaction/index.d.ts +1 -0
- package/dist/constants/compaction/index.d.ts.map +1 -1
- package/dist/constants/compaction/index.js +1 -0
- package/dist/constants/compaction/index.js.map +1 -1
- package/dist/manager/resident/proposal.d.ts +2 -2
- package/dist/manager/resident/store.d.ts +4 -4
- package/dist/prompt/coding-agent-doctrine.d.ts +3 -3
- package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -1
- package/dist/prompt/coding-agent-doctrine.js +18 -20
- package/dist/prompt/coding-agent-doctrine.js.map +1 -1
- package/dist/public-runtime.d.ts +8 -3
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +7 -2
- package/dist/public-runtime.js.map +1 -1
- package/dist/runtime/cache-clock.d.ts +39 -0
- package/dist/runtime/cache-clock.d.ts.map +1 -0
- package/dist/runtime/cache-clock.js +48 -0
- package/dist/runtime/cache-clock.js.map +1 -0
- package/dist/runtime/query/checkpoint.d.ts +12 -2
- package/dist/runtime/query/checkpoint.d.ts.map +1 -1
- package/dist/runtime/query/checkpoint.js +42 -8
- package/dist/runtime/query/checkpoint.js.map +1 -1
- package/dist/runtime/query/compact-session.d.ts +37 -2
- package/dist/runtime/query/compact-session.d.ts.map +1 -1
- package/dist/runtime/query/compact-session.js +77 -3
- package/dist/runtime/query/compact-session.js.map +1 -1
- package/dist/runtime/query/executor/tool-call-admission.d.ts.map +1 -1
- package/dist/runtime/query/executor/tool-call-admission.js +3 -0
- package/dist/runtime/query/executor/tool-call-admission.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +39 -1
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +115 -7
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/index.d.ts +18 -0
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +20 -1
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +25 -8
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +24 -2
- package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/context.js +22 -22
- package/dist/runtime/query/iteration/phases/context.js.map +1 -1
- package/dist/runtime/query/iteration/phases/per-call-review.d.ts +78 -0
- package/dist/runtime/query/iteration/phases/per-call-review.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/per-call-review.js +494 -0
- package/dist/runtime/query/iteration/phases/per-call-review.js.map +1 -0
- package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.js +129 -62
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/iteration/step-context.d.ts +14 -0
- package/dist/runtime/query/iteration/step-context.d.ts.map +1 -1
- package/dist/runtime/query/iteration/step-context.js +29 -0
- package/dist/runtime/query/iteration/step-context.js.map +1 -1
- package/dist/runtime/query/iteration/step-shaping.d.ts.map +1 -1
- package/dist/runtime/query/iteration/step-shaping.js +6 -2
- package/dist/runtime/query/iteration/step-shaping.js.map +1 -1
- package/dist/runtime/query/prepare-turn.d.ts.map +1 -1
- package/dist/runtime/query/prepare-turn.js +16 -3
- package/dist/runtime/query/prepare-turn.js.map +1 -1
- package/dist/runtime/query/project-instructions.d.ts +24 -5
- package/dist/runtime/query/project-instructions.d.ts.map +1 -1
- package/dist/runtime/query/project-instructions.js +107 -35
- package/dist/runtime/query/project-instructions.js.map +1 -1
- package/dist/runtime/query/prompt.d.ts +6 -0
- package/dist/runtime/query/prompt.d.ts.map +1 -1
- package/dist/runtime/query/prompt.js +10 -49
- package/dist/runtime/query/prompt.js.map +1 -1
- package/dist/runtime/query/resume-pending.d.ts +8 -0
- package/dist/runtime/query/resume-pending.d.ts.map +1 -1
- package/dist/runtime/query/resume-pending.js +101 -0
- package/dist/runtime/query/resume-pending.js.map +1 -1
- package/dist/runtime/query/review-policy.d.ts +18 -0
- package/dist/runtime/query/review-policy.d.ts.map +1 -1
- package/dist/runtime/query/review-policy.js +10 -0
- package/dist/runtime/query/review-policy.js.map +1 -1
- package/dist/runtime/query/steering.d.ts +55 -56
- package/dist/runtime/query/steering.d.ts.map +1 -1
- package/dist/runtime/query/steering.js +78 -72
- package/dist/runtime/query/steering.js.map +1 -1
- package/dist/store/budget/disk.js +4 -1
- package/dist/store/budget/disk.js.map +1 -1
- package/dist/tools/admit-facts.d.ts.map +1 -1
- package/dist/tools/admit-facts.js +6 -0
- package/dist/tools/admit-facts.js.map +1 -1
- package/dist/tools/builtins/bash.d.ts +8 -0
- package/dist/tools/builtins/bash.d.ts.map +1 -1
- package/dist/tools/builtins/bash.js +36 -27
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/browser.d.ts.map +1 -1
- package/dist/tools/builtins/browser.js +38 -12
- package/dist/tools/builtins/browser.js.map +1 -1
- package/dist/tools/builtins/edit-apply.d.ts +7 -4
- package/dist/tools/builtins/edit-apply.d.ts.map +1 -1
- package/dist/tools/builtins/edit-apply.js +3 -0
- package/dist/tools/builtins/edit-apply.js.map +1 -1
- package/dist/tools/builtins/edit.d.ts.map +1 -1
- package/dist/tools/builtins/edit.js +31 -11
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/tools/builtins/exit-semantics.d.ts +31 -0
- package/dist/tools/builtins/exit-semantics.d.ts.map +1 -0
- package/dist/tools/builtins/exit-semantics.js +198 -0
- package/dist/tools/builtins/exit-semantics.js.map +1 -0
- package/dist/tools/builtins/job.js +1 -1
- package/dist/tools/builtins/job.js.map +1 -1
- package/dist/tools/builtins/skill.js +1 -1
- package/dist/tools/builtins/skill.js.map +1 -1
- package/dist/tools/builtins/structuredOutput.js +1 -1
- package/dist/tools/builtins/structuredOutput.js.map +1 -1
- package/dist/tools/builtins/verify-outputs.js +1 -1
- package/dist/tools/builtins/verify-outputs.js.map +1 -1
- package/dist/tools/builtins/write-file.js +11 -6
- package/dist/tools/builtins/write-file.js.map +1 -1
- package/dist/tools/coordinator/ask-user-question.d.ts +6 -0
- package/dist/tools/coordinator/ask-user-question.d.ts.map +1 -1
- package/dist/tools/coordinator/ask-user-question.js +6 -1
- package/dist/tools/coordinator/ask-user-question.js.map +1 -1
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +10 -3
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/tools/memory/delete.js +1 -1
- package/dist/tools/memory/delete.js.map +1 -1
- package/dist/tools/memory/read.js +1 -1
- package/dist/tools/memory/read.js.map +1 -1
- package/dist/tools/memory/save.d.ts.map +1 -1
- package/dist/tools/memory/save.js +4 -3
- package/dist/tools/memory/save.js.map +1 -1
- package/dist/tools/memory/search.js +1 -1
- package/dist/tools/memory/search.js.map +1 -1
- package/dist/tools/memory/update.js +1 -1
- package/dist/tools/memory/update.js.map +1 -1
- package/dist/tools/schedules/loop-tool.d.ts.map +1 -1
- package/dist/tools/schedules/loop-tool.js +4 -2
- package/dist/tools/schedules/loop-tool.js.map +1 -1
- package/dist/tools/schedules/schedule-tool.js +2 -2
- package/dist/tools/schedules/schedule-tool.js.map +1 -1
- package/dist/tools/task/create.js +1 -1
- package/dist/tools/task/create.js.map +1 -1
- package/dist/tools/untrusted-envelope.js +1 -1
- package/dist/tools/untrusted-envelope.js.map +1 -1
- package/dist/toolsets/manager.d.ts.map +1 -1
- package/dist/toolsets/manager.js +6 -1
- package/dist/toolsets/manager.js.map +1 -1
- package/dist/turn/evidence-query.d.ts.map +1 -1
- package/dist/turn/evidence-query.js +16 -1
- package/dist/turn/evidence-query.js.map +1 -1
- package/dist/turn/evidence-recall.js +1 -1
- package/dist/turn/evidence-recall.js.map +1 -1
- package/dist/types/agent/base.d.ts +7 -0
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/common/index.d.ts +19 -0
- package/dist/types/common/index.d.ts.map +1 -1
- package/dist/types/common/index.js +9 -0
- package/dist/types/common/index.js.map +1 -1
- package/dist/types/hitl/index.d.ts +66 -0
- package/dist/types/hitl/index.d.ts.map +1 -1
- package/dist/types/hitl/index.js.map +1 -1
- package/dist/types/message/index.d.ts +8 -0
- package/dist/types/message/index.d.ts.map +1 -1
- package/dist/types/message/index.js +12 -2
- package/dist/types/message/index.js.map +1 -1
- package/dist/types/message/notice-frame.d.ts +41 -0
- package/dist/types/message/notice-frame.d.ts.map +1 -0
- package/dist/types/message/notice-frame.js +65 -0
- package/dist/types/message/notice-frame.js.map +1 -0
- package/dist/types/provider/chat.d.ts +8 -0
- package/dist/types/provider/chat.d.ts.map +1 -1
- package/dist/types/provider/config.d.ts +6 -0
- package/dist/types/provider/config.d.ts.map +1 -1
- package/dist/types/session/checkpoint.d.ts +52 -0
- package/dist/types/session/checkpoint.d.ts.map +1 -1
- package/dist/types/session/checkpoint.js +5 -0
- package/dist/types/session/checkpoint.js.map +1 -1
- package/dist/types/session/events.d.ts +9 -0
- package/dist/types/session/events.d.ts.map +1 -1
- package/dist/types/session/events.js.map +1 -1
- package/dist/types/session/records.d.ts +181 -6
- package/dist/types/session/records.d.ts.map +1 -1
- package/dist/types/session/records.js +1 -1
- package/dist/types/session/records.js.map +1 -1
- package/dist/types/tool/presentation.d.ts +17 -1
- package/dist/types/tool/presentation.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/agents/QueryAgent.ts +1 -0
- package/src/compaction/context-breakdown.ts +228 -0
- package/src/compaction/extractor.ts +8 -1
- package/src/compaction/managers/structured.ts +3 -0
- package/src/compaction/manual.ts +5 -0
- package/src/compaction/serializer.ts +28 -3
- package/src/compaction/token-estimate.ts +5 -0
- package/src/compaction/verifier.ts +32 -6
- package/src/constants/compaction/index.ts +1 -0
- package/src/prompt/coding-agent-doctrine.ts +18 -20
- package/src/public-runtime.ts +24 -2
- package/src/runtime/cache-clock.ts +67 -0
- package/src/runtime/query/checkpoint.ts +49 -8
- package/src/runtime/query/compact-session.ts +101 -3
- package/src/runtime/query/executor/tool-call-admission.ts +3 -0
- package/src/runtime/query/executor.ts +165 -15
- package/src/runtime/query/index.ts +45 -1
- package/src/runtime/query/iteration/index.ts +27 -6
- package/src/runtime/query/iteration/phases/context.ts +37 -11
- package/src/runtime/query/iteration/phases/per-call-review.ts +598 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +168 -83
- package/src/runtime/query/iteration/step-context.ts +29 -0
- package/src/runtime/query/iteration/step-shaping.ts +6 -2
- package/src/runtime/query/prepare-turn.ts +18 -1
- package/src/runtime/query/project-instructions.ts +119 -38
- package/src/runtime/query/prompt.ts +11 -54
- package/src/runtime/query/resume-pending.ts +131 -0
- package/src/runtime/query/review-policy.ts +28 -0
- package/src/runtime/query/steering.ts +100 -96
- package/src/store/budget/disk.ts +4 -1
- package/src/tools/admit-facts.ts +6 -0
- package/src/tools/builtins/bash.ts +38 -28
- package/src/tools/builtins/browser.ts +38 -12
- package/src/tools/builtins/edit-apply.ts +12 -2
- package/src/tools/builtins/edit.ts +38 -12
- package/src/tools/builtins/exit-semantics.ts +198 -0
- package/src/tools/builtins/job.ts +1 -1
- package/src/tools/builtins/skill.ts +1 -1
- package/src/tools/builtins/structuredOutput.ts +1 -1
- package/src/tools/builtins/verify-outputs.ts +1 -1
- package/src/tools/builtins/write-file.ts +11 -6
- package/src/tools/coordinator/ask-user-question.ts +12 -1
- package/src/tools/coordinator/index.ts +10 -3
- package/src/tools/memory/delete.ts +1 -1
- package/src/tools/memory/read.ts +1 -1
- package/src/tools/memory/save.ts +4 -3
- package/src/tools/memory/search.ts +1 -1
- package/src/tools/memory/update.ts +1 -1
- package/src/tools/schedules/loop-tool.ts +4 -2
- package/src/tools/schedules/schedule-tool.ts +2 -2
- package/src/tools/task/create.ts +1 -1
- package/src/tools/untrusted-envelope.ts +1 -1
- package/src/toolsets/manager.ts +6 -1
- package/src/turn/evidence-query.ts +19 -1
- package/src/turn/evidence-recall.ts +1 -1
- package/src/types/agent/base.ts +8 -0
- package/src/types/common/index.ts +27 -0
- package/src/types/hitl/index.ts +67 -0
- package/src/types/message/index.ts +20 -2
- package/src/types/message/notice-frame.ts +88 -0
- package/src/types/provider/chat.ts +8 -0
- package/src/types/provider/config.ts +6 -0
- package/src/types/session/checkpoint.ts +5 -0
- package/src/types/session/events.ts +6 -0
- package/src/types/session/records.ts +1 -1
- package/src/types/tool/presentation.ts +16 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { AuthorizationGate } from '../../../../authorization/index.js';
|
|
2
|
+
import type { HITLResumeDecision, ToolCallDeclined, ToolCallSummary } from '../../../../types/hitl/index.js';
|
|
3
|
+
import type { ToolCall } from '../../../../types/message/index.js';
|
|
4
|
+
import type { CallAdmission, ReviewedExecution } from '../../executor.js';
|
|
5
|
+
import { type IterationContext } from './context.js';
|
|
6
|
+
/** What a call is told when a refusal elsewhere in its batch ended the turn before it started. */
|
|
7
|
+
export declare const REFUSED_WITH_THE_TURN = "An earlier call in this batch was refused and the turn was stopped, so this call was not run. Wait for the user.";
|
|
8
|
+
/** What a call is told when the answer to it could not be taken. */
|
|
9
|
+
export declare const UNANSWERED_CALL = "No answer was given for this call, so it was not run. Ask again if it is still needed.";
|
|
10
|
+
/**
|
|
11
|
+
* A person's words, made safe to print: control characters (an escape
|
|
12
|
+
* sequence among them) become spaces, line breaks and tabs stay, and the
|
|
13
|
+
* length is capped by code point.
|
|
14
|
+
*/
|
|
15
|
+
export declare function cleanPersonNote(note: string | undefined): string;
|
|
16
|
+
/** What the walk needs from the review phase; keeps this file free of that file's closures. */
|
|
17
|
+
export interface PerCallReviewDeps {
|
|
18
|
+
readonly ctx: IterationContext & {
|
|
19
|
+
readonly verificationGate?: AuthorizationGate;
|
|
20
|
+
};
|
|
21
|
+
readonly iteration: number;
|
|
22
|
+
readonly toolCalls: readonly ToolCall[];
|
|
23
|
+
readonly summaries: () => readonly ToolCallSummary[];
|
|
24
|
+
/** Ids the review may not release: the operator's policy denied them. */
|
|
25
|
+
readonly gateDenied: ReadonlyMap<string, string>;
|
|
26
|
+
readonly reviewAllowed: () => boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Calls that carry no summary because their preparation failed: they run
|
|
29
|
+
* nothing, the executor answers them with the reason, so they need no yes.
|
|
30
|
+
*/
|
|
31
|
+
readonly unreviewedIds: ReadonlySet<string>;
|
|
32
|
+
/** The shared checks that follow an approval or a refusal; see `runToolReview`. */
|
|
33
|
+
readonly settleEscalations: (denials: Map<string, string>, confirmed: readonly string[] | undefined, calls: readonly ToolCallSummary[]) => Promise<void>;
|
|
34
|
+
readonly recordGrantAudits: (decision: HITLResumeDecision, calls: readonly ToolCallSummary[]) => Promise<void>;
|
|
35
|
+
readonly evaluateGate: (call: ToolCallSummary) => 'allow' | 'deny' | 'review' | undefined;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The per-call review of one batch: it answers the executor's question "may this
|
|
39
|
+
* call start" by asking about that call alone, and keeps every question that is
|
|
40
|
+
* open at once consistent with the others.
|
|
41
|
+
*
|
|
42
|
+
* - An answer that grants something (a remembered approval, a changed rule or
|
|
43
|
+
* mode on the host's side) re-checks the questions still open, and any call
|
|
44
|
+
* the new state covers is let through unasked. A re-check never refuses.
|
|
45
|
+
* - A plain refusal ends the turn: the questions still open close, calls not
|
|
46
|
+
* yet started are refused without being asked, calls in flight are cancelled.
|
|
47
|
+
* - Every refusal and every call that could not be matched to a reviewed
|
|
48
|
+
* summary is a refusal. Nothing is approved by the absence of an answer.
|
|
49
|
+
*/
|
|
50
|
+
export declare class PerCallReview implements ReviewedExecution {
|
|
51
|
+
#private;
|
|
52
|
+
/** Refusals settled before the walk, from the question asked of several calls at once. */
|
|
53
|
+
readonly denials: Map<string, string>;
|
|
54
|
+
readonly declines: Map<string, ToolCallDeclined>;
|
|
55
|
+
constructor(deps: PerCallReviewDeps);
|
|
56
|
+
get ended(): AbortSignal;
|
|
57
|
+
/** A refusal (or the host) ended the turn. */
|
|
58
|
+
get endsTurn(): boolean;
|
|
59
|
+
/** How many calls the walk refused, asked or not. */
|
|
60
|
+
get refusedCount(): number;
|
|
61
|
+
/** The host stopped the turn rather than a person refusing a call. */
|
|
62
|
+
get cancelled(): boolean;
|
|
63
|
+
/** Stop listening for changes. Called when the walk is over, whichever way it ended. */
|
|
64
|
+
dispose(): void;
|
|
65
|
+
/**
|
|
66
|
+
* The questions that are about the batch rather than about one call, asked
|
|
67
|
+
* first and together. Their answers are settled here, before anything starts.
|
|
68
|
+
*/
|
|
69
|
+
askTogetherFirst(): Promise<void>;
|
|
70
|
+
/** Answers the executor: may this call start. */
|
|
71
|
+
admit(call: ToolCall): Promise<CallAdmission>;
|
|
72
|
+
/**
|
|
73
|
+
* Re-check every question still open against the rules and approvals as they
|
|
74
|
+
* are now. Only ever approves.
|
|
75
|
+
*/
|
|
76
|
+
recheck(): Promise<void>;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=per-call-review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"per-call-review.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/query/iteration/phases/per-call-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAC3E,OAAO,KAAK,EACX,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,MAAM,iCAAiC,CAAA;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAGzE,OAAO,EAAE,KAAK,gBAAgB,EAAwB,MAAM,cAAc,CAAA;AAE1E,kGAAkG;AAClG,eAAO,MAAM,qBAAqB,qHACiF,CAAA;AAEnH,oEAAoE;AACpE,eAAO,MAAM,eAAe,2FAC6D,CAAA;AAczF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAgBhE;AAgCD,+FAA+F;AAC/F,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,GAAG,EAAE,gBAAgB,GAAG;QAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,CAAA;KAC7C,CAAA;IACD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAA;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,SAAS,eAAe,EAAE,CAAA;IACpD,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChD,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAA;IACrC;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC3C,mFAAmF;IACnF,QAAQ,CAAC,iBAAiB,EAAE,CAC3B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACxC,KAAK,EAAE,SAAS,eAAe,EAAE,KAC7B,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,QAAQ,CAAC,iBAAiB,EAAE,CAC3B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,SAAS,eAAe,EAAE,KAC7B,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;CACzF;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAc,YAAW,iBAAiB;;IAKtD,0FAA0F;IAC1F,QAAQ,CAAC,OAAO,sBAA4B;IAC5C,QAAQ,CAAC,QAAQ,gCAAsC;gBAc3C,IAAI,EAAE,iBAAiB;IAOnC,IAAI,KAAK,IAAI,WAAW,CAEvB;IAED,8CAA8C;IAC9C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,qDAAqD;IACrD,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,sEAAsE;IACtE,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,wFAAwF;IACxF,OAAO,IAAI,IAAI;IAKf;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BvC,iDAAiD;IAC3C,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;IAyDnD;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA2TxB"}
|
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import { DECLINED_TOOL_CALL_FEEDBACK } from '../../declined.js';
|
|
3
|
+
import { DECLINED_NOTE_MAX_CHARS } from '../../executor.js';
|
|
4
|
+
import { supersededByRecovery } from '../../resume-pending.js';
|
|
5
|
+
import { awaitDecisionDurably } from './context.js';
|
|
6
|
+
/** What a call is told when a refusal elsewhere in its batch ended the turn before it started. */
|
|
7
|
+
export const REFUSED_WITH_THE_TURN = 'An earlier call in this batch was refused and the turn was stopped, so this call was not run. Wait for the user.';
|
|
8
|
+
/** What a call is told when the answer to it could not be taken. */
|
|
9
|
+
export const UNANSWERED_CALL = 'No answer was given for this call, so it was not run. Ask again if it is still needed.';
|
|
10
|
+
const EDIT_NOT_OFFERED = 'Editing a call while it is asked about is not offered, so this call was not run. Ask again with the input you want.';
|
|
11
|
+
const PAUSED_CALL = 'The turn was asked to wait before this call could be answered, so it was not run. Ask again if it is still needed.';
|
|
12
|
+
const NOT_THIS_QUESTION = 'That answer was not an answer to a question about a tool call, so this call was not run.';
|
|
13
|
+
/** The audit trail keeps a person's reason, cut short and without control characters. */
|
|
14
|
+
const AUDIT_NOTE_MAX_CHARS = 500;
|
|
15
|
+
/**
|
|
16
|
+
* A person's words, made safe to print: control characters (an escape
|
|
17
|
+
* sequence among them) become spaces, line breaks and tabs stay, and the
|
|
18
|
+
* length is capped by code point.
|
|
19
|
+
*/
|
|
20
|
+
export function cleanPersonNote(note) {
|
|
21
|
+
if (note === undefined)
|
|
22
|
+
return '';
|
|
23
|
+
let out = '';
|
|
24
|
+
let inGap = false;
|
|
25
|
+
for (const ch of note) {
|
|
26
|
+
const code = ch.codePointAt(0);
|
|
27
|
+
const control = code <= 0x08 || (code >= 0x0b && code <= 0x1f) || (code >= 0x7f && code <= 0x9f);
|
|
28
|
+
if (control) {
|
|
29
|
+
if (!inGap)
|
|
30
|
+
out += ' ';
|
|
31
|
+
inGap = true;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
inGap = false;
|
|
35
|
+
out += ch;
|
|
36
|
+
}
|
|
37
|
+
return Array.from(out.trim()).slice(0, DECLINED_NOTE_MAX_CHARS).join('');
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The per-call review of one batch: it answers the executor's question "may this
|
|
41
|
+
* call start" by asking about that call alone, and keeps every question that is
|
|
42
|
+
* open at once consistent with the others.
|
|
43
|
+
*
|
|
44
|
+
* - An answer that grants something (a remembered approval, a changed rule or
|
|
45
|
+
* mode on the host's side) re-checks the questions still open, and any call
|
|
46
|
+
* the new state covers is let through unasked. A re-check never refuses.
|
|
47
|
+
* - A plain refusal ends the turn: the questions still open close, calls not
|
|
48
|
+
* yet started are refused without being asked, calls in flight are cancelled.
|
|
49
|
+
* - Every refusal and every call that could not be matched to a reviewed
|
|
50
|
+
* summary is a refusal. Nothing is approved by the absence of an answer.
|
|
51
|
+
*/
|
|
52
|
+
export class PerCallReview {
|
|
53
|
+
#deps;
|
|
54
|
+
#endController = new AbortController();
|
|
55
|
+
#open = new Set();
|
|
56
|
+
#approvedTogether = new Set();
|
|
57
|
+
/** Refusals settled before the walk, from the question asked of several calls at once. */
|
|
58
|
+
denials = new Map();
|
|
59
|
+
declines = new Map();
|
|
60
|
+
#endsTurn = false;
|
|
61
|
+
#cancelled = false;
|
|
62
|
+
#refused = 0;
|
|
63
|
+
#checking;
|
|
64
|
+
#checkAgain = false;
|
|
65
|
+
#unsubscribe;
|
|
66
|
+
/**
|
|
67
|
+
* The end of the line of calls waiting to open their question. Questions open
|
|
68
|
+
* one after another in the order the calls were admitted, which is the order
|
|
69
|
+
* the model wrote them, whatever each call's own checks take to finish.
|
|
70
|
+
*/
|
|
71
|
+
#line = Promise.resolve();
|
|
72
|
+
constructor(deps) {
|
|
73
|
+
this.#deps = deps;
|
|
74
|
+
this.#unsubscribe = deps.ctx.perCallReview?.onRulesChanged?.(() => {
|
|
75
|
+
void this.recheck();
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
get ended() {
|
|
79
|
+
return this.#endController.signal;
|
|
80
|
+
}
|
|
81
|
+
/** A refusal (or the host) ended the turn. */
|
|
82
|
+
get endsTurn() {
|
|
83
|
+
return this.#endsTurn;
|
|
84
|
+
}
|
|
85
|
+
/** How many calls the walk refused, asked or not. */
|
|
86
|
+
get refusedCount() {
|
|
87
|
+
return this.#refused;
|
|
88
|
+
}
|
|
89
|
+
/** The host stopped the turn rather than a person refusing a call. */
|
|
90
|
+
get cancelled() {
|
|
91
|
+
return this.#cancelled;
|
|
92
|
+
}
|
|
93
|
+
/** Stop listening for changes. Called when the walk is over, whichever way it ended. */
|
|
94
|
+
dispose() {
|
|
95
|
+
this.#unsubscribe?.();
|
|
96
|
+
this.#unsubscribe = undefined;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The questions that are about the batch rather than about one call, asked
|
|
100
|
+
* first and together. Their answers are settled here, before anything starts.
|
|
101
|
+
*/
|
|
102
|
+
async askTogetherFirst() {
|
|
103
|
+
const config = this.#deps.ctx.perCallReview;
|
|
104
|
+
if (!config?.askTogether)
|
|
105
|
+
return;
|
|
106
|
+
const askable = this.#deps
|
|
107
|
+
.summaries()
|
|
108
|
+
.filter((call) => !this.#deps.gateDenied.has(call.id) && !this.#skipsAsk(call));
|
|
109
|
+
if (askable.length === 0)
|
|
110
|
+
return;
|
|
111
|
+
const wanted = new Set(config.askTogether(askable));
|
|
112
|
+
const together = askable.filter((call) => wanted.has(call.id));
|
|
113
|
+
if (together.length === 0)
|
|
114
|
+
return;
|
|
115
|
+
const interpreted = await this.#ask(together);
|
|
116
|
+
for (const call of together) {
|
|
117
|
+
const verdict = interpreted.verdicts.get(call.id) ?? {
|
|
118
|
+
run: false,
|
|
119
|
+
reason: UNANSWERED_CALL,
|
|
120
|
+
};
|
|
121
|
+
if (verdict.run) {
|
|
122
|
+
this.#approvedTogether.add(call.id);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
this.denials.set(call.id, verdict.reason);
|
|
126
|
+
if (verdict.declined)
|
|
127
|
+
this.declines.set(call.id, verdict.declined);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
this.#noteEnd(interpreted);
|
|
131
|
+
}
|
|
132
|
+
/** Answers the executor: may this call start. */
|
|
133
|
+
async admit(call) {
|
|
134
|
+
// Taken synchronously, so the place in line is the order of the asking.
|
|
135
|
+
const before = this.#line;
|
|
136
|
+
let leave;
|
|
137
|
+
this.#line = new Promise((resolve) => {
|
|
138
|
+
leave = resolve;
|
|
139
|
+
});
|
|
140
|
+
try {
|
|
141
|
+
const verdict = await this.#decide(call, before, leave);
|
|
142
|
+
if (!verdict.run)
|
|
143
|
+
this.#refused += 1;
|
|
144
|
+
return verdict;
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
leave();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async #decide(call, before, leave) {
|
|
151
|
+
await before;
|
|
152
|
+
if (this.ended.aborted)
|
|
153
|
+
return { run: false, reason: REFUSED_WITH_THE_TURN };
|
|
154
|
+
if (this.#approvedTogether.has(call.id))
|
|
155
|
+
return { run: true };
|
|
156
|
+
const summary = this.#deps.summaries().find((candidate) => candidate.id === call.id);
|
|
157
|
+
if (summary === undefined) {
|
|
158
|
+
// A call whose preparation failed runs nothing; the executor answers it
|
|
159
|
+
// with the reason. Any other call that has no summary was never shown,
|
|
160
|
+
// and a call nobody saw is not approved.
|
|
161
|
+
return this.#deps.unreviewedIds.has(call.id)
|
|
162
|
+
? { run: true }
|
|
163
|
+
: { run: false, reason: UNANSWERED_CALL };
|
|
164
|
+
}
|
|
165
|
+
if (this.#skipsAsk(summary))
|
|
166
|
+
return { run: true };
|
|
167
|
+
// A call that waited for its turn is checked against the rules, grants and
|
|
168
|
+
// mode as they are now: an earlier answer may have remembered a rule that
|
|
169
|
+
// covers it, and nobody is asked about what is already settled.
|
|
170
|
+
if (await this.#coveredNow(summary)) {
|
|
171
|
+
await this.#deps.ctx.recorder.recordAudit({
|
|
172
|
+
what: { action: 'tool_call', tool: summary.name },
|
|
173
|
+
outcome: 'approved',
|
|
174
|
+
reason: 'a rule, an earlier approval or the permission mode changed while this call waited for its turn and now covers it; it was approved without being shown',
|
|
175
|
+
});
|
|
176
|
+
return { run: true };
|
|
177
|
+
}
|
|
178
|
+
const interpreted = await this.#ask([summary], leave);
|
|
179
|
+
this.#noteEnd(interpreted);
|
|
180
|
+
const verdict = interpreted.verdicts.get(summary.id) ?? {
|
|
181
|
+
run: false,
|
|
182
|
+
reason: UNANSWERED_CALL,
|
|
183
|
+
};
|
|
184
|
+
if (!verdict.run) {
|
|
185
|
+
this.#deps.ctx.log.info('A tool call was refused', {
|
|
186
|
+
'namzu.tool.names': [summary.name],
|
|
187
|
+
});
|
|
188
|
+
return verdict;
|
|
189
|
+
}
|
|
190
|
+
return { run: true };
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Re-check every question still open against the rules and approvals as they
|
|
194
|
+
* are now. Only ever approves.
|
|
195
|
+
*/
|
|
196
|
+
recheck() {
|
|
197
|
+
if (this.#checking) {
|
|
198
|
+
this.#checkAgain = true;
|
|
199
|
+
return this.#checking;
|
|
200
|
+
}
|
|
201
|
+
this.#checking = (async () => {
|
|
202
|
+
try {
|
|
203
|
+
do {
|
|
204
|
+
this.#checkAgain = false;
|
|
205
|
+
for (const ask of [...this.#open]) {
|
|
206
|
+
if (!ask.recheckable || ask.closedBy !== undefined || this.ended.aborted)
|
|
207
|
+
continue;
|
|
208
|
+
if (await this.#coveredNow(ask.calls[0])) {
|
|
209
|
+
// The person may have answered while this was being worked out.
|
|
210
|
+
if (!this.#open.has(ask) || ask.closedBy !== undefined)
|
|
211
|
+
continue;
|
|
212
|
+
ask.closedBy = 'covered';
|
|
213
|
+
ask.controller.abort();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
} while (this.#checkAgain);
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
this.#checking = undefined;
|
|
220
|
+
}
|
|
221
|
+
})();
|
|
222
|
+
return this.#checking;
|
|
223
|
+
}
|
|
224
|
+
/** Calls a re-check must never wave through: they exist to put a question to a person. */
|
|
225
|
+
static #alwaysAsked(call) {
|
|
226
|
+
return (call.escalation !== undefined ||
|
|
227
|
+
call.requiresApproval === true ||
|
|
228
|
+
call.authorization?.askRule === true ||
|
|
229
|
+
call.authorization?.explicitReview === true ||
|
|
230
|
+
call.hookPermission?.decision === 'ask');
|
|
231
|
+
}
|
|
232
|
+
async #coveredNow(call) {
|
|
233
|
+
if (_a.#alwaysAsked(call) || this.#deps.gateDenied.has(call.id))
|
|
234
|
+
return false;
|
|
235
|
+
const { ctx } = this.#deps;
|
|
236
|
+
// The host's veto comes before every approval path, the turn's own included.
|
|
237
|
+
if (await this.#vetoed(ctx.perCallReview?.neverCover, call))
|
|
238
|
+
return false;
|
|
239
|
+
if (!this.#deps.reviewAllowed()) {
|
|
240
|
+
if (this.#deps.evaluateGate(call) === 'allow')
|
|
241
|
+
return true;
|
|
242
|
+
if (ctx.toolGrants?.covers(call))
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
try {
|
|
246
|
+
return (await ctx.perCallReview?.covers?.(call)) === true;
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// A host predicate that fails is not a yes.
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/** A host predicate that throws vetoes: a failure is never a yes. */
|
|
254
|
+
async #vetoed(veto, call) {
|
|
255
|
+
if (!veto)
|
|
256
|
+
return false;
|
|
257
|
+
try {
|
|
258
|
+
return (await veto(call)) !== false;
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
return true;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/** Whether the turn's own rules and earlier approvals let this call run unasked. */
|
|
265
|
+
#skipsAsk(call) {
|
|
266
|
+
if (this.#deps.reviewAllowed())
|
|
267
|
+
return false;
|
|
268
|
+
if (call.authorization?.decision === 'allow')
|
|
269
|
+
return !_a.#alwaysAsked(call);
|
|
270
|
+
return !_a.#alwaysAsked(call) && this.#deps.ctx.toolGrants?.covers(call) === true;
|
|
271
|
+
}
|
|
272
|
+
#noteEnd(interpreted) {
|
|
273
|
+
if (!interpreted.endsTurn && !interpreted.cancelled)
|
|
274
|
+
return;
|
|
275
|
+
this.#end(interpreted.cancelled);
|
|
276
|
+
}
|
|
277
|
+
#end(cancelled) {
|
|
278
|
+
if (this.#endsTurn)
|
|
279
|
+
return;
|
|
280
|
+
this.#endsTurn = true;
|
|
281
|
+
this.#cancelled = cancelled;
|
|
282
|
+
for (const ask of this.#open) {
|
|
283
|
+
ask.closedBy ??= 'ended';
|
|
284
|
+
ask.controller.abort();
|
|
285
|
+
}
|
|
286
|
+
this.#endController.abort(new Error('the user stopped the turn'));
|
|
287
|
+
}
|
|
288
|
+
/** One request to the handler about `calls`, and what its answer means for each. */
|
|
289
|
+
async #ask(calls, opened) {
|
|
290
|
+
const { ctx, iteration } = this.#deps;
|
|
291
|
+
const checkpoint = await ctx.checkpointMgr.create(ctx.recorder, iteration);
|
|
292
|
+
await ctx.emitEvent({
|
|
293
|
+
type: 'tool_review_requested',
|
|
294
|
+
turnId: ctx.recorder.turnId,
|
|
295
|
+
toolCalls: [...calls],
|
|
296
|
+
iteration,
|
|
297
|
+
});
|
|
298
|
+
const asked = {
|
|
299
|
+
calls,
|
|
300
|
+
controller: new AbortController(),
|
|
301
|
+
recheckable: calls.length === 1,
|
|
302
|
+
};
|
|
303
|
+
this.#open.add(asked);
|
|
304
|
+
let decision;
|
|
305
|
+
try {
|
|
306
|
+
const answer = awaitDecisionDurably(ctx, checkpoint, {
|
|
307
|
+
type: 'tool_review',
|
|
308
|
+
sessionId: ctx.recorder.sessionId,
|
|
309
|
+
turnId: ctx.recorder.turnId,
|
|
310
|
+
checkpointId: checkpoint.id,
|
|
311
|
+
toolCalls: [...calls],
|
|
312
|
+
perCall: true,
|
|
313
|
+
}, {
|
|
314
|
+
signal: asked.controller.signal,
|
|
315
|
+
closedAs: () => {
|
|
316
|
+
asked.closedHere = true;
|
|
317
|
+
return asked.closedBy === 'covered'
|
|
318
|
+
? { action: 'approve_tools' }
|
|
319
|
+
: { action: 'reject_tools', feedback: REFUSED_WITH_THE_TURN };
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
// The handler has been given the question: the next call may open its own.
|
|
323
|
+
opened?.();
|
|
324
|
+
decision = await answer;
|
|
325
|
+
}
|
|
326
|
+
finally {
|
|
327
|
+
this.#open.delete(asked);
|
|
328
|
+
}
|
|
329
|
+
// Only an answer the close itself supplied counts as the close: a person
|
|
330
|
+
// who answered first has answered, and a re-check that landed a moment
|
|
331
|
+
// later does not turn their No into a yes.
|
|
332
|
+
if (asked.closedHere && asked.closedBy === 'covered') {
|
|
333
|
+
await ctx.emitEvent({
|
|
334
|
+
type: 'tool_review_completed',
|
|
335
|
+
turnId: ctx.recorder.turnId,
|
|
336
|
+
decision: 'approved',
|
|
337
|
+
});
|
|
338
|
+
for (const call of calls) {
|
|
339
|
+
await ctx.recorder.recordAudit({
|
|
340
|
+
what: { action: 'tool_call', tool: call.name },
|
|
341
|
+
outcome: 'approved',
|
|
342
|
+
reason: 'a rule, an earlier approval or the permission mode changed while this call waited and now covers it; it was approved without being shown',
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
return this.#settle({ action: 'approve_tools' }, calls, new Map(calls.map((call) => [call.id, { run: true }])), false, false, false);
|
|
346
|
+
}
|
|
347
|
+
if (asked.closedHere && asked.closedBy === 'ended') {
|
|
348
|
+
await ctx.emitEvent({
|
|
349
|
+
type: 'tool_review_completed',
|
|
350
|
+
turnId: ctx.recorder.turnId,
|
|
351
|
+
decision: 'rejected',
|
|
352
|
+
});
|
|
353
|
+
return {
|
|
354
|
+
verdicts: new Map(calls.map((call) => [call.id, { run: false, reason: REFUSED_WITH_THE_TURN }])),
|
|
355
|
+
endsTurn: false,
|
|
356
|
+
cancelled: false,
|
|
357
|
+
paused: false,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
const interpreted = this.#interpret(decision, calls);
|
|
361
|
+
await ctx.emitEvent({
|
|
362
|
+
type: 'tool_review_completed',
|
|
363
|
+
turnId: ctx.recorder.turnId,
|
|
364
|
+
decision: decisionLabel(decision, interpreted),
|
|
365
|
+
});
|
|
366
|
+
if (interpreted.paused) {
|
|
367
|
+
await ctx.checkpointMgr
|
|
368
|
+
.unpark(checkpoint.id, supersededByRecovery(decision))
|
|
369
|
+
.catch(() => null);
|
|
370
|
+
}
|
|
371
|
+
return this.#settle(decision, calls, interpreted.verdicts, interpreted.endsTurn, interpreted.cancelled, interpreted.paused);
|
|
372
|
+
}
|
|
373
|
+
/** The checks that follow an answer, then the answer's side effects. */
|
|
374
|
+
async #settle(decision, calls, verdicts, endsTurn, cancelled, paused) {
|
|
375
|
+
const { ctx } = this.#deps;
|
|
376
|
+
const denials = new Map();
|
|
377
|
+
for (const call of calls) {
|
|
378
|
+
const verdict = verdicts.get(call.id);
|
|
379
|
+
if (verdict && !verdict.run)
|
|
380
|
+
denials.set(call.id, verdict.reason);
|
|
381
|
+
}
|
|
382
|
+
const confirmed = decision.action === 'approve_tools' || decision.action === 'modify_tools'
|
|
383
|
+
? decision.confirmedEscalations
|
|
384
|
+
: undefined;
|
|
385
|
+
await this.#deps.settleEscalations(denials, confirmed, calls);
|
|
386
|
+
const result = new Map();
|
|
387
|
+
for (const call of calls) {
|
|
388
|
+
const prior = verdicts.get(call.id) ?? {
|
|
389
|
+
run: false,
|
|
390
|
+
reason: UNANSWERED_CALL,
|
|
391
|
+
};
|
|
392
|
+
const reason = denials.get(call.id);
|
|
393
|
+
// An escape the answer did not confirm turns a yes into a refusal here.
|
|
394
|
+
result.set(call.id, prior.run && reason !== undefined ? { run: false, reason } : prior);
|
|
395
|
+
}
|
|
396
|
+
const approvedCalls = calls.filter((call) => result.get(call.id)?.run === true);
|
|
397
|
+
if (decision.action === 'approve_tools' && approvedCalls.length > 0) {
|
|
398
|
+
if (decision.remember)
|
|
399
|
+
ctx.toolGrants?.grant(decision.remember);
|
|
400
|
+
await this.#deps.recordGrantAudits(decision, approvedCalls);
|
|
401
|
+
// What was just remembered may cover a question still open.
|
|
402
|
+
if (decision.remember)
|
|
403
|
+
void this.recheck();
|
|
404
|
+
}
|
|
405
|
+
for (const call of calls) {
|
|
406
|
+
const verdict = result.get(call.id);
|
|
407
|
+
if (verdict && !verdict.run && verdict.declined) {
|
|
408
|
+
const note = cleanPersonNote(verdict.declined.note);
|
|
409
|
+
await ctx.recorder.recordAudit({
|
|
410
|
+
what: { action: 'tool_call', tool: call.name },
|
|
411
|
+
outcome: 'refused',
|
|
412
|
+
reason: `declined by the person${note ? `: ${Array.from(note).slice(0, AUDIT_NOTE_MAX_CHARS).join('')}` : ''}`,
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
return { verdicts: result, endsTurn, cancelled, paused };
|
|
417
|
+
}
|
|
418
|
+
#interpret(decision, calls) {
|
|
419
|
+
const verdicts = new Map();
|
|
420
|
+
const refuseAll = (verdict) => {
|
|
421
|
+
for (const call of calls)
|
|
422
|
+
verdicts.set(call.id, verdict);
|
|
423
|
+
};
|
|
424
|
+
let endsTurn = false;
|
|
425
|
+
let cancelled = false;
|
|
426
|
+
let paused = false;
|
|
427
|
+
switch (decision.action) {
|
|
428
|
+
case 'approve_tools':
|
|
429
|
+
case 'continue':
|
|
430
|
+
for (const call of calls)
|
|
431
|
+
verdicts.set(call.id, { run: true });
|
|
432
|
+
break;
|
|
433
|
+
case 'reject_tools': {
|
|
434
|
+
const note = cleanPersonNote(decision.declined?.note);
|
|
435
|
+
refuseAll({
|
|
436
|
+
run: false,
|
|
437
|
+
reason: decision.feedback
|
|
438
|
+
? Array.from(decision.feedback)
|
|
439
|
+
.slice(0, DECLINED_NOTE_MAX_CHARS * 2)
|
|
440
|
+
.join('')
|
|
441
|
+
: DECLINED_TOOL_CALL_FEEDBACK,
|
|
442
|
+
...(decision.declined ? { declined: note ? { note } : {} } : {}),
|
|
443
|
+
});
|
|
444
|
+
endsTurn = decision.endTurn === true;
|
|
445
|
+
break;
|
|
446
|
+
}
|
|
447
|
+
case 'modify_tools': {
|
|
448
|
+
for (const call of calls) {
|
|
449
|
+
const mods = decision.modifications.filter((mod) => mod.toolCallId === call.id);
|
|
450
|
+
if (mods.some((mod) => mod.action === 'deny')) {
|
|
451
|
+
verdicts.set(call.id, {
|
|
452
|
+
run: false,
|
|
453
|
+
reason: DECLINED_TOOL_CALL_FEEDBACK,
|
|
454
|
+
declined: {},
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
else if (mods.some((mod) => mod.action === 'modify')) {
|
|
458
|
+
verdicts.set(call.id, { run: false, reason: EDIT_NOT_OFFERED });
|
|
459
|
+
}
|
|
460
|
+
else if (mods.some((mod) => mod.action === 'approve')) {
|
|
461
|
+
verdicts.set(call.id, { run: true });
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
verdicts.set(call.id, { run: false, reason: UNANSWERED_CALL });
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
break;
|
|
468
|
+
}
|
|
469
|
+
case 'pause':
|
|
470
|
+
refuseAll({ run: false, reason: PAUSED_CALL });
|
|
471
|
+
paused = true;
|
|
472
|
+
break;
|
|
473
|
+
case 'abort':
|
|
474
|
+
refuseAll({ run: false, reason: REFUSED_WITH_THE_TURN });
|
|
475
|
+
cancelled = true;
|
|
476
|
+
break;
|
|
477
|
+
default:
|
|
478
|
+
// A plan or question answer to a tool question: not an answer to it.
|
|
479
|
+
this.#deps.ctx.log.warn('Unexpected decision during a per-call tool review', {
|
|
480
|
+
'namzu.runtime.action': decision.action,
|
|
481
|
+
});
|
|
482
|
+
refuseAll({ run: false, reason: NOT_THIS_QUESTION });
|
|
483
|
+
}
|
|
484
|
+
return { verdicts, endsTurn, cancelled, paused };
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
_a = PerCallReview;
|
|
488
|
+
function decisionLabel(decision, interpreted) {
|
|
489
|
+
if (decision.action === 'modify_tools')
|
|
490
|
+
return 'modified';
|
|
491
|
+
const refused = [...interpreted.verdicts.values()].some((verdict) => !verdict.run);
|
|
492
|
+
return refused ? 'rejected' : 'approved';
|
|
493
|
+
}
|
|
494
|
+
//# sourceMappingURL=per-call-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"per-call-review.js","sourceRoot":"","sources":["../../../../../src/runtime/query/iteration/phases/per-call-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-review.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/query/iteration/phases/tool-review.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"tool-review.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/query/iteration/phases/tool-review.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAQ3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAqBtE,OAAO,EAAE,KAAK,gBAAgB,EAAwB,MAAM,cAAc,CAAA;AAG1E,UAAU,wBAAyB,SAAQ,gBAAgB;IAC1D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,CAAA;CAC7C;AA4BD,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAA;AAEjE;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,OAAO,EAAE,SAAS,OAAO,mBAAmB,EAAE,eAAe,EAAE,CAAA;IAC/D,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAuB,aAAa,CACnC,GAAG,EAAE,wBAAwB,EAC7B,QAAQ,EAAE,sBAAsB,EAChC,YAAY,EAAE,MAAM,GAClB,cAAc,CAAC,YAAY,EAAE,iBAAiB,CAAC,CA6/BjD"}
|