@sema-agent/server 7.79.2 → 7.79.3
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/dist/boot/late-binds.d.ts +35 -0
- package/dist/boot/late-binds.js +20 -0
- package/dist/boot/stage-01-config.d.ts +7 -0
- package/dist/boot/stage-01-config.js +60 -0
- package/dist/boot/stage-02-registry-pull.d.ts +10 -0
- package/dist/boot/stage-02-registry-pull.js +11 -0
- package/dist/boot/stage-03-store-backend.d.ts +32 -0
- package/dist/boot/stage-03-store-backend.js +11 -0
- package/dist/boot/stage-04-stores.d.ts +69 -0
- package/dist/boot/stage-04-stores.js +49 -0
- package/dist/boot/stage-05-execution-env.d.ts +82 -0
- package/dist/boot/stage-05-execution-env.js +20 -0
- package/dist/boot/stage-06-runners.d.ts +143 -0
- package/dist/boot/stage-06-runners.js +207 -0
- package/dist/boot/stage-07-capability-layer.d.ts +157 -0
- package/dist/boot/stage-07-capability-layer.js +162 -0
- package/dist/boot/stage-08-reapers.d.ts +172 -0
- package/dist/boot/stage-08-reapers.js +78 -0
- package/dist/boot/stage-09-leader.d.ts +204 -0
- package/dist/boot/stage-09-leader.js +47 -0
- package/dist/boot/stage-10-http-server.d.ts +204 -0
- package/dist/boot/stage-10-http-server.js +289 -0
- package/dist/config-invariants.d.ts +9 -0
- package/dist/config-invariants.js +7 -1
- package/dist/config-types.d.ts +1 -1
- package/dist/main.js +20 -870
- package/dist/service-version.d.ts +5 -0
- package/dist/service-version.js +12 -0
- package/dist/trace/redact.d.ts +7 -6
- package/dist/trace/redact.js +419 -229
- package/package.json +1 -1
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 装配第 8 段 —— **后台 reaper**(§3-8)。
|
|
3
|
+
* 维护 tick(startReapers)+ 托管留存 lane(独立定时器)+ OTLP 导出 + 限额座换代口 + 五只 boot Runner 的
|
|
4
|
+
* 原子换代闭包 + config-center 刷新环与 key resolver 首建。
|
|
5
|
+
* ⚠️ 位置即契约:刷新环必须在 `new Runner` 之后(runnerTierFrozen 与构造函数读同一 config 代际);
|
|
6
|
+
* key resolver 首建读的必须是 boot apply 之后的 config。
|
|
7
|
+
* 🔴 `runDenySweep` 的 holder 住在 `late-binds.ts`(赋值点在第十段的 server 之后)。
|
|
8
|
+
*/
|
|
9
|
+
import { Runner } from "@sema-agent/core";
|
|
10
|
+
import type { runStage07 } from "./stage-07-capability-layer.js";
|
|
11
|
+
export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>): {
|
|
12
|
+
otelExporter: {
|
|
13
|
+
stop(): void;
|
|
14
|
+
} | undefined;
|
|
15
|
+
reaper: NodeJS.Timeout;
|
|
16
|
+
retentionLaneStarted: import("./retention-lane.js").RetentionLaneController | undefined;
|
|
17
|
+
approvalExemptionStore: import("../plugins/approval-exemption-store.js").ApprovalExemptionStore | undefined;
|
|
18
|
+
approvalNonceStore: import("../plugins/approval-nonce-store.js").ApprovalNonceStore | undefined;
|
|
19
|
+
authorize: (ctx: {
|
|
20
|
+
req: import("http").IncomingMessage;
|
|
21
|
+
body: import("../index.js").TaskRequestBody;
|
|
22
|
+
}) => Promise<import("../security.js").AuthContext>;
|
|
23
|
+
imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
|
|
24
|
+
imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
|
|
25
|
+
parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
|
|
26
|
+
parkedReviveTool: import("@sema-agent/core").ToolSpec<import("@sema-agent/core").TSchema> | undefined;
|
|
27
|
+
rateLimiter: import("../index.js").RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
|
|
28
|
+
resumeAnchorStore: import("../plugins/store-backend.js").ResumeAnchorStore | undefined;
|
|
29
|
+
runStore: import("../plugins/store-backend.js").RunStore | undefined;
|
|
30
|
+
scenarioDetails: Record<string, import("../capabilities/scenarios.js").ScenarioDetail>;
|
|
31
|
+
scenarios: Record<string, import("../index.js").Scenario>;
|
|
32
|
+
selectEnvTool: import("@sema-agent/core").ToolSpec<import("@sema-agent/core").TSchema> | undefined;
|
|
33
|
+
singleUserAutoAcceptBaseline: boolean;
|
|
34
|
+
taskLimitCaps: {
|
|
35
|
+
timeoutSec: number | undefined;
|
|
36
|
+
maxOutputTokens: number | undefined;
|
|
37
|
+
maxTurns: number | undefined;
|
|
38
|
+
};
|
|
39
|
+
taskTimeoutSec: number;
|
|
40
|
+
approvalAskAudit: import("../approval-ask-audit-store.js").FileApprovalAskAuditStore | undefined;
|
|
41
|
+
centerRuntimeCapsResolver: ((principal: string | undefined) => Promise<import("@sema-agent/core").RuntimeCaps | undefined>) | undefined;
|
|
42
|
+
checkpointStore: import("../plugins/store-backend.js").CheckpointStoreFull | undefined;
|
|
43
|
+
durableEnabled: boolean;
|
|
44
|
+
elicitation: import("../elicitation.js").ElicitationCoordinator | undefined;
|
|
45
|
+
fleetBus: import("../fleet/fleet-bus.js").FleetEventBus;
|
|
46
|
+
governanceSeams: import("./governance-seams.js").GovernanceSeams;
|
|
47
|
+
handslessRunner: Runner;
|
|
48
|
+
handslessSubRunner: Runner;
|
|
49
|
+
hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
|
|
50
|
+
hookAgentRunner: Runner;
|
|
51
|
+
hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
|
|
52
|
+
mcpRevocations: import("../config-center/mcp-revocation.js").McpRevocationLedger;
|
|
53
|
+
memoryConsolidationFaces: import("./memory-consolidation.js").MemoryConsolidationFaces | undefined;
|
|
54
|
+
memoryOptOutGrantStore: import("../plugins/memory-optout-grant-store-sql.js").MemoryOptOutGrantStore | undefined;
|
|
55
|
+
orgMemoryAdmission: import("./org-memory.js").OrgMemoryAdmissionWiring;
|
|
56
|
+
outcomeSink: import("../plugins/file-outcome-sink.js").OutcomeSink | undefined;
|
|
57
|
+
principalCaps: import("../runtime-caps-resolver.js").PrincipalEntitlementsClient | undefined;
|
|
58
|
+
question: import("../question.js").QuestionCoordinator | undefined;
|
|
59
|
+
retentionExecutor: import("../plugins/retention-store-sql.js").SqlRetentionStore | undefined;
|
|
60
|
+
retentionLaneStore: import("../plugins/retention-lane-store-sql.js").RetentionLaneStore | undefined;
|
|
61
|
+
runner: Runner;
|
|
62
|
+
runnerDeps: import("@sema-agent/core").RunnerDeps;
|
|
63
|
+
runnerTierFrozen: boolean;
|
|
64
|
+
runtimeCapsPeekResolver: import("../runtime-caps-resolver.js").EntitlementsResolverFn | undefined;
|
|
65
|
+
sendFileLedger: import("../plugins/send-file-ledger.js").SendFileLedger | undefined;
|
|
66
|
+
sendUserFileEmitter: import("../capabilities/send-user-file-tool.js").SendUserFileEmitter | undefined;
|
|
67
|
+
sendUserFileToolSpec: import("@sema-agent/core").ToolSpec<import("@sema-agent/core").TSchema> | undefined;
|
|
68
|
+
sessionShellGateRegistry: import("./session-shell-gate-registry.js").SessionShellGateRegistry;
|
|
69
|
+
sessionTitler: import("../session-titler.js").SessionTitler | undefined;
|
|
70
|
+
sharedMemoryStore: import("../plugins/shared-memory-store-sql.js").SqlSharedMemoryStore | undefined;
|
|
71
|
+
sqlWorkflowRunStore: import("@sema-agent/core").WorkflowRunStore | undefined;
|
|
72
|
+
streamApprovalGate: import("../tool-approval.js").StreamApprovalGate;
|
|
73
|
+
subRunner: Runner;
|
|
74
|
+
subRunnerSessions: import("../plugins/fork-routing-session-store.js").ForkRoutingSessionStore;
|
|
75
|
+
subagentSteerRegistry: import("../orchestration/subagent-steer.js").SubagentSteerRegistry;
|
|
76
|
+
toolApproval: import("../tool-approval.js").ToolApprovalCoordinator | undefined;
|
|
77
|
+
workflowAgentRegistry: import("../orchestration/workflow-agent-steer.js").WorkflowAgentRegistry | undefined;
|
|
78
|
+
workflowAgentSessionIndex: import("../orchestration/workflow-agent-session-index.js").WorkflowAgentSessionIndex | undefined;
|
|
79
|
+
workflowCompletionInbox: import("../orchestration/workflow-completion-inbox.js").WorkflowCompletionInbox | undefined;
|
|
80
|
+
workflowJournalStore: import("../plugins/store-backend.js").ServiceWorkflowJournalStore | undefined;
|
|
81
|
+
workflowModelAllowlistSnapshot: readonly string[];
|
|
82
|
+
workflowNotifyGate: import("../orchestration/workflow-notify-journal.js").WorkflowNotifyGate | undefined;
|
|
83
|
+
workflowNotifyJournal: import("../orchestration/workflow-notify-journal.js").WorkflowNotifyJournalStore | undefined;
|
|
84
|
+
workflowRecoverOpts: {
|
|
85
|
+
orphanGraceMs?: number;
|
|
86
|
+
finalizeStartedBeforeMs?: number;
|
|
87
|
+
publishTerminalFleetRow?: (id: string, run: import("@sema-agent/core").WorkflowRun) => void;
|
|
88
|
+
};
|
|
89
|
+
workflowRunStore: import("../orchestration/workflow-notify-journal.js").JournalingWorkflowRunStore | undefined;
|
|
90
|
+
workflowsCapable: boolean;
|
|
91
|
+
deploymentHooks: import("@sema-agent/core").Hooks;
|
|
92
|
+
deviceLane: import("./device-lane.js").DeviceLane | undefined;
|
|
93
|
+
dropSessionScoped: (sid: string) => void;
|
|
94
|
+
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
95
|
+
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
96
|
+
lspManager: import("../lsp/manager.js").E2bLspManager | import("@sema-agent/core").NodeLspManager | undefined;
|
|
97
|
+
perSessionCwd: Map<string, string>;
|
|
98
|
+
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
99
|
+
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
100
|
+
sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
|
|
101
|
+
setSessionCwd: (sid: string, cwd: string) => void;
|
|
102
|
+
setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
|
|
103
|
+
worktreeReap: (() => Promise<void>) | undefined;
|
|
104
|
+
brain: import("@sema-agent/core").Brain;
|
|
105
|
+
costQuota: import("../observability/cost-quota.js").CostQuota | import("../plugins/pg-cost-quota.js").PgCostQuota | import("../plugins/tidb-cost-quota.js").TiDBCostQuota;
|
|
106
|
+
counterDegradeHook: (info: {
|
|
107
|
+
table: string;
|
|
108
|
+
kind: string;
|
|
109
|
+
streak: number;
|
|
110
|
+
prevStreak: number;
|
|
111
|
+
error
|
|
112
|
+
/** 租约 TTL = 2× sweep 间隔(§3)。抢租与每 domain 的续租共用同一个值 —— 两处手抄迟早只改一处。 */
|
|
113
|
+
?: string;
|
|
114
|
+
}) => void;
|
|
115
|
+
fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
|
|
116
|
+
fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
|
|
117
|
+
fleetUsage: import("../fleet-client.js").FleetUsageAccumulator | undefined;
|
|
118
|
+
memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
|
|
119
|
+
memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
|
|
120
|
+
memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
|
|
121
|
+
modelUsageTracker: import("../budget.js").ModelUsageTracker;
|
|
122
|
+
permissionRuleProvider: import("@sema-agent/core").PermissionRuleStoreProvider | undefined;
|
|
123
|
+
permissionRuleStores: import("../rules-consent.js").PermissionRuleStoreBundle | undefined;
|
|
124
|
+
pricing: Record<string, import("@sema-agent/core").ModelPricing>;
|
|
125
|
+
promptManifestTracker: import("../budget.js").PromptManifestTracker;
|
|
126
|
+
ruleConsent: import("../rules-consent.js").RuleConsentLane | undefined;
|
|
127
|
+
sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
|
|
128
|
+
sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
|
|
129
|
+
sideQueryAccounting: (principal: string | undefined, r: {
|
|
130
|
+
model: string;
|
|
131
|
+
usage?: {
|
|
132
|
+
input?: number;
|
|
133
|
+
output?: number;
|
|
134
|
+
cacheRead?: number;
|
|
135
|
+
cacheWrite?: number;
|
|
136
|
+
cost?: {
|
|
137
|
+
total?: number;
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
}) => void;
|
|
141
|
+
toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
|
|
142
|
+
tracer: import("@sema-agent/core").TracerHook;
|
|
143
|
+
backend: import("../index.js").StoreBackend | undefined;
|
|
144
|
+
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
145
|
+
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
146
|
+
instanceId: string;
|
|
147
|
+
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
148
|
+
memoryEngine: {
|
|
149
|
+
backend: import("@sema-agent/core").MemoryBackend;
|
|
150
|
+
root: string;
|
|
151
|
+
} | undefined;
|
|
152
|
+
memoryExportBackend: import("@sema-agent/core").MemoryBackend | undefined;
|
|
153
|
+
memoryPosture: import("../memory-posture.js").MemoryPosture;
|
|
154
|
+
memorySyncCursors: import("../plugins/memory-sync-store-pg.js").MemorySyncStore | undefined;
|
|
155
|
+
memorySyncRunner: import("../memory-sync-client.js").MemorySyncRunner | undefined;
|
|
156
|
+
rosterStore: import("@sema-agent/core").RosterStore | undefined;
|
|
157
|
+
sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
|
|
158
|
+
sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
|
|
159
|
+
sessionStore: import("@sema-agent/core").SessionStore;
|
|
160
|
+
sqlEngineFacts: (() => import("../plugins/sql-driver.js").SqlEngineFacts | null) | undefined;
|
|
161
|
+
storeBackendDegraded: boolean;
|
|
162
|
+
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
163
|
+
taskListLane: import("./task-list-lane.js").TaskListLane;
|
|
164
|
+
usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
|
|
165
|
+
ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
|
|
166
|
+
configCenter: import("./config-center.js").ConfigCenterRuntime;
|
|
167
|
+
config: import("../config-types.js").ServiceConfig;
|
|
168
|
+
localRoot: string;
|
|
169
|
+
logger: import("../index.js").Logger;
|
|
170
|
+
metrics: import("../index.js").Metrics;
|
|
171
|
+
};
|
|
172
|
+
//# sourceMappingURL=stage-08-reapers.d.ts.map
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Runner } from "@sema-agent/core";
|
|
2
|
+
import { startOtlpExporter } from "../observability/otel-exporter.js";
|
|
3
|
+
import { startReapers } from "./reapers.js";
|
|
4
|
+
import { startRetentionLane, RETENTION_LEASE_TTL_FACTOR } from "./retention-lane.js";
|
|
5
|
+
import { createLimitSync } from "./limit-sync.js";
|
|
6
|
+
import { runDenySweep } from "./late-binds.js";
|
|
7
|
+
export function runStage08(ctx) {
|
|
8
|
+
const { approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, config, configCenter, costQuota, fileHistoryStore, handslessRunner, handslessSubRunner, hookAgentRunner, imageBakes, instanceId, localRoot, logger, mailboxStore, metrics, permissionRuleStores, pricing, rateLimiter, retentionExecutor, retentionLaneStore, rosterStore, runStore, runner, runnerTierFrozen, sqlWorkflowRunStore, subRunner, taskAttachmentStore, toolApproval, toolResultStore, workflowJournalStore, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, worktreeReap } = ctx;
|
|
9
|
+
const reaper = startReapers({
|
|
10
|
+
config, logger, metrics, localRoot, backend, subRunner, runStore, checkpointStore,
|
|
11
|
+
rateLimiter, costQuota, toolResultStore, fileHistoryStore, taskAttachmentStore, imageBakes, worktreeReap,
|
|
12
|
+
workflowNotifyGate, workflowRecoverOpts, workflowJournalStore, sqlWorkflowRunStore, workflowNotifyJournal, rosterStore,
|
|
13
|
+
backgroundAgentStore, mailboxStore, toolApproval, permissionRuleStores, approvalNonceStore,
|
|
14
|
+
getRunDenySweep: () => runDenySweep,
|
|
15
|
+
});
|
|
16
|
+
const ttlMs = config.retentionSweep.intervalSec * 1000 * RETENTION_LEASE_TTL_FACTOR;
|
|
17
|
+
const retentionLaneStarted = retentionExecutor !== undefined && retentionLaneStore !== undefined && config.retentionPolicy !== undefined
|
|
18
|
+
? startRetentionLane({
|
|
19
|
+
intervalSec: config.retentionSweep.intervalSec,
|
|
20
|
+
policy: config.retentionPolicy,
|
|
21
|
+
mode: config.retentionSweep.mode,
|
|
22
|
+
executor: retentionExecutor,
|
|
23
|
+
lease: {
|
|
24
|
+
acquire: async () => {
|
|
25
|
+
const claim = await retentionLaneStore.acquire(instanceId, ttlMs, Date.now());
|
|
26
|
+
return claim.held ? { held: true, fencingToken: claim.fencingToken } : { held: false };
|
|
27
|
+
},
|
|
28
|
+
renew: (fencingToken) => retentionLaneStore.renew(instanceId, fencingToken, ttlMs, Date.now()),
|
|
29
|
+
release: () => retentionLaneStore.release(instanceId),
|
|
30
|
+
},
|
|
31
|
+
audit: { append: (row) => retentionLaneStore.appendAudit(row, Date.now()) },
|
|
32
|
+
holdInForce: (domain) => retentionLaneStore.holdInForce(domain),
|
|
33
|
+
logger,
|
|
34
|
+
metrics,
|
|
35
|
+
now: () => Date.now(),
|
|
36
|
+
})
|
|
37
|
+
: undefined;
|
|
38
|
+
if (retentionLaneStarted !== undefined) {
|
|
39
|
+
logger.info("retention_lane_started", {
|
|
40
|
+
intervalSec: config.retentionSweep.intervalSec,
|
|
41
|
+
mode: config.retentionSweep.mode,
|
|
42
|
+
maxAgeDays: config.retentionPolicy?.maxAgeDays,
|
|
43
|
+
holder: instanceId,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const otelExporter = config.otel
|
|
47
|
+
? startOtlpExporter(metrics, {
|
|
48
|
+
...config.otel,
|
|
49
|
+
onError: (err) => logger.warn("otel_export_failed", { err: String(err) }),
|
|
50
|
+
})
|
|
51
|
+
: undefined;
|
|
52
|
+
const limitSync = createLimitSync({ config, rateGate: rateLimiter, quota: costQuota, logger });
|
|
53
|
+
limitSync.sync();
|
|
54
|
+
const bootRunners = [
|
|
55
|
+
["runner", runner],
|
|
56
|
+
["handsless", handslessRunner],
|
|
57
|
+
["hookAgent", hookAgentRunner],
|
|
58
|
+
["sub", subRunner],
|
|
59
|
+
["handslessSub", handslessSubRunner],
|
|
60
|
+
];
|
|
61
|
+
const swapRunnerDeps = (next) => {
|
|
62
|
+
for (let i = 0; i < bootRunners.length; i++) {
|
|
63
|
+
const [name, rn] = bootRunners[i];
|
|
64
|
+
try {
|
|
65
|
+
rn.swapDeps(next);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
if (i > 0)
|
|
69
|
+
logger.error("runner_deps_swap_split", { failedAt: name, seats: Object.keys(next), swapped: bootRunners.slice(0, i).map(([n]) => n), err: String(err) });
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
configCenter.startRefreshLoop({ runnerTierFrozen, pricing, limitSync, swapRunnerDeps, ceilingVerdict });
|
|
75
|
+
configCenter.initKeyResolver();
|
|
76
|
+
return { ...ctx, otelExporter, reaper, retentionLaneStarted };
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=stage-08-reapers.js.map
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import type { runStage08 } from "./stage-08-reapers.js";
|
|
2
|
+
export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>): {
|
|
3
|
+
drainState: {
|
|
4
|
+
draining: boolean;
|
|
5
|
+
since?: number;
|
|
6
|
+
reason?: string;
|
|
7
|
+
inflight?: () => number;
|
|
8
|
+
lastActivityAt?: () => number;
|
|
9
|
+
attachedStreams?: () => number;
|
|
10
|
+
lastAttachEndedAt?: () => number;
|
|
11
|
+
};
|
|
12
|
+
hookWakeBus: {
|
|
13
|
+
deliver?: (sessionId: string, text: string) => Promise<boolean>;
|
|
14
|
+
};
|
|
15
|
+
instrumentDegenerate: ((result: import("@sema-agent/core").TaskResult) => void) | undefined;
|
|
16
|
+
leaderEndpoint: import("../leader/endpoint.js").LeaderEndpoint | undefined;
|
|
17
|
+
ownerAware: import("../security.js").OwnerAwareSessionStore;
|
|
18
|
+
planCacheProbe: import("../plan-cache-probe.js").PlanCacheProbe;
|
|
19
|
+
purgeSession: ((sessionId: string, owner: string | null) => Promise<{
|
|
20
|
+
deleted: boolean;
|
|
21
|
+
} | {
|
|
22
|
+
active: string;
|
|
23
|
+
}>) | undefined;
|
|
24
|
+
registryJwtVerifier: import("../auth-bridge.js").RegistryJwtVerifier | undefined;
|
|
25
|
+
sessionAudit: ((sessionId: string) => Promise<{
|
|
26
|
+
owner: string | null;
|
|
27
|
+
sessionId: string;
|
|
28
|
+
createdAt: string;
|
|
29
|
+
floorEntryId: string | null;
|
|
30
|
+
thinkingLevel: string;
|
|
31
|
+
model: {
|
|
32
|
+
provider: string;
|
|
33
|
+
modelId: string;
|
|
34
|
+
} | null;
|
|
35
|
+
messages: unknown[];
|
|
36
|
+
promptEpoch?: {
|
|
37
|
+
epoch: number;
|
|
38
|
+
artifactDigest: string;
|
|
39
|
+
packId: string;
|
|
40
|
+
assemblyApi: number;
|
|
41
|
+
activatedBy: "session_start" | "compaction" | "legacy_migration";
|
|
42
|
+
};
|
|
43
|
+
} | undefined>) | undefined;
|
|
44
|
+
sessionWatchRegistry: import("../session-watch.js").SessionWatchRegistry | undefined;
|
|
45
|
+
staticWiring: import("@sema-agent/core").WiringManifest;
|
|
46
|
+
otelExporter: {
|
|
47
|
+
stop(): void;
|
|
48
|
+
} | undefined;
|
|
49
|
+
reaper: NodeJS.Timeout;
|
|
50
|
+
retentionLaneStarted: import("./retention-lane.js").RetentionLaneController | undefined;
|
|
51
|
+
approvalExemptionStore: import("../plugins/approval-exemption-store.js").ApprovalExemptionStore | undefined;
|
|
52
|
+
approvalNonceStore: import("../plugins/approval-nonce-store.js").ApprovalNonceStore | undefined;
|
|
53
|
+
authorize: (ctx: {
|
|
54
|
+
req: import("http").IncomingMessage;
|
|
55
|
+
body: import("../index.js").TaskRequestBody;
|
|
56
|
+
}) => Promise<import("../security.js").AuthContext>;
|
|
57
|
+
imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
|
|
58
|
+
imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
|
|
59
|
+
parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
|
|
60
|
+
parkedReviveTool: import("@sema-agent/core").ToolSpec<import("@sema-agent/core").TSchema> | undefined;
|
|
61
|
+
rateLimiter: import("../index.js").RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
|
|
62
|
+
resumeAnchorStore: import("../plugins/store-backend.js").ResumeAnchorStore | undefined;
|
|
63
|
+
runStore: import("../plugins/store-backend.js").RunStore | undefined;
|
|
64
|
+
scenarioDetails: Record<string, import("../capabilities/scenarios.js").ScenarioDetail>;
|
|
65
|
+
scenarios: Record<string, import("../index.js").Scenario>;
|
|
66
|
+
selectEnvTool: import("@sema-agent/core").ToolSpec<import("@sema-agent/core").TSchema> | undefined;
|
|
67
|
+
singleUserAutoAcceptBaseline: boolean;
|
|
68
|
+
taskLimitCaps: {
|
|
69
|
+
timeoutSec: number | undefined;
|
|
70
|
+
maxOutputTokens: number | undefined;
|
|
71
|
+
maxTurns: number | undefined;
|
|
72
|
+
};
|
|
73
|
+
taskTimeoutSec: number;
|
|
74
|
+
approvalAskAudit: import("../approval-ask-audit-store.js").FileApprovalAskAuditStore | undefined;
|
|
75
|
+
centerRuntimeCapsResolver: ((principal: string | undefined) => Promise<import("@sema-agent/core").RuntimeCaps | undefined>) | undefined;
|
|
76
|
+
checkpointStore: import("../plugins/store-backend.js").CheckpointStoreFull | undefined;
|
|
77
|
+
durableEnabled: boolean;
|
|
78
|
+
elicitation: import("../elicitation.js").ElicitationCoordinator | undefined;
|
|
79
|
+
fleetBus: import("../fleet/fleet-bus.js").FleetEventBus;
|
|
80
|
+
governanceSeams: import("./governance-seams.js").GovernanceSeams;
|
|
81
|
+
handslessRunner: import("@sema-agent/core").Runner;
|
|
82
|
+
handslessSubRunner: import("@sema-agent/core").Runner;
|
|
83
|
+
hookAgent: import("../hooks/hook-runner.js").HookLlmCall;
|
|
84
|
+
hookAgentRunner: import("@sema-agent/core").Runner;
|
|
85
|
+
hookLlm: import("../hooks/hook-runner.js").HookLlmCall;
|
|
86
|
+
mcpRevocations: import("../config-center/mcp-revocation.js").McpRevocationLedger;
|
|
87
|
+
memoryConsolidationFaces: import("./memory-consolidation.js").MemoryConsolidationFaces | undefined;
|
|
88
|
+
memoryOptOutGrantStore: import("../plugins/memory-optout-grant-store-sql.js").MemoryOptOutGrantStore | undefined;
|
|
89
|
+
orgMemoryAdmission: import("./org-memory.js").OrgMemoryAdmissionWiring;
|
|
90
|
+
outcomeSink: import("../plugins/file-outcome-sink.js").OutcomeSink | undefined;
|
|
91
|
+
principalCaps: import("../runtime-caps-resolver.js").PrincipalEntitlementsClient | undefined;
|
|
92
|
+
question: import("../question.js").QuestionCoordinator | undefined;
|
|
93
|
+
retentionExecutor: import("../plugins/retention-store-sql.js").SqlRetentionStore | undefined;
|
|
94
|
+
retentionLaneStore: import("../plugins/retention-lane-store-sql.js").RetentionLaneStore | undefined;
|
|
95
|
+
runner: import("@sema-agent/core").Runner;
|
|
96
|
+
runnerDeps: import("@sema-agent/core").RunnerDeps;
|
|
97
|
+
runnerTierFrozen: boolean;
|
|
98
|
+
runtimeCapsPeekResolver: import("../runtime-caps-resolver.js").EntitlementsResolverFn | undefined;
|
|
99
|
+
sendFileLedger: import("../plugins/send-file-ledger.js").SendFileLedger | undefined;
|
|
100
|
+
sendUserFileEmitter: import("../capabilities/send-user-file-tool.js").SendUserFileEmitter | undefined;
|
|
101
|
+
sendUserFileToolSpec: import("@sema-agent/core").ToolSpec<import("@sema-agent/core").TSchema> | undefined;
|
|
102
|
+
sessionShellGateRegistry: import("./session-shell-gate-registry.js").SessionShellGateRegistry;
|
|
103
|
+
sessionTitler: import("../session-titler.js").SessionTitler | undefined;
|
|
104
|
+
sharedMemoryStore: import("../plugins/shared-memory-store-sql.js").SqlSharedMemoryStore | undefined;
|
|
105
|
+
sqlWorkflowRunStore: import("@sema-agent/core").WorkflowRunStore | undefined;
|
|
106
|
+
streamApprovalGate: import("../tool-approval.js").StreamApprovalGate;
|
|
107
|
+
subRunner: import("@sema-agent/core").Runner;
|
|
108
|
+
subRunnerSessions: import("../plugins/fork-routing-session-store.js").ForkRoutingSessionStore;
|
|
109
|
+
subagentSteerRegistry: import("../orchestration/subagent-steer.js").SubagentSteerRegistry;
|
|
110
|
+
toolApproval: import("../tool-approval.js").ToolApprovalCoordinator | undefined;
|
|
111
|
+
workflowAgentRegistry: import("../orchestration/workflow-agent-steer.js").WorkflowAgentRegistry | undefined;
|
|
112
|
+
workflowAgentSessionIndex: import("../orchestration/workflow-agent-session-index.js").WorkflowAgentSessionIndex | undefined;
|
|
113
|
+
workflowCompletionInbox: import("../orchestration/workflow-completion-inbox.js").WorkflowCompletionInbox | undefined;
|
|
114
|
+
workflowJournalStore: import("../plugins/store-backend.js").ServiceWorkflowJournalStore | undefined;
|
|
115
|
+
workflowModelAllowlistSnapshot: readonly string[];
|
|
116
|
+
workflowNotifyGate: import("../orchestration/workflow-notify-journal.js").WorkflowNotifyGate | undefined;
|
|
117
|
+
workflowNotifyJournal: import("../orchestration/workflow-notify-journal.js").WorkflowNotifyJournalStore | undefined;
|
|
118
|
+
workflowRecoverOpts: {
|
|
119
|
+
orphanGraceMs?: number;
|
|
120
|
+
finalizeStartedBeforeMs?: number;
|
|
121
|
+
publishTerminalFleetRow?: (id: string, run: import("@sema-agent/core").WorkflowRun) => void;
|
|
122
|
+
};
|
|
123
|
+
workflowRunStore: import("../orchestration/workflow-notify-journal.js").JournalingWorkflowRunStore | undefined;
|
|
124
|
+
workflowsCapable: boolean;
|
|
125
|
+
deploymentHooks: import("@sema-agent/core").Hooks;
|
|
126
|
+
deviceLane: import("./device-lane.js").DeviceLane | undefined;
|
|
127
|
+
dropSessionScoped: (sid: string) => void;
|
|
128
|
+
executionEnvFactory: import("@sema-agent/core").ExecutionEnvFactory | undefined;
|
|
129
|
+
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
130
|
+
lspManager: import("../lsp/manager.js").E2bLspManager | import("@sema-agent/core").NodeLspManager | undefined;
|
|
131
|
+
perSessionCwd: Map<string, string>;
|
|
132
|
+
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
133
|
+
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
134
|
+
sessionEnvSelection: import("../capabilities/select-environment-tool.js").SessionEnvironmentSelection;
|
|
135
|
+
setSessionCwd: (sid: string, cwd: string) => void;
|
|
136
|
+
setSessionShellEnv: (sid: string, env: Record<string, string>) => void;
|
|
137
|
+
worktreeReap: (() => Promise<void>) | undefined;
|
|
138
|
+
brain: import("@sema-agent/core").Brain;
|
|
139
|
+
costQuota: import("../observability/cost-quota.js").CostQuota | import("../plugins/pg-cost-quota.js").PgCostQuota | import("../plugins/tidb-cost-quota.js").TiDBCostQuota;
|
|
140
|
+
counterDegradeHook: (info: {
|
|
141
|
+
table: string;
|
|
142
|
+
kind: string;
|
|
143
|
+
streak: number;
|
|
144
|
+
prevStreak: number;
|
|
145
|
+
error?: string;
|
|
146
|
+
}) => void;
|
|
147
|
+
fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
|
|
148
|
+
fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
|
|
149
|
+
fleetUsage: import("../fleet-client.js").FleetUsageAccumulator | undefined;
|
|
150
|
+
memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
|
|
151
|
+
memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
|
|
152
|
+
memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
|
|
153
|
+
modelUsageTracker: import("../budget.js").ModelUsageTracker;
|
|
154
|
+
permissionRuleProvider: import("@sema-agent/core").PermissionRuleStoreProvider | undefined;
|
|
155
|
+
permissionRuleStores: import("../rules-consent.js").PermissionRuleStoreBundle | undefined;
|
|
156
|
+
pricing: Record<string, import("@sema-agent/core").ModelPricing>;
|
|
157
|
+
promptManifestTracker: import("../budget.js").PromptManifestTracker;
|
|
158
|
+
ruleConsent: import("../rules-consent.js").RuleConsentLane | undefined;
|
|
159
|
+
sessionMemoryStatusFace: import("../memory-operator-faces.js").SessionMemoryStatusFace | undefined;
|
|
160
|
+
sessionPolicyStore: import("@sema-agent/core").SessionPolicyStore | undefined;
|
|
161
|
+
sideQueryAccounting: (principal: string | undefined, r: {
|
|
162
|
+
model: string;
|
|
163
|
+
usage?: {
|
|
164
|
+
input?: number;
|
|
165
|
+
output?: number;
|
|
166
|
+
cacheRead?: number;
|
|
167
|
+
cacheWrite?: number;
|
|
168
|
+
cost?: {
|
|
169
|
+
total?: number;
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
}) => void;
|
|
173
|
+
toolResultStore: import("../plugins/store-backend.js").ToolResultStoreFull | undefined;
|
|
174
|
+
tracer: import("@sema-agent/core").TracerHook;
|
|
175
|
+
backend: import("../index.js").StoreBackend | undefined;
|
|
176
|
+
backgroundAgentStore: import("@sema-agent/core").BackgroundAgentStore | undefined;
|
|
177
|
+
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
178
|
+
instanceId: string;
|
|
179
|
+
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
180
|
+
memoryEngine: {
|
|
181
|
+
backend: import("@sema-agent/core").MemoryBackend;
|
|
182
|
+
root: string;
|
|
183
|
+
} | undefined;
|
|
184
|
+
memoryExportBackend: import("@sema-agent/core").MemoryBackend | undefined;
|
|
185
|
+
memoryPosture: import("../memory-posture.js").MemoryPosture;
|
|
186
|
+
memorySyncCursors: import("../plugins/memory-sync-store-pg.js").MemorySyncStore | undefined;
|
|
187
|
+
memorySyncRunner: import("../memory-sync-client.js").MemorySyncRunner | undefined;
|
|
188
|
+
rosterStore: import("@sema-agent/core").RosterStore | undefined;
|
|
189
|
+
sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
|
|
190
|
+
sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
|
|
191
|
+
sessionStore: import("@sema-agent/core").SessionStore;
|
|
192
|
+
sqlEngineFacts: (() => import("../plugins/sql-driver.js").SqlEngineFacts | null) | undefined;
|
|
193
|
+
storeBackendDegraded: boolean;
|
|
194
|
+
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
195
|
+
taskListLane: import("./task-list-lane.js").TaskListLane;
|
|
196
|
+
usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
|
|
197
|
+
ceilingVerdict: import("./unpriced-ceiling-verdict.js").UnpricedCeilingVerdict;
|
|
198
|
+
configCenter: import("./config-center.js").ConfigCenterRuntime;
|
|
199
|
+
config: import("../config-types.js").ServiceConfig;
|
|
200
|
+
localRoot: string;
|
|
201
|
+
logger: import("../index.js").Logger;
|
|
202
|
+
metrics: import("../index.js").Metrics;
|
|
203
|
+
};
|
|
204
|
+
//# sourceMappingURL=stage-09-leader.d.ts.map
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { describeStaticWiring } from "@sema-agent/core";
|
|
2
|
+
import { encodeCheckpointScope } from "../security.js";
|
|
3
|
+
import { createRegistryJwtVerifier } from "../auth-bridge.js";
|
|
4
|
+
import { createSessionFaces } from "./session-faces.js";
|
|
5
|
+
import { createLeaderFace } from "./leader.js";
|
|
6
|
+
import { assertStaticWiringConsistent } from "../http/routes/diagnostics.js";
|
|
7
|
+
export function runStage09(ctx) {
|
|
8
|
+
const { approvalExemptionStore, backend, brain, checkpointStore, config, configCenter, deviceLane, dropSessionScoped, durableEnabled, executionEnvFactory, fileHistoryStore, governanceSeams, localRoot, logger, metrics, pricing, resumeAnchorStore, runStore, runnerDeps, sessionPolicyStore, sessionStore, streamApprovalGate, taskAttachmentStore, taskListLane, toolResultStore, tracer, usageWindowStore, workflowCompletionInbox } = ctx;
|
|
9
|
+
const { ownerAware, sessionAudit, sessionWatchRegistry, purgeSession, instrumentDegenerate, planCacheProbe } = createSessionFaces({
|
|
10
|
+
deviceStore: deviceLane?.store,
|
|
11
|
+
dropSessionScoped,
|
|
12
|
+
config, logger, metrics, localRoot, backend, sessionStore, runStore, checkpointStore, toolResultStore,
|
|
13
|
+
resumeAnchorStore, approvalExemptionStore, sessionPolicyStore, taskAttachmentStore, fileHistoryStore,
|
|
14
|
+
workflowCompletionInbox, taskListLane,
|
|
15
|
+
});
|
|
16
|
+
const leaderEndpoint = createLeaderFace({ config, logger, brain, pricing, executionEnvFactory, toolResultStore, sessionStore, checkpointStore, governanceSeams, backend, tracer, usageWindowStore, promptSource: configCenter.promptSource, onError: runnerDeps.onError });
|
|
17
|
+
const drainState = { draining: false };
|
|
18
|
+
const authBridgeIssuer = process.env.AUTH_BRIDGE_ISSUER || config.configCenter?.baseUrl;
|
|
19
|
+
const registryJwtVerifier = authBridgeIssuer
|
|
20
|
+
? createRegistryJwtVerifier({
|
|
21
|
+
issuer: authBridgeIssuer,
|
|
22
|
+
...(process.env.AUTH_BRIDGE_JWKS_URL ? { jwksUrl: process.env.AUTH_BRIDGE_JWKS_URL } : {}),
|
|
23
|
+
...(process.env.AUTH_BRIDGE_AUDIENCE ? { audience: process.env.AUTH_BRIDGE_AUDIENCE } : {}),
|
|
24
|
+
logger,
|
|
25
|
+
metrics,
|
|
26
|
+
})
|
|
27
|
+
: undefined;
|
|
28
|
+
if (registryJwtVerifier)
|
|
29
|
+
logger.info("auth_bridge_enabled", { issuer: authBridgeIssuer });
|
|
30
|
+
const hookWakeBus = {};
|
|
31
|
+
const wiringSpecTemplate = durableEnabled
|
|
32
|
+
? { checkpointStore, durableApproval: { scope: encodeCheckpointScope(undefined) } }
|
|
33
|
+
: {};
|
|
34
|
+
const staticWiring = describeStaticWiring(runnerDeps, wiringSpecTemplate);
|
|
35
|
+
assertStaticWiringConsistent({ manifest: staticWiring, parkFacility: durableEnabled, backendKind: backend?.kind }, logger);
|
|
36
|
+
logger.info("wiring_static", {
|
|
37
|
+
fingerprint: staticWiring.configFingerprint ?? null,
|
|
38
|
+
parkEffective: staticWiring.parkLane.effective,
|
|
39
|
+
sessionDurability: staticWiring.session.store,
|
|
40
|
+
posture: staticWiring.interaction.posture,
|
|
41
|
+
streamApproval: streamApprovalGate.active ? "active" : streamApprovalGate.reason,
|
|
42
|
+
subagentTranscripts: staticWiring.fleet.subagentTranscripts,
|
|
43
|
+
subagentTranscriptRetentionMs: config.backgroundAgentRetentionMs,
|
|
44
|
+
});
|
|
45
|
+
return { ...ctx, drainState, hookWakeBus, instrumentDegenerate, leaderEndpoint, ownerAware, planCacheProbe, purgeSession, registryJwtVerifier, sessionAudit, sessionWatchRegistry, staticWiring };
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=stage-09-leader.js.map
|