@sema-agent/server 7.142.0 → 7.143.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 +442 -0
- package/USAGE.md +41 -24
- 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 +124 -25
- package/dist/approval-card.js +103 -23
- 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/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 +10 -7
- package/dist/boot/runner-deps.js +5 -17
- package/dist/boot/shutdown.d.ts +9 -0
- package/dist/boot/shutdown.js +16 -2
- 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 +5 -1
- 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 +9 -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 +11 -1
- package/dist/capabilities/scenarios.js +1 -0
- 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-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 +5 -3
- package/dist/delegated-session-owner.js +1 -1
- package/dist/device-ws-protocol.d.ts +1 -0
- package/dist/device-ws-protocol.js +2 -1
- package/dist/env-model-table-gate.d.ts +53 -0
- package/dist/env-model-table-gate.js +53 -0
- 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/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/resume-legs.d.ts +21 -7
- package/dist/http/resume-legs.js +71 -49
- 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 +142 -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/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/fail-open.d.ts +20 -4
- package/dist/observability/fail-open.js +17 -4
- package/dist/observability/run-terminal.js +4 -0
- 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.js +1 -1
- package/dist/peer-inbound-face.d.ts +127 -0
- package/dist/peer-inbound-face.js +158 -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/checkpoint-store-sql.d.ts +4 -4
- package/dist/plugins/checkpoint-store-sql.js +9 -7
- 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/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 +1 -1
- package/dist/plugins/local-checkpoint-store.js +2 -2
- package/dist/plugins/local-session-store.d.ts +6 -2
- package/dist/plugins/local-session-store.js +8 -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 +32 -2
- package/dist/plugins/one-time-migrations.js +106 -3
- 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/remote-env-device.d.ts +8 -11
- package/dist/plugins/remote-env-device.js +6 -3
- package/dist/plugins/remote-env-k8s.d.ts +37 -24
- package/dist/plugins/remote-env-k8s.js +50 -17
- 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/sql-errors.d.ts +10 -1
- package/dist/plugins/sql-errors.js +13 -0
- package/dist/plugins/store-backend.d.ts +23 -28
- package/dist/plugins/store-backend.js +9 -1
- 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/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 +9 -5
- package/dist/runs.d.ts +12 -8
- package/dist/runs.js +6 -7
- package/dist/runtime-governance.d.ts +1 -1
- package/dist/server-secret-env.d.ts +4 -0
- package/dist/session-error-wire.d.ts +12 -0
- package/dist/session-error-wire.js +6 -0
- package/dist/session-incarnation.d.ts +1 -1
- package/dist/session-notify-door.d.ts +106 -0
- package/dist/session-notify-door.js +93 -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 +52 -34
- package/dist/tool-approval.js +66 -57
- package/dist/trace/core-keyset-guard.d.ts +11 -8
- package/dist/trace/engine-notice-wire.d.ts +1 -1
- package/dist/trace/engine-notice-wire.js +3 -1
- 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/model-segment.d.ts +55 -25
- package/dist/trace/model-segment.js +101 -33
- package/dist/trace/project.d.ts +7 -4
- package/dist/trace/project.js +6 -0
- package/dist/trace/redact.d.ts +61 -9
- package/dist/trace/redact.js +1490 -468
- package/dist/trace/self-minted-wire.d.ts +510 -38
- package/dist/trace/self-minted-wire.js +165 -17
- 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/dist/boot/runner-deps.js
CHANGED
|
@@ -8,13 +8,13 @@ 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";
|
|
15
14
|
import { createInstructionSourceSeat } from "../instruction-source-notice.js";
|
|
16
15
|
import { workflowModelAllowlistFor } from "../task-workflow.js";
|
|
17
16
|
import { buildCrossSessionInboundLayers, crossSessionDialogExpiryOf } from "../cross-session-settings.js";
|
|
17
|
+
import { defaultPeerInboundFace } from "../peer-inbound-face.js";
|
|
18
18
|
import { createPeerDirectory } from "../peer-directory.js";
|
|
19
19
|
import { storeFormRefusalInIncident } from "../memory-store-refusal.js";
|
|
20
20
|
import { coreFileHistoryCaptureSeat } from "../file-history-capture.js";
|
|
@@ -32,6 +32,7 @@ export function createRunnerDepsOnAsk(toolApproval) {
|
|
|
32
32
|
export const CONFIG_ADVISORY_CLASSIFICATIONS = new Set([
|
|
33
33
|
"file-history-no-env",
|
|
34
34
|
"file-history-no-store",
|
|
35
|
+
"input-author-unreadable",
|
|
35
36
|
"interaction-posture-refused",
|
|
36
37
|
"memory-tools-not-mounted",
|
|
37
38
|
"peer-seat-hold",
|
|
@@ -47,7 +48,7 @@ export const PROMPT_CACHE_BREAK_CAUSE_LEVEL = {
|
|
|
47
48
|
};
|
|
48
49
|
const PROMPT_CACHE_BREAK_LEVELS = new Map(Object.entries(PROMPT_CACHE_BREAK_CAUSE_LEVEL));
|
|
49
50
|
const CEILING_ORIGINS = new Set(["walltime", "turns"]);
|
|
50
|
-
export function createEngineNoticeForwarder(logger, router = defaultEngineNoticeRouter, metrics) {
|
|
51
|
+
export function createEngineNoticeForwarder(logger, router = defaultEngineNoticeRouter, metrics, peerInbound = defaultPeerInboundFace) {
|
|
51
52
|
return (notice) => {
|
|
52
53
|
const detail = redactNoticeRuleText(notice.code, notice.detail);
|
|
53
54
|
const message = redactNoticeMessage(notice.message);
|
|
@@ -57,6 +58,7 @@ export function createEngineNoticeForwarder(logger, router = defaultEngineNotice
|
|
|
57
58
|
if (typeof origin === "string" && CEILING_ORIGINS.has(origin))
|
|
58
59
|
metrics.inc("limit_ceiling_after_answer_total", { origin });
|
|
59
60
|
}
|
|
61
|
+
peerInbound.observe(notice);
|
|
60
62
|
router.route(notice);
|
|
61
63
|
};
|
|
62
64
|
}
|
|
@@ -140,7 +142,7 @@ export function createSharedRunnerDeps(ctx) {
|
|
|
140
142
|
return shared;
|
|
141
143
|
}
|
|
142
144
|
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,
|
|
145
|
+
const { config, logger, metrics, localRoot, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine, sessionCaptureRecords, memorySyncRunner, runtimeCapsResolver, fileHistoryStore, permissionRuleStore, fleetBus, workflowRunStore, workflowJournalStore, workflowAgentRegistry, workflowNotifyGate, deliverWorkflowCompletion, } = ctx;
|
|
144
146
|
const peerSessionLister = sessionStore.listSessions?.bind(sessionStore);
|
|
145
147
|
const memoryEngineIncident = createMemoryEngineIncidentSink({ logger, metrics });
|
|
146
148
|
const sharedRunnerDeps = createSharedRunnerDeps(ctx);
|
|
@@ -169,20 +171,6 @@ export function createRunnerDeps(ctx) {
|
|
|
169
171
|
...(workflowNotifyGate
|
|
170
172
|
? workflowNotifyGate.buildNotifier()
|
|
171
173
|
: { 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
174
|
},
|
|
187
175
|
}
|
|
188
176
|
: {};
|
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`)。缺席 = 本装配不接(测试装配)。
|
|
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,20 @@ 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.queues > 0 || reading.scopeUnresolved > 0)
|
|
102
|
+
logger.info("peer_inbound_settled_at_shutdown", { queues: reading.queues, scopeUnresolved: reading.scopeUnresolved });
|
|
103
|
+
}, (err) => logger.warn("peer_inbound_shutdown_failed", { err: seatText("operator-log-text", String(err)) }));
|
|
104
|
+
const timedOut = delay(Math.max(0, graceDeadlineMs - Date.now()), undefined, { signal: deadline.signal }).then(() => "deadline", () => "done");
|
|
105
|
+
const winner = await Promise.race([settled.then(() => "done"), timedOut]);
|
|
106
|
+
deadline.abort();
|
|
107
|
+
if (winner === "deadline")
|
|
108
|
+
logger.warn("peer_inbound_shutdown_unfinished_at_deadline", {});
|
|
109
|
+
})();
|
|
96
110
|
clearInterval(reaper);
|
|
97
111
|
clearInterval(fleetReconcile.timer);
|
|
98
112
|
const retentionTeardown = retentionLane === undefined
|
|
@@ -120,7 +134,7 @@ export function installShutdownHandlers(ctx) {
|
|
|
120
134
|
const softStoppedAt = Date.now();
|
|
121
135
|
const backgroundGraceMs = backgroundGraceRemainingMs({ softStopped: backgroundSoftStopped, softStoppedAt, now: softStoppedAt, graceMs: HOST_BG_KILL_GRACE_MS, deadlineMs: graceDeadlineMs });
|
|
122
136
|
const backgroundGrace = backgroundGraceMs > 0 ? delay(backgroundGraceMs) : Promise.resolve();
|
|
123
|
-
const drained = approvalDrain
|
|
137
|
+
const drained = Promise.all([approvalDrain, peerInboundDrain])
|
|
124
138
|
.then(() => parkCommits?.quiesce(graceDeadlineMs))
|
|
125
139
|
.then((q) => {
|
|
126
140
|
if (q !== undefined && q.inFlight > 0)
|
|
@@ -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;
|
|
@@ -23,8 +23,10 @@ import { createUserInputLedgerAtBoot, writerGoneEvidenceFor } from "../user-inpu
|
|
|
23
23
|
import { createParkedReviveInheritedGate } from "./parked-revive-gate.js";
|
|
24
24
|
import { createParkedReviveSurface } from "../parked-revive-surface.js";
|
|
25
25
|
import { createWebFetchSummarizeLane } from "./webfetch-summarize-lane.js";
|
|
26
|
+
import { assertGovernanceAssemblable } from "./governance-seams.js";
|
|
26
27
|
import { createRunnerDepsOnAsk } from "./runner-deps.js";
|
|
27
|
-
import { bindRateLimiter, bindRunStore } from "./late-binds.js";
|
|
28
|
+
import { bindRateLimiter, bindRunStore, sessionNotifyDoor } from "./late-binds.js";
|
|
29
|
+
import { createBackgroundCompletionRelay } from "../session-notify-door.js";
|
|
28
30
|
import { buildDisplaySafeUrl } from "../trace/redact.js";
|
|
29
31
|
import * as facts from "../capability-facts.js";
|
|
30
32
|
import { WEB_ADMIN_ENV } from "@sema-agent/settings-schema";
|
|
@@ -153,6 +155,7 @@ export async function runStage07(ctx) {
|
|
|
153
155
|
bindRateLimiter(rateLimiter);
|
|
154
156
|
let skills = loadDeploymentSkills(config, logger);
|
|
155
157
|
skills = await webAdmin.applyCenterCapabilities(skills, peerDesk, peerDesk.lease("roster"));
|
|
158
|
+
assertGovernanceAssemblable(config);
|
|
156
159
|
const repoClient = config.gitApiBaseUrl ? createRepoClient(config.gitApiKind, config.gitApiBaseUrl, config.gitApiToken) : undefined;
|
|
157
160
|
const webSearchCfg = webSearchConfigFromEnv();
|
|
158
161
|
const webSearch = webSearchCfg ? createWebSearchBackend(webSearchCfg) : undefined;
|
|
@@ -181,6 +184,7 @@ export async function runStage07(ctx) {
|
|
|
181
184
|
ensureChildSessionDurable: ensureChildSessionDurable ? ensureChildSessionDurable : undefined,
|
|
182
185
|
taskListStoreFor: taskListLane.storeFor,
|
|
183
186
|
subagentExtraTools: sendUserFileToolSpec ? subagentSendUserFileExtraTools({ spec: sendUserFileToolSpec }) : undefined,
|
|
187
|
+
backgroundCompletionSinkFor: createBackgroundCompletionRelay({ door: () => sessionNotifyDoor, logger }),
|
|
184
188
|
};
|
|
185
189
|
const scenarios = buildScenarios(scenarioDeps);
|
|
186
190
|
const builtinDefaultScenario = scenarios.default;
|
|
@@ -138,14 +138,17 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
|
|
|
138
138
|
sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
|
|
139
139
|
sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
|
|
140
140
|
sideQueryAccounting: import("../budget.js").SideQueryAccounting;
|
|
141
|
-
toolResultStore: import("
|
|
141
|
+
toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
|
|
142
142
|
tracer: import("@sema-agent/core").TracerHook;
|
|
143
143
|
backend: import("../index.js").StoreBackend | undefined;
|
|
144
144
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
145
145
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
146
146
|
engineDataRoot: string;
|
|
147
147
|
instanceId: string;
|
|
148
|
-
mailboxRecipientLifecycle:
|
|
148
|
+
mailboxRecipientLifecycle: Readonly<{
|
|
149
|
+
retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
|
|
150
|
+
listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
|
|
151
|
+
}> | undefined;
|
|
149
152
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
150
153
|
memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
151
154
|
memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
@@ -162,14 +162,17 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
|
|
|
162
162
|
sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
|
|
163
163
|
sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
|
|
164
164
|
sideQueryAccounting: import("../budget.js").SideQueryAccounting;
|
|
165
|
-
toolResultStore: import("
|
|
165
|
+
toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
|
|
166
166
|
tracer: import("@sema-agent/core").TracerHook;
|
|
167
167
|
backend: import("../index.js").StoreBackend | undefined;
|
|
168
168
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
169
169
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
170
170
|
engineDataRoot: string;
|
|
171
171
|
instanceId: string;
|
|
172
|
-
mailboxRecipientLifecycle:
|
|
172
|
+
mailboxRecipientLifecycle: Readonly<{
|
|
173
|
+
retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
|
|
174
|
+
listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
|
|
175
|
+
}> | undefined;
|
|
173
176
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
174
177
|
memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
175
178
|
memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
@@ -161,14 +161,17 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
|
|
|
161
161
|
sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
|
|
162
162
|
sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
|
|
163
163
|
sideQueryAccounting: import("../budget.js").SideQueryAccounting;
|
|
164
|
-
toolResultStore: import("
|
|
164
|
+
toolResultStore: import("@sema-agent/core").ToolResultStore | undefined;
|
|
165
165
|
tracer: import("@sema-agent/core").TracerHook;
|
|
166
166
|
backend: import("../plugins/store-backend.js").StoreBackend | undefined;
|
|
167
167
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
168
168
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
169
169
|
engineDataRoot: string;
|
|
170
170
|
instanceId: string;
|
|
171
|
-
mailboxRecipientLifecycle:
|
|
171
|
+
mailboxRecipientLifecycle: Readonly<{
|
|
172
|
+
retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
|
|
173
|
+
listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
|
|
174
|
+
}> | undefined;
|
|
172
175
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
173
176
|
memoryEngine: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
174
177
|
memoryExportStores: import("../memory-scope-stores.js").MemoryScopeStores | undefined;
|
|
@@ -13,6 +13,7 @@ import { backgroundAgentOutput, taskHandleOutput, taskHandleStop } from "../runs
|
|
|
13
13
|
import { createStoreLiveProbe } from "../store-live-probe.js";
|
|
14
14
|
import { counterStoreLabel } from "../plugins/store-backend.js";
|
|
15
15
|
import { sessionStoreLabelOf } from "../store-posture.js";
|
|
16
|
+
import { defaultPeerInboundFace, peerBoxScope } from "../peer-inbound-face.js";
|
|
16
17
|
import { startFleetClientFromConfig } from "../fleet-client.js";
|
|
17
18
|
import { createCenterWiringReader } from "../capabilities/center-wiring.js";
|
|
18
19
|
import { mintEngineSignal } from "../fleet/engine-signal.js";
|
|
@@ -187,6 +188,7 @@ export async function runStage10(ctx) {
|
|
|
187
188
|
centerIdentityNoticeState: () => webAdmin.centerIdentityNoticeState(),
|
|
188
189
|
modelRefusalsState: () => webAdmin.modelRefusalsState(),
|
|
189
190
|
candidateRejectionState: () => webAdmin.candidateRejectionState(),
|
|
191
|
+
latestPlaneRefusalState: () => webAdmin.latestPlaneRefusalState(),
|
|
190
192
|
configHandoffState: () => webAdmin.configHandoffState(),
|
|
191
193
|
mcpRevocations,
|
|
192
194
|
mcpRevocationState: () => webAdmin.mcpRevocationState(),
|
|
@@ -225,7 +227,7 @@ export async function runStage10(ctx) {
|
|
|
225
227
|
...(runStore ? { runs: runStore } : {}),
|
|
226
228
|
...(workflowRunStore ? { workflows: workflowRunStore } : {}),
|
|
227
229
|
agents: backgroundAgentStore,
|
|
228
|
-
hasPendingAsk: toolApproval ? (
|
|
230
|
+
hasPendingAsk: toolApproval ? (names) => toolApproval.hasLivePendingFromLeg(names) : undefined,
|
|
229
231
|
instanceId,
|
|
230
232
|
logger,
|
|
231
233
|
metrics,
|
|
@@ -342,6 +344,12 @@ export async function runStage10(ctx) {
|
|
|
342
344
|
retentionLane: retentionLaneStarted,
|
|
343
345
|
releaseRetentionLease: retentionLaneStore !== undefined ? () => retentionLaneStore.release(instanceId) : undefined,
|
|
344
346
|
servingLease,
|
|
347
|
+
peerInbound: {
|
|
348
|
+
shutdown: () => defaultPeerInboundFace.shutdown(async (sessionId) => {
|
|
349
|
+
const head = await ownerAware.headOf?.(sessionId);
|
|
350
|
+
return head === undefined ? undefined : peerBoxScope(head.owner);
|
|
351
|
+
}),
|
|
352
|
+
},
|
|
345
353
|
});
|
|
346
354
|
servingLease?.resumeStickyDenial();
|
|
347
355
|
return { ...ctx };
|
package/dist/boot/stores.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { type MemorySyncRunner } from "../memory-sync-client.js";
|
|
|
3
3
|
import type { Logger } from "../observability/logger.js";
|
|
4
4
|
import type { Metrics } from "../observability/metrics.js";
|
|
5
5
|
import { type MemorySyncStore } from "../plugins/memory-sync-store-pg.js";
|
|
6
|
-
import { type MailboxRecipientLifecycle } from "../plugins/mailbox-recipient-lifecycle.js";
|
|
7
6
|
import { type TaskAttachmentStore } from "../plugins/task-attachment-store.js";
|
|
8
7
|
import { type StoreBackend } from "../plugins/store-backend.js";
|
|
9
8
|
import { type MemoryScopeStores } from "../memory-scope-stores.js";
|
|
@@ -29,7 +28,10 @@ export declare function openStores(ctx: OpenStoresCtx): Promise<{
|
|
|
29
28
|
memorySyncCursors: MemorySyncStore | undefined;
|
|
30
29
|
rosterStore: import("@sema-agent/core").RosterStore | undefined;
|
|
31
30
|
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
32
|
-
mailboxRecipientLifecycle:
|
|
31
|
+
mailboxRecipientLifecycle: Readonly<{
|
|
32
|
+
retireRecipient: NonNullable<import("@sema-agent/core").MailboxStore["retireRecipient"]>;
|
|
33
|
+
listRetiredRecipients: NonNullable<import("@sema-agent/core").MailboxStore["listRetiredRecipients"]>;
|
|
34
|
+
}> | undefined;
|
|
33
35
|
taskAttachmentStore: TaskAttachmentStore | undefined;
|
|
34
36
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
35
37
|
memoryExportStores: MemoryScopeStores | undefined;
|
|
@@ -40,5 +42,6 @@ export declare function openStores(ctx: OpenStoresCtx): Promise<{
|
|
|
40
42
|
memoryPosture: import("../memory-posture.js").MemoryPosture;
|
|
41
43
|
taskListLane: import("./task-list-lane.js").TaskListLane;
|
|
42
44
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
45
|
+
sessionCaptureRecords: import("../plugins/store-backend.js").SessionCaptureRecordSource | undefined;
|
|
43
46
|
}>;
|
|
44
47
|
//# sourceMappingURL=stores.d.ts.map
|
package/dist/boot/stores.js
CHANGED
|
@@ -12,7 +12,7 @@ import { MinioBlobBackend } from "../plugins/blob-backend.js";
|
|
|
12
12
|
import { ensureSnapshotBuckets } from "../plugins/snapshot-bucket-presence.js";
|
|
13
13
|
import { PgBackgroundAgentStore, TiDBBackgroundAgentStore, ensurePgBackgroundAgentSchema, ensureTiDBBackgroundAgentSchema } from "../stores-sql/background-agent-store-sql.js";
|
|
14
14
|
import { PgMailboxStore, TiDBMailboxStore, ensurePgMailboxSchema, ensureTiDBMailboxSchema } from "../plugins/mailbox-store-sql.js";
|
|
15
|
-
import {
|
|
15
|
+
import { recipientLifecycleOf } from "../plugins/mailbox-recipient-lifecycle.js";
|
|
16
16
|
import { PgUsageWindowStore, TiDBUsageWindowStore, ensurePgUsageWindowSchema, ensureTiDBUsageWindowSchema } from "../stores-sql/usage-window-store-sql.js";
|
|
17
17
|
import { PgRosterStore, TiDBRosterStore, ensurePgRosterSchema, ensureTiDBRosterSchema } from "../plugins/roster-store-sql.js";
|
|
18
18
|
import { LocalTaskAttachmentStore } from "../plugins/local-task-attachment-store.js";
|
|
@@ -29,7 +29,7 @@ import { assertCloudSnapshotBlobPosture, openStoreBackendWithFallback } from "..
|
|
|
29
29
|
import { createMemoryEngineIncidentSink } from "../memory-incident-sink.js";
|
|
30
30
|
import { announceLockedLegacyMemoryLayers } from "../memory-layer-legacy-lock.js";
|
|
31
31
|
import { createEngineNoticeForwarder } from "./runner-deps.js";
|
|
32
|
-
import { buildMemoryRemoteLaneWarn, memoryEngineBackendFor, memoryEngineRemoteLanePosture, memoryEngineRootFor,
|
|
32
|
+
import { buildMemoryRemoteLaneWarn, memoryEngineBackendFor, memoryEngineRemoteLanePosture, memoryEngineRootFor, memoryMountRootOf } from "../memory-scope.js";
|
|
33
33
|
import { createMemoryScopeStores } from "../memory-scope-stores.js";
|
|
34
34
|
import { assertToolResultProvenanceSchema } from "../plugins/tool-result-store-sql.js";
|
|
35
35
|
import { assertPermissionRuleApprovalSchema, assertPermissionRuleTicketSchema } from "../plugins/permission-rule-store-sql.js";
|
|
@@ -124,7 +124,8 @@ export async function openStores(ctx) {
|
|
|
124
124
|
let memoryEngine;
|
|
125
125
|
const engineDataRoot = memoryEngineRootFor(config, localRoot);
|
|
126
126
|
const memoryEngineIncident = createMemoryEngineIncidentSink({ logger, metrics });
|
|
127
|
-
const
|
|
127
|
+
const sessionCaptureRecords = backend?.sessionCaptureRecords();
|
|
128
|
+
const scopeStoresOver = (deployment) => createMemoryScopeStores({ backend: deployment, root: engineDataRoot, onIncident: memoryEngineIncident, ...(sessionCaptureRecords !== undefined ? { captureRecords: sessionCaptureRecords } : {}) });
|
|
128
129
|
let memorySyncCursors;
|
|
129
130
|
let vectorMode;
|
|
130
131
|
if (config.memoryEngineBackend !== "file" && config.memoryEngineEnabled) {
|
|
@@ -301,20 +302,19 @@ export async function openStores(ctx) {
|
|
|
301
302
|
await ensurePgMailboxSchema(async (text, params) => pgPool.query(text, params));
|
|
302
303
|
const store = new PgMailboxStore(pgPool, logger);
|
|
303
304
|
mailboxStore = store;
|
|
304
|
-
mailboxRecipientLifecycle = store;
|
|
305
305
|
}
|
|
306
306
|
else if (mysqlPool) {
|
|
307
307
|
await ensureTiDBMailboxSchema(mysqlPool);
|
|
308
308
|
const store = new TiDBMailboxStore(mysqlPool, logger);
|
|
309
309
|
mailboxStore = store;
|
|
310
|
-
mailboxRecipientLifecycle = store;
|
|
311
310
|
}
|
|
312
311
|
else if (backend?.kind === "local") {
|
|
313
312
|
mailboxStore = new FileMailboxStore(config.localDataRoot ?? localRoot, {
|
|
314
313
|
onCorruptRead: createCorruptReadFailOpenSeat("server.mailbox.corrupt-record-skipped"),
|
|
315
314
|
});
|
|
316
|
-
mailboxRecipientLifecycle = createDropOnlyRecipientLifecycle(mailboxStore);
|
|
317
315
|
}
|
|
316
|
+
if (mailboxStore)
|
|
317
|
+
mailboxRecipientLifecycle = recipientLifecycleOf(mailboxStore);
|
|
318
318
|
if (mailboxStore) {
|
|
319
319
|
const laneVerdict = mailboxCrossProcessMountVerdict(mailboxStore);
|
|
320
320
|
logger.info("mailbox_store_enabled", {
|
|
@@ -439,7 +439,7 @@ export async function openStores(ctx) {
|
|
|
439
439
|
return {
|
|
440
440
|
backend, storePosture, memoryEngine, engineDataRoot, memorySyncCursors, rosterStore, backgroundAgentStore, mailboxRecipientLifecycle,
|
|
441
441
|
taskAttachmentStore, mailboxStore, memoryExportStores, memorySyncRunner, sessionStore, breakerState,
|
|
442
|
-
usageWindowStore, memoryPosture, taskListLane, sqlEngine,
|
|
442
|
+
usageWindowStore, memoryPosture, taskListLane, sqlEngine, sessionCaptureRecords,
|
|
443
443
|
};
|
|
444
444
|
}
|
|
445
445
|
//# sourceMappingURL=stores.js.map
|
package/dist/boot/web-admin.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ModelRefusalsSignal } from "@sema-agent/settings-schema";
|
|
1
|
+
import { type ModelPlaneRefusalCode, type ModelRefusalsSignal } from "@sema-agent/settings-schema";
|
|
2
2
|
import { CenterPromptSource, type SwappableDeps } from "@sema-agent/core";
|
|
3
3
|
import { buildPricing } from "../budget.js";
|
|
4
4
|
import { type Scenario, type ScenarioDeps, type ScenarioDetail } from "../capabilities/scenarios.js";
|
|
@@ -128,6 +128,10 @@ export interface WebAdminRuntime {
|
|
|
128
128
|
* 名 → 码 + 组拒码)。描述**最近一次被判的那份中心候选目录**(每次候选 apply 的报告 `ApplyReport.modelRefusals` 投影;组拒时就是被拒
|
|
129
129
|
* 的那份 —— 引擎自己的拒因表不换代)。没有可报的拒 / 没有配置管道 / 还没判过候选 ⇒ `undefined`(键缺席)。值变了 ⇒ 通知自报订阅者。 */
|
|
130
130
|
modelRefusalsState(): ModelRefusalsSignal | undefined;
|
|
131
|
+
/** `GET /v1/models.modelPlane` 的 `planeRefusalCode` 与 `catalog` 的模型面那一半的**同一只**取值口:**最新到达**的目录候选被模型面组拒的码。
|
|
132
|
+
* 在场 ⇔ 模型拒因信号带 `plane` ∧ 落下它的那次 apply 是最新一次到达(到达计数相等,不按收货序数比 —— 本地腿只改决定文件时同一序数再到达)。
|
|
133
|
+
* 与 {@link modelRefusalsState} 的 `plane` 分两个主语:那一键 = 最近一份**被 stage 判过**的模型面的组拒判决(不随更新的到达撤);本口随每一次更新的到达撤。 */
|
|
134
|
+
latestPlaneRefusalState(): ModelPlaneRefusalCode | undefined;
|
|
131
135
|
/** [ref]:`GET /v1/models.candidateRejected` 的取值口 —— 最近一次候选被判官整拒的结论(`candidateRejection` 座;域集就是判官交出的 `rejected.domains`)。
|
|
132
136
|
* present-iff 当前生效的配置是因判官整拒了最近一份候选而回落的那一份:后来的候选被判 clean 即撤下;还没判过候选 / 没有配置管道 ⇒ `undefined`(键缺席)。
|
|
133
137
|
* dry-run 姿势(`webAdmin.dryRun`,compare-only)恒 `undefined`:候选从不被应用,生效配置恒是 env,拒判是预演读数(日志行照响),不是配置没换的原因。 */
|