@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 晚绑席([ref] 十段切分的**唯一**跨段可变面)——
|
|
2
|
+
* 晚绑席([ref] 十段切分的**唯一**跨段可变面)—— 五只 cell,读点在前段、写点在后段。
|
|
3
3
|
*
|
|
4
4
|
* 为什么是模块级 live binding 而不是 ctx 字段:读点的原文是**裸标识符**(`() => runStore`、
|
|
5
5
|
* `() => parkedAskRedeem`),而 ctx 字段是**快照** —— 把读点改成 `ctx.runStore` 就是正文改写,
|
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
* · `runStore` / `rateLimiter` —— 声明行留在第 7 段原位,紧随一行 `bindX(...)` 把值交过来;
|
|
9
9
|
* · `parkedAskRedeem` / `runDenySweep` —— 它们的**声明行本身**就是 `let`(逐字搬进本文件,含缩进),
|
|
10
10
|
* 赋值点(server 造出来之后那两处)也随之搬进 `bindServerLateSeats` —— 跨模块给 import 赋值是非法的,
|
|
11
|
-
* 所以 cell
|
|
11
|
+
* 所以 cell 与它的写点必须同居一个模块;
|
|
12
|
+
* · `sessionNotifyDoor` —— 同上一形(server 的产物,写点在 `bindServerLateSeats`)。
|
|
12
13
|
*
|
|
13
|
-
*
|
|
14
|
+
* 时序与修前逐字相同:五只 cell 的读点全是 `() => x` 取值闭包(boot 期不求值,最早的求值发生在
|
|
14
15
|
* listen 之后的请求/tick 上),写点仍在各自原来的那一拍。未绑窗内取值得到 `undefined` —— 这正是
|
|
15
16
|
* 各消费座既有的 fail-closed 臂(device 限速座:`gate()` 取不到就抛,见 boot/device-lane.ts:68)。
|
|
16
17
|
*/
|
|
@@ -20,11 +21,13 @@ import type { RateGate } from "../observability/rate-limit.js";
|
|
|
20
21
|
import type { ServiceConfig } from "../config.js";
|
|
21
22
|
import type { StoreBackend } from "../plugins/store-backend.js";
|
|
22
23
|
import type { createHttpServer } from "../http/server.js";
|
|
24
|
+
import type { SessionNotifyDoor } from "../session-notify-door.js";
|
|
23
25
|
declare let runStore: ReturnType<StoreBackend["run"]> | undefined;
|
|
24
26
|
declare let rateLimiter: RateGate | undefined;
|
|
25
27
|
declare let parkedAskRedeem: ParkedAskRedeem | undefined;
|
|
26
28
|
declare let runDenySweep: ((now: number) => Promise<void>) | undefined;
|
|
27
|
-
|
|
29
|
+
declare let sessionNotifyDoor: SessionNotifyDoor | undefined;
|
|
30
|
+
export { runStore, rateLimiter, parkedAskRedeem, runDenySweep, sessionNotifyDoor };
|
|
28
31
|
export declare function bindRunStore(v: ReturnType<StoreBackend["run"]> | undefined): void;
|
|
29
32
|
export declare function bindRateLimiter(v: RateGate): void;
|
|
30
33
|
export declare function bindServerLateSeats(ctx: {
|
package/dist/boot/late-binds.js
CHANGED
|
@@ -2,7 +2,8 @@ let runStore;
|
|
|
2
2
|
let rateLimiter;
|
|
3
3
|
let parkedAskRedeem;
|
|
4
4
|
let runDenySweep;
|
|
5
|
-
|
|
5
|
+
let sessionNotifyDoor;
|
|
6
|
+
export { runStore, rateLimiter, parkedAskRedeem, runDenySweep, sessionNotifyDoor };
|
|
6
7
|
export function bindRunStore(v) {
|
|
7
8
|
runStore = v;
|
|
8
9
|
}
|
|
@@ -12,6 +13,7 @@ export function bindRateLimiter(v) {
|
|
|
12
13
|
export function bindServerLateSeats(ctx) {
|
|
13
14
|
const { config, logger, server } = ctx;
|
|
14
15
|
runDenySweep = server.denyExpiredApprovals;
|
|
16
|
+
sessionNotifyDoor = server.sessionNotifyDoor;
|
|
15
17
|
if (!config.directDoorActive)
|
|
16
18
|
parkedAskRedeem = server.redeemParkedAsk;
|
|
17
19
|
else
|
package/dist/boot/leader.js
CHANGED
|
@@ -45,7 +45,7 @@ export function createLeaderFace(ctx) {
|
|
|
45
45
|
(leaderProvider === "k8s" && "s3" in leaderMinio && executionEnvFactory) ||
|
|
46
46
|
(leaderProvider === "host" && executionEnvFactory))
|
|
47
47
|
? createLeaderEndpoint(createLeaderRunner({
|
|
48
|
-
brain, models: config.models, roles: config.roles, pricing, logger,
|
|
48
|
+
brain, models: config.models, roles: config.roles, tiers: config.tiers, pricing, logger,
|
|
49
49
|
governance: {
|
|
50
50
|
compliancePostureResolver: governanceSeams.compliancePostureResolver,
|
|
51
51
|
lockedConfig: governanceSeams.lockedConfig,
|
|
@@ -61,9 +61,7 @@ export function createLeaderFace(ctx) {
|
|
|
61
61
|
...(ctx.onError ? { onError: ctx.onError } : {}),
|
|
62
62
|
mods: ctx.deploymentMods,
|
|
63
63
|
fanoutEnabled: config.leaderFanoutEnabled,
|
|
64
|
-
...(
|
|
65
|
-
? { routerModel: (process.env.MODEL_ROUTER_ID || process.env.MODEL_CHEAP_ID) }
|
|
66
|
-
: {}),
|
|
64
|
+
...(process.env.MODEL_ROUTER_ID ? { routerModel: process.env.MODEL_ROUTER_ID } : {}),
|
|
67
65
|
...(leaderProvider === "e2b" ? { e2bApiKey: config.remoteExec.apiKey } : {}),
|
|
68
66
|
...(executionEnvFactory ? { envFactory: executionEnvFactory } : {}),
|
|
69
67
|
...leaderMinio,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { type LaneHomeDeployment } from "../execution-lane-caps.js";
|
|
2
2
|
import { type MemoryScopeStores } from "../memory-scope-stores.js";
|
|
3
|
-
import type { SessionCaptureRecordSource } from "../plugins/store-backend.js";
|
|
4
3
|
import type { RestartSliceCtx } from "../web-admin-client/restart-signal.js";
|
|
5
4
|
import type { MemoryConsolidationDriverConfig, ServiceConfig } from "../config-types.js";
|
|
6
5
|
import { resolveMemoryConsolidationDriver, type ConsolidationWriteJudge, type ConsolidationWriteJudgeInput, type EngineNotice, type ConsolidationDriverRunRow, type ConsolidationRunReceipt, type MemoryConsolidationDriverDeps, type PermissionRuleStoreProvider } from "@sema-agent/core";
|
|
@@ -500,13 +499,6 @@ export declare function createMemoryConsolidationFaces(stores: MemoryScopeStores
|
|
|
500
499
|
/** 停因自由文本的**运维日志**座(缺席 = 没人听,不影响任何行为)。载荷由 {@link buildStopDetailAudit}
|
|
501
500
|
* 铸,调用点在单飞回调**之内** ⇒ 一轮真 run 一行,并入的等待者不各落一行。 */
|
|
502
501
|
onStopDetail?: (audit: ReturnType<typeof buildStopDetailAudit>) => void;
|
|
503
|
-
/** [ref]②(383 §2.1b):capture opt-out 记录的按平面取用源(main.ts 取一次,与 Runner 同源;每只引擎按它那只店的控制面取)。
|
|
504
|
-
* 🔴 这只引擎是四只 operator 面里**真读名册**的那只:`consolidationEligibility` 第四臂
|
|
505
|
-
* (engine.js `listCaptureOptOutSessions`)拿它筛掉 opt-out 会话的贡献条目 —— SQL 部署上漏喂
|
|
506
|
-
* = 驱动器读文件空名册 ⇒ 蒸馏器放大用户明说不要记的内容(S-5 真实失效形;全站同批注入律,
|
|
507
|
-
* 机器钉 capture-optout-lane ②)。[ref] 起 local 车道在引擎接线时也供(core 文件三腿,同一只控制面);
|
|
508
|
-
* 缺席 ⇒ 记忆面暗(引擎未接线),与 Runner 同本。 */
|
|
509
|
-
captureRecords?: SessionCaptureRecordSource;
|
|
510
502
|
/** core 7.50.0:整理跑的**写判官座**(必填 —— 缺席不是「没有规则」,core 也拒)。操作面不判任何东西,只把它原样递给驱动动词:
|
|
511
503
|
* 早问库目录一次、应用时问每个产物文件,答 `no_objection` 以外一律拒写。装配层给哪一只见 {@link createOperatorValveWriteJudge}。 */
|
|
512
504
|
writeJudge: ConsolidationWriteJudge;
|
|
@@ -4,8 +4,8 @@ import { buildOperatorRosterWayOut } from "../http/principal-gate.js";
|
|
|
4
4
|
import { memoryMountRootOf } from "../memory-scope.js";
|
|
5
5
|
import { executionLaneHomeDir } from "../execution-lane-caps.js";
|
|
6
6
|
import { DEFAULT_MODEL_REF, resolveMainModel } from "../model-select.js";
|
|
7
|
-
import {
|
|
8
|
-
import { memoryStoreForRequest } from "../memory-scope-stores.js";
|
|
7
|
+
import { captureRecordStoreOf } from "../memory-operator-faces.js";
|
|
8
|
+
import { backendOwnsControlPlane, memoryStoreForRequest } from "../memory-scope-stores.js";
|
|
9
9
|
import { createConsolidationWriteJudge, deliverWriteRefusal, expandTiers, MemoryEngine, modelOriginOf, readConsolidationDriverRun, resolveMemoryConsolidationDriver, runMemoryConsolidationDriver, } from "@sema-agent/core";
|
|
10
10
|
import { seatText } from "../trace/exit-seat.js";
|
|
11
11
|
export function resolveConsolidationDriverSeat(deps) {
|
|
@@ -342,7 +342,7 @@ export function createMemoryConsolidationFaces(stores, input) {
|
|
|
342
342
|
const known = engines.get(store);
|
|
343
343
|
if (known !== undefined)
|
|
344
344
|
return known;
|
|
345
|
-
const records = captureRecordStoreOf(
|
|
345
|
+
const records = captureRecordStoreOf(stores.captureRecords, store);
|
|
346
346
|
const engine = new MemoryEngine({
|
|
347
347
|
backend: store,
|
|
348
348
|
memoryDir: memoryMountRootOf(store, stores.root),
|
package/dist/boot/reapers.js
CHANGED
|
@@ -91,7 +91,7 @@ export function startReapers(ctx) {
|
|
|
91
91
|
const runDenySweepGuard = createThrottledReaperCatch("run_deny_sweep", logger);
|
|
92
92
|
const runsReapSuspendedGuard = createThrottledReaperCatch("runs_reap_suspended", logger);
|
|
93
93
|
const checkpointReapCtxGuard = createThrottledReaperCatch("checkpoint_reap_ctx", logger);
|
|
94
|
-
const
|
|
94
|
+
const toolResultReapGuard = createThrottledReaperCatch("tool_result_reap", logger);
|
|
95
95
|
const fileHistorySweepOrphanBlobsGuard = createThrottledReaperCatch("file_history_sweep_orphan_blobs", logger);
|
|
96
96
|
const legacySnapshotBlobSweepGuard = createThrottledReaperCatch("legacy_snapshot_blob_sweep", logger);
|
|
97
97
|
const attachmentReapUnboundGuard = createThrottledReaperCatch("attachment_reap_unbound", logger);
|
|
@@ -244,9 +244,10 @@ export function startReapers(ctx) {
|
|
|
244
244
|
rateLimiter?.sweep();
|
|
245
245
|
if (costQuota instanceof CostQuota)
|
|
246
246
|
costQuota.reap();
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
247
|
+
const reapToolResults = toolResultStore?.reap?.bind(toolResultStore);
|
|
248
|
+
leg(reapToolResults && Promise.resolve()
|
|
249
|
+
.then(() => reapToolResults(Date.now(), { maxAgeMs: config.toolResultTtlSec * 1000 }))
|
|
250
|
+
.then(() => toolResultReapGuard.onSuccess(), toolResultReapGuard.onError));
|
|
250
251
|
leg(fileHistoryErasure
|
|
251
252
|
?.sweepOrphanBlobs?.()
|
|
252
253
|
.then(() => fileHistorySweepOrphanBlobsGuard.onSuccess(), fileHistorySweepOrphanBlobsGuard.onError));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SessionEnvironmentSelection, selectEnvironmentTool } from "../capabilities/select-environment-tool.js";
|
|
2
2
|
import { sendUserFileTool } from "../capabilities/send-user-file-tool.js";
|
|
3
3
|
import { selectScenario } from "../capabilities/scenarios.js";
|
|
4
|
-
import {
|
|
4
|
+
import type { LoadedSkill } from "../capabilities/skills.js";
|
|
5
5
|
import type { ServiceConfig } from "../config.js";
|
|
6
6
|
import { type LiveQuestionFace } from "../deployment-governance.js";
|
|
7
7
|
import { FleetEventBus } from "../fleet/fleet-bus.js";
|
|
@@ -6,8 +6,8 @@ import { recordFailOpen } from "../observability/fail-open.js";
|
|
|
6
6
|
import { SessionEnvironmentSelection, selectEnvironmentTool } from "../capabilities/select-environment-tool.js";
|
|
7
7
|
import { sendUserFileTool } from "../capabilities/send-user-file-tool.js";
|
|
8
8
|
import { buildExcludeToolsSeat, buildPromptSeats, buildRunSkills, createScenarioGate, selectScenario } from "../capabilities/scenarios.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { toolPolicyForHands } from "../capabilities/hands-lane.js";
|
|
10
|
+
import { mintLegFacts } from "../leg-facts.js";
|
|
11
11
|
import { applyLongtailDefer } from "../capabilities/tool-defer.js";
|
|
12
12
|
import { assertGuardPatternsUsable, buildApprovalGrantNotice, buildOnlySensitiveBaselineWarning, createApprovalBaselinePolicy, createDeploymentGovernanceInputs } from "../deployment-governance.js";
|
|
13
13
|
import { createDeploymentListExemption, gateIntentUnserviceableReason, singleUserAutoAcceptBaselineApplies } from "../approval.js";
|
|
@@ -28,7 +28,7 @@ import { tightenGoverned } from "../governance-overrides.js";
|
|
|
28
28
|
import { applyRuntimeGovernance } from "../runtime-governance.js";
|
|
29
29
|
import { HttpError, createCodedHttpError, encodeCheckpointScope } from "../security.js";
|
|
30
30
|
import { headReadOf, sessionFaceOfHead } from "../session-incarnation.js";
|
|
31
|
-
import { legProjectIdOf, sessionWorkspaceStoreOf
|
|
31
|
+
import { legProjectIdOf, sessionWorkspaceStoreOf } from "../session-workspace.js";
|
|
32
32
|
import { memorySpecForRequest } from "../memory-scope.js";
|
|
33
33
|
import { createMemoryProjectLayers } from "../memory-project-layer.js";
|
|
34
34
|
import { inheritEnvFacts, inheritEnvFieldIssue, singleMemberOffFieldIssue } from "../request-value-closure.js";
|
|
@@ -177,13 +177,13 @@ export function createResolveSpec(ctx) {
|
|
|
177
177
|
scratchpadDir: folded.scratchpadDir,
|
|
178
178
|
hostSemanticsLane: folded.hostSemanticsLane,
|
|
179
179
|
});
|
|
180
|
-
|
|
181
|
-
return stampLegSessionWitness(stampRunSkills(stamped, runSkills.roster), gated.sessionWitness);
|
|
180
|
+
return { spec: final, facts: { hands: gated.hands, skills: runSkills.roster, sessionWitness: gated.sessionWitness } };
|
|
182
181
|
};
|
|
183
182
|
const gateScenarioAndAppend = async (body, auth, opts) => {
|
|
184
183
|
const scenarioName = await scenarioGate(auth?.principal, body.scenario);
|
|
185
184
|
const root = opts.execution.root;
|
|
186
|
-
const
|
|
185
|
+
const rootFace = sessionHeadOf === undefined ? undefined : sessionFaceOfHead(root, await sessionHeadOf(root));
|
|
186
|
+
const sessionWitness = { sessionId: root, owner: rootFace?.owner ?? null, incarnation: rootFace?.incarnation ?? null };
|
|
187
187
|
const cap = selectScenario(scenarios, scenarioName)(body, auth?.principal, { sessionId: sessionWitness.sessionId, delegationRoot: sessionWitness });
|
|
188
188
|
const acceptedAppend = acceptAppendSystemPrompt(body.appendSystemPrompt, (detail) => logger.warn("append_system_prompt_dropped", { detail, sessionId: auth?.sessionId ?? null }));
|
|
189
189
|
const objective = typeof body.objective === "string" ? body.objective : "";
|
|
@@ -680,8 +680,8 @@ export function createResolveSpec(ctx) {
|
|
|
680
680
|
return governed;
|
|
681
681
|
};
|
|
682
682
|
const resolveSpecForLeg = async (body, req, auth, opts) => {
|
|
683
|
-
const spec = await resolveSpec(body, req, auth, opts);
|
|
684
|
-
return unrooted(opts.unattendedLeg !== true ? spec : withUnattendedLeg(spec));
|
|
683
|
+
const { spec, facts } = await resolveSpec(body, req, auth, opts);
|
|
684
|
+
return mintLegFacts(unrooted(opts.unattendedLeg !== true ? spec : withUnattendedLeg(spec)), facts);
|
|
685
685
|
};
|
|
686
686
|
return resolveSpecForLeg;
|
|
687
687
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* ⚠️ **位置即契约**:必须晚于 stores/exec-env/coordinators/workflow 段(所有键都是它们的产物),
|
|
8
8
|
* 且早于 `new Runner(runnerDeps)` —— Runner 构造时展开 tier 表成私有目录副本(之后的换代经
|
|
9
9
|
* `Runner.swapDeps` 换进,见 boot/stage-08-reapers.ts)。
|
|
10
|
-
*
|
|
10
|
+
* runStore 在本段之后才构造 ⇒ 本段不读它(本段没有晚绑取值)。
|
|
11
11
|
*/
|
|
12
12
|
import { type CacheBreakFinding, type CrossBoundaryPosture, type RunnerDeps, type WorkflowRunStore, type AskOutcome } from "@sema-agent/core";
|
|
13
13
|
import type { createBrain } from "../brain.js";
|
|
@@ -19,7 +19,6 @@ import type { Logger } from "../observability/logger.js";
|
|
|
19
19
|
import type { Metrics } from "../observability/metrics.js";
|
|
20
20
|
import { type ConsolidationDriverSeat } from "./memory-consolidation.js";
|
|
21
21
|
import { WorkflowAgentRegistry } from "../orchestration/workflow-agent-steer.js";
|
|
22
|
-
import { type WorkflowCompletionInbox } from "../orchestration/workflow-completion-inbox.js";
|
|
23
22
|
import { type EngineNoticeRouter } from "../trace/engine-notice-wire.js";
|
|
24
23
|
import { WorkflowNotifyGate, type WorkflowCompletionPayload } from "../orchestration/workflow-notify-journal.js";
|
|
25
24
|
import type { ServiceWorkflowJournalStore, SessionCaptureRecordSource, StoreBackend, ToolResultStoreFull } from "../plugins/store-backend.js";
|
|
@@ -68,7 +67,10 @@ export declare function createRunnerDepsOnAsk(toolApproval: ToolApprovalCoordina
|
|
|
68
67
|
* `classificationKnown:false`(指标标签折 `unknown`),不吞不编;与安装包的锁步由 test/boot-runner-deps-shared-base.test.ts
|
|
69
68
|
* 的 dist 扫描格钉住(两种发射写法都读;读不出词的经变量发射点本身红;core 加词/收进 d.ts 那天先红)。
|
|
70
69
|
* 第七词 `peer-seat-hold`(runtask 的 `holdDeclarations`,字面量):对端座的三员对象里 `hold` / `release` 抛了 ⇒ 引擎报一次、该引用
|
|
71
|
-
* 不被持有;座是本仓的 desk,所以这是部署自己的故障,与其余六词同走 warn + 计数。
|
|
70
|
+
* 不被持有;座是本仓的 desk,所以这是部署自己的故障,与其余六词同走 warn + 计数。
|
|
71
|
+
* 第八词 `input-author-unreadable`(core 7.61.0 `run-leg.js` 的 `objectiveAuthorOf` 回调,字面量):宿主经 `RunInternals.objectiveAuthor`
|
|
72
|
+
* 递了一个不在 `INPUT_AUTHORS` 里的词 ⇒ 引擎报一次、该目标按操作者的输入筛。本服务不递这个字段(src 零读写),只有嵌入方手铸时才发射,
|
|
73
|
+
* 仍是部署侧的故障,同走 warn + 计数。 */
|
|
72
74
|
export declare const CONFIG_ADVISORY_CLASSIFICATIONS: ReadonlySet<string>;
|
|
73
75
|
/** [ref]:core 的 [ref] 前缀缓存**断裂**探测器交给宿主的根因**闭集**,以及每个词的日志级别。
|
|
74
76
|
* 闭集**不抄词**:词源直接取 core 公开导出的 `CacheBreakFinding["cause"]`(`@sema-agent/core` 根导出,
|
|
@@ -240,10 +242,7 @@ export interface RunnerDepsCtx {
|
|
|
240
242
|
workflowJournalStore: ServiceWorkflowJournalStore | undefined;
|
|
241
243
|
workflowAgentRegistry: WorkflowAgentRegistry | undefined;
|
|
242
244
|
workflowNotifyGate: WorkflowNotifyGate | undefined;
|
|
243
|
-
workflowCompletionInbox: WorkflowCompletionInbox | undefined;
|
|
244
245
|
deliverWorkflowCompletion: (p: WorkflowCompletionPayload) => Promise<void>;
|
|
245
|
-
/** 晚绑(runStore 在本段之后构造)——见文件头「位置即契约」。 */
|
|
246
|
-
getRunStore: () => ReturnType<StoreBackend["run"]> | undefined;
|
|
247
246
|
}
|
|
248
247
|
/** [ref] A10 留档发现②:main runner `RunnerDeps` 与 main.ts subRunner 字面量之间此前手工重复
|
|
249
248
|
* 的 ~15 个键,类型标注见 {@link createSharedRunnerDeps} 头注。 */
|
|
@@ -282,6 +281,15 @@ export interface EngineNoticeMetricsSeat {
|
|
|
282
281
|
export declare function createEngineNoticeForwarder(logger: {
|
|
283
282
|
warn: (msg: string, fields?: Record<string, unknown>) => void;
|
|
284
283
|
}, router?: EngineNoticeRouter, metrics?: EngineNoticeMetricsSeat): NonNullable<RunnerDeps["onNotice"]>;
|
|
284
|
+
/**
|
|
285
|
+
* [ref](core 7.62.0 [ref]):**进程缺省通告席** —— 引擎在没有自己席的地方说的话(四个无席收值口:品牌 brain 构造 / 一次请求的路由读 / 对端拨号 /
|
|
286
|
+
* 直建蒸馏座;core 读法:在场的席恒赢,缺席才落这里)交给与有席通告**同一只**转发体({@link createEngineNoticeForwarder}:先结构化 `engine_notice` 日志、再分流)。
|
|
287
|
+
* 修前这些话落 `console.warn` 裸句 —— 同一种事实两种写法。构造引擎的两个进程入口(`boot/stage-01-config.ts` / `run-local.ts`)在 logger 建起之后各装一次;
|
|
288
|
+
* 装之前(声明自有凭据名、读配置那几步)引擎若无席说话仍落 `console.warn`(那几步不建 brain,四个收值口一个都不经过)。
|
|
289
|
+
*/
|
|
290
|
+
export declare function installDefaultEngineNoticeSeat(logger: {
|
|
291
|
+
warn: (msg: string, fields?: Record<string, unknown>) => void;
|
|
292
|
+
}, metrics?: EngineNoticeMetricsSeat): void;
|
|
285
293
|
/**
|
|
286
294
|
* `onNotice` **席**的装配判据本身 —— 「`warn` 真在场才铸席」这一条从此是**一个可直接调用的函数**,
|
|
287
295
|
* 不是散在装配点、只能靠扫源码文本去猜的一行三元(codex 交叉复审 R1-[medium],验真后修)。
|
package/dist/boot/runner-deps.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createFileWorkflowScriptStore } from "@sema-agent/core";
|
|
1
|
+
import { createFileWorkflowScriptStore, setDefaultEngineNoticeSeat } from "@sema-agent/core";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { lkgReadDenyRows } from "../config-lkg.js";
|
|
4
4
|
import { auditReadDenyAnchoring } from "./read-deny-anchor-audit.js";
|
|
@@ -8,7 +8,6 @@ import { assertAutoConsolidationWirable } from "./memory-consolidation.js";
|
|
|
8
8
|
import { createHardenedVmRunner } from "../orchestration/hardened-vm-runner.js";
|
|
9
9
|
import { createWorkerHardenedVmRunner } from "../orchestration/hardened-vm-worker-runner.js";
|
|
10
10
|
import { WorkflowAgentRegistry } from "../orchestration/workflow-agent-steer.js";
|
|
11
|
-
import { resolveServedSession } from "../orchestration/workflow-completion-inbox.js";
|
|
12
11
|
import { defaultEngineNoticeRouter, redactNoticeMessage, redactNoticeRuleText } from "../trace/engine-notice-wire.js";
|
|
13
12
|
import { WorkflowNotifyGate } from "../orchestration/workflow-notify-journal.js";
|
|
14
13
|
import { makeLoadProjectMemory, makeProbeInstructionSources } from "../project-memory.js";
|
|
@@ -32,6 +31,7 @@ export function createRunnerDepsOnAsk(toolApproval) {
|
|
|
32
31
|
export const CONFIG_ADVISORY_CLASSIFICATIONS = new Set([
|
|
33
32
|
"file-history-no-env",
|
|
34
33
|
"file-history-no-store",
|
|
34
|
+
"input-author-unreadable",
|
|
35
35
|
"interaction-posture-refused",
|
|
36
36
|
"memory-tools-not-mounted",
|
|
37
37
|
"peer-seat-hold",
|
|
@@ -60,6 +60,9 @@ export function createEngineNoticeForwarder(logger, router = defaultEngineNotice
|
|
|
60
60
|
router.route(notice);
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
|
+
export function installDefaultEngineNoticeSeat(logger, metrics) {
|
|
64
|
+
setDefaultEngineNoticeSeat(createEngineNoticeForwarder(logger, defaultEngineNoticeRouter, metrics));
|
|
65
|
+
}
|
|
63
66
|
export function createEngineNoticeSeat(logger, router = defaultEngineNoticeRouter) {
|
|
64
67
|
const warn = logger?.warn?.bind(logger);
|
|
65
68
|
return warn ? { onNotice: createEngineNoticeForwarder({ warn }, router) } : {};
|
|
@@ -140,7 +143,7 @@ export function createSharedRunnerDeps(ctx) {
|
|
|
140
143
|
return shared;
|
|
141
144
|
}
|
|
142
145
|
export function createRunnerDeps(ctx) {
|
|
143
|
-
const { config, logger, metrics, localRoot, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine, sessionCaptureRecords, memorySyncRunner, runtimeCapsResolver, fileHistoryStore, permissionRuleStore, fleetBus, workflowRunStore, workflowJournalStore, workflowAgentRegistry, workflowNotifyGate,
|
|
146
|
+
const { config, logger, metrics, localRoot, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine, sessionCaptureRecords, memorySyncRunner, runtimeCapsResolver, fileHistoryStore, permissionRuleStore, fleetBus, workflowRunStore, workflowJournalStore, workflowAgentRegistry, workflowNotifyGate, deliverWorkflowCompletion, } = ctx;
|
|
144
147
|
const peerSessionLister = sessionStore.listSessions?.bind(sessionStore);
|
|
145
148
|
const memoryEngineIncident = createMemoryEngineIncidentSink({ logger, metrics });
|
|
146
149
|
const sharedRunnerDeps = createSharedRunnerDeps(ctx);
|
|
@@ -169,20 +172,6 @@ export function createRunnerDeps(ctx) {
|
|
|
169
172
|
...(workflowNotifyGate
|
|
170
173
|
? workflowNotifyGate.buildNotifier()
|
|
171
174
|
: { notify: (input) => deliverWorkflowCompletion(input) }),
|
|
172
|
-
ackServed: async (input) => {
|
|
173
|
-
if (!workflowCompletionInbox)
|
|
174
|
-
return;
|
|
175
|
-
try {
|
|
176
|
-
const sid = await resolveServedSession(input, getRunStore() ? (id) => getRunStore().getRun(id) : undefined);
|
|
177
|
-
if (sid) {
|
|
178
|
-
await workflowCompletionInbox.markTerminalServed(sid, input.runId);
|
|
179
|
-
logger.info("workflow_complete_ack_served", { route: "poll-served", sessionId: sid, runId: input.runId });
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
catch (err) {
|
|
183
|
-
logger.warn("workflow_ack_served_failed", { runId: input.runId, err: seatText("operator-log-text", String(err)) });
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
175
|
},
|
|
187
176
|
}
|
|
188
177
|
: {};
|
package/dist/boot/shutdown.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ import type { BreakerStateStore, CostQuotaStore, RateLimiterStore, StoreBackend
|
|
|
31
31
|
import type { WorkflowNotifyJournalStore } from "../orchestration/workflow-notify-journal.js";
|
|
32
32
|
import type { ToolApprovalCoordinator } from "../tool-approval.js";
|
|
33
33
|
import type { ParkCommitWatch } from "../plugins/park-commit-watch.js";
|
|
34
|
+
import type { PeerInboundShutdownReading } from "../peer-inbound-face.js";
|
|
34
35
|
import { type DrainState } from "../fleet/drain-entry.js";
|
|
35
36
|
export interface ShutdownCtx {
|
|
36
37
|
config: ServiceConfig;
|
|
@@ -94,6 +95,14 @@ export interface ShutdownCtx {
|
|
|
94
95
|
servingLease?: {
|
|
95
96
|
stop(): void;
|
|
96
97
|
} | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* [ref]:被扣跨会话来信的收信方决断面(`peer-inbound-face.ts`,进程单例)的关停口 —— CC `HBe` 的宿主半场(core 不调 `PeerHeldQueue.shutdown()`)。
|
|
100
|
+
* hardShutdown 起点与审批面收尾**并行**调它、`backend.close()` 之前等它(结清要走信箱店的 CAS 与回执投递):本进程仍被扣的信按 core 的规则
|
|
101
|
+
* 带 `expired` 回执结清(reason `shutdown`),core 等回执落箱再兑现(没落的点名 seq ⇒ 读数 `receiptFaults`)。缺席 = 本装配不接(测试装配)。
|
|
102
|
+
*/
|
|
103
|
+
peerInbound?: {
|
|
104
|
+
shutdown(): Promise<PeerInboundShutdownReading>;
|
|
105
|
+
} | undefined;
|
|
97
106
|
}
|
|
98
107
|
/**
|
|
99
108
|
* 受控退的**后台宽限**还要等多久(ms)—— hardShutdown 软停后台 shell 之后、`process.exit` 之前,给软停过的行**一次**
|
package/dist/boot/shutdown.js
CHANGED
|
@@ -18,7 +18,7 @@ export function backgroundGraceRemainingMs(a) {
|
|
|
18
18
|
return Math.max(0, Math.min(a.softStoppedAt + a.graceMs, a.deadlineMs) - a.now);
|
|
19
19
|
}
|
|
20
20
|
export function installShutdownHandlers(ctx) {
|
|
21
|
-
const { config, logger, server, reaper, fleetReconcile, retentionLane, releaseRetentionLease, otelExporter, breakerState, costQuota, rateLimiter, runner, subRunner, lspManager, workflowNotifyJournal, fleetClient, backend, drainState, storeLiveProbe, webAdmin, version, deviceHub, toolApproval, parkCommits, servingLease, } = ctx;
|
|
21
|
+
const { config, logger, server, reaper, fleetReconcile, retentionLane, releaseRetentionLease, otelExporter, breakerState, costQuota, rateLimiter, runner, subRunner, lspManager, workflowNotifyJournal, fleetClient, backend, drainState, storeLiveProbe, webAdmin, version, deviceHub, toolApproval, parkCommits, servingLease, peerInbound, } = ctx;
|
|
22
22
|
const dataRoot = config.localDataRoot;
|
|
23
23
|
if (dataRoot) {
|
|
24
24
|
const prior = readCrashLast(dataRoot);
|
|
@@ -93,6 +93,22 @@ export function installShutdownHandlers(ctx) {
|
|
|
93
93
|
logger.warn("approval_park_uncommitted_at_shutdown", { approvalId: p.approvalId, taskId: p.taskId });
|
|
94
94
|
})
|
|
95
95
|
.catch((err) => logger.warn("approval_drain_for_shutdown_failed", { err: seatText("operator-log-text", String(err)) }));
|
|
96
|
+
const peerInboundDrain = peerInbound === undefined
|
|
97
|
+
? Promise.resolve()
|
|
98
|
+
: (async () => {
|
|
99
|
+
const deadline = new AbortController();
|
|
100
|
+
const settled = peerInbound.shutdown().then((reading) => {
|
|
101
|
+
if (reading.cards > 0)
|
|
102
|
+
logger.info("peer_inbound_settled_at_shutdown", { queues: reading.queues, cards: reading.cards });
|
|
103
|
+
for (const fault of reading.receiptFaults)
|
|
104
|
+
logger.warn("peer_inbound_shutdown_receipt_unlanded", { err: seatText("operator-log-text", fault) });
|
|
105
|
+
}, (err) => logger.warn("peer_inbound_shutdown_failed", { err: seatText("operator-log-text", String(err)) }));
|
|
106
|
+
const timedOut = delay(Math.max(0, graceDeadlineMs - Date.now()), undefined, { signal: deadline.signal }).then(() => "deadline", () => "done");
|
|
107
|
+
const winner = await Promise.race([settled.then(() => "done"), timedOut]);
|
|
108
|
+
deadline.abort();
|
|
109
|
+
if (winner === "deadline")
|
|
110
|
+
logger.warn("peer_inbound_shutdown_unfinished_at_deadline", {});
|
|
111
|
+
})();
|
|
96
112
|
clearInterval(reaper);
|
|
97
113
|
clearInterval(fleetReconcile.timer);
|
|
98
114
|
const retentionTeardown = retentionLane === undefined
|
|
@@ -120,7 +136,7 @@ export function installShutdownHandlers(ctx) {
|
|
|
120
136
|
const softStoppedAt = Date.now();
|
|
121
137
|
const backgroundGraceMs = backgroundGraceRemainingMs({ softStopped: backgroundSoftStopped, softStoppedAt, now: softStoppedAt, graceMs: HOST_BG_KILL_GRACE_MS, deadlineMs: graceDeadlineMs });
|
|
122
138
|
const backgroundGrace = backgroundGraceMs > 0 ? delay(backgroundGraceMs) : Promise.resolve();
|
|
123
|
-
const drained = approvalDrain
|
|
139
|
+
const drained = Promise.all([approvalDrain, peerInboundDrain])
|
|
124
140
|
.then(() => parkCommits?.quiesce(graceDeadlineMs))
|
|
125
141
|
.then((q) => {
|
|
126
142
|
if (q !== undefined && q.inFlight > 0)
|
|
@@ -15,6 +15,7 @@ import { setRedactionObserver } from "../trace/redact.js";
|
|
|
15
15
|
import { installOutboundDispatcher } from "../outbound-dispatcher.js";
|
|
16
16
|
import { provisionSemaConfigDir } from "../sema-config-dir.js";
|
|
17
17
|
import { bindOwnCredentialsConfig, declareServerWithheldEnv } from "../server-secret-env.js";
|
|
18
|
+
import { installDefaultEngineNoticeSeat } from "./runner-deps.js";
|
|
18
19
|
export function runStage01() {
|
|
19
20
|
declareServerWithheldEnv();
|
|
20
21
|
const config = loadConfig();
|
|
@@ -27,6 +28,7 @@ export function runStage01() {
|
|
|
27
28
|
const metrics = createMetrics();
|
|
28
29
|
installFailOpenRecorder({ logger, metrics, redactDetail: redactSecrets });
|
|
29
30
|
installSecretEnvScrubRecorder({ logger, metrics });
|
|
31
|
+
installDefaultEngineNoticeSeat(logger, metrics);
|
|
30
32
|
installFileHistoryFailureRecorder({ logger, metrics });
|
|
31
33
|
logConfigDiagnostics(logger);
|
|
32
34
|
for (const w of drainNumEnvWarnings())
|
|
@@ -3,6 +3,7 @@ import { createWebAdminRuntime } from "./web-admin.js";
|
|
|
3
3
|
import { composeExecutionLane, FILE_SOURCED_LANES } from "./execution-lane.js";
|
|
4
4
|
import { configSourceKind } from "../config-provider.js";
|
|
5
5
|
import { logConfigDirMigration, migrateLocalConfigDirectory } from "../config-d-migration.js";
|
|
6
|
+
import { logEnvModelsMigration, runEnvModelsMigration } from "../config-root-migration.js";
|
|
6
7
|
import { assertLocalConfigDirTrusted } from "../config-dir-trust.js";
|
|
7
8
|
import { defaultModelRefusal, refusedNameMintedRefusal } from "../model-entry-refusal.js";
|
|
8
9
|
import { isRosterGateArmed } from "../config.js";
|
|
@@ -13,6 +14,8 @@ export async function runStage02(ctx) {
|
|
|
13
14
|
const configSource = configSourceKind(config);
|
|
14
15
|
if (configSource === "local") {
|
|
15
16
|
await assertLocalConfigDirTrusted({ root: localRoot, declaredOwnerUid: config.configLocalOwnerUid });
|
|
17
|
+
const envModelsMigration = { root: localRoot, env: process.env, envTableIsPlaceholder: isRosterGateArmed(config.webAdmin) };
|
|
18
|
+
logEnvModelsMigration(logger, envModelsMigration, await runEnvModelsMigration(envModelsMigration));
|
|
16
19
|
logConfigDirMigration(logger, await migrateLocalConfigDirectory(localRoot));
|
|
17
20
|
}
|
|
18
21
|
await composeExecutionLane(config, { configSource, localRoot, logger, drivesFromFile: FILE_SOURCED_LANES });
|
|
@@ -5,7 +5,10 @@ export declare function runStage03(ctx: Awaited<ReturnType<typeof runStage02>>):
|
|
|
5
5
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
6
6
|
engineDataRoot: string;
|
|
7
7
|
instanceId: string;
|
|
8
|
-
mailboxRecipientLifecycle:
|
|
8
|
+
mailboxRecipientLifecycle: Readonly<{
|
|
9
|
+
retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
|
|
10
|
+
listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
|
|
11
|
+
}> | undefined;
|
|
9
12
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
10
13
|
memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
11
14
|
memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
@@ -2,9 +2,8 @@ import { uuidv7 } from "@sema-agent/core";
|
|
|
2
2
|
import { openStores } from "./stores.js";
|
|
3
3
|
export async function runStage03(ctx) {
|
|
4
4
|
const { config, localRoot, logger, metrics } = ctx;
|
|
5
|
-
const { backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, taskAttachmentStore, mailboxStore, mailboxRecipientLifecycle, memoryExportStores, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngine, } = await openStores({ config, logger, metrics, localRoot });
|
|
5
|
+
const { backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, sessionCaptureRecords, taskAttachmentStore, mailboxStore, mailboxRecipientLifecycle, memoryExportStores, memorySyncRunner, sessionStore, breakerState, usageWindowStore, memoryPosture, taskListLane, sqlEngine, } = await openStores({ config, logger, metrics, localRoot });
|
|
6
6
|
const instanceId = uuidv7();
|
|
7
|
-
const sessionCaptureRecords = backend?.sessionCaptureRecords();
|
|
8
7
|
return { ...ctx, backend, backgroundAgentStore, breakerState, engineDataRoot, instanceId, mailboxRecipientLifecycle, mailboxStore, memoryEngine, memoryExportStores, memoryPosture, memorySyncCursors, memorySyncRunner, rosterStore, sessionCaptureRecords, sessionStore, sqlEngine, storePosture, taskAttachmentStore, taskListLane, usageWindowStore };
|
|
9
8
|
}
|
|
10
9
|
//# sourceMappingURL=stage-03-store-backend.js.map
|
|
@@ -28,14 +28,17 @@ export declare function runStage04(ctx: Awaited<ReturnType<typeof runStage03>>):
|
|
|
28
28
|
sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
|
|
29
29
|
sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
|
|
30
30
|
sideQueryAccounting: import("../budget.js").SideQueryAccounting;
|
|
31
|
-
toolResultStore: import("
|
|
31
|
+
toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
|
|
32
32
|
tracer: import("@sema-agent/core").TracerHook;
|
|
33
33
|
backend: import("../index.js").StoreBackend | undefined;
|
|
34
34
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
35
35
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
36
36
|
engineDataRoot: string;
|
|
37
37
|
instanceId: string;
|
|
38
|
-
mailboxRecipientLifecycle:
|
|
38
|
+
mailboxRecipientLifecycle: Readonly<{
|
|
39
|
+
retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
|
|
40
|
+
listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
|
|
41
|
+
}> | undefined;
|
|
39
42
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
40
43
|
memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
41
44
|
memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
@@ -8,22 +8,20 @@ import { createRuleConsentLane } from "../rules-consent.js";
|
|
|
8
8
|
import { createConsolidationValve } from "./memory-consolidation.js";
|
|
9
9
|
import { createOperatorFaceIncidentSink } from "../memory-incident-sink.js";
|
|
10
10
|
export async function runStage04(ctx) {
|
|
11
|
-
const { backend, breakerState, config, logger, memoryEngine, metrics
|
|
12
|
-
const memoryBundleFaces = memoryEngine ? createMemoryBundleFaces(memoryEngine
|
|
11
|
+
const { backend, breakerState, config, logger, memoryEngine, metrics } = ctx;
|
|
12
|
+
const memoryBundleFaces = memoryEngine ? createMemoryBundleFaces(memoryEngine) : undefined;
|
|
13
13
|
const memoryComplianceFaces = memoryEngine
|
|
14
14
|
? createMemoryComplianceFaces(memoryEngine, {
|
|
15
15
|
onIncident: createOperatorFaceIncidentSink({ logger }, "memory_compliance_incident"),
|
|
16
|
-
...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}),
|
|
17
16
|
})
|
|
18
17
|
: undefined;
|
|
19
18
|
const memoryOriginFaces = memoryEngine
|
|
20
19
|
? createMemoryOriginFaces(memoryEngine, {
|
|
21
20
|
onIncident: createOperatorFaceIncidentSink({ logger }, "memory_origin_incident"),
|
|
22
|
-
...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}),
|
|
23
21
|
})
|
|
24
22
|
: undefined;
|
|
25
23
|
const sessionMemoryStatusFace = memoryEngine
|
|
26
|
-
? createSessionMemoryStatusFace(memoryEngine
|
|
24
|
+
? createSessionMemoryStatusFace(memoryEngine)
|
|
27
25
|
: undefined;
|
|
28
26
|
const { valve: consolidationValve, watch: consolidationSeatWatch } = createConsolidationValve({ config, memoryEngine, logger });
|
|
29
27
|
const adoptionBoot = await runAdoptionBootScan({ backend, logger });
|
|
@@ -47,14 +47,17 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
|
|
|
47
47
|
sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
|
|
48
48
|
sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
|
|
49
49
|
sideQueryAccounting: import("../budget.js").SideQueryAccounting;
|
|
50
|
-
toolResultStore: import("
|
|
50
|
+
toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
|
|
51
51
|
tracer: import("@sema-agent/core").TracerHook;
|
|
52
52
|
backend: import("../index.js").StoreBackend | undefined;
|
|
53
53
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
54
54
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
55
55
|
engineDataRoot: string;
|
|
56
56
|
instanceId: string;
|
|
57
|
-
mailboxRecipientLifecycle:
|
|
57
|
+
mailboxRecipientLifecycle: Readonly<{
|
|
58
|
+
retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
|
|
59
|
+
listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
|
|
60
|
+
}> | undefined;
|
|
58
61
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
59
62
|
memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
60
63
|
memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
@@ -108,14 +108,17 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
|
|
|
108
108
|
sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
|
|
109
109
|
sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
|
|
110
110
|
sideQueryAccounting: import("../budget.js").SideQueryAccounting;
|
|
111
|
-
toolResultStore: import("
|
|
111
|
+
toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
|
|
112
112
|
tracer: import("@sema-agent/core").TracerHook;
|
|
113
113
|
backend: import("../index.js").StoreBackend | undefined;
|
|
114
114
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
115
115
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
116
116
|
engineDataRoot: string;
|
|
117
117
|
instanceId: string;
|
|
118
|
-
mailboxRecipientLifecycle:
|
|
118
|
+
mailboxRecipientLifecycle: Readonly<{
|
|
119
|
+
retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
|
|
120
|
+
listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
|
|
121
|
+
}> | undefined;
|
|
119
122
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
120
123
|
memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
121
124
|
memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
@@ -95,7 +95,6 @@ export async function runStage06(ctx) {
|
|
|
95
95
|
...(config.memoryProvenance !== undefined ? { provenance: config.memoryProvenance } : {}),
|
|
96
96
|
onIncident: createOperatorFaceIncidentSink({ logger }, "memory_consolidation_incident"),
|
|
97
97
|
onStopDetail: (audit) => logger.warn("memory_consolidation_stop_detail", audit),
|
|
98
|
-
...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}),
|
|
99
98
|
writeJudge: createOperatorValveWriteJudge({ ruleStoreProvider: permissionRuleProvider, config }),
|
|
100
99
|
onNotice: createEngineNoticeForwarder(logger, defaultEngineNoticeRouter, metrics),
|
|
101
100
|
})
|
|
@@ -142,10 +141,9 @@ export async function runStage06(ctx) {
|
|
|
142
141
|
memorySyncRunner, toolResultStore: runnerOffloadStore, checkpointStore, sessionPolicyStore, runtimeCapsResolver, fileHistoryStore,
|
|
143
142
|
permissionRuleStore: permissionRuleProvider,
|
|
144
143
|
executionEnvFactory, lspManager, fleetBus, deploymentMods, workflowRunStore, workflowJournalStore,
|
|
145
|
-
workflowAgentRegistry, workflowNotifyGate,
|
|
144
|
+
workflowAgentRegistry, workflowNotifyGate, deliverWorkflowCompletion, orgMemoryAdmission,
|
|
146
145
|
governanceSeams,
|
|
147
146
|
sharedMemoryStores: sharedMemoryStore ? sharedMemoryStore : undefined,
|
|
148
|
-
getRunStore: () => runStore,
|
|
149
147
|
});
|
|
150
148
|
const orgDeliveryGate = mountOrgDeliveryGate({ runnerDeps, directory: orgMemoryAdmission.directory, mailboxStore, backend, logger });
|
|
151
149
|
const runner = new Runner(runnerDeps);
|
|
@@ -125,14 +125,17 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
|
|
|
125
125
|
sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
|
|
126
126
|
sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
|
|
127
127
|
sideQueryAccounting: import("../budget.js").SideQueryAccounting;
|
|
128
|
-
toolResultStore: import("
|
|
128
|
+
toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
|
|
129
129
|
tracer: import("@sema-agent/core").TracerHook;
|
|
130
130
|
backend: import("../index.js").StoreBackend | undefined;
|
|
131
131
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
132
132
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
133
133
|
engineDataRoot: string;
|
|
134
134
|
instanceId: string;
|
|
135
|
-
mailboxRecipientLifecycle:
|
|
135
|
+
mailboxRecipientLifecycle: Readonly<{
|
|
136
|
+
retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
|
|
137
|
+
listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
|
|
138
|
+
}> | undefined;
|
|
136
139
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
137
140
|
memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
138
141
|
memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|