@sema-agent/server 7.142.0 → 7.144.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/MIGRATION.md +608 -0
- package/USAGE.md +63 -36
- package/dist/adoption/plan.js +22 -0
- package/dist/approval-ask-audit-store.d.ts +7 -5
- package/dist/approval-ask-audit-store.js +12 -6
- package/dist/approval-ask-machine.d.ts +15 -7
- package/dist/approval-ask-machine.js +10 -4
- package/dist/approval-card.d.ts +155 -39
- package/dist/approval-card.js +111 -31
- package/dist/approval-queue-kind.d.ts +27 -0
- package/dist/approval-queue-kind.js +6 -0
- package/dist/approval-reconciler.d.ts +8 -8
- package/dist/approval-reconciler.js +3 -3
- package/dist/audit.js +4 -2
- package/dist/boot/budget-tracing.d.ts +1 -1
- package/dist/boot/execution-env.js +1 -1
- package/dist/boot/governance-seams.d.ts +26 -41
- package/dist/boot/governance-seams.js +61 -28
- package/dist/boot/late-binds.d.ts +7 -4
- package/dist/boot/late-binds.js +3 -1
- package/dist/boot/leader.js +2 -4
- package/dist/boot/memory-consolidation.d.ts +0 -8
- package/dist/boot/memory-consolidation.js +3 -3
- package/dist/boot/reapers.js +5 -4
- package/dist/boot/resolve-spec.d.ts +1 -1
- package/dist/boot/resolve-spec.js +8 -8
- package/dist/boot/runner-deps.d.ts +14 -6
- package/dist/boot/runner-deps.js +6 -17
- package/dist/boot/shutdown.d.ts +9 -0
- package/dist/boot/shutdown.js +18 -2
- package/dist/boot/stage-01-config.js +2 -0
- package/dist/boot/stage-02-web-admin-pull.js +3 -0
- package/dist/boot/stage-03-store-backend.d.ts +4 -1
- package/dist/boot/stage-03-store-backend.js +1 -2
- package/dist/boot/stage-04-stores.d.ts +5 -2
- package/dist/boot/stage-04-stores.js +3 -5
- package/dist/boot/stage-05-execution-env.d.ts +5 -2
- package/dist/boot/stage-06-runners.d.ts +5 -2
- package/dist/boot/stage-06-runners.js +1 -3
- package/dist/boot/stage-07-capability-layer.d.ts +5 -2
- package/dist/boot/stage-07-capability-layer.js +6 -2
- package/dist/boot/stage-08-reapers.d.ts +5 -2
- package/dist/boot/stage-09-leader.d.ts +5 -2
- package/dist/boot/stage-10-http-server.d.ts +5 -2
- package/dist/boot/stage-10-http-server.js +4 -1
- package/dist/boot/stores.d.ts +5 -2
- package/dist/boot/stores.js +7 -7
- package/dist/boot/web-admin.d.ts +5 -1
- package/dist/boot/web-admin.js +31 -19
- package/dist/capabilities/hands-lane.d.ts +9 -39
- package/dist/capabilities/hands-lane.js +8 -13
- package/dist/capabilities/mcp-probe.d.ts +3 -2
- package/dist/capabilities/scenarios.d.ts +23 -17
- package/dist/capabilities/scenarios.js +2 -2
- package/dist/capabilities/skills.d.ts +1 -17
- package/dist/capabilities/skills.js +0 -8
- package/dist/capability-facts.d.ts +8 -8
- package/dist/capability-facts.js +4 -4
- package/dist/card-void.d.ts +6 -9
- package/dist/config-catalog.js +1 -1
- package/dist/config-d-migration.d.ts +2 -0
- package/dist/config-dir-trust.js +58 -29
- package/dist/config-invariants.d.ts +7 -1
- package/dist/config-invariants.js +7 -0
- package/dist/config-provider.d.ts +10 -0
- package/dist/config-provider.js +15 -4
- package/dist/config-root-migration.d.ts +13 -0
- package/dist/config-root-migration.js +99 -0
- package/dist/config-types.d.ts +5 -5
- package/dist/config.d.ts +4 -3
- package/dist/config.js +1 -1
- package/dist/delegated-session-owner.d.ts +35 -151
- package/dist/delegated-session-owner.js +1 -83
- package/dist/device-ws-protocol.d.ts +1 -0
- package/dist/device-ws-protocol.js +2 -1
- package/dist/entry-mode-clamp-notice.d.ts +1 -1
- package/dist/env-model-table-gate.d.ts +53 -0
- package/dist/env-model-table-gate.js +53 -0
- package/dist/execution-placement.d.ts +7 -4
- package/dist/fleet/fleet-bus.d.ts +28 -52
- package/dist/fleet/fleet-bus.js +35 -100
- package/dist/fleet/fleet-reconciler.d.ts +4 -4
- package/dist/fleet/fleet-reconciler.js +1 -1
- package/dist/fleet/subagent-tail-bus.d.ts +14 -11
- package/dist/fleet/subagent-tail-bus.js +15 -28
- package/dist/hooks/classic-stations.d.ts +3 -1
- package/dist/hooks/classic-stations.js +2 -0
- package/dist/hooks/hook-runner.js +28 -7
- package/dist/host-decision.d.ts +54 -20
- package/dist/host-decision.js +42 -14
- package/dist/http/admission.d.ts +1 -1
- package/dist/http/admission.js +7 -3
- package/dist/http/approval-sweeps.js +11 -8
- package/dist/http/caller-trust.d.ts +1 -1
- package/dist/http/durable-run-leg.js +2 -2
- package/dist/http/engine-refusal.d.ts +16 -0
- package/dist/http/engine-refusal.js +17 -0
- package/dist/http/memory-compliance-failure-reply.d.ts +1 -3
- package/dist/http/memory-compliance-failure-reply.js +4 -6
- package/dist/http/owner-access.d.ts +11 -0
- package/dist/http/owner-access.js +13 -0
- package/dist/http/principal-gate.d.ts +1 -1
- package/dist/http/refusal-body.d.ts +7 -3
- package/dist/http/refusal-body.js +1 -0
- package/dist/http/resume-legs.d.ts +21 -7
- package/dist/http/resume-legs.js +82 -53
- package/dist/http/resume-restatement.d.ts +39 -0
- package/dist/http/resume-restatement.js +25 -0
- package/dist/http/route-ctx.d.ts +35 -10
- package/dist/http/route-ctx.js +1 -1
- package/dist/http/routes/approvals-assistant.d.ts +9 -1
- package/dist/http/routes/approvals-assistant.js +143 -31
- package/dist/http/routes/capabilities.js +11 -2
- package/dist/http/routes/memory-policy.d.ts +2 -2
- package/dist/http/routes/memory-policy.js +1 -1
- package/dist/http/routes/notify-wake.js +23 -25
- package/dist/http/routes/rules.js +48 -13
- package/dist/http/routes/runs.js +9 -8
- package/dist/http/routes/session-memory-sync.d.ts +34 -6
- package/dist/http/routes/session-memory-sync.js +27 -10
- package/dist/http/routes/session-sync.js +13 -20
- package/dist/http/routes/sessions.d.ts +2 -2
- package/dist/http/routes/sessions.js +22 -23
- package/dist/http/routes/tasks.js +27 -49
- package/dist/http/server.d.ts +13 -7
- package/dist/http/server.js +2 -2
- package/dist/http/stored-body-replay.js +15 -4
- package/dist/http/wire-types.d.ts +17 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/lane-home-probe.d.ts +15 -0
- package/dist/lane-home-probe.js +4 -0
- package/dist/leader/leader.js +5 -2
- package/dist/leader/wire.d.ts +7 -1
- package/dist/leader/wire.js +6 -5
- package/dist/leg-facts.d.ts +37 -0
- package/dist/leg-facts.js +15 -0
- package/dist/memory-bundle-engine.d.ts +1 -4
- package/dist/memory-bundle-engine.js +2 -2
- package/dist/memory-operator-faces.d.ts +30 -66
- package/dist/memory-operator-faces.js +17 -88
- package/dist/memory-scope-stores.d.ts +38 -40
- package/dist/memory-scope-stores.js +51 -36
- package/dist/memory-scope.d.ts +0 -9
- package/dist/memory-scope.js +0 -9
- package/dist/memory-sync-client.js +14 -3
- package/dist/memory-sync.d.ts +20 -4
- package/dist/memory-sync.js +23 -4
- package/dist/model-plane-face.d.ts +13 -7
- package/dist/model-plane-face.js +2 -1
- package/dist/observability/corrupt-read-seat.d.ts +5 -9
- package/dist/observability/corrupt-read-seat.js +1 -2
- package/dist/observability/fail-open.d.ts +30 -10
- package/dist/observability/fail-open.js +27 -10
- package/dist/observability/run-terminal.d.ts +1 -1
- package/dist/observability/run-terminal.js +6 -2
- package/dist/orchestration/workflow-completion-inbox.d.ts +5 -19
- package/dist/orchestration/workflow-completion-inbox.js +0 -12
- package/dist/orchestration/workflow-notify-journal.d.ts +3 -2
- package/dist/orchestration/workflow-park-decision.d.ts +8 -3
- package/dist/orchestration/workflow-park-decision.js +5 -3
- package/dist/org-delivery-gate.d.ts +11 -0
- package/dist/org-delivery-gate.js +19 -1
- package/dist/parked-decide.d.ts +13 -9
- package/dist/parked-decide.js +7 -7
- package/dist/parked-revive-surface.d.ts +6 -7
- package/dist/parked-revive-surface.js +1 -1
- package/dist/peer-inbound-face.d.ts +122 -0
- package/dist/peer-inbound-face.js +123 -0
- package/dist/permission-rule-list.d.ts +13 -9
- package/dist/permission-rule-list.js +7 -3
- package/dist/plugins/approval-ask-store-file.js +18 -6
- package/dist/plugins/approval-ask-store-memory.js +8 -6
- package/dist/plugins/approval-ask-store-sql.d.ts +28 -13
- package/dist/plugins/approval-ask-store-sql.js +30 -11
- package/dist/plugins/caching-session-store.d.ts +0 -3
- package/dist/plugins/caching-session-store.js +0 -3
- package/dist/plugins/checkpoint-store-sql.d.ts +45 -38
- package/dist/plugins/checkpoint-store-sql.js +108 -45
- package/dist/plugins/file-history-store-sql.d.ts +24 -18
- package/dist/plugins/file-history-store-sql.js +24 -19
- package/dist/plugins/file-run-store.d.ts +29 -0
- package/dist/plugins/file-run-store.js +97 -8
- package/dist/plugins/fork-routing-session-store.d.ts +8 -1
- package/dist/plugins/fork-routing-session-store.js +6 -0
- package/dist/plugins/imported-layer-root-retirement.d.ts +82 -0
- package/dist/plugins/imported-layer-root-retirement.js +96 -0
- package/dist/plugins/local-checkpoint-store.d.ts +6 -8
- package/dist/plugins/local-checkpoint-store.js +5 -4
- package/dist/plugins/local-session-store.d.ts +69 -30
- package/dist/plugins/local-session-store.js +133 -57
- package/dist/plugins/local-session-window.d.ts +4 -2
- package/dist/plugins/mailbox-recipient-lifecycle.d.ts +9 -31
- package/dist/plugins/mailbox-recipient-lifecycle.js +4 -0
- package/dist/plugins/mailbox-store-sql.d.ts +12 -8
- package/dist/plugins/mailbox-store-sql.js +76 -7
- package/dist/plugins/memory-sync-store-pg.d.ts +15 -0
- package/dist/plugins/memory-sync-store-pg.js +21 -0
- package/dist/plugins/memory-sync-store-tidb.d.ts +2 -0
- package/dist/plugins/memory-sync-store-tidb.js +13 -1
- package/dist/plugins/one-time-migrations.d.ts +44 -14
- package/dist/plugins/one-time-migrations.js +118 -15
- package/dist/plugins/org-delivery-quota-store.d.ts +1 -1
- package/dist/plugins/org-delivery-quota-store.js +2 -12
- package/dist/plugins/park-commit-watch.d.ts +1 -1
- package/dist/plugins/permission-rule-store-file.d.ts +10 -1
- package/dist/plugins/permission-rule-store-file.js +15 -2
- package/dist/plugins/permission-rule-store-sql.d.ts +31 -1
- package/dist/plugins/permission-rule-store-sql.js +35 -2
- package/dist/plugins/pg-session-storage.d.ts +1 -9
- package/dist/plugins/pg-session-storage.js +2 -19
- package/dist/plugins/remote-env-device.d.ts +8 -11
- package/dist/plugins/remote-env-device.js +6 -3
- package/dist/plugins/remote-env-host.d.ts +8 -4
- package/dist/plugins/remote-env-host.js +7 -9
- package/dist/plugins/remote-env-k8s.d.ts +37 -24
- package/dist/plugins/remote-env-k8s.js +50 -17
- package/dist/plugins/remote-shell.js +12 -2
- package/dist/plugins/retention-store-sql.d.ts +2 -2
- package/dist/plugins/sandbox-read-floor.d.ts +5 -7
- package/dist/plugins/sandbox-read-floor.js +2 -7
- package/dist/plugins/schema-consistency.d.ts +5 -1
- package/dist/plugins/session-fork.d.ts +1 -1
- package/dist/plugins/session-ownership.d.ts +9 -0
- package/dist/plugins/session-ownership.js +6 -0
- package/dist/plugins/session-store.d.ts +13 -16
- package/dist/plugins/session-store.js +9 -10
- package/dist/plugins/sql-errors.d.ts +10 -1
- package/dist/plugins/sql-errors.js +13 -0
- package/dist/plugins/sql-json-column.d.ts +24 -2
- package/dist/plugins/sql-json-column.js +38 -3
- package/dist/plugins/store-backend.d.ts +23 -28
- package/dist/plugins/store-backend.js +12 -3
- package/dist/plugins/store-contracts.d.ts +29 -5
- package/dist/plugins/store-contracts.js +4 -1
- package/dist/plugins/task-attachment-store.d.ts +2 -2
- package/dist/plugins/task-attachment-store.js +37 -52
- package/dist/plugins/tidb-session-store.d.ts +2 -14
- package/dist/plugins/tidb-session-store.js +2 -20
- package/dist/plugins/tool-result-store-sql.d.ts +9 -8
- package/dist/plugins/tool-result-store-sql.js +23 -2
- package/dist/plugins/wiring-section-codec.d.ts +32 -0
- package/dist/plugins/wiring-section-codec.js +55 -0
- package/dist/plugins/workspace-fill.d.ts +1 -1
- package/dist/rule-entry-list.d.ts +3 -2
- package/dist/rule-entry-list.js +5 -1
- package/dist/rules-consent.d.ts +28 -5
- package/dist/rules-consent.js +40 -28
- package/dist/run-local.js +11 -6
- package/dist/runs.d.ts +12 -8
- package/dist/runs.js +10 -7
- package/dist/runtime-governance.d.ts +1 -1
- package/dist/security.d.ts +0 -4
- package/dist/server-secret-env.d.ts +4 -0
- package/dist/session-error-wire.d.ts +34 -23
- package/dist/session-error-wire.js +8 -3
- package/dist/session-incarnation.d.ts +3 -3
- package/dist/session-notify-door.d.ts +106 -0
- package/dist/session-notify-door.js +97 -0
- package/dist/session-sync.d.ts +9 -14
- package/dist/session-sync.js +5 -5
- package/dist/session-workspace.d.ts +3 -13
- package/dist/session-workspace.js +0 -9
- package/dist/standing-answer-grant.d.ts +5 -0
- package/dist/standing-answer-grant.js +10 -0
- package/dist/stores-sql/session-policy-store-sql.d.ts +4 -2
- package/dist/stores-sql/session-policy-store-sql.js +3 -13
- package/dist/task-mcp.d.ts +1 -1
- package/dist/task-settings.d.ts +11 -8
- package/dist/task-settings.js +31 -11
- package/dist/tool-approval.d.ts +55 -35
- package/dist/tool-approval.js +112 -74
- package/dist/trace/core-keyset-guard.d.ts +12 -9
- package/dist/trace/engine-notice-wire.d.ts +1 -1
- package/dist/trace/engine-notice-wire.js +4 -2
- package/dist/trace/exit-seat.d.ts +7 -1
- package/dist/trace/exit-seat.js +1 -0
- package/dist/trace/ledger-sink.d.ts +2 -2
- package/dist/trace/ledger-sink.js +12 -4
- package/dist/trace/model-segment.d.ts +74 -25
- package/dist/trace/model-segment.js +141 -32
- package/dist/trace/project.d.ts +15 -6
- package/dist/trace/project.js +12 -4
- package/dist/trace/redact.d.ts +72 -9
- package/dist/trace/redact.js +1509 -471
- package/dist/trace/self-minted-wire.d.ts +598 -47
- package/dist/trace/self-minted-wire.js +190 -20
- package/dist/trace/wire-projection-faces.d.ts +1 -1
- package/dist/trace/wire-projection-faces.js +1 -1
- package/dist/verifier-pause-card.d.ts +33 -5
- package/dist/verifier-pause-card.js +15 -10
- package/dist/web-admin-client/apply-effective.d.ts +12 -16
- package/dist/web-admin-client/apply-effective.js +90 -10
- package/dist/workspace-space.d.ts +19 -3
- package/dist/workspace-space.js +8 -4
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +3 -1
- package/package.json +3 -2
- package/wire-changes/server@7.143.0.json +1167 -0
- package/wire-changes/server@7.144.0.json +291 -0
- package/dist/session-records-skipped-notice.d.ts +0 -21
- package/dist/session-records-skipped-notice.js +0 -27
|
@@ -16,6 +16,12 @@ function isSettleOutcome(v) {
|
|
|
16
16
|
export function buildCheckpointAnchorHash(token) {
|
|
17
17
|
return createHash("sha256").update(token, "utf8").digest("hex").slice(0, 16);
|
|
18
18
|
}
|
|
19
|
+
function ledgerRecordToDisk(rec) {
|
|
20
|
+
if (rec.kind !== "ask")
|
|
21
|
+
return rec;
|
|
22
|
+
const { sourceSessionId, ...rest } = rec;
|
|
23
|
+
return { ...rest, ...(sourceSessionId !== undefined ? { sourceTaskId: sourceSessionId } : {}) };
|
|
24
|
+
}
|
|
19
25
|
function readSettleCause(v) {
|
|
20
26
|
if (v === undefined)
|
|
21
27
|
return { cause: undefined, outOfSet: false };
|
|
@@ -54,7 +60,7 @@ function readLedgerRecord(u, noteOutOfSetSeat) {
|
|
|
54
60
|
}
|
|
55
61
|
const toolCallId = s("toolCallId");
|
|
56
62
|
const sessionId = s("sessionId");
|
|
57
|
-
const
|
|
63
|
+
const sourceSessionId = s("sourceTaskId");
|
|
58
64
|
return {
|
|
59
65
|
kind: "ask",
|
|
60
66
|
approvalId,
|
|
@@ -66,7 +72,7 @@ function readLedgerRecord(u, noteOutOfSetSeat) {
|
|
|
66
72
|
owner,
|
|
67
73
|
...(toolCallId !== undefined ? { toolCallId } : {}),
|
|
68
74
|
...(sessionId !== undefined ? { sessionId } : {}),
|
|
69
|
-
...(
|
|
75
|
+
...(sourceSessionId !== undefined ? { sourceSessionId } : {}),
|
|
70
76
|
};
|
|
71
77
|
}
|
|
72
78
|
case "settle": {
|
|
@@ -378,7 +384,7 @@ export class FileApprovalAskAuditStore {
|
|
|
378
384
|
}
|
|
379
385
|
appendOrThrow(rec) {
|
|
380
386
|
this.log ??= this.openLog(this.ledgerPath);
|
|
381
|
-
this.log.append(rec, true);
|
|
387
|
+
this.log.append(ledgerRecordToDisk(rec), true);
|
|
382
388
|
}
|
|
383
389
|
static callAnchorKey(session, toolCallId) {
|
|
384
390
|
return `${session}\u0000${toolCallId}`;
|
|
@@ -388,8 +394,8 @@ export class FileApprovalAskAuditStore {
|
|
|
388
394
|
const sessions = new Set();
|
|
389
395
|
if (rec.sessionId !== undefined)
|
|
390
396
|
sessions.add(rec.sessionId);
|
|
391
|
-
if (rec.
|
|
392
|
-
sessions.add(rec.
|
|
397
|
+
if (rec.sourceSessionId !== undefined)
|
|
398
|
+
sessions.add(rec.sourceSessionId);
|
|
393
399
|
for (const session of sessions) {
|
|
394
400
|
const bucket = rec.toolCallId !== undefined ? this.askByCallAnchor : this.askBySessionOnly;
|
|
395
401
|
const key = rec.toolCallId !== undefined ? FileApprovalAskAuditStore.callAnchorKey(session, rec.toolCallId) : session;
|
|
@@ -550,7 +556,7 @@ export class FileApprovalAskAuditStore {
|
|
|
550
556
|
if (typeof id !== "string")
|
|
551
557
|
continue;
|
|
552
558
|
lastAt.set(id, Math.max(lastAt.get(id) ?? Number.NEGATIVE_INFINITY, atMsOf(rec)));
|
|
553
|
-
const cells = rec.kind === "ask" ? [rec.taskId, rec.sessionId, rec.
|
|
559
|
+
const cells = rec.kind === "ask" ? [rec.taskId, rec.sessionId, rec.sourceSessionId] : rec.kind === "late_settle" ? [rec.taskId, rec.sessionId] : [];
|
|
554
560
|
const list = anchorsOf.get(id) ?? [];
|
|
555
561
|
for (const c of cells)
|
|
556
562
|
if (c !== undefined)
|
|
@@ -34,17 +34,25 @@ export declare function noteRecordedReceipt(requestNote: string | undefined, lan
|
|
|
34
34
|
export declare function canAskTransition(from: AskState, to: AskState): boolean;
|
|
35
35
|
/** 批转移合法性,同形。 */
|
|
36
36
|
export declare function canBatchTransition(from: BatchState, to: BatchState): boolean;
|
|
37
|
-
/**
|
|
38
|
-
|
|
37
|
+
/**
|
|
38
|
+
* `AskRequest.boundInputHash` 的**边界窄读**(唯一一只):ask 身份第四轴的入参那一半与行上 `bound_input_hash` 列(收敛器判据 1 的对账键)读的都是它。
|
|
39
|
+
* core 在闸站铸值(`onAsk({ ...bare, boundInputHash: boundInputHashOf(presented.value), … })`,core 5.15.0 起每一只经 `resolveAsk` 的问都带);
|
|
40
|
+
* `boundInputHashOf` 不在 core 的公开导出面上(包 `exports` 只有 `.` / `./bench` / `./fixtures`),本服务既算不出也不该算 —— 只原样读。
|
|
41
|
+
* 非字符串 / 空串一律按缺席:一个形不对的摘要比没有摘要更危险(它会让「硬相等」这道门在一个垃圾值上偶然成立)。
|
|
42
|
+
* 钉:`test/stream-approval-on-e2e.test.ts` 件4(正控 / 缺席 / 空串三臂)。
|
|
43
|
+
*/
|
|
44
|
+
export declare function readBoundInputHash(req: unknown): string | null;
|
|
45
|
+
/** 一只 ask 的请求侧身份素材 = core `AskRequest` 上的五格(型从 core 派生,不手抄;整只 `AskRequest` 可直接交;`toolName` 必填 ⇒ 漏带是编译错)。 */
|
|
46
|
+
export type AskIdentityRequest = Pick<AskRequest, "toolName" | "toolCallId" | "classes" | "boundInputHash"> & {
|
|
39
47
|
readonly delegation?: Pick<NonNullable<AskRequest["delegation"]>, "parentToolCallId">;
|
|
40
48
|
};
|
|
41
|
-
/** ask_id = sha256('ask' ⊕
|
|
49
|
+
/** ask_id = sha256('ask' ⊕ sourceSessionId ⊕ runId ⊕ toolCallId ⊕ legKey ⊕ parentToolCallId ⊕ 类集规范形 ⊕ 工具名 ⊕ 展示入参摘要).slice(0,64)。
|
|
42
50
|
* 确定性:同参数元组(含重试/failover/闭包再入)永远派生同一个 id——这是 ensureAsk 幂等 upsert 成立的前提;
|
|
43
|
-
* 同调用不同类集 ⇒ 不同 id([ref])。 */
|
|
44
|
-
export declare function deriveAskId(
|
|
45
|
-
/** batch_id = sha256('batch' ⊕
|
|
51
|
+
* 同调用不同类集 ⇒ 不同 id([ref]);同调用不同的展示动作(工具名或入参摘要)⇒ 不同 id(7.143.0)。 */
|
|
52
|
+
export declare function deriveAskId(sourceSessionId: string, runId: string, legKey: string, request: AskIdentityRequest): string;
|
|
53
|
+
/** batch_id = sha256('batch' ⊕ sourceSessionId ⊕ runId ⊕ legKey).slice(0,64)。同一 (sourceSessionId, runId,
|
|
46
54
|
* legKey) 恒派生同一批——批 = 同一决策点的兄弟 ask 集合,故不掺 toolCallId。 */
|
|
47
|
-
export declare function deriveBatchId(
|
|
55
|
+
export declare function deriveBatchId(sourceSessionId: string, runId: string, legKey: string): string;
|
|
48
56
|
/**
|
|
49
57
|
* 🔴 [ref] codex R1-F1:**单 ask 批** —— batch_id = sha256('ask-batch' ⊕ askId).slice(0,64)。
|
|
50
58
|
*
|
|
@@ -36,11 +36,17 @@ function deterministicId(prefix, parts) {
|
|
|
36
36
|
function askClassSetKey(classes) {
|
|
37
37
|
return classes === undefined ? "" : [...new Set(classes)].sort().join(ID_SEPARATOR);
|
|
38
38
|
}
|
|
39
|
-
export function
|
|
40
|
-
|
|
39
|
+
export function readBoundInputHash(req) {
|
|
40
|
+
if (req === null || typeof req !== "object")
|
|
41
|
+
return null;
|
|
42
|
+
const v = Reflect.get(req, "boundInputHash");
|
|
43
|
+
return typeof v === "string" && v.length > 0 ? v : null;
|
|
41
44
|
}
|
|
42
|
-
export function
|
|
43
|
-
return deterministicId("
|
|
45
|
+
export function deriveAskId(sourceSessionId, runId, legKey, request) {
|
|
46
|
+
return deterministicId("ask", [sourceSessionId, runId, request.toolCallId, legKey, request.delegation?.parentToolCallId, askClassSetKey(request.classes), request.toolName, readBoundInputHash(request) ?? ""]);
|
|
47
|
+
}
|
|
48
|
+
export function deriveBatchId(sourceSessionId, runId, legKey) {
|
|
49
|
+
return deterministicId("batch", [sourceSessionId, runId, legKey]);
|
|
44
50
|
}
|
|
45
51
|
export function deriveAskScopedBatchId(askId) {
|
|
46
52
|
return deterministicId("ask-batch", [askId]);
|
package/dist/approval-card.d.ts
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* 没有方法、没有捕获的行为。
|
|
22
22
|
*/
|
|
23
23
|
import { z } from "zod";
|
|
24
|
-
import { ALLOW_RULE_MEMBERS, READ_ROOT_CANDIDATE_DIR_MAX, type AskClass, type AskEvidenceAbsence, type CheckpointSummary as CoreCheckpointSummary, type PendingAction as CorePendingAction, type ReadRootGrantCandidate, type ResumeStartupCause, type RuleOffer, type RuleOffersAbsence as CoreRuleOffersAbsence, type SteerReplayFacet, type ToolApprovalCard } from "@sema-agent/core";
|
|
24
|
+
import { ALLOW_RULE_MEMBERS, READ_ROOT_CANDIDATE_DIR_MAX, type AskClass, type AskEvidenceAbsence, type AskReason as CoreAskReason, type HookQuestionCause, type CheckpointSummary as CoreCheckpointSummary, type PendingAction as CorePendingAction, type ReadRootGrantCandidate, type ResumeStartupCause, type RuleOffer, type RuleOffersAbsence as CoreRuleOffersAbsence, type SteerReplayFacet, type ToolApprovalCard } from "@sema-agent/core";
|
|
25
25
|
import type { AskRow } from "./plugins/approval-ask-store-sql.js";
|
|
26
26
|
import type { SettleCause, SettleOutcome } from "./approval-deny-reasons.js";
|
|
27
27
|
import type { ToolApprovalFrame } from "./tool-approval.js";
|
|
@@ -86,8 +86,8 @@ export declare const RuleOfferSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
86
86
|
host: "host";
|
|
87
87
|
name: "name";
|
|
88
88
|
path: "path";
|
|
89
|
-
pattern: "pattern";
|
|
90
89
|
tool: "tool";
|
|
90
|
+
pattern: "pattern";
|
|
91
91
|
exact: "exact";
|
|
92
92
|
prefix: "prefix";
|
|
93
93
|
wildcard: "wildcard";
|
|
@@ -105,8 +105,8 @@ export declare const RuleOfferSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
105
105
|
host: "host";
|
|
106
106
|
name: "name";
|
|
107
107
|
path: "path";
|
|
108
|
-
pattern: "pattern";
|
|
109
108
|
tool: "tool";
|
|
109
|
+
pattern: "pattern";
|
|
110
110
|
exact: "exact";
|
|
111
111
|
prefix: "prefix";
|
|
112
112
|
wildcard: "wildcard";
|
|
@@ -210,8 +210,8 @@ export declare function readProbeCause(req: unknown): ProbeCauseProjection | und
|
|
|
210
210
|
* `AskRequest.probeReason`(core 5.33.0 [ref]:`probeCause` 的**散文**兄弟 —— 探针对「为什么没清掉这一问」的一句话)的
|
|
211
211
|
* **边界窄读**,活卡帧(`ToolApprovalFrame.probeReason`)的**唯一**铸造点。
|
|
212
212
|
*
|
|
213
|
-
* 🔴
|
|
214
|
-
*
|
|
213
|
+
* 🔴 **不在卡上**:`ApprovalCardSchema`(`.strict()`)没有本键;呈卡帧 `approval_request` 顶层带它(活面事实座之一,{@link APPROVAL_REQUEST_LIVE_FACT_KEYS}),
|
|
214
|
+
* 7.143.0 起同一份值随卡落进卡信封的 `liveFacts` 座 ⇒ 断连重放帧与活铸帧同值({@link buildApprovalCardEnvelope})。耐久面的对偶 = `gate.riskDescriptor.probeReason`(park 行整体透传,出门前过 `redactRiskDescriptor` 的 `text` 叶,
|
|
215
215
|
* 与本函数同一只脱敏规则 ⇒ 对同一句话两面同值)。
|
|
216
216
|
*
|
|
217
217
|
* 姿势逐条(与 {@link readProbeCause} / {@link readRuleEvidence} 同款分工):
|
|
@@ -431,6 +431,27 @@ export interface AskClassPair {
|
|
|
431
431
|
askClass: NonNullable<ToolApprovalPark["askClass"]>;
|
|
432
432
|
classes: Array<NonNullable<ToolApprovalPark["classes"]>[number]>;
|
|
433
433
|
}
|
|
434
|
+
/**
|
|
435
|
+
* **谁问的、为什么问 —— `askReasons` 的唯一窄读**(core 7.61.0:一只座,`AskRequest.askReasons` 与寄存行 `PendingAction.tool_approval.askReasons`
|
|
436
|
+
* 是同一个值、一次铸)。一条 = 一位问者 + 它自己的话:策略链的问 `{ by, words }`(`by` = 引擎出身闭集 `ASK_ORIGINS` 除 `hook`),
|
|
437
|
+
* hook / 扩展的问 `{ by: "hook", registration?, cause, words? }`(`cause` = `HOOK_QUESTION_CAUSES`)。结构化审批面按它渲理由行,不渲 `message`
|
|
438
|
+
* (`message` 照旧逐字转给只读文本的消费方)。活卡帧、呈卡帧的卡、运维队列行三面读这一只。
|
|
439
|
+
* · 缺席 ⇒ 缺席(不计数):老引擎、老行、引擎自己铸的通用问句(写门默认问句 / 计划模式两句不铸条目)。
|
|
440
|
+
* · 在场 ⇒ 每条逐键窄读:`by` 在集、hook 条的 `cause` 在集、`words` / `registration` 是串;问者的话(部署策略 / hook / 扩展写的自由文本)过
|
|
441
|
+
* `redactSecrets` 再截长(与卡上 `message` 同一只帽),注册名截到标识帽。任一条形不合 ⇒ **整座不投**(卡上少一行理由 ≪ 卡上出现半条理由)
|
|
442
|
+
* + 计一次 `server.approval-card.closed-word-out-of-set`(detail 前缀 `askReasons=`)。
|
|
443
|
+
*/
|
|
444
|
+
export declare function readAskReasons(carrier: unknown): AskReasonProjection[] | undefined;
|
|
445
|
+
/** 一条理由的投影形(帧 / 卡 / 队列行同一形)。值型取 core 的 `AskReason`(core 改形 ⇒ 下面的围栏编译红,读法就得重判)。 */
|
|
446
|
+
export type AskReasonProjection = {
|
|
447
|
+
by: "hook";
|
|
448
|
+
registration?: string;
|
|
449
|
+
cause: HookQuestionCause;
|
|
450
|
+
words?: string;
|
|
451
|
+
} | {
|
|
452
|
+
by: Exclude<CoreAskReason["by"], "hook">;
|
|
453
|
+
words: string;
|
|
454
|
+
};
|
|
434
455
|
/**
|
|
435
456
|
* 🔴 [ref] P1(client-core [ref] / cli [ref] 的根子;板 [ref] 订正 → [ref] 立案)—— **park 行事实**:
|
|
436
457
|
* 运维队列行(`GET /v1/approvals` + `/stream`)顶层展开的那几位。型**从 core 寄存行派生,不手抄**([ref] 同一条
|
|
@@ -456,7 +477,7 @@ export interface AskClassPair {
|
|
|
456
477
|
* (「本会话放行」可按工具记)。摘要读自停驻行本身 —— 不靠整行的检查点摘要,所以 SQL 腿那一次整行读失败也不丢这一臂;要 core 校验的清单与成因词走
|
|
457
478
|
* 另一只投影 {@link skillCardFacts}。
|
|
458
479
|
*/
|
|
459
|
-
export type ParkRowFacts = Pick<ToolApprovalPark, "requiresRealApproval" | "ruleOffersAbsence" | "mandated" | "mandate" | "origin" | "askClass" | "classes" | "boundGrantDigest" | "boundGrantAbsence">;
|
|
480
|
+
export type ParkRowFacts = Pick<ToolApprovalPark, "requiresRealApproval" | "ruleOffersAbsence" | "mandated" | "mandate" | "origin" | "askClass" | "classes" | "boundGrantDigest" | "boundGrantAbsence" | "askReasons">;
|
|
460
481
|
/**
|
|
461
482
|
* [ref] —— park 行事实的**唯一投影**(`pendingAction` 是寄存行上 core 铸的那一只,读自持久层 ⇒ `unknown`)。
|
|
462
483
|
*
|
|
@@ -496,24 +517,18 @@ export declare function parkRowFacts(stored: unknown): ParkRowFacts;
|
|
|
496
517
|
* (「never a list beside a digest that binds another」—— 一份与摘要对不上的清单会让批准人看着一份清单、批的却是另一份绑定);成因词只在闭集成员时回显。
|
|
497
518
|
* 本仓**不重算哈希**(core 的 `boundInputHashOf` 不在公开导出面上,清单校验读口 `readBoundBinding` 同样不导出),所以**不许**拿寄存行 `pendingAction` 上的原清单直接投 ——
|
|
498
519
|
* 原值上的清单是未经哈希校验的(这正是它此前不上队列行的原因,见 `trace/core-keyset-guard.ts` ⑧b 记账的旧注)。两只店各自拿到「这一行的摘要」的办法不同
|
|
499
|
-
* (LOCAL 孪生本来就握着 core 对同一行投的摘要;SQL
|
|
520
|
+
* (LOCAL 孪生本来就握着 core 对同一行投的摘要;SQL 孪生在判官要的那一次整行读里调 core 的 `summarizeCheckpoint` —— 两位与 `rowVerdict` 同一次读、
|
|
521
|
+
* 同一份按字节摘要的记忆,见 `plugins/checkpoint-store-sql.ts` 的 `storedRowProjections`),
|
|
500
522
|
* 但投影只有这一只:OMIT 契约 —— 缺席即缺席,恒不铸 `undefined` 值的键。
|
|
501
523
|
*
|
|
502
524
|
* `boundGrants` 是**部署文本**(技能名、清单条目):本函数不脱敏、不转义,与收件箱行逐字同口径 —— 渲染按上下文转义是客户端的事(契约同句)。
|
|
503
|
-
*
|
|
525
|
+
* 本投影的产物不进 `card_json`(它是停驻面的投影);问行卡信封的活面事实座(7.143.0)存的是呈卡帧上同名两位(活铸素材,与停驻孪生同一只工厂铸)。
|
|
504
526
|
*
|
|
505
|
-
* 🚧 清单校验读口 `readBoundBinding` 若成为 core
|
|
506
|
-
*
|
|
527
|
+
* 🚧 清单校验读口 `readBoundBinding` 若成为 core 的公开导出:`grantBindingOf` 改成它的薄包装(那时 core 是绑定读法的唯一属主)。SQL 孪生的整行读不随之退役 ——
|
|
528
|
+
* 7.144.0 起它首先是判官 `judgeCheckpointRow` 要的([ref]:判官读要求表要整行),两位随它同一次读、同一份记忆,不另开读法。
|
|
507
529
|
*/
|
|
508
530
|
export type SkillCardFacts = Pick<CoreCheckpointSummary, "boundGrants" | "classifierNoRuling">;
|
|
509
531
|
export declare function skillCardFacts(summary: SkillCardFacts): SkillCardFacts;
|
|
510
|
-
/**
|
|
511
|
-
* 这一行的寄存行(`pendingAction`,读自持久层 ⇒ `unknown`)**有没有可能**让 core 的摘要投出两位里的任何一位 —— 只回答「值不值得为它取一次摘要」,**不投值**:
|
|
512
|
-
* `tool_approval` 臂上摘要字段是串(core 只在这时回显清单),或成因词键在场(是不是闭集成员由 core 的摘要判)。判错的方向只有一个 —— 多取一次摘要(摘要读数为空),
|
|
513
|
-
* 绝不漏取:摘要字段不是串 ⇒ core 的摘要没有清单;成因词键不在 ⇒ 无成因词 —— 两者都不满足的行,摘要里这两位恒空。普通卡(绝大多数行)因此零额外读。
|
|
514
|
-
* 只读键在不在 / 是不是串,不读值的内容,所以不需要 {@link readClosedWordSeat} 那样的计数。
|
|
515
|
-
*/
|
|
516
|
-
export declare function parkRowCarriesSkillCardFacts(stored: unknown): boolean;
|
|
517
532
|
/** [ref](core 7.4.0 [ref])—— 回落卡的计数与窗。`limit` 是**闭二词**(core d.ts 逐字),两个计数是
|
|
518
533
|
* 非负整数,`autoDenyAfterMs` 是 core 契约里的 `0..2147483647` 非负整数(`0` = 本卡不武装窗:部署把
|
|
519
534
|
* 旋钮关了,或 TOTAL 档的卡按 [ref]① 恒 0 等人)。四成员**全必填**——core 的 `DenialLimitFallback` 上
|
|
@@ -578,6 +593,8 @@ export declare const ApprovalCardSchema: z.ZodObject<{
|
|
|
578
593
|
fetch: "fetch";
|
|
579
594
|
workflow: "workflow";
|
|
580
595
|
generic: "generic";
|
|
596
|
+
"computer-access": "computer-access";
|
|
597
|
+
"computer-control": "computer-control";
|
|
581
598
|
}>>;
|
|
582
599
|
inputHasBidi: z.ZodOptional<z.ZodLiteral<true>>;
|
|
583
600
|
allowRuleShadowed: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -598,8 +615,8 @@ export declare const ApprovalCardSchema: z.ZodObject<{
|
|
|
598
615
|
host: "host";
|
|
599
616
|
name: "name";
|
|
600
617
|
path: "path";
|
|
601
|
-
pattern: "pattern";
|
|
602
618
|
tool: "tool";
|
|
619
|
+
pattern: "pattern";
|
|
603
620
|
exact: "exact";
|
|
604
621
|
prefix: "prefix";
|
|
605
622
|
wildcard: "wildcard";
|
|
@@ -617,8 +634,8 @@ export declare const ApprovalCardSchema: z.ZodObject<{
|
|
|
617
634
|
host: "host";
|
|
618
635
|
name: "name";
|
|
619
636
|
path: "path";
|
|
620
|
-
pattern: "pattern";
|
|
621
637
|
tool: "tool";
|
|
638
|
+
pattern: "pattern";
|
|
622
639
|
exact: "exact";
|
|
623
640
|
prefix: "prefix";
|
|
624
641
|
wildcard: "wildcard";
|
|
@@ -687,8 +704,22 @@ export declare const ApprovalCardSchema: z.ZodObject<{
|
|
|
687
704
|
askClass: z.ZodOptional<z.ZodCustom<"mode" | "hook" | "org_rule" | "write_protection" | "target_unresolved" | "content_question" | "ask_rule" | "denial_limit_fallback" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "probe" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary", "mode" | "hook" | "org_rule" | "write_protection" | "target_unresolved" | "content_question" | "ask_rule" | "denial_limit_fallback" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "probe" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary">>;
|
|
688
705
|
classes: z.ZodOptional<z.ZodArray<z.ZodCustom<"mode" | "hook" | "org_rule" | "write_protection" | "target_unresolved" | "content_question" | "ask_rule" | "denial_limit_fallback" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "probe" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary", "mode" | "hook" | "org_rule" | "write_protection" | "target_unresolved" | "content_question" | "ask_rule" | "denial_limit_fallback" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "probe" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary">>>;
|
|
689
706
|
fromSubagent: z.ZodOptional<z.ZodLiteral<true>>;
|
|
690
|
-
|
|
707
|
+
sourceSessionId: z.ZodOptional<z.ZodString>;
|
|
708
|
+
agentId: z.ZodOptional<z.ZodString>;
|
|
691
709
|
sourceAgentName: z.ZodOptional<z.ZodString>;
|
|
710
|
+
askReasons: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
711
|
+
by: z.ZodLiteral<"hook">;
|
|
712
|
+
registration: z.ZodOptional<z.ZodString>;
|
|
713
|
+
cause: z.ZodEnum<{
|
|
714
|
+
asked: "asked";
|
|
715
|
+
verdict_unreadable: "verdict_unreadable";
|
|
716
|
+
verdict_unfinished: "verdict_unfinished";
|
|
717
|
+
}>;
|
|
718
|
+
words: z.ZodOptional<z.ZodString>;
|
|
719
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
720
|
+
by: z.ZodCustom<"org_rule" | "org_unavailable" | "content_question" | "plan_review" | "ancestor_marked" | "rule_store_unavailable" | "ask_rule" | "denial_limit_fallback" | "shell_gate_tighten" | "safety_tighten" | "policy", "org_rule" | "org_unavailable" | "content_question" | "plan_review" | "ancestor_marked" | "rule_store_unavailable" | "ask_rule" | "denial_limit_fallback" | "shell_gate_tighten" | "safety_tighten" | "policy">;
|
|
721
|
+
words: z.ZodString;
|
|
722
|
+
}, z.core.$strict>]>>>;
|
|
692
723
|
delegation: z.ZodOptional<z.ZodObject<{
|
|
693
724
|
parentToolCallId: z.ZodString;
|
|
694
725
|
depth: z.ZodNumber;
|
|
@@ -704,6 +735,14 @@ export type ApprovalCard = z.infer<typeof ApprovalCardSchema>;
|
|
|
704
735
|
* 应答口 / 读口)一律读行的键、不读这一格;写它是给滚动升级窗里上一版的副本(它们的 strict 信封 schema 要求这一格并照它重放)。
|
|
705
736
|
* 唯一读这一格的是 local 车道的启动收敛 —— 拿它去审计账里查前世这只 ask 的成因:审计行记的就是当时呈出的那个 id
|
|
706
737
|
* (更早写下的行上是当年的登记本地 id)。
|
|
738
|
+
*
|
|
739
|
+
* `liveFacts`(7.143.0)= 这只 ask 的**活面事实座**({@link APPROVAL_REQUEST_LIVE_FACT_KEYS}:卡外、只在呈卡帧顶层的那十一位),铸卡时与 `card` **同一条写**落下,
|
|
740
|
+
* 值就是活铸呈卡帧顶层那一份(同一只挑键函数从同一只帧对象挑,见 {@link buildApprovalCardEnvelope})。重放帧只读这一座 —— 不读停驻行孪生座、不重算、不从内存兜。
|
|
741
|
+
* 信封这一层只认「这一格在不在」(`unknown`);它的形由唯一读者 {@link readStoredCardEnvelope} 用 {@link ApprovalRequestLiveFactsSchema} 整座判:读不出 ⇒ 与这一格缺席
|
|
742
|
+
* (本版之前铸的行)同读 —— 「活面事实不在行上」,卡照常可读、重放帧带 `liveFactsUnknown`。信封层不判它的形,是为了一座读不出的事实不连带把卡也读丢
|
|
743
|
+
* (卡读丢 ⇒ 重放跳过 / 幂等重入走 park,比「不知道事实」的那一形更坏)。
|
|
744
|
+
* 回滚窗代价与卡上的 additive 键同族:`.strict()` 下上一版二进制读不动带这一格的新行 ⇒ 重放跳过 + 幂等重入走 park(fail-safe,`schemaVersion` 不动);
|
|
745
|
+
* 区别是这一格**每一行都带**(空座也写),所以混版窗里上一版副本读不动的是本版写下的每一行 —— 整队滚前,见 CHANGELOG 本条。
|
|
707
746
|
*/
|
|
708
747
|
export declare const ApprovalCardEnvelopeSchema: z.ZodObject<{
|
|
709
748
|
schemaVersion: z.ZodLiteral<1>;
|
|
@@ -732,6 +771,8 @@ export declare const ApprovalCardEnvelopeSchema: z.ZodObject<{
|
|
|
732
771
|
fetch: "fetch";
|
|
733
772
|
workflow: "workflow";
|
|
734
773
|
generic: "generic";
|
|
774
|
+
"computer-access": "computer-access";
|
|
775
|
+
"computer-control": "computer-control";
|
|
735
776
|
}>>;
|
|
736
777
|
inputHasBidi: z.ZodOptional<z.ZodLiteral<true>>;
|
|
737
778
|
allowRuleShadowed: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -752,8 +793,8 @@ export declare const ApprovalCardEnvelopeSchema: z.ZodObject<{
|
|
|
752
793
|
host: "host";
|
|
753
794
|
name: "name";
|
|
754
795
|
path: "path";
|
|
755
|
-
pattern: "pattern";
|
|
756
796
|
tool: "tool";
|
|
797
|
+
pattern: "pattern";
|
|
757
798
|
exact: "exact";
|
|
758
799
|
prefix: "prefix";
|
|
759
800
|
wildcard: "wildcard";
|
|
@@ -771,8 +812,8 @@ export declare const ApprovalCardEnvelopeSchema: z.ZodObject<{
|
|
|
771
812
|
host: "host";
|
|
772
813
|
name: "name";
|
|
773
814
|
path: "path";
|
|
774
|
-
pattern: "pattern";
|
|
775
815
|
tool: "tool";
|
|
816
|
+
pattern: "pattern";
|
|
776
817
|
exact: "exact";
|
|
777
818
|
prefix: "prefix";
|
|
778
819
|
wildcard: "wildcard";
|
|
@@ -841,14 +882,29 @@ export declare const ApprovalCardEnvelopeSchema: z.ZodObject<{
|
|
|
841
882
|
askClass: z.ZodOptional<z.ZodCustom<"mode" | "hook" | "org_rule" | "write_protection" | "target_unresolved" | "content_question" | "ask_rule" | "denial_limit_fallback" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "probe" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary", "mode" | "hook" | "org_rule" | "write_protection" | "target_unresolved" | "content_question" | "ask_rule" | "denial_limit_fallback" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "probe" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary">>;
|
|
842
883
|
classes: z.ZodOptional<z.ZodArray<z.ZodCustom<"mode" | "hook" | "org_rule" | "write_protection" | "target_unresolved" | "content_question" | "ask_rule" | "denial_limit_fallback" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "probe" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary", "mode" | "hook" | "org_rule" | "write_protection" | "target_unresolved" | "content_question" | "ask_rule" | "denial_limit_fallback" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "probe" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary">>>;
|
|
843
884
|
fromSubagent: z.ZodOptional<z.ZodLiteral<true>>;
|
|
844
|
-
|
|
885
|
+
sourceSessionId: z.ZodOptional<z.ZodString>;
|
|
886
|
+
agentId: z.ZodOptional<z.ZodString>;
|
|
845
887
|
sourceAgentName: z.ZodOptional<z.ZodString>;
|
|
888
|
+
askReasons: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
889
|
+
by: z.ZodLiteral<"hook">;
|
|
890
|
+
registration: z.ZodOptional<z.ZodString>;
|
|
891
|
+
cause: z.ZodEnum<{
|
|
892
|
+
asked: "asked";
|
|
893
|
+
verdict_unreadable: "verdict_unreadable";
|
|
894
|
+
verdict_unfinished: "verdict_unfinished";
|
|
895
|
+
}>;
|
|
896
|
+
words: z.ZodOptional<z.ZodString>;
|
|
897
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
898
|
+
by: z.ZodCustom<"org_rule" | "org_unavailable" | "content_question" | "plan_review" | "ancestor_marked" | "rule_store_unavailable" | "ask_rule" | "denial_limit_fallback" | "shell_gate_tighten" | "safety_tighten" | "policy", "org_rule" | "org_unavailable" | "content_question" | "plan_review" | "ancestor_marked" | "rule_store_unavailable" | "ask_rule" | "denial_limit_fallback" | "shell_gate_tighten" | "safety_tighten" | "policy">;
|
|
899
|
+
words: z.ZodString;
|
|
900
|
+
}, z.core.$strict>]>>>;
|
|
846
901
|
delegation: z.ZodOptional<z.ZodObject<{
|
|
847
902
|
parentToolCallId: z.ZodString;
|
|
848
903
|
depth: z.ZodNumber;
|
|
849
904
|
agentName: z.ZodOptional<z.ZodString>;
|
|
850
905
|
}, z.core.$strip>>;
|
|
851
906
|
}, z.core.$strict>;
|
|
907
|
+
liveFacts: z.ZodOptional<z.ZodUnknown>;
|
|
852
908
|
}, z.core.$strict>;
|
|
853
909
|
export type ApprovalCardEnvelope = z.infer<typeof ApprovalCardEnvelopeSchema>;
|
|
854
910
|
/** 本车铸的信封形版本(写侧=刀 3b,读侧=本文件)。 */
|
|
@@ -892,7 +948,9 @@ export interface ApprovalCardSource {
|
|
|
892
948
|
askClass?: AskClass;
|
|
893
949
|
classes?: readonly AskClass[];
|
|
894
950
|
fromSubagent?: true;
|
|
895
|
-
|
|
951
|
+
sourceSessionId?: string;
|
|
952
|
+
/** core 7.61.0:委派腿的 agent id(见 `ApprovalCardSchema.agentId`)。 */
|
|
953
|
+
agentId?: string;
|
|
896
954
|
/** 已 redactSecrets。 */
|
|
897
955
|
sourceAgentName?: string;
|
|
898
956
|
delegation?: {
|
|
@@ -912,8 +970,22 @@ export interface ApprovalCardSource {
|
|
|
912
970
|
* 头注。)
|
|
913
971
|
*/
|
|
914
972
|
export declare function buildApprovalCard(source: ApprovalCardSource, req: unknown, requiresRealApproval: boolean): ApprovalCard;
|
|
915
|
-
/**
|
|
916
|
-
|
|
973
|
+
/**
|
|
974
|
+
* 落库信封的纯构造(写侧;读侧 = {@link readStoredCardEnvelope},**同一个 schema**)。`liveFacts` = 活铸呈卡帧顶层的那一份活面事实(调用点交的是**同一只帧对象**,
|
|
975
|
+
* 经与活铸帧同一只挑键函数 {@link pickApprovalRequestLiveFacts} 落座:只拷在场的位、缺席不铸 `undefined` 键)。座恒写 —— 一位事实都没有的问写空座 `{}`,
|
|
976
|
+
* 于是「行上有座」与「本版之前铸的行」在读侧是两形(后者读作「不知道」)。
|
|
977
|
+
* 🔴 唯一不落座的一形:这组事实里有 NUL / 孤代理(判官 `pgHasUnstorable`)。PG 问店的 `card_json` 走有损臂(那两类码点换成 U+FFFD,
|
|
978
|
+
* `plugins/pg-safe-json.ts`),落下去的就不是逐字的那一份 —— 而座是「与活铸帧逐字同」的记录(读根目录要原样回传)。这样的一组不落座,
|
|
979
|
+
* 行读作「不知道」(重放帧带 `liveFactsUnknown`),每只店同判;绝不落一份会被某个后端改写的「同值」。卡本身照旧(卡是展示投影,有损臂是它的既有读法)。
|
|
980
|
+
*/
|
|
981
|
+
export declare function buildApprovalCardEnvelope(approvalId: string, card: ApprovalCard, liveFacts: ApprovalRequestLiveFacts): ApprovalCardEnvelope;
|
|
982
|
+
/**
|
|
983
|
+
* 存下的卡的**读数**({@link readStoredCardEnvelope} 的产出):卡与身份照信封;`liveFacts` = 行上那一座读得出时的活面事实,**缺席 = 不知道**
|
|
984
|
+
* (这一行是本版之前铸的,或那一座读不出 —— 两形同读,见 {@link ApprovalCardEnvelopeSchema} 的 `liveFacts` 注)。
|
|
985
|
+
*/
|
|
986
|
+
export type StoredApprovalCard = Omit<ApprovalCardEnvelope, "liveFacts"> & {
|
|
987
|
+
liveFacts?: ApprovalRequestLiveFacts;
|
|
988
|
+
};
|
|
917
989
|
/**
|
|
918
990
|
* 🔴 **存下的卡的唯一读者入口**([ref])—— `approval_ask.card_json` 的每一个读点(断连重放 {@link buildReplayFrame}、回决口的「要不要人」
|
|
919
991
|
* {@link storedCardDemandsAPerson}、幂等重入与规则兑付两处(`tool-approval.ts`)、local 车道的启动收敛(`approval-crash-convergence.ts`))都经这一只,
|
|
@@ -924,8 +996,10 @@ export declare function buildApprovalCardEnvelope(approvalId: string, card: Appr
|
|
|
924
996
|
* (`retired-card-words.ts`),**响亮**:每改写一次计一次 `server.approval-card.retired-card-word-read`(计数 + probe + 一次 warn,detail 只报座名)。
|
|
925
997
|
* 窗关(登记表 M18)后读侧半场随起服改写一起删,本函数回到「只 `safeParse`」。读不出(真坏形)⇒ `undefined`,各读点的处置不变(跳过 + warn / park /
|
|
926
998
|
* 按要人 / 素材缺席 / 收敛成因按缺省)。
|
|
999
|
+
* 7.143.0 起信封上的活面事实座也只在这里读(整座过 {@link ApprovalRequestLiveFactsSchema}):读得出 ⇒ 读数带 `liveFacts`;缺席或读不出 ⇒ 不带(= 不知道),卡照读。
|
|
1000
|
+
* 同一入口还有一次性迁移 M37 的读侧({@link renameRetiredSourceKey}):本版之前铸的卡上的委派出处旧键先改名,再过 M18 与 schema。
|
|
927
1001
|
*/
|
|
928
|
-
export declare function readStoredCardEnvelope(cardJson: unknown):
|
|
1002
|
+
export declare function readStoredCardEnvelope(cardJson: unknown): StoredApprovalCard | undefined;
|
|
929
1003
|
/**
|
|
930
1004
|
* 🔴 **停驻行 `tool_approval` 臂的读侧入口**([ref];一次性迁移 M18 的读侧半场)—— 读它两座的两个读者(运维队列行 {@link parkRowFacts}、
|
|
931
1005
|
* 耐久 `/decide` 的 remember 判据 `tool-approval.ts` `parkRowStandingAnswerFacts`)先经这一只:7.50.x 停驻的行上两座的退役词按 M18 那一只改写读,
|
|
@@ -935,8 +1009,9 @@ export declare function readStoredCardEnvelope(cardJson: unknown): ApprovalCardE
|
|
|
935
1009
|
*/
|
|
936
1010
|
export declare function currentParkArm<T>(pendingAction: T): T;
|
|
937
1011
|
/**
|
|
938
|
-
* [ref] §3.1 的呈卡帧(设计稿 §4.1)——
|
|
939
|
-
*
|
|
1012
|
+
* [ref] §3.1 的呈卡帧(设计稿 §4.1)—— **唯一构造**:活铸(`tool-approval.ts` 的 `askBroadcast`)与重放({@link buildReplayFrame})投的是同一种帧、
|
|
1013
|
+
* 经同一只函数,区别只在素材的来源:活铸的卡与活面事实是刚铸的那一份,重放的是行上卡信封回读的那一份(同一次写落下的)。
|
|
1014
|
+
* `live` 缺席 ⇒ 帧带 `liveFactsUnknown: true`、不带任何一位活面事实 —— 只有重放会交缺席(行上没有那一座 / 读不出);活铸恒交帧对象。
|
|
940
1015
|
*
|
|
941
1016
|
* `expiresAtMs` **入参**而不是在这里现算:同一只 ask 的窗**只铸一次**(§3.1「永不赋新 deadline」),
|
|
942
1017
|
* 调用点已经算好了它(既是定时器时长的来源,也是落库 `expires_at_ms` 的值)——在这里重算会铸出第二个
|
|
@@ -949,7 +1024,7 @@ export declare function buildApprovalRequestFrame(input: {
|
|
|
949
1024
|
card: ApprovalCard;
|
|
950
1025
|
expiresAtMs: number;
|
|
951
1026
|
nowMs: number;
|
|
952
|
-
live: ApprovalRequestLiveFacts;
|
|
1027
|
+
live: ApprovalRequestLiveFacts | undefined;
|
|
953
1028
|
}): ApprovalRequestFrame;
|
|
954
1029
|
/**
|
|
955
1030
|
* 🔴 **呈卡帧的活面事实座**(呈卡腿上旧族退役之后,开卡帧的全部事实都由本族承载)。
|
|
@@ -959,31 +1034,51 @@ export declare function buildApprovalRequestFrame(input: {
|
|
|
959
1034
|
* 卡外的事实此前只骑活卡帧,呈卡腿的消费方靠「两帧按 approvalId 合读」拿到它们。呈卡腿自此只发本族帧 ⇒ 它们挪到**活铸**的
|
|
960
1035
|
* 呈卡帧顶层,同名同型同值 —— 值取自同一只帧对象(活卡帧的那一次铸定,`tool-approval.ts` 的 `askBroadcast`),本仓不另算一遍。
|
|
961
1036
|
*
|
|
962
|
-
*
|
|
963
|
-
*
|
|
964
|
-
* (`
|
|
1037
|
+
* 🔴 **一只 ask 一份事实,活铸帧与重放帧同读(7.143.0)**:铸卡时同一只帧对象经同一只挑键函数落进问行卡信封的 `liveFacts` 座(与 `card` 同一条写,
|
|
1038
|
+
* {@link buildApprovalCardEnvelope});断连重放帧({@link buildReplayFrame}:断流续读、开流 preamble、只经 preamble 到达的后台子代的问、起服接管的列表行、按问读口)
|
|
1039
|
+
* 只读这一座 ⇒ 在场的每一位与活铸帧逐字同,缺席即缺席。行上没有这一座(本版之前铸的行)或它读不出 ⇒ 重放帧带 `liveFactsUnknown: true`、一位都不带
|
|
1040
|
+
* (不伪造,不回填,不从停驻行孪生座 join —— 那是另一份店、另一个写者)。同一只问被另一腿再问(幂等命中既有行)时,重入那一腿的活铸帧也读这一座
|
|
1041
|
+
* ({@link adoptStoredLiveFacts};行 = 真源)。带 NUL / 孤代理的一组不落座(某个后端存不下逐字的那一份,见 {@link buildApprovalCardEnvelope})。
|
|
1042
|
+
* 卡面(`ApprovalCardSchema`)照旧不带这十一位(`approvalCard` 除外,见本注末段):
|
|
1043
|
+
* 它们在帧顶层、不在 `card` 里,信封上是卡旁边的一座,不是卡的键。
|
|
1044
|
+
* `readRootCandidate` 随重放的射程与卡上 `ruleOffers` 同一句(`ApprovalCardSchema.ruleOffers` 顶注):回授经重放帧自己的 `approvalId` 走活应答口,
|
|
1045
|
+
* 有等待腿的副本兑得动;接管登记 / 耐久回决口上没有等待腿,应答照收、目录不加(没有 `approval.read_root_granted` 通告 = 什么都没加)。
|
|
965
1046
|
*
|
|
966
1047
|
* `requiresRealApproval` 不在表里:卡上 `risk.requiresRealApproval` 是同一个事实(铸卡第三参就是它),一个事实一个读法。
|
|
967
1048
|
* ⚠️ **`approvalCard` 是表里唯一一位 7.136.0 起同时在卡上的座**(`ApprovalCardSchema.approvalCard`:断连重放的卡要渲回同一张专卡,卡词必须进卡;
|
|
968
1049
|
* 同一次读定、同值)。按上一句的规矩它该离表(活铸帧顶层这一份退役 —— wire BREAKING,下游 sdk 的孪生表同改),本版按 additive 交付、未退役:
|
|
969
1050
|
* 一个事实两处读,登记为待收的债,收法 = 离表 + 消费方改读 `card.approvalCard`,不是在这里加第三处。
|
|
1051
|
+
* 7.143.0 起卡信封的活面事实座按本表落座 ⇒ 这一位在信封上也是两份(`card.approvalCard` 与 `liveFacts.approvalCard`,同一次读、同值),仍是这一笔债、不是新的一笔:
|
|
1052
|
+
* 离表那一刻帧顶层(活铸 / 重放)与信封座里的这一份一起退;座的读形是 `.strict()` 的,离表那一版要让读者在窗内容下带着它的在飞行(否则那些行读作「不知道」)。
|
|
970
1053
|
*/
|
|
971
1054
|
export declare const APPROVAL_REQUEST_LIVE_FACT_KEYS: readonly ["mandated", "mandate", "origin", "boundGrantDigest", "boundGrants", "classifierNoRuling", "boundGrantAbsence", "approvalCard", "readRootCandidate", "probeReason", "requestedBy"];
|
|
972
1055
|
/** 呈卡帧活面事实座的类型面 = 活卡帧同名座的 `Pick`(同型由构造保证,不手抄)。 */
|
|
973
1056
|
export type ApprovalRequestLiveFacts = Pick<ToolApprovalFrame, (typeof APPROVAL_REQUEST_LIVE_FACT_KEYS)[number]>;
|
|
1057
|
+
/**
|
|
1058
|
+
* 幂等重入采信行(「行 = 真源」家族,7.143.0):把一只活卡帧上的十一位换成行上卡信封那一座 —— 座里在场的照抄、座里缺席的删键。
|
|
1059
|
+
* 读者 = `tool-approval.ts` 的 `askBroadcast` 幂等命中既有行那一臂(行上有座才调;没有座 ⇒ 无可采信,不调)。于是重入那一腿的活铸帧
|
|
1060
|
+
* 与这只问的每一只重放帧是同一组事实;条目上的强制位 / 强制词 / 出身词随后从这只帧读,授予绑定读同一座(展示与判据同源)。
|
|
1061
|
+
*/
|
|
1062
|
+
export declare function adoptStoredLiveFacts(frame: ApprovalRequestLiveFacts, seat: ApprovalRequestLiveFacts): void;
|
|
974
1063
|
/**
|
|
975
1064
|
* [ref] §3.1 的呈卡帧(设计稿 §4.1 逐字)。
|
|
976
1065
|
*
|
|
977
1066
|
* 🔴 **一条腿一个帧族**:呈卡协议在一条腿上场(腿的审批上下文接了 `emitCard`)⇒ 这条腿上一只 ask 的开卡 / 消卡 / 撤卡只走本族
|
|
978
1067
|
* (`approval_request` / {@link ApprovalCompleteFrame} / {@link ApprovalRevokeFrame}),旧族 `tool_approval` / `tool_approval_complete`
|
|
979
1068
|
* 一帧都不发;协议未上场的腿只发旧族。同一只 ask 在同一条腿上不再有两种开卡帧,消费方不再按 `approvalId` 去重。
|
|
980
|
-
* 开卡的全部事实因此在本帧上:卡(`card`,耐久信封)+ 活面事实座({@link ApprovalRequestLiveFacts}
|
|
1069
|
+
* 开卡的全部事实因此在本帧上:卡(`card`,耐久信封)+ 活面事实座({@link ApprovalRequestLiveFacts};活铸帧与重放帧同一份,见 {@link APPROVAL_REQUEST_LIVE_FACT_KEYS} 顶注)。
|
|
981
1070
|
*/
|
|
982
1071
|
export interface ApprovalRequestFrame extends ApprovalRequestLiveFacts {
|
|
1072
|
+
/**
|
|
1073
|
+
* 7.143.0 **ADDITIVE**:**这只 ask 的活面事实不在它的行上** —— 只在重放帧上、只取字面 `true`:行是本版之前铸的(卡信封上没有那一座),或那一座读不出。
|
|
1074
|
+
* 在场时本帧一位活面事实都不带,它们的缺席**不是**断言:强制与否、出身、授予绑定……都按「不知道」读(强制与否不知道 ⇒ 按强制读,不让规则替人答)。
|
|
1075
|
+
* 活铸帧恒不带;行上有座的重放帧不带(座里缺的那一位就是真缺席)。不回填:存量行随窗到期收敛。
|
|
1076
|
+
*/
|
|
1077
|
+
liveFactsUnknown?: true;
|
|
983
1078
|
/** = SSE 具名事件名(与 `tool_approval` 同约定)。 */
|
|
984
1079
|
type: "approval_request";
|
|
985
1080
|
schemaVersion: 1;
|
|
986
|
-
/** `deriveAskId` 派生(
|
|
1081
|
+
/** `deriveAskId` 派生(持久层主键;八元身份元组 —— 7.109.0 起含这一问的类集,7.143.0 起含展示的动作(工具名 + 入参摘要) —— 见 approval-ask-machine.ts)。 */
|
|
987
1082
|
askId: string;
|
|
988
1083
|
/** wire run id(= 协调器 ctx 的 taskId)。 */
|
|
989
1084
|
taskId: string;
|
|
@@ -1092,13 +1187,34 @@ export declare function buildRevokeFrame(batchId: string, askIds: readonly strin
|
|
|
1092
1187
|
* - **零写**:本函数不碰 store —— 重放腿只读,不 `transitionAsk`、不改 `expires_at_ms`、不重挂定时器。
|
|
1093
1188
|
* 过窗未收敛的行(`expiresInMs === 0`)**仍然重放**,不在这里代打 `expireAsk` CAS(那会制造第五个
|
|
1094
1189
|
* 竞争者;收敛是车2 的窗到期竞争者与车5 恢复扫描的职责)。
|
|
1190
|
+
* - **与活铸帧同一份事实**(7.143.0):卡与活面事实座都取自行上的卡信封(同一次写落下的),经与活铸帧同一只构造 {@link buildApprovalRequestFrame};
|
|
1191
|
+
* 行上没有座 / 座读不出 ⇒ `liveFactsUnknown`(见帧型该键)。
|
|
1095
1192
|
*/
|
|
1096
1193
|
export declare function buildReplayFrame(row: Pick<AskRow, "askId" | "taskId" | "expiresAtMs" | "cardJson">, nowMs: number): ApprovalRequestFrame | undefined;
|
|
1097
1194
|
/**
|
|
1098
|
-
*
|
|
1099
|
-
*
|
|
1100
|
-
*
|
|
1101
|
-
*
|
|
1195
|
+
* 「这一问要人」(core `requiresRealApproval`:只有真人逐次答得了 —— 一揽子席、记住的放行、策略的放行都不行)的**唯一读法**:
|
|
1196
|
+
* 引擎在**这一腿**请求上盖的那一位 ∪ 这只问**行上那张卡**记着的那一位(`risk.requiresRealApproval`;新铸的卡上那一位就是本函数对铸卡那一腿的读数,
|
|
1197
|
+
* 见 {@link buildApprovalCard} 第三参)。任一为真即真 —— 并集只升不降:同一只问被另一腿再问(换副本重入、混版窗)读到不同的引擎事实时取严,
|
|
1198
|
+
* 永不因采信行或采信请求而放宽。
|
|
1199
|
+
* 两个输入各自可缺,调用方只交「手里有什么」:手里还没有行(会话授权短路、新铸那张卡、无问店)⇒ `recordCard` 缺席;手里没有这一腿的请求
|
|
1200
|
+
* (起服接管的登记、耐久问回决口 —— 只有行)⇒ `legRequest` 缺席。请求上的位按引擎的契约 `=== true` 严判(真才带;别的真值是照另一份契约写的)。
|
|
1201
|
+
* 读者:`tool-approval.ts` 的活审批腿(读侧会话授权短路的事实、铸卡、条目定稿 —— 条目 / 「本会话放行」判据 / 策略放行门 / 两族帧 / 列表行、
|
|
1202
|
+
* 起服接管登记、策略层自己交出去的问)与本文件的 {@link storedCardDemandsAPerson}。core 停驻行(`PendingAction.tool_approval`)上的孪生座是
|
|
1203
|
+
* 另一只店、另一个写者,读法是 {@link readParkRowTrueSeat}。
|
|
1204
|
+
*/
|
|
1205
|
+
export declare function askDemandsAPerson(legRequest: {
|
|
1206
|
+
readonly requiresRealApproval?: unknown;
|
|
1207
|
+
} | undefined, recordCard: Pick<ApprovalCard, "risk"> | undefined): boolean;
|
|
1208
|
+
/**
|
|
1209
|
+
* 问行上存的卡(`card_json`)交给 {@link askDemandsAPerson} 的那份**记录**:读得出 ⇒ 那张卡;读不出 ⇒ 一份「要人」的记录。
|
|
1210
|
+
* 🔴 读不出按要人(fail-closed):这一位只用来**拒**(策略的放行、记住的放行),读坏的行上拒一次可以改成人答 / 策略拒再来;反方向(读坏当不要人)
|
|
1211
|
+
* 会让一次引擎终将拒掉的放行先落成一条宣称 approve 的行、或让一张要人卡被记住。读者:{@link storedCardDemandsAPerson} 与 `tool-approval.ts` 里
|
|
1212
|
+
* 「行在、但这一腿没有采信行上信封」的那一臂(`ensureAsk` 报错后复核读读到行)。
|
|
1213
|
+
*/
|
|
1214
|
+
export declare function storedPersonDemandRecord(cardJson: unknown): Pick<ApprovalCard, "risk">;
|
|
1215
|
+
/**
|
|
1216
|
+
* [ref] —— 持久行上那张卡**要不要人**(手里只有行:经 {@link askDemandsAPerson},请求缺席;读不出按要人,见 {@link storedPersonDemandRecord})。
|
|
1217
|
+
* 读者 = 耐久 ask 回决口在裁决之前交给引擎判官 `policyCannotAnswer` 的那一问(`host-decision.ts` 的 `heldAskOf`)。
|
|
1102
1218
|
*/
|
|
1103
1219
|
export declare function storedCardDemandsAPerson(cardJson: unknown): boolean;
|
|
1104
1220
|
/** {@link buildApprovalPreamble} 的返回形——帧 + 两个**计数**(调用方按自己的 logger 记 warn;本模块
|