@sema-agent/server 7.148.0 → 7.150.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 +551 -9
- package/README.md +17 -2
- package/README.zh-CN.md +5 -1
- package/USAGE.md +126 -68
- package/dist/adoption/wire.d.ts +3 -3
- package/dist/approval-card.d.ts +33 -33
- package/dist/approval-gate-currency.d.ts +1 -1
- package/dist/approval-leg-origin.d.ts +33 -0
- package/dist/approval-leg-origin.js +4 -0
- package/dist/audit.d.ts +1 -1
- package/dist/audit.js +2 -2
- package/dist/auth-bridge.d.ts +9 -1
- package/dist/auth-bridge.js +4 -4
- package/dist/auth-keys.d.ts +10 -1
- package/dist/auth-keys.js +8 -0
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/boot/deferred-sandbox-path-env.d.ts +5 -3
- package/dist/boot/deferred-sandbox-path-env.js +1 -2
- package/dist/boot/execution-env.js +10 -11
- package/dist/boot/execution-lane.d.ts +6 -4
- package/dist/boot/execution-lane.js +3 -1
- package/dist/boot/org-delivery.d.ts +3 -2
- package/dist/boot/parked-revive-gate.d.ts +5 -5
- package/dist/boot/parked-revive-gate.js +2 -3
- package/dist/boot/resolve-spec.d.ts +4 -5
- package/dist/boot/resolve-spec.js +66 -28
- package/dist/boot/retention-lane.d.ts +1 -1
- package/dist/boot/runner-deps.js +3 -1
- package/dist/boot/session-faces.js +21 -21
- package/dist/boot/stage-01-config.d.ts +1 -0
- package/dist/boot/stage-01-config.js +4 -3
- package/dist/boot/stage-02-web-admin-pull.d.ts +1 -0
- package/dist/boot/stage-02-web-admin-pull.js +10 -2
- package/dist/boot/stage-03-store-backend.d.ts +1 -0
- package/dist/boot/stage-03-store-backend.js +4 -4
- package/dist/boot/stage-04-stores.d.ts +1 -0
- package/dist/boot/stage-05-execution-env.d.ts +1 -0
- package/dist/boot/stage-06-runners.d.ts +2 -1
- package/dist/boot/stage-06-runners.js +1 -2
- package/dist/boot/stage-07-capability-layer.d.ts +2 -1
- package/dist/boot/stage-07-capability-layer.js +1 -1
- package/dist/boot/stage-08-reapers.d.ts +2 -1
- package/dist/boot/stage-09-leader.d.ts +2 -1
- package/dist/boot/stage-10-http-server.d.ts +35 -2
- package/dist/boot/stage-10-http-server.js +9 -4
- package/dist/boot/stores.d.ts +3 -0
- package/dist/boot/stores.js +22 -19
- package/dist/boot/web-admin.d.ts +1 -1
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +70 -60
- package/dist/capability-facts.js +45 -49
- package/dist/card-settle-stored-scope.d.ts +56 -0
- package/dist/card-settle-stored-scope.js +27 -0
- package/dist/card-void.d.ts +7 -12
- package/dist/card-void.js +2 -7
- package/dist/config-catalog.d.ts +12 -0
- package/dist/config-catalog.js +37 -33
- package/dist/config-invariants.d.ts +5 -4
- package/dist/config-invariants.js +4 -4
- package/dist/config-types.d.ts +49 -16
- package/dist/config.d.ts +6 -5
- package/dist/config.js +35 -24
- package/dist/context-window-notice.d.ts +31 -0
- package/dist/context-window-notice.js +28 -0
- package/dist/deployment-governance.d.ts +7 -28
- package/dist/deployment-governance.js +1 -14
- package/dist/deployment-shape.d.ts +20 -11
- package/dist/deployment-shape.js +1 -0
- package/dist/device-ws-hub.d.ts +1 -0
- package/dist/device-ws-hub.js +64 -28
- package/dist/device-ws-protocol.d.ts +20 -6
- package/dist/device-ws-protocol.js +9 -2
- package/dist/engine-identity.d.ts +7 -1
- package/dist/engine-identity.js +5 -0
- package/dist/env-name-allowlist-knobs.d.ts +6 -5
- package/dist/env-name-allowlist-knobs.js +5 -0
- package/dist/execution-lane-caps.d.ts +20 -5
- package/dist/execution-lane-caps.js +18 -4
- package/dist/field-conflict.d.ts +2 -2
- package/dist/fleet/engine-signal.d.ts +14 -1
- package/dist/fleet/engine-signal.js +5 -1
- package/dist/fleet/fleet-reconciler.d.ts +1 -1
- package/dist/fleet/serving-lease.d.ts +18 -3
- package/dist/fleet/serving-lease.js +81 -35
- package/dist/fleet-client.d.ts +13 -11
- package/dist/fleet-client.js +53 -33
- package/dist/history-anchor.js +1 -1
- package/dist/hitl-delivery.d.ts +1 -3
- package/dist/hitl-delivery.js +1 -1
- package/dist/hooks/command-spawn.d.ts +7 -2
- package/dist/hooks/command-spawn.js +13 -6
- package/dist/hooks/hook-runner.d.ts +5 -0
- package/dist/hooks/hook-runner.js +11 -7
- package/dist/http/active-run-conflict.d.ts +3 -7
- package/dist/http/active-run-conflict.js +2 -2
- package/dist/http/admission.js +5 -5
- package/dist/http/approval-sweeps.js +5 -3
- package/dist/http/caller-trust.d.ts +2 -2
- package/dist/http/caller-trust.js +3 -3
- package/dist/http/checkpoint-ctx.d.ts +18 -63
- package/dist/http/checkpoint-ctx.js +1 -24
- package/dist/http/claim-heartbeat.d.ts +6 -6
- package/dist/http/claim-heartbeat.js +6 -6
- package/dist/http/claimed-run.d.ts +16 -9
- package/dist/http/claimed-run.js +8 -0
- package/dist/http/dispatch.js +7 -5
- package/dist/http/durable-run-leg.d.ts +8 -1
- package/dist/http/durable-run-leg.js +34 -15
- package/dist/http/execution-context.d.ts +115 -14
- package/dist/http/execution-context.js +130 -40
- package/dist/http/owner-access.d.ts +246 -21
- package/dist/http/owner-access.js +186 -8
- package/dist/http/principal-gate.d.ts +18 -11
- package/dist/http/principal-gate.js +3 -1
- package/dist/http/readiness.d.ts +4 -2
- package/dist/http/resume-ctx-read.d.ts +14 -3
- package/dist/http/resume-ctx-read.js +24 -3
- package/dist/http/resume-legs.d.ts +35 -3
- package/dist/http/resume-legs.js +262 -106
- package/dist/http/route-ctx.d.ts +29 -11
- package/dist/http/routes/a2a-serve.js +17 -14
- package/dist/http/routes/approvals-assistant.d.ts +3 -2
- package/dist/http/routes/approvals-assistant.js +11 -11
- package/dist/http/routes/capabilities.js +5 -4
- package/dist/http/routes/config-catalog.d.ts +1 -1
- package/dist/http/routes/diagnostics.d.ts +3 -1
- package/dist/http/routes/diagnostics.js +30 -5
- package/dist/http/routes/mcp-reconnect.js +2 -2
- package/dist/http/routes/memory-origin.d.ts +1 -1
- package/dist/http/routes/notify-wake.js +2 -3
- package/dist/http/routes/principal-inbox.d.ts +3 -1
- package/dist/http/routes/principal-inbox.js +3 -2
- package/dist/http/routes/projects.d.ts +1 -0
- package/dist/http/routes/projects.js +5 -3
- package/dist/http/routes/retention-ops.d.ts +1 -1
- package/dist/http/routes/run-permission-mode.d.ts +1 -1
- package/dist/http/routes/run-permission-mode.js +2 -2
- package/dist/http/routes/runs.d.ts +1 -1
- package/dist/http/routes/runs.js +33 -37
- package/dist/http/routes/session-memory-sync.js +4 -5
- package/dist/http/routes/session-sync.d.ts +24 -5
- package/dist/http/routes/session-sync.js +45 -37
- package/dist/http/routes/sessions-list.d.ts +1 -1
- package/dist/http/routes/sessions.d.ts +1 -1
- package/dist/http/routes/sessions.js +18 -44
- package/dist/http/routes/tasks.js +136 -101
- package/dist/http/routes/trace-usage.js +14 -14
- package/dist/http/routes/workflows.d.ts +1 -0
- package/dist/http/routes/workflows.js +20 -38
- package/dist/http/server.d.ts +12 -9
- package/dist/http/server.js +35 -6
- package/dist/http/stored-body-replay.d.ts +3 -24
- package/dist/http/stored-body-replay.js +2 -12
- package/dist/http/submit-ctx.d.ts +2 -2
- package/dist/http/submit-ctx.js +5 -5
- package/dist/http/submit-replay.d.ts +15 -2
- package/dist/http/submit-replay.js +10 -4
- package/dist/http/wire-types.d.ts +6 -3
- package/dist/index.d.ts +3 -1
- package/dist/index.js +1 -0
- package/dist/leader/endpoint.js +9 -8
- package/dist/leg-facts.d.ts +13 -2
- package/dist/leg-facts.js +2 -0
- package/dist/local-store-declaration.d.ts +54 -0
- package/dist/local-store-declaration.js +59 -0
- package/dist/mcp-assertion-header.d.ts +1 -1
- package/dist/mcp-assertion-header.js +1 -1
- package/dist/mcp-authorization-face.d.ts +18 -14
- package/dist/mcp-authorization-face.js +3 -2
- package/dist/memory-project-layer.js +1 -1
- package/dist/memory-scope.d.ts +4 -4
- package/dist/memory-scope.js +4 -4
- package/dist/memory-store-refusal.d.ts +1 -1
- package/dist/memory-sync-client.js +2 -2
- package/dist/model-context-window.d.ts +50 -11
- package/dist/model-context-window.js +20 -1
- package/dist/model-entry-refusal.d.ts +5 -4
- package/dist/model-entry-refusal.js +17 -3
- package/dist/model-reach-scope.d.ts +2 -1
- package/dist/observability/corrupt-read-seat.d.ts +1 -1
- package/dist/observability/fail-open.d.ts +19 -7
- package/dist/observability/fail-open.js +19 -7
- package/dist/observability/logger.d.ts +7 -0
- package/dist/observability/logger.js +3 -1
- package/dist/observability/metrics.js +1 -1
- package/dist/observability/run-terminal.d.ts +1 -1
- package/dist/observability/run-terminal.js +1 -0
- package/dist/observability/secret-env-scrub.d.ts +1 -1
- package/dist/observability/secret-env-scrub.js +1 -1
- package/dist/org-delivery-gate.d.ts +31 -6
- package/dist/org-delivery-gate.js +7 -4
- package/dist/owner-faces.d.ts +30 -5
- package/dist/owner-faces.js +2 -0
- package/dist/park-row-commit.d.ts +67 -0
- package/dist/park-row-commit.js +76 -0
- package/dist/parked-decide.d.ts +9 -7
- package/dist/parked-decide.js +25 -6
- package/dist/peer-directory.d.ts +1 -1
- package/dist/peer-seat.d.ts +1 -1
- package/dist/peer-seat.js +52 -59
- package/dist/plugins/adoption-log-sql.d.ts +3 -3
- package/dist/plugins/adoption-log-sql.js +19 -19
- package/dist/plugins/approval-ask-store-sql.d.ts +1 -1
- package/dist/plugins/approval-ask-store-sql.js +3 -5
- package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
- package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
- package/dist/plugins/approval-exemption-skill-m46.d.ts +0 -6
- package/dist/plugins/approval-exemption-skill-m46.js +6 -10
- package/dist/plugins/approval-exemption-store.d.ts +26 -1
- package/dist/plugins/approval-exemption-store.js +28 -19
- package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -3
- package/dist/plugins/ensure-schema-lock-policy.js +75 -9
- package/dist/plugins/exec-path-law.d.ts +34 -0
- package/dist/plugins/exec-path-law.js +13 -0
- package/dist/plugins/file-run-store.d.ts +22 -9
- package/dist/plugins/file-run-store.js +51 -23
- package/dist/plugins/local-checkpoint-store.d.ts +8 -1
- package/dist/plugins/local-checkpoint-store.js +5 -1
- package/dist/plugins/local-data-root-admission.d.ts +52 -0
- package/dist/plugins/local-data-root-admission.js +100 -0
- package/dist/plugins/local-engine-high-water.d.ts +28 -7
- package/dist/plugins/local-engine-high-water.js +27 -22
- package/dist/plugins/local-session-store.d.ts +134 -49
- package/dist/plugins/local-session-store.js +149 -108
- package/dist/plugins/memory-run-store.d.ts +14 -9
- package/dist/plugins/memory-run-store.js +48 -22
- package/dist/plugins/one-time-migration-marker.d.ts +19 -3
- package/dist/plugins/one-time-migration-marker.js +7 -1
- package/dist/plugins/one-time-migrations.d.ts +110 -59
- package/dist/plugins/one-time-migrations.js +224 -136
- package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
- package/dist/plugins/org-delivery-quota-store.js +29 -14
- package/dist/plugins/permission-rule-store-sql.d.ts +1 -1
- package/dist/plugins/permission-rule-store-sql.js +5 -9
- package/dist/plugins/pg-pool.d.ts +1 -1
- package/dist/plugins/pg-pool.js +14 -12
- package/dist/plugins/posix-shell-fs.js +4 -2
- package/dist/plugins/remote-env-adb.js +3 -2
- package/dist/plugins/remote-env-device.d.ts +3 -2
- package/dist/plugins/remote-env-device.js +8 -6
- package/dist/plugins/remote-env-e2b.d.ts +4 -8
- package/dist/plugins/remote-env-e2b.js +21 -15
- package/dist/plugins/remote-env-host.d.ts +51 -10
- package/dist/plugins/remote-env-host.js +97 -31
- package/dist/plugins/remote-env-k8s.js +7 -4
- package/dist/plugins/remote-env-local-docker.d.ts +6 -3
- package/dist/plugins/remote-env-local-docker.js +11 -25
- package/dist/plugins/remote-env-ssh.js +4 -3
- package/dist/plugins/remote-shell.d.ts +3 -1
- package/dist/plugins/remote-shell.js +3 -3
- package/dist/plugins/replica-registration.d.ts +35 -0
- package/dist/plugins/replica-registration.js +48 -0
- package/dist/plugins/retention-lane-store-sql.d.ts +1 -1
- package/dist/plugins/run-store-sql.d.ts +27 -8
- package/dist/plugins/run-store-sql.js +46 -18
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +8 -12
- package/dist/plugins/scenario-prefix-switch-m42.js +9 -6
- package/dist/plugins/schema-consistency.d.ts +91 -5
- package/dist/plugins/schema-consistency.js +189 -7
- package/dist/plugins/schema-drift-sentence.d.ts +6 -5
- package/dist/plugins/schema-drift-sentence.js +13 -5
- package/dist/plugins/serving-requirement.d.ts +49 -0
- package/dist/plugins/serving-requirement.js +53 -0
- package/dist/plugins/session-placement.d.ts +5 -4
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +22 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +6 -0
- package/dist/plugins/stop-then-start-sentence.d.ts +55 -0
- package/dist/plugins/stop-then-start-sentence.js +51 -0
- package/dist/plugins/store-backend.d.ts +23 -9
- package/dist/plugins/store-backend.js +58 -24
- package/dist/plugins/store-contracts.d.ts +45 -5
- package/dist/plugins/store-contracts.js +19 -0
- package/dist/plugins/tidb-pool.d.ts +11 -6
- package/dist/plugins/tidb-pool.js +22 -12
- package/dist/plugins/workspace-custody.d.ts +44 -0
- package/dist/plugins/workspace-custody.js +47 -0
- package/dist/process-instance.d.ts +3 -0
- package/dist/process-instance.js +7 -0
- package/dist/project-context.d.ts +66 -0
- package/dist/project-context.js +70 -0
- package/dist/project-identity.d.ts +8 -7
- package/dist/project-identity.js +40 -17
- package/dist/project-layer-key.d.ts +13 -2
- package/dist/project-layer-key.js +9 -1
- package/dist/question.d.ts +9 -21
- package/dist/question.js +28 -19
- package/dist/read-deny-floor-notice.d.ts +36 -0
- package/dist/read-deny-floor-notice.js +40 -0
- package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
- package/dist/request-declaration-disposition.js +39 -0
- package/dist/run-cancel-card.d.ts +28 -0
- package/dist/run-cancel-card.js +20 -0
- package/dist/run-cancel-context.d.ts +10 -0
- package/dist/run-cancel-context.js +1 -0
- package/dist/run-local.js +28 -13
- package/dist/runs.d.ts +31 -7
- package/dist/runs.js +34 -16
- package/dist/security.d.ts +3 -3
- package/dist/server-secret-env.d.ts +34 -20
- package/dist/server-secret-env.js +61 -18
- package/dist/session-agent.d.ts +4 -12
- package/dist/session-agent.js +0 -6
- package/dist/session-children-retire.d.ts +6 -3
- package/dist/session-children-retire.js +2 -5
- package/dist/session-incarnation.d.ts +18 -4
- package/dist/session-incarnation.js +4 -1
- package/dist/session-notify-door.d.ts +4 -4
- package/dist/session-notify-door.js +5 -6
- package/dist/session-rules-seat.d.ts +4 -3
- package/dist/session-rules-seat.js +3 -11
- package/dist/session-sync.js +3 -3
- package/dist/session-workspace.d.ts +3 -3
- package/dist/store-admission.d.ts +33 -0
- package/dist/store-admission.js +49 -0
- package/dist/store-posture.d.ts +5 -0
- package/dist/store-posture.js +18 -1
- package/dist/stores-sql/checkpoint-store-sql.d.ts +22 -3
- package/dist/stores-sql/checkpoint-store-sql.js +109 -23
- package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
- package/dist/stores-sql/file-history-store-sql.js +3 -5
- package/dist/stores-sql/retention-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +4 -6
- package/dist/task-a2a.d.ts +3 -8
- package/dist/task-a2a.js +25 -27
- package/dist/task-cwd.d.ts +27 -10
- package/dist/task-cwd.js +3 -0
- package/dist/task-mcp.d.ts +3 -3
- package/dist/task-mcp.js +1 -1
- package/dist/task-settings.d.ts +13 -0
- package/dist/task-settings.js +14 -7
- package/dist/terminal.d.ts +2 -0
- package/dist/terminal.js +21 -6
- package/dist/tool-approval.d.ts +50 -41
- package/dist/tool-approval.js +96 -73
- package/dist/trace/engine-notice-wire.d.ts +38 -21
- package/dist/trace/engine-notice-wire.js +25 -4
- package/dist/trace/ledger-sink.d.ts +3 -1
- package/dist/trace/project.d.ts +8 -5
- package/dist/trace/project.js +11 -9
- package/dist/trace/projection-table.d.ts +33 -2
- package/dist/trace/redact.d.ts +12 -0
- package/dist/trace/redact.js +5 -1
- package/dist/trace/self-minted-wire.d.ts +268 -56
- package/dist/trace/self-minted-wire.js +110 -40
- package/dist/trace/tool-card.d.ts +3 -0
- package/dist/trace/tool-card.js +24 -0
- package/dist/trace/tool-output-media.d.ts +2 -1
- package/dist/unattended-permission-mode.d.ts +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +1 -1
- package/dist/web-admin-client/apply-effective.js +22 -9
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/skills-mcp.d.ts +1 -1
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +57 -29
- package/docs/error-text-lexicon.json +317 -0
- package/package.json +4 -2
- package/scripts/embed-minimal.mjs +183 -0
- package/wire-changes/server@7.149.0.json +372 -0
- package/wire-changes/server@7.150.0.json +335 -0
- package/dist/plain-string-record.js +0 -70
package/dist/adoption/wire.d.ts
CHANGED
|
@@ -71,10 +71,10 @@ export declare const NOT_MIGRATED_FACES: readonly ["usage-window", "cost-quota",
|
|
|
71
71
|
export type NotMigratedFace = (typeof NOT_MIGRATED_FACES)[number];
|
|
72
72
|
export declare const AdoptionNotMigratedSchema: z.ZodObject<{
|
|
73
73
|
face: z.ZodEnum<{
|
|
74
|
+
"org-delivery-quota": "org-delivery-quota";
|
|
74
75
|
"usage-window": "usage-window";
|
|
75
76
|
"cost-quota": "cost-quota";
|
|
76
77
|
"rate-limit": "rate-limit";
|
|
77
|
-
"org-delivery-quota": "org-delivery-quota";
|
|
78
78
|
"approval-exemption-grantor": "approval-exemption-grantor";
|
|
79
79
|
"approval-ask-decision-actor": "approval-ask-decision-actor";
|
|
80
80
|
"image-bake-requested-by": "image-bake-requested-by";
|
|
@@ -120,10 +120,10 @@ export declare const AdoptionReportSchema: z.ZodObject<{
|
|
|
120
120
|
}, z.core.$strict>>;
|
|
121
121
|
notMigratedByDesign: z.ZodArray<z.ZodObject<{
|
|
122
122
|
face: z.ZodEnum<{
|
|
123
|
+
"org-delivery-quota": "org-delivery-quota";
|
|
123
124
|
"usage-window": "usage-window";
|
|
124
125
|
"cost-quota": "cost-quota";
|
|
125
126
|
"rate-limit": "rate-limit";
|
|
126
|
-
"org-delivery-quota": "org-delivery-quota";
|
|
127
127
|
"approval-exemption-grantor": "approval-exemption-grantor";
|
|
128
128
|
"approval-ask-decision-actor": "approval-ask-decision-actor";
|
|
129
129
|
"image-bake-requested-by": "image-bake-requested-by";
|
|
@@ -182,10 +182,10 @@ export declare const AdoptionReceiptSchema: z.ZodObject<{
|
|
|
182
182
|
}, z.core.$strict>>;
|
|
183
183
|
notMigratedByDesign: z.ZodArray<z.ZodObject<{
|
|
184
184
|
face: z.ZodEnum<{
|
|
185
|
+
"org-delivery-quota": "org-delivery-quota";
|
|
185
186
|
"usage-window": "usage-window";
|
|
186
187
|
"cost-quota": "cost-quota";
|
|
187
188
|
"rate-limit": "rate-limit";
|
|
188
|
-
"org-delivery-quota": "org-delivery-quota";
|
|
189
189
|
"approval-exemption-grantor": "approval-exemption-grantor";
|
|
190
190
|
"approval-ask-decision-actor": "approval-ask-decision-actor";
|
|
191
191
|
"image-bake-requested-by": "image-bake-requested-by";
|
package/dist/approval-card.d.ts
CHANGED
|
@@ -86,14 +86,14 @@ export declare const RuleOfferSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
86
86
|
name: "name";
|
|
87
87
|
path: "path";
|
|
88
88
|
host: "host";
|
|
89
|
+
tool: "tool";
|
|
90
|
+
pattern: "pattern";
|
|
89
91
|
exact: "exact";
|
|
90
92
|
prefix: "prefix";
|
|
91
93
|
wildcard: "wildcard";
|
|
92
|
-
pattern: "pattern";
|
|
93
94
|
subpath: "subpath";
|
|
94
95
|
name_prefix: "name_prefix";
|
|
95
96
|
subdomain: "subdomain";
|
|
96
|
-
tool: "tool";
|
|
97
97
|
}>;
|
|
98
98
|
command: z.ZodString;
|
|
99
99
|
}, z.core.$strict>, z.ZodObject<{
|
|
@@ -105,14 +105,14 @@ export declare const RuleOfferSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
105
105
|
name: "name";
|
|
106
106
|
path: "path";
|
|
107
107
|
host: "host";
|
|
108
|
+
tool: "tool";
|
|
109
|
+
pattern: "pattern";
|
|
108
110
|
exact: "exact";
|
|
109
111
|
prefix: "prefix";
|
|
110
112
|
wildcard: "wildcard";
|
|
111
|
-
pattern: "pattern";
|
|
112
113
|
subpath: "subpath";
|
|
113
114
|
name_prefix: "name_prefix";
|
|
114
115
|
subdomain: "subdomain";
|
|
115
|
-
tool: "tool";
|
|
116
116
|
}>;
|
|
117
117
|
command: z.ZodString;
|
|
118
118
|
segment: z.ZodString;
|
|
@@ -408,7 +408,7 @@ type ClosedWordOf<S extends ClosedWordSeat> = S extends AskClosedWordSeat ? NonN
|
|
|
408
408
|
* {@link parkRowFacts} 读它);`CheckpointSummary` 不回显(core 原句「read the row」)⇒ inbox 行不带。
|
|
409
409
|
*
|
|
410
410
|
* 判据(display,不是裁决输入 —— 裁决在 core 的仲裁点,本仓无人值守腿的按类作答读的是 core 交来的 `AskRequest.classes` 本身,不经本函数):
|
|
411
|
-
* · **两键都缺席 ⇒ 缺席**(不计数):老引擎(core 7.37.0 之前)、老行(续跑不补,
|
|
411
|
+
* · **两键都缺席 ⇒ 缺席**(不计数):老引擎(core 7.37.0 之前)、老行(续跑不补,[ref])、不盖 `origin` 的站([ref])。缺席从不编默认类;
|
|
412
412
|
* · **在场 ⇒ 读法就是 core 的屏** `screenAskClassMembers`([ref] ⑥,core 7.38.0 [ref] 导出;引擎在写停车行前用的同一只):`askClass` 在集、`classes`
|
|
413
413
|
* 非空数组且每员在集、无重复、按 `ASK_CLASSES` 规范序取首员 === `askClass`;屏收 ⇒ 投屏给的规范序副本。屏拒(半对 / 集外词 / 首员不符 /
|
|
414
414
|
* 重复员)⇒ **两键都不投**(卡上少一行类 ≪ 卡上出现生词或半只对)+ 计一次 `server.approval-card.closed-word-out-of-set`([ref] 族,detail 前缀
|
|
@@ -574,15 +574,15 @@ export declare const ApprovalCardSchema: z.ZodObject<{
|
|
|
574
574
|
governanceForced: z.ZodOptional<z.ZodLiteral<true>>;
|
|
575
575
|
rememberRefused: z.ZodOptional<z.ZodLiteral<true>>;
|
|
576
576
|
approvalCard: z.ZodOptional<z.ZodEnum<{
|
|
577
|
-
shell: "shell";
|
|
578
|
-
plan: "plan";
|
|
579
|
-
skill: "skill";
|
|
580
577
|
question: "question";
|
|
578
|
+
fetch: "fetch";
|
|
581
579
|
"file-edit": "file-edit";
|
|
582
580
|
"file-write": "file-write";
|
|
583
581
|
"notebook-edit": "notebook-edit";
|
|
584
|
-
|
|
582
|
+
shell: "shell";
|
|
583
|
+
skill: "skill";
|
|
585
584
|
workflow: "workflow";
|
|
585
|
+
plan: "plan";
|
|
586
586
|
generic: "generic";
|
|
587
587
|
"computer-access": "computer-access";
|
|
588
588
|
"computer-control": "computer-control";
|
|
@@ -590,10 +590,10 @@ export declare const ApprovalCardSchema: z.ZodObject<{
|
|
|
590
590
|
inputHasBidi: z.ZodOptional<z.ZodLiteral<true>>;
|
|
591
591
|
allowRuleShadowed: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
592
592
|
member: z.ZodEnum<{
|
|
593
|
-
hook: "hook";
|
|
594
|
-
skill: "skill";
|
|
595
|
-
deployment: "deployment";
|
|
596
593
|
request: "request";
|
|
594
|
+
deployment: "deployment";
|
|
595
|
+
skill: "skill";
|
|
596
|
+
hook: "hook";
|
|
597
597
|
persisted: "persisted";
|
|
598
598
|
}>;
|
|
599
599
|
entries: z.ZodArray<z.ZodString>;
|
|
@@ -606,14 +606,14 @@ export declare const ApprovalCardSchema: z.ZodObject<{
|
|
|
606
606
|
name: "name";
|
|
607
607
|
path: "path";
|
|
608
608
|
host: "host";
|
|
609
|
+
tool: "tool";
|
|
610
|
+
pattern: "pattern";
|
|
609
611
|
exact: "exact";
|
|
610
612
|
prefix: "prefix";
|
|
611
613
|
wildcard: "wildcard";
|
|
612
|
-
pattern: "pattern";
|
|
613
614
|
subpath: "subpath";
|
|
614
615
|
name_prefix: "name_prefix";
|
|
615
616
|
subdomain: "subdomain";
|
|
616
|
-
tool: "tool";
|
|
617
617
|
}>;
|
|
618
618
|
command: z.ZodString;
|
|
619
619
|
}, z.core.$strict>, z.ZodObject<{
|
|
@@ -625,14 +625,14 @@ export declare const ApprovalCardSchema: z.ZodObject<{
|
|
|
625
625
|
name: "name";
|
|
626
626
|
path: "path";
|
|
627
627
|
host: "host";
|
|
628
|
+
tool: "tool";
|
|
629
|
+
pattern: "pattern";
|
|
628
630
|
exact: "exact";
|
|
629
631
|
prefix: "prefix";
|
|
630
632
|
wildcard: "wildcard";
|
|
631
|
-
pattern: "pattern";
|
|
632
633
|
subpath: "subpath";
|
|
633
634
|
name_prefix: "name_prefix";
|
|
634
635
|
subdomain: "subdomain";
|
|
635
|
-
tool: "tool";
|
|
636
636
|
}>;
|
|
637
637
|
command: z.ZodString;
|
|
638
638
|
segment: z.ZodString;
|
|
@@ -692,8 +692,8 @@ export declare const ApprovalCardSchema: z.ZodObject<{
|
|
|
692
692
|
}, z.core.$strict>>>;
|
|
693
693
|
personalRuleDotsAbsent: z.ZodOptional<z.ZodCustom<AskEvidenceAbsence, AskEvidenceAbsence>>;
|
|
694
694
|
}, z.core.$strict>>;
|
|
695
|
-
askClass: z.ZodOptional<z.ZodCustom<"
|
|
696
|
-
classes: z.ZodOptional<z.ZodArray<z.ZodCustom<"
|
|
695
|
+
askClass: z.ZodOptional<z.ZodCustom<"hook" | "content_question" | "org_rule" | "ask_rule" | "denial_limit_fallback" | "probe" | "mode" | "write_protection" | "target_unresolved" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary", "hook" | "content_question" | "org_rule" | "ask_rule" | "denial_limit_fallback" | "probe" | "mode" | "write_protection" | "target_unresolved" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary">>;
|
|
696
|
+
classes: z.ZodOptional<z.ZodArray<z.ZodCustom<"hook" | "content_question" | "org_rule" | "ask_rule" | "denial_limit_fallback" | "probe" | "mode" | "write_protection" | "target_unresolved" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary", "hook" | "content_question" | "org_rule" | "ask_rule" | "denial_limit_fallback" | "probe" | "mode" | "write_protection" | "target_unresolved" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary">>>;
|
|
697
697
|
fromSubagent: z.ZodOptional<z.ZodLiteral<true>>;
|
|
698
698
|
sourceSessionId: z.ZodOptional<z.ZodString>;
|
|
699
699
|
agentId: z.ZodOptional<z.ZodString>;
|
|
@@ -708,7 +708,7 @@ export declare const ApprovalCardSchema: z.ZodObject<{
|
|
|
708
708
|
}>;
|
|
709
709
|
words: z.ZodOptional<z.ZodString>;
|
|
710
710
|
}, z.core.$strict>, z.ZodObject<{
|
|
711
|
-
by: z.ZodCustom<"
|
|
711
|
+
by: z.ZodCustom<"content_question" | "plan_review" | "ancestor_marked" | "org_unavailable" | "org_rule" | "rule_store_unavailable" | "ask_rule" | "denial_limit_fallback" | "shell_gate_tighten" | "safety_tighten" | "policy", "content_question" | "plan_review" | "ancestor_marked" | "org_unavailable" | "org_rule" | "rule_store_unavailable" | "ask_rule" | "denial_limit_fallback" | "shell_gate_tighten" | "safety_tighten" | "policy">;
|
|
712
712
|
words: z.ZodString;
|
|
713
713
|
}, z.core.$strict>]>>>;
|
|
714
714
|
delegation: z.ZodOptional<z.ZodObject<{
|
|
@@ -752,15 +752,15 @@ export declare const ApprovalCardEnvelopeSchema: z.ZodObject<{
|
|
|
752
752
|
governanceForced: z.ZodOptional<z.ZodLiteral<true>>;
|
|
753
753
|
rememberRefused: z.ZodOptional<z.ZodLiteral<true>>;
|
|
754
754
|
approvalCard: z.ZodOptional<z.ZodEnum<{
|
|
755
|
-
shell: "shell";
|
|
756
|
-
plan: "plan";
|
|
757
|
-
skill: "skill";
|
|
758
755
|
question: "question";
|
|
756
|
+
fetch: "fetch";
|
|
759
757
|
"file-edit": "file-edit";
|
|
760
758
|
"file-write": "file-write";
|
|
761
759
|
"notebook-edit": "notebook-edit";
|
|
762
|
-
|
|
760
|
+
shell: "shell";
|
|
761
|
+
skill: "skill";
|
|
763
762
|
workflow: "workflow";
|
|
763
|
+
plan: "plan";
|
|
764
764
|
generic: "generic";
|
|
765
765
|
"computer-access": "computer-access";
|
|
766
766
|
"computer-control": "computer-control";
|
|
@@ -768,10 +768,10 @@ export declare const ApprovalCardEnvelopeSchema: z.ZodObject<{
|
|
|
768
768
|
inputHasBidi: z.ZodOptional<z.ZodLiteral<true>>;
|
|
769
769
|
allowRuleShadowed: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
770
770
|
member: z.ZodEnum<{
|
|
771
|
-
hook: "hook";
|
|
772
|
-
skill: "skill";
|
|
773
|
-
deployment: "deployment";
|
|
774
771
|
request: "request";
|
|
772
|
+
deployment: "deployment";
|
|
773
|
+
skill: "skill";
|
|
774
|
+
hook: "hook";
|
|
775
775
|
persisted: "persisted";
|
|
776
776
|
}>;
|
|
777
777
|
entries: z.ZodArray<z.ZodString>;
|
|
@@ -784,14 +784,14 @@ export declare const ApprovalCardEnvelopeSchema: z.ZodObject<{
|
|
|
784
784
|
name: "name";
|
|
785
785
|
path: "path";
|
|
786
786
|
host: "host";
|
|
787
|
+
tool: "tool";
|
|
788
|
+
pattern: "pattern";
|
|
787
789
|
exact: "exact";
|
|
788
790
|
prefix: "prefix";
|
|
789
791
|
wildcard: "wildcard";
|
|
790
|
-
pattern: "pattern";
|
|
791
792
|
subpath: "subpath";
|
|
792
793
|
name_prefix: "name_prefix";
|
|
793
794
|
subdomain: "subdomain";
|
|
794
|
-
tool: "tool";
|
|
795
795
|
}>;
|
|
796
796
|
command: z.ZodString;
|
|
797
797
|
}, z.core.$strict>, z.ZodObject<{
|
|
@@ -803,14 +803,14 @@ export declare const ApprovalCardEnvelopeSchema: z.ZodObject<{
|
|
|
803
803
|
name: "name";
|
|
804
804
|
path: "path";
|
|
805
805
|
host: "host";
|
|
806
|
+
tool: "tool";
|
|
807
|
+
pattern: "pattern";
|
|
806
808
|
exact: "exact";
|
|
807
809
|
prefix: "prefix";
|
|
808
810
|
wildcard: "wildcard";
|
|
809
|
-
pattern: "pattern";
|
|
810
811
|
subpath: "subpath";
|
|
811
812
|
name_prefix: "name_prefix";
|
|
812
813
|
subdomain: "subdomain";
|
|
813
|
-
tool: "tool";
|
|
814
814
|
}>;
|
|
815
815
|
command: z.ZodString;
|
|
816
816
|
segment: z.ZodString;
|
|
@@ -870,8 +870,8 @@ export declare const ApprovalCardEnvelopeSchema: z.ZodObject<{
|
|
|
870
870
|
}, z.core.$strict>>>;
|
|
871
871
|
personalRuleDotsAbsent: z.ZodOptional<z.ZodCustom<AskEvidenceAbsence, AskEvidenceAbsence>>;
|
|
872
872
|
}, z.core.$strict>>;
|
|
873
|
-
askClass: z.ZodOptional<z.ZodCustom<"
|
|
874
|
-
classes: z.ZodOptional<z.ZodArray<z.ZodCustom<"
|
|
873
|
+
askClass: z.ZodOptional<z.ZodCustom<"hook" | "content_question" | "org_rule" | "ask_rule" | "denial_limit_fallback" | "probe" | "mode" | "write_protection" | "target_unresolved" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary", "hook" | "content_question" | "org_rule" | "ask_rule" | "denial_limit_fallback" | "probe" | "mode" | "write_protection" | "target_unresolved" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary">>;
|
|
874
|
+
classes: z.ZodOptional<z.ZodArray<z.ZodCustom<"hook" | "content_question" | "org_rule" | "ask_rule" | "denial_limit_fallback" | "probe" | "mode" | "write_protection" | "target_unresolved" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary", "hook" | "content_question" | "org_rule" | "ask_rule" | "denial_limit_fallback" | "probe" | "mode" | "write_protection" | "target_unresolved" | "ancestor" | "dangerous_delete" | "unverifiable_delete" | "unverifiable_shell_text" | "transcript_write" | "rule_unreadable" | "classifier_no_ruling" | "requires_user_interaction" | "cross_boundary" | "operator_forced" | "shell_floor" | "write_protection_on_disk" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "unstated" | "ordinary">>>;
|
|
875
875
|
fromSubagent: z.ZodOptional<z.ZodLiteral<true>>;
|
|
876
876
|
sourceSessionId: z.ZodOptional<z.ZodString>;
|
|
877
877
|
agentId: z.ZodOptional<z.ZodString>;
|
|
@@ -886,7 +886,7 @@ export declare const ApprovalCardEnvelopeSchema: z.ZodObject<{
|
|
|
886
886
|
}>;
|
|
887
887
|
words: z.ZodOptional<z.ZodString>;
|
|
888
888
|
}, z.core.$strict>, z.ZodObject<{
|
|
889
|
-
by: z.ZodCustom<"
|
|
889
|
+
by: z.ZodCustom<"content_question" | "plan_review" | "ancestor_marked" | "org_unavailable" | "org_rule" | "rule_store_unavailable" | "ask_rule" | "denial_limit_fallback" | "shell_gate_tighten" | "safety_tighten" | "policy", "content_question" | "plan_review" | "ancestor_marked" | "org_unavailable" | "org_rule" | "rule_store_unavailable" | "ask_rule" | "denial_limit_fallback" | "shell_gate_tighten" | "safety_tighten" | "policy">;
|
|
890
890
|
words: z.ZodString;
|
|
891
891
|
}, z.core.$strict>]>>>;
|
|
892
892
|
delegation: z.ZodOptional<z.ZodObject<{
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
* 行没了 ⇒ `unknown`(`row_absent`;应答口 PARKED 臂的 404 `not_found.approval` 同判)。
|
|
62
62
|
*
|
|
63
63
|
* ## 盲区(core 的筛仍不判的一处,如实写下)
|
|
64
|
-
* · 种类 × 当事方的配对(结算种类与 `settlement.who` 的当事方是否相配)—— 筛不判(core
|
|
64
|
+
* · 种类 × 当事方的配对(结算种类与 `settlement.who` 的当事方是否相配)—— 筛不判(core [ref]),本判官也不核:读的是种类。只有坏行 / 手改行才走得到。
|
|
65
65
|
* (时刻与方向两处自 core 7.56.0 [ref] 起由筛判:I10 / I11。trace 投影读同一种记录、经同一只筛,零改即得 I10 —— 坏时刻在两个读者那里是同一个答法。)
|
|
66
66
|
*/
|
|
67
67
|
import { type Checkpoint, type CheckpointToken, type SettlementKind } from "@sema-agent/core";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 一条腿的**审批出处两格**:执行车道 + 这条腿的会话此刻的住客令牌(化身,`session-incarnation.ts`)。
|
|
3
|
+
*
|
|
4
|
+
* 两格都取自装配点手里**同一只**执行上下文(`http/execution-context.ts` 的 `ExecutionContext`:解析器步 ① 那一次行读的住客 + 由此定的车道)。三条提交腿
|
|
5
|
+
* (同步 · 后台 · 续跑)与 parked 赎回腿经 {@link approvalLegOriginOf} 一处读、一处展开进 `ToolApprovalRunContext` / `boundAsk` / `boundUnattendedAsk` /
|
|
6
|
+
* `approverSeatFor` 的身份 —— 出处的新格只在这一处加,不会有哪个装配点漏带。读者:协调器的「本会话放行」进程内表(`tool-approval.ts` `sessionAllowKey`),
|
|
7
|
+
* 键含 {@link ApprovalLegOrigin.incarnation} ⇒ 会话删了再登记(同一个 id、新的一位住客)之后,上一位住客点的放行读不中。
|
|
8
|
+
*
|
|
9
|
+
* 叶模块(只有类型位的 import):装配点的各层模块都从这里取,不经协调器本体,不构成运行时环。
|
|
10
|
+
*/
|
|
11
|
+
import type { ExecutionLane } from "./execution-lane-caps.js";
|
|
12
|
+
export interface ApprovalLegOrigin {
|
|
13
|
+
/**
|
|
14
|
+
* 这条腿的执行车道(必填:出处没有车道的问不可表示)—— 每只席的身份都从所在边界的执行上下文铸(`ctx.lane`)。铸入三句:新行 ⇒ 本出处的车道;
|
|
15
|
+
* 既有行命中 / 收养 ⇒ 行上的车道(派生只对新行有意义,既有行一律采信行上的);无问店的活登记 ⇒ 本出处的车道。
|
|
16
|
+
*/
|
|
17
|
+
readonly executionLane: ExecutionLane;
|
|
18
|
+
/**
|
|
19
|
+
* 这条腿的会话(`sessionId`)此刻的**住客令牌**(化身,`session-incarnation.ts`)—— 装配点写所在边界执行上下文那一读的住客(`ctx.occupant.incarnation`,
|
|
20
|
+
* 与 {@link executionLane} 同一只上下文、同一次行读;不另读第二次)。出处带化身:「本会话放行」(协调器的进程内授权表)的键含它,读写两点都取这一格
|
|
21
|
+
* (与 `sessionId` 同源同理由随**出处**走,不取投递连接的)⇒ 会话删了再登记(同一个 id、新的一位住客)之后,上一位住客点的放行读不中。
|
|
22
|
+
* 缺席 = 这条腿读不出这位住客(会话店不带执行席 / 腿没有会话):这条腿上**不读也不铸**进程内授权(点 `allow_session` 只放行这一次,回执 `rememberApplied:false`)。
|
|
23
|
+
*/
|
|
24
|
+
readonly incarnation?: string;
|
|
25
|
+
}
|
|
26
|
+
/** 执行上下文 → 这条腿的出处两格({@link ApprovalLegOrigin})。形参只取两样(车道、住客),不依赖 http 层的类型。 */
|
|
27
|
+
export declare function approvalLegOriginOf(execution: {
|
|
28
|
+
readonly lane: ExecutionLane;
|
|
29
|
+
readonly occupant?: {
|
|
30
|
+
readonly incarnation: string;
|
|
31
|
+
} | undefined;
|
|
32
|
+
}): ApprovalLegOrigin;
|
|
33
|
+
//# sourceMappingURL=approval-leg-origin.d.ts.map
|
package/dist/audit.d.ts
CHANGED
|
@@ -36,7 +36,7 @@ export interface SessionAudit {
|
|
|
36
36
|
* 真源 = `resume_anchor`(锚店 `listBySession` 的读数),本表只是它对**一位读者**的一次投影。
|
|
37
37
|
*/
|
|
38
38
|
export type RewindHandles = ReadonlyMap<string, string>;
|
|
39
|
-
/** 会话视图读口(`ServiceDeps.sessionAudit`)的读者参数:`reader` = 读这张视图的**已验身份**(无身份 = `null`)。给了 ⇒ 这是一次**视图读**:用户消息行投回退手柄、体顶层投 `agent`(`
|
|
39
|
+
/** 会话视图读口(`ServiceDeps.sessionAudit`)的读者参数:`reader` = 读这张视图的**已验身份**(无身份 = `null`)。给了 ⇒ 这是一次**视图读**:用户消息行投回退手柄、体顶层投 `agent`(`http/owner-access.ts` 的 `readSessionAgent`);
|
|
40
40
|
* 不给(只要归属的调用方:memory-status / 自助抹除)⇒ 两样投影的读都不付。 */
|
|
41
41
|
export interface SessionAuditReadOpts {
|
|
42
42
|
readonly reader: Subject | null;
|
package/dist/audit.js
CHANGED
|
@@ -4,7 +4,7 @@ import { PgSessionStorage } from "./stores-sql/pg-session-storage.js";
|
|
|
4
4
|
import { LocalSessionWindow } from "./plugins/local-session-window.js";
|
|
5
5
|
import { redactModelText } from "./observability/run-terminal.js";
|
|
6
6
|
import { redactDeepWith } from "./trace/redact.js";
|
|
7
|
-
import {
|
|
7
|
+
import { projectToolCard } from "./trace/tool-card.js";
|
|
8
8
|
import { INJECTED_BLOCK_RE, isAttachmentFrame } from "./user-authored-text.js";
|
|
9
9
|
import { ownerKeyOf, sameKey } from "./owner-faces.js";
|
|
10
10
|
export function buildRewindHandles(anchors, reader) {
|
|
@@ -68,7 +68,7 @@ function withRewindHandles(messages, entries, handles) {
|
|
|
68
68
|
}
|
|
69
69
|
const deepScrub = (v) => redactDeepWith(v, redactModelText);
|
|
70
70
|
const textSlot = (v) => (typeof v === "string" ? redactModelText(v) : deepScrub(v));
|
|
71
|
-
const readToolCard = (v) =>
|
|
71
|
+
const readToolCard = (v) => projectToolCard(v, deepScrub);
|
|
72
72
|
function readLeaf(treatment, v) {
|
|
73
73
|
switch (treatment) {
|
|
74
74
|
case "text": return textSlot(v);
|
package/dist/auth-bridge.d.ts
CHANGED
|
@@ -58,14 +58,22 @@ type ReportedOutcome = {
|
|
|
58
58
|
* (调用方按验证失败处置:不设身份 ⇒ 门答 generic 401)。验证失败的结局验证器自己已记过账,这里只答「不装」。
|
|
59
59
|
*/
|
|
60
60
|
export declare function admitBridgeIdentity(outcome: ReportedOutcome, sinks: BridgeSinks): BridgeIdentity | undefined;
|
|
61
|
-
/**
|
|
61
|
+
/**
|
|
62
|
+
* The live object `createWebAdminJwtVerifier` produces — a single `verify` entry point over the process-level JWKS cache, and the issuer it verifies for.
|
|
63
|
+
* This is also the type of the injected seat (`ServiceDeps.webAdminJwtVerifier`): an embedder's verifier states which issuer it verifies, so `createHttpServer`
|
|
64
|
+
* can pair it with the config's bridge ("which issuer does this deployment accept" has one source — the config — and one comparison, at that seat).
|
|
65
|
+
*/
|
|
62
66
|
export interface WebAdminJwtVerifier {
|
|
67
|
+
/** The issuer this verifier verifies tokens for, in {@link normalizeBridgeIssuer} form (what the R4 `iss` check compares against). The factory mints it from its own option; the seat compares it with the config's reading. */
|
|
68
|
+
readonly issuer: string;
|
|
63
69
|
verify: (bearer: string) => Promise<VerifyOutcome>;
|
|
64
70
|
}
|
|
65
71
|
/** 缓存键的常规刷新周期缺省(秒):过期后下一发在后台重拉,当前请求不等。 */
|
|
66
72
|
export declare const DEFAULT_JWKS_TTL_SEC: number;
|
|
67
73
|
/** 一次 JWKS 拉取的时限(毫秒):kid 未知、超离线宽限、后台刷新三条路用同一只拉取,同一个时限。 */
|
|
68
74
|
export declare const JWKS_FETCH_TIMEOUT_MS = 10000;
|
|
75
|
+
/** The one normal form of a bridge issuer: trailing slashes folded. The R4 `iss` check compares both sides in this form, and the `createHttpServer` pairing seat compares the verifier's {@link WebAdminJwtVerifier.issuer} with the config's reading in this same form (one reading, so the two can never disagree about what "the same issuer" means). */
|
|
76
|
+
export declare const normalizeBridgeIssuer: (s: string) => string;
|
|
69
77
|
/**
|
|
70
78
|
* registry-JWT verifier(单例,进程级 JWKS 缓存)。`verify(bearer)` 全程不 throw——一切异常折为拒因闭集
|
|
71
79
|
* {@link AuthBridgeRefusal}(HTTP 面由调用方恒答 generic 401,码只进日志/metrics,R9)。
|
package/dist/auth-bridge.js
CHANGED
|
@@ -40,9 +40,9 @@ function b64urlJson(seg) {
|
|
|
40
40
|
return undefined;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
const
|
|
43
|
+
export const normalizeBridgeIssuer = (s) => s.replace(/\/+$/, "");
|
|
44
44
|
export function createWebAdminJwtVerifier(opts) {
|
|
45
|
-
const issuer =
|
|
45
|
+
const issuer = normalizeBridgeIssuer(opts.issuer);
|
|
46
46
|
const displayIssuer = buildDisplaySafeUrl(issuer);
|
|
47
47
|
const jwksUrl = opts.jwksUrl ?? `${issuer}${WEB_ADMIN_JWKS_PATH}`;
|
|
48
48
|
const clockSkewSec = opts.clockSkewSec ?? DEFAULT_CLOCK_SKEW_SEC;
|
|
@@ -122,7 +122,7 @@ export function createWebAdminJwtVerifier(opts) {
|
|
|
122
122
|
const kid = typeof header.kid === "string" ? header.kid : undefined;
|
|
123
123
|
if (!kid)
|
|
124
124
|
return fail("malformed");
|
|
125
|
-
const iss = typeof payload.iss === "string" ?
|
|
125
|
+
const iss = typeof payload.iss === "string" ? normalizeBridgeIssuer(payload.iss) : undefined;
|
|
126
126
|
if (iss !== issuer)
|
|
127
127
|
return fail("unknown_issuer", kid);
|
|
128
128
|
if (classifyTimeClaims(payload, Math.floor(now() / 1000), clockSkewSec) !== "ok")
|
|
@@ -163,6 +163,6 @@ export function createWebAdminJwtVerifier(opts) {
|
|
|
163
163
|
opts.metrics?.inc("auth_bridge_verify_total", { outcome: "ok" });
|
|
164
164
|
return { ok: true, identity: { ...mapped.identity, scope: scoped.scope } };
|
|
165
165
|
}
|
|
166
|
-
return { verify };
|
|
166
|
+
return { issuer, verify };
|
|
167
167
|
}
|
|
168
168
|
//# sourceMappingURL=auth-bridge.js.map
|
package/dist/auth-keys.d.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* AUTH KEY-SET parsing ([ref] A4) — the env→key-set decoders for the two D-G credential planes, moved VERBATIM
|
|
3
3
|
* out of security.ts: {@link parseApprovalHmacKeys} (APPROVAL_HMAC_KEYS — the rotating HMAC secret set, decision
|
|
4
4
|
* INTEGRITY) and {@link parsePrincipalJwks} (PRINCIPAL_JWT_PUBKEYS — the rotating issuer public-key set, principal
|
|
5
|
-
* IDENTITY)
|
|
5
|
+
* IDENTITY), plus {@link parseServiceAuthTokens} (SERVICE_AUTH_TOKENS — the per-system service token table). config.ts consumes
|
|
6
|
+
* these decoders + their row types at env-load time, and importing them from
|
|
6
7
|
* security.ts made the base config layer value-depend on the whole 55KiB auth module (lens2 §F). This file is a pure
|
|
7
8
|
* leaf (JSON.parse + shape filters, zero repo imports); the VERIFIERS that consume the parsed key-sets
|
|
8
9
|
* (verifyApprovalHmac / verifyPrincipalJwt) stay in ./approval-hmac.ts and ./principal-jwt.ts; consumers import these four names from HERE ([ref] 兼容面全清).
|
|
@@ -54,4 +55,12 @@ export interface PrincipalJwtKey {
|
|
|
54
55
|
* [ref]: fail-closed 语义逐字不变,但每条被丢弃的条目经 `onReject` 报出(序号 + 缺陷字段名,不带值)——
|
|
55
56
|
* 这里的 key 是**公**钥,但 reason 仍只说字段名,与 HMAC 那条同形(两个出口的口径不该分岔)。 */
|
|
56
57
|
export declare function parsePrincipalJwks(raw: string | undefined, onReject: OnKeySetRejection): PrincipalJwtKey[];
|
|
58
|
+
/**
|
|
59
|
+
* Parse SERVICE_AUTH_TOKENS — the per-system service credential table, `tok=system` pairs separated by commas (token →
|
|
60
|
+
* system name; the `source` of a run is derived from the token, never self-asserted). Each pair is trimmed and split at
|
|
61
|
+
* its FIRST `=` (a system name may hold `=`); a pair without `=`, or with an empty token or system, is not an entry.
|
|
62
|
+
* THE one reading: `loadConfig` builds `authTokens` from it, and the withheld table declares each token as a credential
|
|
63
|
+
* value of its own (`server-secret-env.ts`) — a copy of one token under another variable name is the same credential.
|
|
64
|
+
*/
|
|
65
|
+
export declare function parseServiceAuthTokens(raw: string | undefined): Record<string, string>;
|
|
57
66
|
//# sourceMappingURL=auth-keys.d.ts.map
|
package/dist/auth-keys.js
CHANGED
|
@@ -63,4 +63,12 @@ export function parsePrincipalJwks(raw, onReject) {
|
|
|
63
63
|
});
|
|
64
64
|
return out;
|
|
65
65
|
}
|
|
66
|
+
export function parseServiceAuthTokens(raw) {
|
|
67
|
+
return Object.fromEntries((raw ?? "")
|
|
68
|
+
.split(",")
|
|
69
|
+
.map((s) => s.trim())
|
|
70
|
+
.filter((s) => s.includes("="))
|
|
71
|
+
.map((s) => [s.slice(0, s.indexOf("=")).trim(), s.slice(s.indexOf("=") + 1).trim()])
|
|
72
|
+
.filter(([tok, sys]) => tok.length > 0 && sys.length > 0));
|
|
73
|
+
}
|
|
66
74
|
//# sourceMappingURL=auth-keys.js.map
|
|
@@ -48,7 +48,7 @@ export interface SessionHardReap {
|
|
|
48
48
|
* 两处调用(见文件头 ①),都 `await`:E21 删除级联 `includeRetained:false`(显式活服务照留);停止口照传请求体。应答在硬面之后发,
|
|
49
49
|
* 代价 = 有 shell 行刚被软停的会话,DELETE / 停止口的应答慢到最后一行的「软停 + 宽限」(通常一次宽限;操作员旋钮 `HOST_BG_KILL_GRACE_MS`,缺省 1000;要几乎不等写 `1` ——
|
|
50
50
|
* `numEnvOr` 把 `0` 读作缺席、回落缺省,与它供的其余执行车道旋钮同一条语义)。
|
|
51
|
-
* 受委托帮手的 shell 挂在帮手自己的会话上,本函数碰不到(core
|
|
51
|
+
* 受委托帮手的 shell 挂在帮手自己的会话上,本函数碰不到(core [ref] / [ref],候 core)。
|
|
52
52
|
* 注册表是**进程内**的:只收本副本上的行(多副本部署里别的副本上的行由那个副本自己的出口收)。
|
|
53
53
|
*/
|
|
54
54
|
export declare function reapSessionBackgroundHard(sessionId: string, scope: string, opts: {
|
|
@@ -17,7 +17,9 @@
|
|
|
17
17
|
*
|
|
18
18
|
* ## 三条不可动的裁定
|
|
19
19
|
*
|
|
20
|
-
* 1. **`absolutePath`
|
|
20
|
+
* 1. **`absolutePath` 一面不转发**,只读执行缝路径律(`plugins/exec-path-law.ts`):POSIX 绝对形**原样**交出(`..` / `.` 不折 ——
|
|
21
|
+
* 不折才与工具同读:七条车道的工具也原样把它交给沙箱的文件系统,`..` 由那块盘解;门的真身判决随后经下面四腿转发问的正是这只拼法)/
|
|
22
|
+
* NUL 拒 / 非绝对形 err。
|
|
21
23
|
* 真 env 的 `absolutePath` 会按 **env 自己的 cwd** 解析相对路径,而工具真写处按 engine 跟踪的
|
|
22
24
|
* cwd 解析——两个基准不同,转发它等于拿错基准铸 canonical key,而**错误的 allow 比没有门更糟**。
|
|
23
25
|
* 相对形 / `~` / 盘符形因此照旧 err ⇒ `canonicalizeTarget` 失败 ⇒ 写门 `ask`(fail-closed)。
|
|
@@ -115,7 +117,7 @@ export interface DeferredSandboxPathEnvOptions {
|
|
|
115
117
|
logger?: SandboxPathEnvLogger;
|
|
116
118
|
}
|
|
117
119
|
/**
|
|
118
|
-
* 写门用的 ExecutionEnv 代理(见文件头)。fs **读**原语转发 slot 里的真 env,`absolutePath`
|
|
120
|
+
* 写门用的 ExecutionEnv 代理(见文件头)。fs **读**原语转发 slot 里的真 env,`absolutePath` 绝对形原样(不折,见裁定 1),
|
|
119
121
|
* 其余一切(写面 / shell 面 / listDir …)继承 `StubExecutionEnv` 的 `not_supported`。
|
|
120
122
|
*
|
|
121
123
|
* **继承而非逐一手写**是刻意的:core 日后给 `ExecutionEnv` 加必填面时,新面会随 `StubExecutionEnv`
|
|
@@ -130,7 +132,7 @@ export declare class DeferredSandboxPathEnv extends StubExecutionEnv {
|
|
|
130
132
|
constructor(opts: DeferredSandboxPathEnvOptions);
|
|
131
133
|
/** 取真 env;取不到就地铸 fail-closed 错误(并留痕一次)。 */
|
|
132
134
|
private bound;
|
|
133
|
-
/**
|
|
135
|
+
/** 只读路径律的一面,**不**转发 —— 理由见文件头裁定 1。绝对形原样:门与工具读同一只拼法,`..` 交给沙箱的文件系统(经四腿转发的真身判决)。 */
|
|
134
136
|
absolutePath(path: string): Promise<Result<string, FileError>>;
|
|
135
137
|
exists(path: string, abortSignal?: AbortSignal): Promise<Result<boolean, FileError>>;
|
|
136
138
|
canonicalPath(path: string, abortSignal?: AbortSignal): Promise<Result<string, FileError>>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { FileError, StubExecutionEnv, err, ok } from "@sema-agent/core";
|
|
2
|
-
import { normalizeAbsolutePathLexically } from "../task-cwd.js";
|
|
3
2
|
const MAX_BOUND_SESSIONS = 4096;
|
|
4
3
|
export class SandboxPathEnvSlots {
|
|
5
4
|
bySession = new Map();
|
|
@@ -128,7 +127,7 @@ export class DeferredSandboxPathEnv extends StubExecutionEnv {
|
|
|
128
127
|
if (!path.startsWith("/")) {
|
|
129
128
|
return Promise.resolve(err(new FileError("not_supported", "this gate cannot resolve a non-absolute path (the sandbox working directory is not the gate's to guess)", path)));
|
|
130
129
|
}
|
|
131
|
-
return Promise.resolve(ok(
|
|
130
|
+
return Promise.resolve(ok(path));
|
|
132
131
|
}
|
|
133
132
|
async exists(path, abortSignal) {
|
|
134
133
|
const b = this.bound(path, "exists");
|
|
@@ -40,7 +40,7 @@ import { sayEgressPolicyReading } from "../sandbox-egress-policy.js";
|
|
|
40
40
|
import { sandboxPathEnvSlots, withSandboxPathEnvSlot } from "./deferred-sandbox-path-env.js";
|
|
41
41
|
import { createLaneHomeAbsenceReporter } from "../lane-home-probe.js";
|
|
42
42
|
import { buildLaneHomeBootNote, buildLaneHomeClaim, capabilitiesFor, laneIsolated, laneSandboxReadFloorState } from "../execution-lane-caps.js";
|
|
43
|
-
import {
|
|
43
|
+
import { settleReadDenyFloor } from "./execution-lane.js";
|
|
44
44
|
import { seatText } from "../trace/exit-seat.js";
|
|
45
45
|
import { countSessionResidentBackground } from "../session-resident-background.js";
|
|
46
46
|
function boundedSessionSetter(map, maxEntries) {
|
|
@@ -384,22 +384,21 @@ export function createExecutionEnv(ctx) {
|
|
|
384
384
|
...(config.remoteExec.workspaceBase ? { workspaceBase: config.remoteExec.workspaceBase } : {}),
|
|
385
385
|
...(config.remoteExec.commandTimeoutMs != null ? { commandTimeoutMs: config.remoteExec.commandTimeoutMs } : {}),
|
|
386
386
|
...(hostScheduler ? { scheduler: hostScheduler } : {}),
|
|
387
|
-
backgroundShell: config
|
|
387
|
+
backgroundShell: DEPLOYMENT_SHAPE_PREDICATES.backgroundShell.holds(config),
|
|
388
388
|
};
|
|
389
|
-
executionEnvFactory = (ctx) => {
|
|
389
|
+
executionEnvFactory = hostExecutionEnvFactory(hostCfg, (ctx) => {
|
|
390
390
|
if (ctx.isolation === "worktree")
|
|
391
391
|
throw hostWorktreeUnwrappedRefusal();
|
|
392
392
|
const cwd = effectiveHostWorkspace(perSessionCwd.get(ctx.sessionId), ctx);
|
|
393
393
|
const shellEnv = perSessionShellEnv.get(ctx.sessionId);
|
|
394
394
|
const inheritEnv = perSessionInheritEnv.get(ctx.sessionId);
|
|
395
|
-
|
|
396
|
-
...hostCfg,
|
|
395
|
+
return {
|
|
397
396
|
...(cwd ? { workspaceDir: cwd } : {}),
|
|
398
397
|
...(shellEnv ? { env: shellEnv } : {}),
|
|
399
398
|
...(inheritEnv !== undefined ? { inheritEnv } : {}),
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
};
|
|
399
|
+
...(lspManager && !cwd ? { minted: (env) => void evictLspOnDestroy(env, lspManager) } : {}),
|
|
400
|
+
};
|
|
401
|
+
});
|
|
403
402
|
}
|
|
404
403
|
}
|
|
405
404
|
else if (config.remoteExec.provider === "local-docker") {
|
|
@@ -441,14 +440,14 @@ export function createExecutionEnv(ctx) {
|
|
|
441
440
|
});
|
|
442
441
|
}
|
|
443
442
|
else if (config.remoteExec.provider === "host") {
|
|
444
|
-
const gitBaseEnv = new RemoteHostExecutionEnv({ workspaceDir: config.worktreeIsolation.repoRoot, inheritEnv: "all", backgroundShell: config
|
|
443
|
+
const gitBaseEnv = new RemoteHostExecutionEnv({ workspaceDir: config.worktreeIsolation.repoRoot, inheritEnv: "all", backgroundShell: DEPLOYMENT_SHAPE_PREDICATES.backgroundShell.holds(config), gitBase: true });
|
|
445
444
|
executionEnvFactory = withWorktreeIsolation(executionEnvFactory, {
|
|
446
445
|
repoRoot: config.worktreeIsolation.repoRoot,
|
|
447
446
|
...(config.worktreeIsolation.allowedRoots ? { allowedRoots: config.worktreeIsolation.allowedRoots } : {}),
|
|
448
447
|
...(config.worktreeIsolation.commit ? { commit: config.worktreeIsolation.commit } : {}),
|
|
449
448
|
baseEnvForGit: gitBaseEnv,
|
|
450
449
|
rootEnvAt: (dir) => {
|
|
451
|
-
const env = new RemoteHostExecutionEnv({ ...homeDirSeat, workspaceDir: dir, backgroundShell: config
|
|
450
|
+
const env = new RemoteHostExecutionEnv({ ...homeDirSeat, workspaceDir: dir, backgroundShell: DEPLOYMENT_SHAPE_PREDICATES.backgroundShell.holds(config) });
|
|
452
451
|
return lspManager ? evictLspOnDestroy(env, lspManager) : env;
|
|
453
452
|
},
|
|
454
453
|
logger,
|
|
@@ -501,7 +500,7 @@ export function createExecutionEnv(ctx) {
|
|
|
501
500
|
if (config.remoteExec.provider === "host")
|
|
502
501
|
logger.info("task_inherit_env_honored", { honored: taskInheritEnvRefusal(config) === undefined });
|
|
503
502
|
}
|
|
504
|
-
|
|
503
|
+
settleReadDenyFloor(config, logger);
|
|
505
504
|
const unreadableReported = new Set();
|
|
506
505
|
let stallReapFailureReported = false;
|
|
507
506
|
const stallMs = config.backgroundAgentStallMs;
|
|
@@ -58,12 +58,14 @@ export declare function composeDeclaredExecutionLane(loaded: LoadedConfig, logge
|
|
|
58
58
|
*/
|
|
59
59
|
export declare function settleHostLaneShell(config: Pick<ServiceConfig, "remoteExec">, logger: Pick<Logger, "info" | "warn">): Promise<void>;
|
|
60
60
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
61
|
+
* **读拒字节地板在本部署上怎么说** —— 两件事,一个入口:
|
|
62
|
+
* ① 把部署的执行车道装给说法的属主(`read-deny-floor-notice.ts` 的 `installReadDenyFloorDeployment`):每条 run 的通告 / 结果格 / 拒句由它点名 `REMOTE_EXEC=<车道>`;
|
|
63
|
+
* ② 起服一行:部署要求读拒表的字节地板(`READ_DENY_FLOOR_REQUIRED=true`)而最终车道的执行环境块不守 ⇒ 每条读拒表有行的 run 都在准备期拒 ——
|
|
64
|
+
* 起服先说清后果与出路(`warn read_deny_floor_required_unkept { provider, note }`;判据与句子的唯一属主 `buildReadDenyFloorUnkeptNote`,句子 = 每条 run 的拒句)。
|
|
63
65
|
* 两个入口调同一只(与 {@link settleHostLaneShell} 同形):HTTP 服务在执行环境装配里(`boot/execution-env.ts`,有没有执行环境工厂都调),`run-local` 在宿主车道定下之后 ——
|
|
64
|
-
* 旋钮两个入口都递给引擎(`RunnerDeps.readDenyFloorRequired`)
|
|
66
|
+
* 旋钮两个入口都递给引擎(`RunnerDeps.readDenyFloorRequired`),所以两个入口都要先装、先说。不要求 / 车道守地板 ⇒ 不出那一行(装照装:车道名是每条 run 的说法要的)。
|
|
65
67
|
*/
|
|
66
|
-
export declare function
|
|
68
|
+
export declare function settleReadDenyFloor(config: Parameters<typeof buildReadDenyFloorUnkeptNote>[0], logger: Pick<Logger, "warn">): void;
|
|
67
69
|
/**
|
|
68
70
|
* 车道合成之后的跨域不变量 —— 表(`config-invariants.ts`)里读 `remoteExec.provider` 的那几条,boot 期 `live === next`。
|
|
69
71
|
* 同步、纯判据:只读 config,不碰文件(测试可以对 `loadConfig()` 的产物直接调它)。
|
|
@@ -3,6 +3,7 @@ import { assertLocalConfigDirTrusted } from "../config-dir-trust.js";
|
|
|
3
3
|
import { crossInvariant } from "../config-invariants.js";
|
|
4
4
|
import { entryDeclarableRemoteExec } from "../config.js";
|
|
5
5
|
import { ALL_EXECUTION_LANES, buildReadDenyFloorUnkeptNote, laneIsolated, laneWiresExecutionEnv } from "../execution-lane-caps.js";
|
|
6
|
+
import { installReadDenyFloorDeployment } from "../read-deny-floor-notice.js";
|
|
6
7
|
import { buildReadFacePostureNotice, settleDerivedReadFace } from "../read-face-posture.js";
|
|
7
8
|
import { settleHostShellAtBoot } from "../plugins/host-platform.js";
|
|
8
9
|
import { seatText } from "../trace/exit-seat.js";
|
|
@@ -70,7 +71,8 @@ export async function settleHostLaneShell(config, logger) {
|
|
|
70
71
|
return;
|
|
71
72
|
await settleHostShellAtBoot(logger);
|
|
72
73
|
}
|
|
73
|
-
export function
|
|
74
|
+
export function settleReadDenyFloor(config, logger) {
|
|
75
|
+
installReadDenyFloorDeployment(config);
|
|
74
76
|
const note = buildReadDenyFloorUnkeptNote(config);
|
|
75
77
|
if (note !== undefined)
|
|
76
78
|
logger.warn("read_deny_floor_required_unkept", { provider: config.remoteExec.provider, note });
|