@sema-agent/server 7.135.0 → 7.137.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 +237 -2
- package/USAGE.md +146 -41
- package/deploy/sema-up/README.md +15 -1
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/sandbox-rbac.yaml +7 -1
- package/deploy/sema-up/chart/values.yaml +1 -1
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +7 -1
- package/dist/approval-card.d.ts +60 -4
- package/dist/approval-card.js +18 -1
- package/dist/approval-content-kind.d.ts +7 -0
- package/dist/approval-content-kind.js +8 -1
- package/dist/approval-gate-currency.d.ts +48 -6
- package/dist/approval-gate-currency.js +16 -9
- package/dist/approval-hmac.d.ts +13 -1
- package/dist/approval-hmac.js +1 -1
- package/dist/approval.js +3 -3
- package/dist/auth-bridge.d.ts +34 -5
- package/dist/auth-bridge.js +22 -5
- package/dist/boot/budget-tracing.d.ts +1 -2
- package/dist/boot/budget-tracing.js +2 -2
- package/dist/boot/execution-env.d.ts +24 -1
- package/dist/boot/execution-env.js +69 -6
- package/dist/boot/org-memory.js +1 -1
- package/dist/boot/reapers.d.ts +3 -0
- package/dist/boot/reapers.js +15 -1
- package/dist/boot/resolve-spec.d.ts +4 -0
- package/dist/boot/resolve-spec.js +24 -22
- package/dist/boot/runner-deps.js +4 -2
- package/dist/boot/stage-03-store-backend.d.ts +1 -1
- package/dist/boot/stage-04-stores.d.ts +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +4 -2
- package/dist/boot/stage-05-execution-env.js +11 -2
- package/dist/boot/stage-06-runners.d.ts +4 -2
- package/dist/boot/stage-06-runners.js +5 -1
- package/dist/boot/stage-07-capability-layer.d.ts +5 -2
- package/dist/boot/stage-07-capability-layer.js +1 -1
- package/dist/boot/stage-08-reapers.d.ts +5 -2
- package/dist/boot/stage-08-reapers.js +2 -1
- 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 +3 -2
- package/dist/boot/stores.d.ts +1 -1
- package/dist/boot/stores.js +2 -3
- package/dist/boot/web-admin.js +10 -17
- package/dist/brain.js +12 -3
- package/dist/broker/broker.d.ts +89 -0
- package/dist/broker/broker.js +287 -0
- package/dist/broker/constants.d.ts +39 -0
- package/dist/broker/constants.js +15 -0
- package/dist/broker/http1.d.ts +111 -0
- package/dist/broker/http1.js +256 -0
- package/dist/broker/lease-book.d.ts +87 -0
- package/dist/broker/lease-book.js +142 -0
- package/dist/broker/lease-file.d.ts +60 -0
- package/dist/broker/lease-file.js +127 -0
- package/dist/broker/main.d.ts +2 -0
- package/dist/broker/main.js +20 -0
- package/dist/budget.d.ts +3 -3
- package/dist/budget.js +4 -0
- package/dist/capabilities/composite-members.d.ts +2 -1
- package/dist/capabilities/composite-members.js +2 -1
- package/dist/capabilities/engine-capabilities.js +1 -0
- package/dist/capabilities/mcp-probe.d.ts +5 -4
- package/dist/capabilities/scenarios.d.ts +23 -8
- package/dist/capabilities/scenarios.js +13 -8
- package/dist/capabilities/skills.d.ts +28 -5
- package/dist/capabilities/skills.js +8 -0
- package/dist/capability-facts.d.ts +3 -7
- package/dist/capability-facts.js +3 -5
- package/dist/center-credential-renewer.js +5 -1
- package/dist/center-credential.d.ts +18 -4
- package/dist/center-credential.js +18 -3
- package/dist/checkpoint-ctx-seal-m28.d.ts +3 -10
- package/dist/checkpoint-ctx-seal-m28.js +1 -1
- package/dist/checkpoint-identity.d.ts +3 -3
- package/dist/config-catalog.js +21 -16
- package/dist/config-d-migration.js +1 -1
- package/dist/config-invariants.d.ts +1 -1
- package/dist/config-invariants.js +8 -0
- package/dist/config-lkg.d.ts +0 -38
- package/dist/config-lkg.js +1 -83
- package/dist/config-types.d.ts +21 -4
- package/dist/config.d.ts +1 -1
- package/dist/config.js +60 -16
- package/dist/deployment-governance.d.ts +2 -2
- package/dist/deployment-governance.js +7 -9
- package/dist/deployment-shape.d.ts +1 -1
- package/dist/device-ws-protocol.d.ts +1 -0
- package/dist/device-ws-protocol.js +2 -1
- package/dist/elicitation.d.ts +8 -7
- package/dist/elicitation.js +9 -8
- package/dist/file-history-disclosure.d.ts +8 -4
- package/dist/file-history-disclosure.js +24 -6
- package/dist/fleet-client.d.ts +32 -1
- package/dist/fleet-client.js +24 -4
- package/dist/fleet-lease.d.ts +7 -3
- package/dist/fleet-lease.js +31 -23
- package/dist/hooks/classic-stations.d.ts +11 -54
- package/dist/hooks/hook-llm.js +14 -8
- package/dist/hooks/hook-runner.d.ts +4 -4
- package/dist/hooks/hook-runner.js +2 -2
- package/dist/http/admission.js +10 -7
- package/dist/http/approval-sweeps.js +4 -3
- package/dist/http/caller-trust.d.ts +2 -1
- package/dist/http/caller-trust.js +1 -3
- package/dist/http/checkpoint-ctx.d.ts +76 -16
- package/dist/http/checkpoint-ctx.js +45 -1
- package/dist/http/dispatch.js +24 -19
- package/dist/http/durable-run-leg.d.ts +5 -1
- package/dist/http/durable-run-leg.js +1 -1
- package/dist/http/health-self-report.d.ts +2 -2
- package/dist/http/mcp-remote-text.d.ts +5 -0
- package/dist/http/mcp-remote-text.js +7 -0
- package/dist/http/principal-gate.d.ts +15 -10
- package/dist/http/principal-gate.js +48 -9
- package/dist/http/resume-ctx-read.d.ts +2 -16
- package/dist/http/resume-ctx-read.js +2 -3
- package/dist/http/resume-legs.d.ts +2 -20
- package/dist/http/resume-legs.js +52 -38
- package/dist/http/route-ctx.d.ts +8 -2
- package/dist/http/routes/approvals-assistant.d.ts +0 -2
- package/dist/http/routes/approvals-assistant.js +65 -16
- package/dist/http/routes/capabilities.js +11 -1
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +5 -7
- package/dist/http/routes/runs.js +4 -3
- package/dist/http/routes/session-sync.js +70 -12
- package/dist/http/routes/sessions.js +20 -15
- package/dist/http/routes/tasks.js +8 -6
- package/dist/http/server.d.ts +4 -0
- package/dist/http/stored-body-replay.d.ts +3 -3
- package/dist/http/stored-body-replay.js +6 -1
- package/dist/http/submit-ctx.js +1 -1
- package/dist/http/wire-types.d.ts +57 -30
- package/dist/identity-source.d.ts +65 -0
- package/dist/identity-source.js +45 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/memory-store-refusal.d.ts +3 -3
- package/dist/model-entry-refusal.d.ts +2 -0
- package/dist/model-entry-refusal.js +11 -0
- package/dist/model-route-gap.d.ts +49 -4
- package/dist/model-route-gap.js +34 -1
- package/dist/model-select.d.ts +6 -17
- package/dist/model-select.js +0 -3
- package/dist/namespaced-rule-name.d.ts +1 -1
- package/dist/object-store-buckets.d.ts +13 -0
- package/dist/object-store-buckets.js +3 -0
- package/dist/observability/fail-open.d.ts +19 -7
- package/dist/observability/fail-open.js +19 -7
- package/dist/observability/metrics.js +2 -2
- package/dist/observability/principal-context.d.ts +4 -1
- package/dist/observability/principal-context.js +6 -1
- package/dist/observability/run-terminal.js +1 -0
- package/dist/operator-ask.d.ts +2 -2
- package/dist/org-delivery-gate.js +1 -1
- package/dist/org-memory-admission.d.ts +2 -2
- package/dist/org-memory-admission.js +39 -2
- package/dist/parked-decide.d.ts +4 -3
- package/dist/parked-decide.js +29 -9
- package/dist/peer-directory.d.ts +2 -1
- package/dist/peer-directory.js +7 -5
- package/dist/permission-rule-list.d.ts +2 -2
- package/dist/plugins/approval-ask-store-sql.d.ts +8 -0
- package/dist/plugins/approval-ask-store-sql.js +3 -0
- package/dist/plugins/blob-backend.js +2 -1
- package/dist/plugins/checkpoint-index-columns.d.ts +50 -1
- package/dist/plugins/checkpoint-index-columns.js +28 -0
- package/dist/plugins/checkpoint-store-sql.d.ts +46 -12
- package/dist/plugins/checkpoint-store-sql.js +64 -35
- package/dist/plugins/file-history-store-sql.d.ts +6 -0
- package/dist/plugins/file-history-store-sql.js +37 -37
- package/dist/plugins/file-run-store.js +8 -2
- package/dist/plugins/k8s-exec-protocol.d.ts +69 -13
- package/dist/plugins/k8s-exec-protocol.js +116 -28
- package/dist/plugins/k8s-pod-delete-failure.d.ts +25 -0
- package/dist/plugins/k8s-pod-delete-failure.js +17 -0
- package/dist/plugins/k8s-pod-reaper.d.ts +112 -0
- package/dist/plugins/k8s-pod-reaper.js +122 -0
- package/dist/plugins/local-checkpoint-store.d.ts +3 -6
- package/dist/plugins/local-checkpoint-store.js +7 -6
- package/dist/plugins/memory-run-store.js +2 -0
- package/dist/plugins/one-time-migrations.d.ts +49 -37
- package/dist/plugins/one-time-migrations.js +87 -128
- package/dist/plugins/permission-rule-store-file.js +2 -2
- package/dist/plugins/permission-rule-store-sql.d.ts +17 -17
- package/dist/plugins/permission-rule-store-sql.js +16 -17
- package/dist/plugins/pg-pool.js +4 -0
- package/dist/plugins/pg-session-storage.js +2 -2
- package/dist/plugins/remote-env-adb.d.ts +3 -0
- package/dist/plugins/remote-env-adb.js +1 -0
- package/dist/plugins/remote-env-device.d.ts +3 -0
- package/dist/plugins/remote-env-device.js +4 -0
- package/dist/plugins/remote-env-e2b.d.ts +3 -0
- package/dist/plugins/remote-env-e2b.js +1 -0
- package/dist/plugins/remote-env-file-error.d.ts +8 -1
- package/dist/plugins/remote-env-file-error.js +7 -1
- package/dist/plugins/remote-env-host.d.ts +7 -1
- package/dist/plugins/remote-env-host.js +7 -1
- package/dist/plugins/remote-env-k8s.d.ts +154 -14
- package/dist/plugins/remote-env-k8s.js +300 -21
- package/dist/plugins/remote-env-local-docker.d.ts +3 -0
- package/dist/plugins/remote-env-local-docker.js +1 -0
- package/dist/plugins/remote-env-ssh.d.ts +3 -0
- package/dist/plugins/remote-env-ssh.js +1 -0
- package/dist/plugins/run-store-sql.js +10 -4
- package/dist/plugins/s3-answer.d.ts +15 -0
- package/dist/plugins/s3-answer.js +5 -0
- package/dist/plugins/session-ownership.d.ts +17 -3
- package/dist/plugins/session-ownership.js +19 -5
- package/dist/plugins/snapshot-bucket-presence.d.ts +39 -4
- package/dist/plugins/snapshot-bucket-presence.js +35 -7
- package/dist/plugins/sql-errors.d.ts +60 -0
- package/dist/plugins/sql-errors.js +64 -1
- package/dist/plugins/store-contracts.d.ts +10 -1
- package/dist/plugins/store-fault.d.ts +4 -0
- package/dist/plugins/store-fault.js +10 -0
- package/dist/plugins/tidb-pool.js +8 -1
- package/dist/plugins/tidb-session-store.js +2 -2
- package/dist/plugins/web-search.d.ts +1 -1
- package/dist/plugins/web-search.js +2 -2
- package/dist/request-declaration-refusal.d.ts +94 -0
- package/dist/request-declaration-refusal.js +78 -0
- package/dist/request-image-urls.d.ts +6 -0
- package/dist/request-image-urls.js +27 -0
- package/dist/request-key-closure.d.ts +5 -0
- package/dist/request-key-closure.js +5 -2
- package/dist/request-value-closure.d.ts +31 -2
- package/dist/request-value-closure.js +7 -1
- package/dist/rule-entry-list.d.ts +3 -2
- package/dist/rule-entry-list.js +2 -2
- package/dist/rules-consent.js +7 -4
- package/dist/run-local.d.ts +2 -2
- package/dist/runs.js +2 -1
- package/dist/runtime-caps-resolver.js +1 -1
- package/dist/runtime-governance.d.ts +5 -5
- package/dist/sandbox-git-lease.d.ts +49 -0
- package/dist/sandbox-git-lease.js +60 -0
- package/dist/sandbox-git-plane.d.ts +84 -0
- package/dist/sandbox-git-plane.js +105 -0
- package/dist/sandbox-pkg-source.d.ts +28 -1
- package/dist/sandbox-pkg-source.js +1 -2
- package/dist/sealed-key.d.ts +19 -0
- package/dist/sealed-key.js +47 -4
- package/dist/security.d.ts +16 -4
- package/dist/security.js +8 -3
- package/dist/server-secret-env.d.ts +6 -0
- package/dist/server-secret-env.js +14 -0
- package/dist/session-error-wire.d.ts +14 -6
- package/dist/session-error-wire.js +2 -1
- package/dist/session-incarnation.d.ts +16 -5
- package/dist/session-incarnation.js +7 -4
- package/dist/session-policy-wire.d.ts +1 -1
- package/dist/session-policy-wire.js +2 -2
- package/dist/session-row.d.ts +3 -17
- package/dist/session-row.js +4 -0
- package/dist/session-sync.d.ts +15 -3
- package/dist/session-sync.js +5 -2
- package/dist/spec-fields.d.ts +43 -13
- package/dist/spec-fields.js +33 -12
- package/dist/stored-request-prompt-profile-m30.d.ts +49 -0
- package/dist/stored-request-prompt-profile-m30.js +25 -0
- package/dist/task-a2a.d.ts +52 -81
- package/dist/task-a2a.js +219 -89
- package/dist/task-mcp.d.ts +7 -15
- package/dist/task-mcp.js +16 -51
- package/dist/task-settings.d.ts +2 -2
- package/dist/tool-approval.d.ts +35 -12
- package/dist/tool-approval.js +59 -39
- package/dist/tool-rule-names.d.ts +5 -0
- package/dist/trace/core-keyset-guard.d.ts +5 -5
- package/dist/trace/engine-notice-wire.d.ts +1 -1
- package/dist/trace/engine-notice-wire.js +2 -0
- package/dist/trace/exit-seat.js +37 -13
- package/dist/trace/ledger-sink.d.ts +4 -5
- package/dist/trace/ledger-sink.js +3 -7
- package/dist/trace/project.d.ts +37 -3
- package/dist/trace/project.js +20 -6
- package/dist/trace/redact.d.ts +40 -12
- package/dist/trace/redact.js +332 -128
- package/dist/trace/self-minted-wire.d.ts +641 -0
- package/dist/trace/self-minted-wire.js +201 -0
- package/dist/trace/wire-projection-faces.d.ts +5 -3
- package/dist/trace/wire-projection-faces.js +7 -3
- package/dist/url-credential-refusal.d.ts +52 -0
- package/dist/url-credential-refusal.js +14 -0
- package/dist/url-refusal.d.ts +13 -4
- package/dist/url-refusal.js +8 -2
- package/dist/web-admin-client/apply-effective.js +0 -1
- package/dist/web-admin-client/center-request.d.ts +20 -2
- package/dist/web-admin-client/center-request.js +40 -5
- package/dist/web-admin-client/http-client.js +6 -6
- package/dist/web-admin-client/types.d.ts +5 -5
- package/dist/workspace-space.d.ts +27 -0
- package/dist/workspace-space.js +26 -0
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +11 -5
- package/package.json +4 -3
- package/scripts/drain-check-local.mjs +2 -1
- package/scripts/drain-check.mysql.sql +3 -1
- package/scripts/drain-check.pg.sql +3 -1
- package/skills/schedule.md +1 -1
- package/wire-changes/server@7.104.0.json +134 -0
- package/wire-changes/server@7.105.0.json +53 -0
- package/wire-changes/server@7.106.0.json +475 -0
- package/wire-changes/server@7.107.0.json +64 -0
- package/wire-changes/server@7.108.0.json +153 -0
- package/wire-changes/server@7.109.0.json +46 -0
- package/wire-changes/server@7.110.0.json +90 -0
- package/wire-changes/server@7.111.0.json +86 -0
- package/wire-changes/server@7.112.0.json +60 -0
- package/wire-changes/server@7.113.0.json +26 -0
- package/wire-changes/server@7.114.0.json +26 -0
- package/wire-changes/server@7.115.0.json +97 -0
- package/wire-changes/server@7.116.0.json +218 -0
- package/wire-changes/server@7.116.1.json +26 -0
- package/wire-changes/server@7.117.0.json +65 -0
- package/wire-changes/server@7.118.0.json +129 -0
- package/wire-changes/server@7.119.0.json +65 -0
- package/wire-changes/server@7.120.0.json +89 -0
- package/wire-changes/server@7.121.0.json +219 -0
- package/wire-changes/server@7.122.0.json +54 -0
- package/wire-changes/server@7.123.0.json +26 -0
- package/wire-changes/server@7.124.0.json +336 -0
- package/wire-changes/server@7.124.1.json +26 -0
- package/wire-changes/server@7.125.0.json +111 -0
- package/wire-changes/server@7.126.0.json +285 -0
- package/wire-changes/server@7.127.0.json +77 -0
- package/wire-changes/server@7.127.1.json +26 -0
- package/wire-changes/server@7.127.2.json +53 -0
- package/wire-changes/server@7.128.0.json +26 -0
- package/wire-changes/server@7.129.0.json +106 -0
- package/wire-changes/server@7.129.1.json +26 -0
- package/wire-changes/server@7.130.0.json +26 -0
- package/wire-changes/server@7.131.0.json +118 -0
- package/wire-changes/server@7.132.0.json +226 -0
- package/wire-changes/server@7.133.0.json +1155 -0
- package/wire-changes/server@7.134.0.json +107 -0
- package/wire-changes/server@7.135.0.json +174 -0
- package/wire-changes/server@7.136.0.json +448 -0
- package/wire-changes/server@7.137.0.json +825 -0
- package/dist/url-credential.d.ts +0 -52
- package/dist/url-credential.js +0 -49
|
@@ -7,6 +7,8 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
|
|
|
7
7
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
8
8
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
9
9
|
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
10
|
+
sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
|
|
11
|
+
sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
|
|
10
12
|
perSessionCwd: Map<string, string>;
|
|
11
13
|
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
12
14
|
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
@@ -30,7 +32,7 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
|
|
|
30
32
|
fileHistoryErasure: import("../file-history-capture.js").FileHistoryErasureFace | undefined;
|
|
31
33
|
fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
|
|
32
34
|
fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
|
|
33
|
-
fleetUsage: import("../fleet-client.js").
|
|
35
|
+
fleetUsage: import("../fleet-client.js").FleetUsageBins | undefined;
|
|
34
36
|
memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
|
|
35
37
|
memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
|
|
36
38
|
memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
|
|
@@ -74,7 +76,7 @@ export declare function runStage05(ctx: Awaited<ReturnType<typeof runStage04>>):
|
|
|
74
76
|
rosterStore: import("@sema-agent/core").RosterStore | undefined;
|
|
75
77
|
sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
|
|
76
78
|
sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
|
|
77
|
-
sessionStore: import("@sema-agent/core").SessionStore
|
|
79
|
+
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
78
80
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
79
81
|
storePosture: import("../store-posture.js").StorePosture;
|
|
80
82
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
@@ -6,18 +6,27 @@ import { headReadOf } from "../session-incarnation.js";
|
|
|
6
6
|
import * as facts from "../capability-facts.js";
|
|
7
7
|
import { sessionStoreLabelOf } from "../store-posture.js";
|
|
8
8
|
import { runStore } from "./late-binds.js";
|
|
9
|
+
import { SANDBOX_GIT_PLANE_OFF_TEXT } from "../sandbox-git-plane.js";
|
|
9
10
|
export async function runStage05(ctx) {
|
|
10
11
|
const { backend, config, instanceId, logger, metrics, sessionStore, taskAttachmentStore } = ctx;
|
|
11
12
|
const deviceLane = config.remoteExec?.provider === "device" ? createDeviceLane({ config, logger, metrics, backend, replicaId: instanceId }) : undefined;
|
|
12
13
|
const headOf = headReadOf(sessionStore);
|
|
13
14
|
const spaceCommits = backend !== undefined ? () => runStore : undefined;
|
|
14
|
-
const { perTaskImage, sessionEnvSelection, perSessionCwd, setSessionCwd, setSessionShellEnv, setSessionInheritEnv, fenceSessionOwner, dropSessionScoped, executionEnvFactory, worktreeReap, sendUserFileTaskEnvs, lspManager, spaceReclaimer, } = createExecutionEnv({ config, logger, metrics, taskAttachmentStore, ...(deviceLane ? { deviceLane } : {}), ...(spaceCommits !== undefined ? { spaceCommits } : {}), ...(headOf !== undefined ? { headOf } : {}) });
|
|
15
|
+
const { perTaskImage, sessionEnvSelection, perSessionCwd, setSessionCwd, setSessionShellEnv, setSessionInheritEnv, fenceSessionOwner, dropSessionScoped, executionEnvFactory, worktreeReap, sendUserFileTaskEnvs, lspManager, spaceReclaimer, sandboxSecretSeatGate, sandboxPodReaper, readSandboxGitPlane, } = createExecutionEnv({ config, logger, metrics, taskAttachmentStore, ...(deviceLane ? { deviceLane } : {}), ...(spaceCommits !== undefined ? { spaceCommits } : {}), ...(headOf !== undefined ? { headOf } : {}), ...(backend !== undefined ? { runRows: () => runStore } : {}) });
|
|
15
16
|
assertDeviceLaneWired(config.remoteExec?.provider === "device", deviceLane, executionEnvFactory !== undefined);
|
|
16
17
|
assertWorkspaceSpaceReadable(facts.workspaceSpace(config), { headOf, spaceCommits }, facts.workspaceCache(config), sessionStoreLabelOf(config.sessionBackend, backend?.kind));
|
|
18
|
+
if (sandboxSecretSeatGate !== undefined)
|
|
19
|
+
await sandboxSecretSeatGate();
|
|
20
|
+
const sandboxGitPlane = await readSandboxGitPlane();
|
|
21
|
+
if (sandboxGitPlane.state === "on")
|
|
22
|
+
logger.info("credential_plane_sandbox_git", { state: "on", origins: sandboxGitPlane.origins });
|
|
23
|
+
else if (sandboxGitPlane.reason !== "single_user" && sandboxGitPlane.reason !== "lane_without_boundary") {
|
|
24
|
+
logger.info("credential_plane_sandbox_git", { state: "off", reason: sandboxGitPlane.reason, why: SANDBOX_GIT_PLANE_OFF_TEXT[sandboxGitPlane.reason] });
|
|
25
|
+
}
|
|
17
26
|
const deploymentMods = createDeploymentMods({ metrics, ...(config.toolTrace ? { traceLogger: logger } : {}), brandIdentity: isBrandedDeployment(config) });
|
|
18
27
|
if (config.toolTrace)
|
|
19
28
|
logger.info("tool_trace_enabled", {});
|
|
20
29
|
await assertDeploymentModsAdmitted(deploymentMods);
|
|
21
|
-
return { ...ctx, deploymentMods, deviceLane, dropSessionScoped, executionEnvFactory, fenceSessionOwner, lspManager, spaceReclaimer, perSessionCwd, perTaskImage, sendUserFileTaskEnvs, sessionEnvSelection, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, worktreeReap };
|
|
30
|
+
return { ...ctx, deploymentMods, deviceLane, dropSessionScoped, executionEnvFactory, fenceSessionOwner, lspManager, spaceReclaimer, sandboxPodReaper, sandboxGitPlane, perSessionCwd, perTaskImage, sendUserFileTaskEnvs, sessionEnvSelection, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, worktreeReap };
|
|
22
31
|
}
|
|
23
32
|
//# sourceMappingURL=stage-05-execution-env.js.map
|
|
@@ -70,6 +70,8 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
|
|
|
70
70
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
71
71
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
72
72
|
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
73
|
+
sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
|
|
74
|
+
sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
|
|
73
75
|
perSessionCwd: Map<string, string>;
|
|
74
76
|
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
75
77
|
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
@@ -93,7 +95,7 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
|
|
|
93
95
|
fileHistoryErasure: import("../file-history-capture.js").FileHistoryErasureFace | undefined;
|
|
94
96
|
fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
|
|
95
97
|
fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
|
|
96
|
-
fleetUsage: import("../fleet-client.js").
|
|
98
|
+
fleetUsage: import("../fleet-client.js").FleetUsageBins | undefined;
|
|
97
99
|
memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
|
|
98
100
|
memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
|
|
99
101
|
memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
|
|
@@ -137,7 +139,7 @@ export declare function runStage06(ctx: Awaited<ReturnType<typeof runStage05>>):
|
|
|
137
139
|
rosterStore: import("@sema-agent/core").RosterStore | undefined;
|
|
138
140
|
sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
|
|
139
141
|
sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
|
|
140
|
-
sessionStore: import("@sema-agent/core").SessionStore
|
|
142
|
+
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
141
143
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
142
144
|
storePosture: import("../store-posture.js").StorePosture;
|
|
143
145
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
@@ -18,6 +18,7 @@ import { assertApprovalAskRuleMaterialOnBackend } from "./stores.js";
|
|
|
18
18
|
import { createParkCommitWatch } from "../plugins/park-commit-watch.js";
|
|
19
19
|
import { CHECKPOINT_CTX_SEALING_REQUIRED } from "../http/checkpoint-ctx.js";
|
|
20
20
|
import { sealCheckpointCtxCredentialsM28 } from "../checkpoint-ctx-seal-m28.js";
|
|
21
|
+
import { retirePromptProfileM30 } from "../stored-request-prompt-profile-m30.js";
|
|
21
22
|
import { createRuntimeCaps } from "./runtime-caps.js";
|
|
22
23
|
import { createEngineNoticeForwarder, createRunnerDeps, createSharedRunnerDeps } from "./runner-deps.js";
|
|
23
24
|
import { defaultEngineNoticeRouter } from "../trace/engine-notice-wire.js";
|
|
@@ -37,8 +38,11 @@ export async function runStage06(ctx) {
|
|
|
37
38
|
if (checkpointStore !== undefined) {
|
|
38
39
|
if (checkpointCtxSealing === undefined)
|
|
39
40
|
throw new Error(CHECKPOINT_CTX_SEALING_REQUIRED);
|
|
40
|
-
const
|
|
41
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
42
|
+
const m28 = await sealCheckpointCtxCredentialsM28(checkpointStore, checkpointCtxSealing, { today });
|
|
41
43
|
logger.info("checkpoint_ctx_credentials_sealed", { ...m28, note: "one-time migration M28: plaintext request credentials in suspended tasks' resume contexts sealed in place" });
|
|
44
|
+
const m30 = await retirePromptProfileM30(checkpointStore, { today });
|
|
45
|
+
logger.info("checkpoint_ctx_prompt_profile_rewritten", { ...m30, note: "one-time migration M30: the retired request key promptProfile in suspended tasks' stored requests rewritten in place (classic becomes promptLean: false); a stored request this did not reach is refused on resume" });
|
|
42
46
|
}
|
|
43
47
|
const { elicitation, question, toolApproval, durableEnabled, streamApprovalGate, approvalAskAudit, approvalExemptionStore, sendUserFileEmitter, sendFileLedger, sendUserFileToolSpec } = createLiveCoordinators({
|
|
44
48
|
config, logger, backend, sendUserFileTaskEnvs, ruleConsent, parkCommits,
|
|
@@ -9,6 +9,7 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
|
|
|
9
9
|
}) => Promise<import("../security.js").AuthContext>;
|
|
10
10
|
imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
|
|
11
11
|
imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
|
|
12
|
+
loadedSkills: import("../capabilities/skills.js").LoadedSkill[];
|
|
12
13
|
parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
|
|
13
14
|
parkedReviveSurface: import("../parked-revive-surface.js").ParkedReviveSurfaceFactory | undefined;
|
|
14
15
|
rateLimiter: RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
|
|
@@ -85,6 +86,8 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
|
|
|
85
86
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
86
87
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
87
88
|
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
89
|
+
sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
|
|
90
|
+
sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
|
|
88
91
|
perSessionCwd: Map<string, string>;
|
|
89
92
|
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
90
93
|
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
@@ -108,7 +111,7 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
|
|
|
108
111
|
fileHistoryErasure: import("../file-history-capture.js").FileHistoryErasureFace | undefined;
|
|
109
112
|
fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
|
|
110
113
|
fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
|
|
111
|
-
fleetUsage: import("../fleet-client.js").
|
|
114
|
+
fleetUsage: import("../fleet-client.js").FleetUsageBins | undefined;
|
|
112
115
|
memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
|
|
113
116
|
memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
|
|
114
117
|
memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
|
|
@@ -152,7 +155,7 @@ export declare function runStage07(ctx: Awaited<ReturnType<typeof runStage06>>):
|
|
|
152
155
|
rosterStore: import("@sema-agent/core").RosterStore | undefined;
|
|
153
156
|
sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
|
|
154
157
|
sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
|
|
155
|
-
sessionStore: import("@sema-agent/core").SessionStore
|
|
158
|
+
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
156
159
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
157
160
|
storePosture: import("../store-posture.js").StorePosture;
|
|
158
161
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
@@ -202,6 +202,6 @@ export async function runStage07(ctx) {
|
|
|
202
202
|
if (defaultScenarioRefusal !== undefined)
|
|
203
203
|
throw new Error(defaultScenarioRefusal);
|
|
204
204
|
logger.info("capabilities", { skills: skills.length, scenarios: Object.keys(scenarios), repoTools: Boolean(repoClient) });
|
|
205
|
-
return { ...ctx, approvalExemptionStore, approvalNonceStore, authorize, imageBakes, imageIndex, parkedReviveInheritedGate, parkedReviveSurface, rateLimiter, resumeAnchorStore, runStore, scenarioDetails, scenarios, selectEnvTool, taskLimitCaps, taskTimeoutSec, userInputLedger, userInputLedgerStore, webSearchProvider: webSearchCfg?.provider };
|
|
205
|
+
return { ...ctx, approvalExemptionStore, approvalNonceStore, authorize, imageBakes, imageIndex, loadedSkills: skills, parkedReviveInheritedGate, parkedReviveSurface, rateLimiter, resumeAnchorStore, runStore, scenarioDetails, scenarios, selectEnvTool, taskLimitCaps, taskTimeoutSec, userInputLedger, userInputLedgerStore, webSearchProvider: webSearchCfg?.provider };
|
|
206
206
|
}
|
|
207
207
|
//# sourceMappingURL=stage-07-capability-layer.js.map
|
|
@@ -22,6 +22,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
|
|
|
22
22
|
}) => Promise<import("../security.js").AuthContext>;
|
|
23
23
|
imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
|
|
24
24
|
imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
|
|
25
|
+
loadedSkills: import("../index.js").LoadedSkill[];
|
|
25
26
|
parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
|
|
26
27
|
parkedReviveSurface: import("../parked-revive-surface.js").ParkedReviveSurfaceFactory | undefined;
|
|
27
28
|
rateLimiter: import("../index.js").RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
|
|
@@ -98,6 +99,8 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
|
|
|
98
99
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
99
100
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
100
101
|
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
102
|
+
sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
|
|
103
|
+
sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
|
|
101
104
|
perSessionCwd: Map<string, string>;
|
|
102
105
|
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
103
106
|
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
@@ -121,7 +124,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
|
|
|
121
124
|
fileHistoryErasure: import("../file-history-capture.js").FileHistoryErasureFace | undefined;
|
|
122
125
|
fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
|
|
123
126
|
fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
|
|
124
|
-
fleetUsage: import("../fleet-client.js").
|
|
127
|
+
fleetUsage: import("../fleet-client.js").FleetUsageBins | undefined;
|
|
125
128
|
memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
|
|
126
129
|
memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
|
|
127
130
|
memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
|
|
@@ -165,7 +168,7 @@ export declare function runStage08(ctx: Awaited<ReturnType<typeof runStage07>>):
|
|
|
165
168
|
rosterStore: import("@sema-agent/core").RosterStore | undefined;
|
|
166
169
|
sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
|
|
167
170
|
sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
|
|
168
|
-
sessionStore: import("@sema-agent/core").SessionStore
|
|
171
|
+
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
169
172
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
170
173
|
storePosture: import("../store-posture.js").StorePosture;
|
|
171
174
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
@@ -5,12 +5,13 @@ import { startRetentionLane, RETENTION_LEASE_TTL_FACTOR } from "./retention-lane
|
|
|
5
5
|
import { createLimitSync } from "./limit-sync.js";
|
|
6
6
|
import { runDenySweep } from "./late-binds.js";
|
|
7
7
|
export function runStage08(ctx) {
|
|
8
|
-
const { approvalAskAudit, approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, spaceReclaimer, handslessRunner, hookAgentRunner, imageBakes, instanceId, localRoot, logger, mailboxStore, metrics, permissionRuleStores, pricing, rateLimiter, retentionExecutor, retentionLaneStore, rosterStore, runStore, runner, sqlWorkflowRunStore, subRunner, taskAttachmentStore, toolApproval, toolResultStore, userInputLedger, workflowJournalStore, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, worktreeReap } = ctx;
|
|
8
|
+
const { approvalAskAudit, approvalNonceStore, backend, backgroundAgentStore, ceilingVerdict, checkpointStore, parkCommits, config, webAdmin, consolidationSeatWatch, costQuota, degradeRouteWatch, fileHistoryErasure, spaceReclaimer, sandboxPodReaper, handslessRunner, hookAgentRunner, imageBakes, instanceId, localRoot, logger, mailboxStore, metrics, permissionRuleStores, pricing, rateLimiter, retentionExecutor, retentionLaneStore, rosterStore, runStore, runner, sqlWorkflowRunStore, subRunner, taskAttachmentStore, toolApproval, toolResultStore, userInputLedger, workflowJournalStore, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, worktreeReap } = ctx;
|
|
9
9
|
const reaper = startReapers({
|
|
10
10
|
config, logger, metrics, localRoot, backend, subRunner, runStore, checkpointStore, parkCommits,
|
|
11
11
|
rateLimiter, costQuota, toolResultStore, fileHistoryErasure, taskAttachmentStore, imageBakes, worktreeReap,
|
|
12
12
|
workflowNotifyGate, workflowRecoverOpts, workflowJournalStore, sqlWorkflowRunStore, workflowNotifyJournal, rosterStore,
|
|
13
13
|
backgroundAgentStore, mailboxStore, toolApproval, permissionRuleStores, approvalNonceStore, userInputLedger, approvalAskAudit,
|
|
14
|
+
...(sandboxPodReaper !== undefined ? { sandboxPodReaper } : {}),
|
|
14
15
|
getRunDenySweep: () => runDenySweep,
|
|
15
16
|
});
|
|
16
17
|
const ttlMs = config.retentionSweep.intervalSec * 1000 * RETENTION_LEASE_TTL_FACTOR;
|
|
@@ -46,6 +46,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
|
|
|
46
46
|
}) => Promise<import("../security.js").AuthContext>;
|
|
47
47
|
imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
|
|
48
48
|
imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
|
|
49
|
+
loadedSkills: import("../index.js").LoadedSkill[];
|
|
49
50
|
parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
|
|
50
51
|
parkedReviveSurface: import("../parked-revive-surface.js").ParkedReviveSurfaceFactory | undefined;
|
|
51
52
|
rateLimiter: import("../index.js").RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
|
|
@@ -122,6 +123,8 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
|
|
|
122
123
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
123
124
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
124
125
|
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
126
|
+
sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
|
|
127
|
+
sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
|
|
125
128
|
perSessionCwd: Map<string, string>;
|
|
126
129
|
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
127
130
|
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
@@ -145,7 +148,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
|
|
|
145
148
|
fileHistoryErasure: import("../file-history-capture.js").FileHistoryErasureFace | undefined;
|
|
146
149
|
fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
|
|
147
150
|
fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
|
|
148
|
-
fleetUsage: import("../fleet-client.js").
|
|
151
|
+
fleetUsage: import("../fleet-client.js").FleetUsageBins | undefined;
|
|
149
152
|
memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
|
|
150
153
|
memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
|
|
151
154
|
memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
|
|
@@ -189,7 +192,7 @@ export declare function runStage09(ctx: Awaited<ReturnType<typeof runStage08>>):
|
|
|
189
192
|
rosterStore: import("@sema-agent/core").RosterStore | undefined;
|
|
190
193
|
sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
|
|
191
194
|
sessionCaptureRecords: import("../index.js").SessionCaptureRecordSource | undefined;
|
|
192
|
-
sessionStore: import("@sema-agent/core").SessionStore
|
|
195
|
+
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
193
196
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
194
197
|
storePosture: import("../store-posture.js").StorePosture;
|
|
195
198
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
@@ -45,6 +45,7 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
|
|
|
45
45
|
}) => Promise<import("../security.js").AuthContext>;
|
|
46
46
|
imageBakes: import("../plugins/store-backend.js").ImageBake | undefined;
|
|
47
47
|
imageIndex: import("../plugins/store-backend.js").ImageIndex | undefined;
|
|
48
|
+
loadedSkills: import("../index.js").LoadedSkill[];
|
|
48
49
|
parkedReviveInheritedGate: ((row: import("@sema-agent/core").BackgroundAgentRecord, identity: import("./parked-revive-gate.js").ParkedReviveIdentity) => Promise<import("./parked-revive-gate.js").RebuiltInheritedGate>) | undefined;
|
|
49
50
|
parkedReviveSurface: import("../parked-revive-surface.js").ParkedReviveSurfaceFactory | undefined;
|
|
50
51
|
rateLimiter: import("../index.js").RateLimiter | import("../plugins/pg-rate-limiter.js").PgRateLimiter | import("../plugins/tidb-rate-limiter.js").TiDBRateLimiter;
|
|
@@ -121,6 +122,8 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
|
|
|
121
122
|
fenceSessionOwner: (sid: string, owner: string | null) => void;
|
|
122
123
|
lspManager: import("@sema-agent/core").NodeLspManager | import("../lsp/manager.js").E2bLspManager | undefined;
|
|
123
124
|
spaceReclaimer: import("../workspace-space.js").SpaceReclaimer | undefined;
|
|
125
|
+
sandboxPodReaper: import("../plugins/k8s-pod-reaper.js").SandboxPodReaper | undefined;
|
|
126
|
+
sandboxGitPlane: import("../sandbox-git-plane.js").SandboxGitPlane;
|
|
124
127
|
perSessionCwd: Map<string, string>;
|
|
125
128
|
perTaskImage: import("../per-task-image.js").PerTaskImageRegistry;
|
|
126
129
|
sendUserFileTaskEnvs: import("../capabilities/sandbox-file-send.js").TaskEnvRegistry | undefined;
|
|
@@ -144,7 +147,7 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
|
|
|
144
147
|
fileHistoryErasure: import("../file-history-capture.js").FileHistoryErasureFace | undefined;
|
|
145
148
|
fileHistoryStore: import("../plugins/store-backend.js").ServiceFileHistoryStore | undefined;
|
|
146
149
|
fleetLease: import("../fleet-lease.js").FleetLeaseManager | undefined;
|
|
147
|
-
fleetUsage: import("../fleet-client.js").
|
|
150
|
+
fleetUsage: import("../fleet-client.js").FleetUsageBins | undefined;
|
|
148
151
|
memoryBundleFaces: import("../memory-bundle-engine.js").MemoryBundleFaces | undefined;
|
|
149
152
|
memoryComplianceFaces: import("../memory-operator-faces.js").MemoryComplianceFaces | undefined;
|
|
150
153
|
memoryOriginFaces: import("../memory-operator-faces.js").MemoryOriginFaces | undefined;
|
|
@@ -188,7 +191,7 @@ export declare function runStage10(ctx: Awaited<ReturnType<typeof runStage09>>):
|
|
|
188
191
|
rosterStore: import("@sema-agent/core").RosterStore | undefined;
|
|
189
192
|
sessionCaptureRecordStore: import("@sema-agent/core").SessionCaptureRecordStore | undefined;
|
|
190
193
|
sessionCaptureRecords: import("../plugins/store-backend.js").SessionCaptureRecordSource | undefined;
|
|
191
|
-
sessionStore: import("@sema-agent/core").SessionStore
|
|
194
|
+
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
192
195
|
sqlEngine: import("../plugins/sql-driver.js").SqlEngineReading | undefined;
|
|
193
196
|
storePosture: import("../store-posture.js").StorePosture;
|
|
194
197
|
taskAttachmentStore: import("../plugins/task-attachment-store.js").TaskAttachmentStore | undefined;
|
|
@@ -29,7 +29,7 @@ import { bindServerLateSeats } from "./late-binds.js";
|
|
|
29
29
|
import { serviceVersion } from "../service-version.js";
|
|
30
30
|
import { buildDisplaySafeUrl } from "../trace/redact.js";
|
|
31
31
|
export async function runStage10(ctx) {
|
|
32
|
-
const { approvalAskAudit, approvalExemptionStore, approvalNonceStore, authorize, backend, backgroundAgentStore, brain, breakerState, centerRuntimeCapsResolver, checkpointStore, checkpointCtxSealing, parkCommits, config, webAdmin, consolidationValve, costQuota, deviceLane, drainState, durableEnabled, elicitation, fenceSessionOwner, fileHistoryStore, fleetBus, fleetLease, fleetUsage, governanceSeams, handslessRunner, hookAgent, hookLlm, hookWakeBus, imageBakes, imageIndex, instanceId, instrumentDegenerate, leaderEndpoint, localRoot, logger, lspManager, mcpRevocations, memoryBundleFaces, memoryComplianceFaces, memoryConsolidationFaces, memoryEngine, memoryExportBackend, memoryOptOutGrantStore, memoryOriginFaces, memoryPosture, memorySyncCursors, memorySyncRunner, metrics, modelUsageTracker, orgMemoryAdmission, otelExporter, outcomeSink, ownerAware, parkedReviveInheritedGate, parkedReviveSurface, perSessionCwd, perTaskImage, planCacheProbe, pricing, principalCaps, promptManifestTracker, purgeSession, question, rateLimiter, reaper, webAdminJwtVerifier, resumeAnchorStore, retentionLaneStarted, retentionLaneStore, ruleConsent, runStore, runner, runnerDeps, runtimeCapsPeekResolver, scenarioDetails, scenarios, selectEnvTool, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionAudit, sessionEnvSelection, sessionMemoryStatusFace, sessionPolicyStore, sessionTitler, sessionWatchRegistry, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, sharedMemoryStore, sideQueryAccounting, sqlEngine, sqlWorkflowRunStore, staticWiring, storePosture, subRunner, subagentSteerRegistry, taskAttachmentStore, taskLimitCaps, taskTimeoutSec, toolApproval, toolResultStore, usageWindowStore, userInputLedger, webSearchProvider, workflowAgentRegistry, workflowAgentSessionIndex, workflowParkDecisions, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable, orgDeliveryGate } = ctx;
|
|
32
|
+
const { approvalAskAudit, approvalExemptionStore, approvalNonceStore, authorize, backend, backgroundAgentStore, brain, breakerState, centerRuntimeCapsResolver, checkpointStore, checkpointCtxSealing, parkCommits, config, webAdmin, consolidationValve, costQuota, deviceLane, drainState, durableEnabled, elicitation, fenceSessionOwner, fileHistoryStore, fleetBus, fleetLease, fleetUsage, governanceSeams, handslessRunner, hookAgent, hookLlm, hookWakeBus, imageBakes, imageIndex, instanceId, instrumentDegenerate, leaderEndpoint, loadedSkills, localRoot, logger, lspManager, mcpRevocations, memoryBundleFaces, memoryComplianceFaces, memoryConsolidationFaces, memoryEngine, memoryExportBackend, memoryOptOutGrantStore, memoryOriginFaces, memoryPosture, memorySyncCursors, memorySyncRunner, metrics, modelUsageTracker, orgMemoryAdmission, otelExporter, outcomeSink, ownerAware, parkedReviveInheritedGate, parkedReviveSurface, perSessionCwd, perTaskImage, planCacheProbe, pricing, principalCaps, promptManifestTracker, purgeSession, question, rateLimiter, reaper, webAdminJwtVerifier, resumeAnchorStore, retentionLaneStarted, retentionLaneStore, ruleConsent, runStore, runner, runnerDeps, runtimeCapsPeekResolver, sandboxGitPlane, scenarioDetails, scenarios, selectEnvTool, sendFileLedger, sendUserFileEmitter, sendUserFileToolSpec, sessionAudit, sessionEnvSelection, sessionMemoryStatusFace, sessionPolicyStore, sessionTitler, sessionWatchRegistry, setSessionCwd, setSessionInheritEnv, setSessionShellEnv, sharedMemoryStore, sideQueryAccounting, sqlEngine, sqlWorkflowRunStore, staticWiring, storePosture, subRunner, subagentSteerRegistry, taskAttachmentStore, taskLimitCaps, taskTimeoutSec, toolApproval, toolResultStore, usageWindowStore, userInputLedger, webSearchProvider, workflowAgentRegistry, workflowAgentSessionIndex, workflowParkDecisions, workflowCompletionInbox, workflowJournalStore, workflowModelAllowlistSnapshot, workflowNotifyGate, workflowNotifyJournal, workflowRecoverOpts, workflowRunStore, workflowsCapable, orgDeliveryGate } = ctx;
|
|
33
33
|
const stores = {
|
|
34
34
|
runStore,
|
|
35
35
|
resumeAnchorStore: resumeAnchorStore ? resumeAnchorStore : undefined,
|
|
@@ -168,6 +168,7 @@ export async function runStage10(ctx) {
|
|
|
168
168
|
writeProtection: buildWriteProtectionPosture(config),
|
|
169
169
|
webSearchProvider,
|
|
170
170
|
sealedKeyPublic: webAdmin.sealedKeyPublic,
|
|
171
|
+
sandboxGitPlane,
|
|
171
172
|
instanceId,
|
|
172
173
|
capabilities: {
|
|
173
174
|
version: serviceVersion(),
|
|
@@ -197,7 +198,7 @@ export async function runStage10(ctx) {
|
|
|
197
198
|
sessionEventsMaxConnections: sessionWatchRegistry ? posIntEnv(process.env.SESSION_EVENTS_MAX_CONNS, 256, 100_000) : undefined,
|
|
198
199
|
};
|
|
199
200
|
const resolveSpec = createResolveSpec({
|
|
200
|
-
config, logger, metrics, localRoot, scenarios, principalCaps, centerRuntimeCapsResolver,
|
|
201
|
+
config, logger, metrics, localRoot, scenarios, loadedSkills, principalCaps, centerRuntimeCapsResolver,
|
|
201
202
|
getKeyResolver: () => webAdmin.getKeyResolver(),
|
|
202
203
|
taskAttachmentStore, perSessionCwd, setSessionCwd, setSessionShellEnv, fenceSessionOwner,
|
|
203
204
|
hookLlm, hookAgent, fleetBus, hookWakeBus, resumeAnchorStore, ownerAware, taskLimitCaps, taskTimeoutSec,
|
package/dist/boot/stores.d.ts
CHANGED
|
@@ -37,7 +37,7 @@ export declare function openStores(ctx: OpenStoresCtx): Promise<{
|
|
|
37
37
|
mailboxStore: import("@sema-agent/core").MailboxStore | undefined;
|
|
38
38
|
memoryExportBackend: MemoryBackend | undefined;
|
|
39
39
|
memorySyncRunner: MemorySyncRunner | undefined;
|
|
40
|
-
sessionStore: import("@sema-agent/core").SessionStore
|
|
40
|
+
sessionStore: import("@sema-agent/core").SessionStore<import("@sema-agent/core").SessionStoreSummary, import("@sema-agent/core").SessionListQuery>;
|
|
41
41
|
breakerState: import("../plugins/breaker-state-sql.js").TiDBBreakerState | import("../plugins/breaker-state-sql.js").PgBreakerState | undefined;
|
|
42
42
|
usageWindowStore: import("@sema-agent/core").UsageWindowStore | undefined;
|
|
43
43
|
memoryPosture: import("../memory-posture.js").MemoryPosture;
|
package/dist/boot/stores.js
CHANGED
|
@@ -9,7 +9,7 @@ import { TiDBMemoryEngineBackend, ensureTiDBMemoryEngineSchema } from "../plugin
|
|
|
9
9
|
import { PgMemoryHistoryStore, PgMemorySyncStore, ensurePgMemoryHistorySchema, ensurePgMemorySyncSchema } from "../plugins/memory-sync-store-pg.js";
|
|
10
10
|
import { TiDBMemoryHistoryStore, TiDBMemorySyncStore, ensureTiDBMemoryHistorySchema, ensureTiDBMemorySyncSchema } from "../plugins/memory-sync-store-tidb.js";
|
|
11
11
|
import { MinioBlobBackend } from "../plugins/blob-backend.js";
|
|
12
|
-
import {
|
|
12
|
+
import { ensureSnapshotBuckets } from "../plugins/snapshot-bucket-presence.js";
|
|
13
13
|
import { PgBackgroundAgentStore, TiDBBackgroundAgentStore, ensurePgBackgroundAgentSchema, ensureTiDBBackgroundAgentSchema } from "../plugins/background-agent-store-sql.js";
|
|
14
14
|
import { PgMailboxStore, TiDBMailboxStore, ensurePgMailboxSchema, ensureTiDBMailboxSchema } from "../plugins/mailbox-store-sql.js";
|
|
15
15
|
import { createDropOnlyRecipientLifecycle } from "../plugins/mailbox-recipient-lifecycle.js";
|
|
@@ -58,8 +58,7 @@ export async function openStores(ctx) {
|
|
|
58
58
|
let backend;
|
|
59
59
|
let storeDegradedReason;
|
|
60
60
|
const dsnConfigured = !!(config.tidb || config.pg);
|
|
61
|
-
|
|
62
|
-
await ensureSnapshotBucket(config.snapshotBlobStore, config.storeLockWaitMs, logger);
|
|
61
|
+
await ensureSnapshotBuckets(config, logger);
|
|
63
62
|
const wantDb = config.sessionBackend === "tidb" ||
|
|
64
63
|
config.dbBackend === "local" ||
|
|
65
64
|
(config.sessionBackend === "auto" && dsnConfigured);
|
package/dist/boot/web-admin.js
CHANGED
|
@@ -12,7 +12,7 @@ import { applyCenterArtifact, centerSourceOnError, withPromptArtifactBackfill }
|
|
|
12
12
|
import { centerScenarios, centerScenarioDetails } from "../capabilities/scenarios.js";
|
|
13
13
|
import { isRosterGateArmed } from "../config.js";
|
|
14
14
|
import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
|
|
15
|
-
import { defaultLkgPath, defaultSkillCacheDir, saveLkg, loadLkg
|
|
15
|
+
import { defaultLkgPath, defaultSkillCacheDir, saveLkg, loadLkg } from "../config-lkg.js";
|
|
16
16
|
import { answerStillCurrent, centerStateBin, credentialIdentityNow, judgeCenterCredentialAtBoot } from "../center-credential.js";
|
|
17
17
|
import { createCenterConfigTier } from "../center-config-tier.js";
|
|
18
18
|
import { buildCenterCredentialHealthView, createCenterCredentialRenewer } from "../center-credential-renewer.js";
|
|
@@ -21,6 +21,7 @@ import { createConfigProvider, raceBootFetch, serviceConfigSourceKind, BOOT_FETC
|
|
|
21
21
|
import { ConfigDirUntrustedError } from "../config-dir-trust.js";
|
|
22
22
|
import { createKeyResolver } from "../key-resolver.js";
|
|
23
23
|
import { buildSealedKeyPublicFace, ensureCheckpointCtxSealing, ensureSealedKeyStore, reportExecutionPublicKey } from "../sealed-key.js";
|
|
24
|
+
import { anthropicLaneCredentialOf } from "../model-route-gap.js";
|
|
24
25
|
import { applyEffective, applyCenterReadFace, buildReadFaceBaseline, buildReadFaceSwapCandidate, restoreReadFaceBaseline, mutateInPlace, logEffectiveDiff, applySkillsManifest, skillManifestEntriesNotInstalled, resolveMcpServers, resolveA2aPeers, restartReasons, modelPlaneChanged, withModelPlaneOf, fullyLandedForLkg, NO_CENTER_EFFECTIVE, isNoCenterEffective, fetchPromptArtifact } from "../web-admin-client/facade.js";
|
|
25
26
|
import { buildConfigHandoff, buildRestartSignal, configHandoffMissing } from "../fleet/engine-signal.js";
|
|
26
27
|
import { createMcpRevocationLedger, enabledMcpEntries } from "../web-admin-client/mcp-revocation.js";
|
|
@@ -133,7 +134,7 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
133
134
|
}
|
|
134
135
|
return r;
|
|
135
136
|
};
|
|
136
|
-
const sealedKeyDir = join(config.localDataRoot ?? localRoot, "sealed-key");
|
|
137
|
+
const sealedKeyDir = config.sealedKeyDir ?? join(config.localDataRoot ?? localRoot, "sealed-key");
|
|
137
138
|
let sealedKeys;
|
|
138
139
|
try {
|
|
139
140
|
sealedKeys = await ensureSealedKeyStore(sealedKeyDir, logger);
|
|
@@ -146,6 +147,11 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
146
147
|
});
|
|
147
148
|
}
|
|
148
149
|
catch (err) {
|
|
150
|
+
if (config.sealedKeyDir !== undefined) {
|
|
151
|
+
throw new Error(`SEALED_KEY_DIR=${config.sealedKeyDir}: the declared model-key custody directory cannot hold a sealed-key store (${String(err)}) — ` +
|
|
152
|
+
`refusing to start rather than run with every sealed model unusable (no_key_store). Make that directory creatable, owned by ` +
|
|
153
|
+
`the service user and chmod-able to 0700 on a writable filesystem, or unset SEALED_KEY_DIR to use <data root>/sealed-key.`);
|
|
154
|
+
}
|
|
149
155
|
logger.warn("sealed_key_store_unavailable", { err: String(err), note: "sealed api keys cannot be unsealed on this host — models carrying sealedApiKey will fail loud per-model" });
|
|
150
156
|
}
|
|
151
157
|
let checkpointCtxSealing;
|
|
@@ -153,7 +159,7 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
153
159
|
checkpointCtxSealing = await ensureCheckpointCtxSealing(sealedKeyDir, logger);
|
|
154
160
|
}
|
|
155
161
|
catch (err) {
|
|
156
|
-
logger.warn("checkpoint_ctx_sealing_unavailable", { err: err instanceof Error ? err.message : String(err), note: "suspended tasks' request credentials cannot be sealed on this host; with durable approvals on the boot refuses — make <data root>/sealed-key
|
|
162
|
+
logger.warn("checkpoint_ctx_sealing_unavailable", { err: err instanceof Error ? err.message : String(err), dir: join(sealedKeyDir, "checkpoint-ctx-keys"), note: "suspended tasks' request credentials cannot be sealed on this host; with durable approvals on the boot refuses — make that directory (under the sealed-key custody directory: SEALED_KEY_DIR, default <data root>/sealed-key) creatable and chmod-able by the service, or repair / remove a key file there whose public and private halves do not belong together" });
|
|
157
163
|
}
|
|
158
164
|
const configProvider = serviceConfigSourceKind(config) !== undefined
|
|
159
165
|
? createConfigProvider({
|
|
@@ -458,19 +464,6 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
458
464
|
return null;
|
|
459
465
|
}
|
|
460
466
|
const lkgPath = lkgPathFor(identity);
|
|
461
|
-
const legacy = await migrateV1Lkg({ legacyPath: config.configLkgPath ?? legacyV1LkgPath(config, cc?.worker), binPath: lkgPath, worker: cc?.worker, identity });
|
|
462
|
-
switch (legacy.outcome) {
|
|
463
|
-
case "none":
|
|
464
|
-
break;
|
|
465
|
-
case "migrated":
|
|
466
|
-
logger.info("config_lkg_migrated", { from: legacy.from, retiredTo: legacy.retiredTo, to: lkgPath, note: "formatVersion 1 LKG (pull-token identity = this worker) migrated once into this credential identity's bin; the old file was renamed, not deleted" });
|
|
467
|
-
if (legacy.retireError !== undefined)
|
|
468
|
-
logger.warn("config_lkg_legacy_not_retired", { path: legacy.from, reason: legacy.retireError, note: "the bin was written and is used; only the old file's rename / copy failed" });
|
|
469
|
-
break;
|
|
470
|
-
case "not-migrated":
|
|
471
|
-
logger.warn("config_lkg_unusable", { path: legacy.path, reason: legacy.reason, note: "env fallback serves; the cache rewrites on the next clean candidate" });
|
|
472
|
-
return null;
|
|
473
|
-
}
|
|
474
467
|
const read = await loadLkg(lkgPath, cc?.worker, identity);
|
|
475
468
|
if (!read.lkg) {
|
|
476
469
|
if (read.reason !== "absent")
|
|
@@ -800,7 +793,7 @@ export async function createWebAdminRuntime(ctx) {
|
|
|
800
793
|
},
|
|
801
794
|
initKeyResolver() {
|
|
802
795
|
keyResolver = createKeyResolver(config.modelApiKeyEnv, process.env, config.modelApiKeys);
|
|
803
|
-
if (
|
|
796
|
+
if (anthropicLaneCredentialOf(config.anthropic ?? {})?.kind === "bearer" && (Object.keys(config.modelApiKeys).length > 0 || Object.keys(config.modelApiKeyEnv).length > 0)) {
|
|
804
797
|
logger.warn("per_model_key_bearer_gateway_combo", {
|
|
805
798
|
perModelKeys: Object.keys(config.modelApiKeys).length + Object.keys(config.modelApiKeyEnv).length,
|
|
806
799
|
note: "ANTHROPIC_AUTH_TOKEN (Bearer) deployment with per-model keys: core's per-call auth REPLACES the Authorization header with x-api-key for those models — a Bearer-only gateway will 401 them. Remove the per-model key for such models, or use a gateway accepting x-api-key.",
|
package/dist/brain.js
CHANGED
|
@@ -6,6 +6,7 @@ import { createHash } from "node:crypto";
|
|
|
6
6
|
import { isModelKeyPoison, modelKeyPoisonIdentity } from "./key-resolver.js";
|
|
7
7
|
import { anthropicRouteRoot, brainLaneFor, mountRoutes, routeTableOf } from "./model-provider.js";
|
|
8
8
|
import { openaiRouteBaseUrl } from "./model-route-endpoint.js";
|
|
9
|
+
import { anthropicLaneCredentialOf } from "./model-route-gap.js";
|
|
9
10
|
import { catalogEntryFingerprint } from "./web-admin-client/restart-signal.js";
|
|
10
11
|
import { buildDisplaySafeRefusal, buildDisplaySafeUrl } from "./trace/redact.js";
|
|
11
12
|
import { createModelReachBrain } from "./model-unreachable-notice.js";
|
|
@@ -82,9 +83,7 @@ export function createBrainAssembly(config, deps = {}) {
|
|
|
82
83
|
? createFailoverBrain(openaiBrains)
|
|
83
84
|
: openaiBrains[0];
|
|
84
85
|
const brainRoutes = mountRoutes(config, (anthropicCfg) => constructRouteBrain("anthropic route", [anthropicCfg.baseUrl], () => createAnthropicBrain({
|
|
85
|
-
...(anthropicCfg
|
|
86
|
-
? { headers: { Authorization: `Bearer ${anthropicCfg.authToken}` } }
|
|
87
|
-
: { apiKey: anthropicCfg.apiKey }),
|
|
86
|
+
...anthropicCredentialFields(anthropicLaneCredentialOf(anthropicCfg)),
|
|
88
87
|
baseUrl: anthropicRouteRoot(anthropicCfg),
|
|
89
88
|
version: anthropicCfg.version,
|
|
90
89
|
cacheBreakpoints: anthropicCfg.cacheBreakpoints,
|
|
@@ -139,6 +138,16 @@ export function createBrainAssembly(config, deps = {}) {
|
|
|
139
138
|
}
|
|
140
139
|
return { brain: createModelReachBrain(brain), degradeRoute: { read: () => ({ baked: degradeBaked, current: degradeRouteFingerprint(config) }) } };
|
|
141
140
|
}
|
|
141
|
+
function anthropicCredentialFields(credential) {
|
|
142
|
+
if (credential === undefined)
|
|
143
|
+
return {};
|
|
144
|
+
switch (credential.kind) {
|
|
145
|
+
case "x-api-key":
|
|
146
|
+
return { apiKey: credential.value };
|
|
147
|
+
case "bearer":
|
|
148
|
+
return { headers: { Authorization: `Bearer ${credential.value}` } };
|
|
149
|
+
}
|
|
150
|
+
}
|
|
142
151
|
export function createBrain(config, deps = {}) {
|
|
143
152
|
return createBrainAssembly(config, deps).brain;
|
|
144
153
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import * as net from "node:net";
|
|
2
|
+
import * as tls from "node:tls";
|
|
3
|
+
import type { Duplex } from "node:stream";
|
|
4
|
+
import { type GitEndpoint } from "./http1.js";
|
|
5
|
+
import { LeaseBook, type LeaseBookEvent, type MonotonicClock } from "./lease-book.js";
|
|
6
|
+
/** Every line the broker logs (closed set; none carries a credential or a body). */
|
|
7
|
+
export type BrokerLogEvent = LeaseBookEvent | {
|
|
8
|
+
event: "refused";
|
|
9
|
+
status: number;
|
|
10
|
+
rule: string;
|
|
11
|
+
} | {
|
|
12
|
+
event: "exchange";
|
|
13
|
+
i: number;
|
|
14
|
+
method: string;
|
|
15
|
+
endpoint: GitEndpoint;
|
|
16
|
+
upstreamStatus: number;
|
|
17
|
+
authenticated: boolean;
|
|
18
|
+
} | {
|
|
19
|
+
event: "upstream_failed";
|
|
20
|
+
i: number;
|
|
21
|
+
endpoint: GitEndpoint;
|
|
22
|
+
problem: string;
|
|
23
|
+
} | {
|
|
24
|
+
event: "aborted";
|
|
25
|
+
i: number;
|
|
26
|
+
endpoint: GitEndpoint;
|
|
27
|
+
why: string;
|
|
28
|
+
} | {
|
|
29
|
+
event: "listening";
|
|
30
|
+
host: string;
|
|
31
|
+
port: number;
|
|
32
|
+
} | {
|
|
33
|
+
event: "lease_file_unreadable";
|
|
34
|
+
problem: string;
|
|
35
|
+
};
|
|
36
|
+
export interface UpstreamTarget {
|
|
37
|
+
readonly protocol: "https:" | "http:";
|
|
38
|
+
readonly hostname: string;
|
|
39
|
+
readonly port: number;
|
|
40
|
+
}
|
|
41
|
+
/** Opens the upstream connection for one exchange (production: {@link createUpstreamConnector}; the pins inject a plain socket). */
|
|
42
|
+
export type UpstreamConnector = (target: UpstreamTarget) => Duplex;
|
|
43
|
+
/**
|
|
44
|
+
* Rule 9. https ⇒ `tls.connect` with the runtime's default trust store, `rejectUnauthorized: true` and the origin's host name as SNI / the
|
|
45
|
+
* name checked (no CA override, no identity override, no knob to skip either); http ⇒ a plain socket (an http entry is never usable, so it
|
|
46
|
+
* never carries a credential). No proxy environment is read.
|
|
47
|
+
*/
|
|
48
|
+
export declare function createUpstreamConnector(impl?: {
|
|
49
|
+
tlsConnect?: (opts: tls.ConnectionOptions) => Duplex;
|
|
50
|
+
netConnect?: (opts: net.NetConnectOpts) => Duplex;
|
|
51
|
+
}): UpstreamConnector;
|
|
52
|
+
/** The two upstream bounds (rule 14). */
|
|
53
|
+
export interface BrokerUpstreamTimeouts {
|
|
54
|
+
readonly connectMs: number;
|
|
55
|
+
readonly headersMs: number;
|
|
56
|
+
}
|
|
57
|
+
/** The bounds every broker runs with — the two constants; nothing configures them. */
|
|
58
|
+
export declare const BROKER_UPSTREAM_TIMEOUTS_DEFAULT: BrokerUpstreamTimeouts;
|
|
59
|
+
export interface BrokerDeps {
|
|
60
|
+
readonly book: LeaseBook;
|
|
61
|
+
readonly connect: UpstreamConnector;
|
|
62
|
+
readonly log: (e: BrokerLogEvent) => void;
|
|
63
|
+
/** Test seam only (the pins shorten the bounds); absent ⇒ {@link BROKER_UPSTREAM_TIMEOUTS_DEFAULT}. */
|
|
64
|
+
readonly timeouts?: BrokerUpstreamTimeouts;
|
|
65
|
+
}
|
|
66
|
+
/** The broker's listener: each connection carries one request. */
|
|
67
|
+
export declare function createBrokerServer(deps: BrokerDeps): net.Server;
|
|
68
|
+
/** Rule 11: a Location resolved against the upstream request URL stays only if it is this origin, inside the git namespace, with an allowed query. */
|
|
69
|
+
export declare function rewriteLocation(location: string, upstreamUrl: string, origin: string, i: number): string | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* The broker process: load the lease file, listen on the loopback, re-read the file every `pollMs` (a changed text is loaded; an
|
|
72
|
+
* unreadable file is a refused file — everything withdrawn). Returns once listening.
|
|
73
|
+
*/
|
|
74
|
+
export declare function runBroker(opts: {
|
|
75
|
+
leasePath: string;
|
|
76
|
+
host: string;
|
|
77
|
+
port: number;
|
|
78
|
+
pollMs: number;
|
|
79
|
+
log: (e: BrokerLogEvent) => void;
|
|
80
|
+
clock?: MonotonicClock;
|
|
81
|
+
connect?: UpstreamConnector;
|
|
82
|
+
}): Promise<{
|
|
83
|
+
port: number;
|
|
84
|
+
book: LeaseBook;
|
|
85
|
+
close(): Promise<void>;
|
|
86
|
+
}>;
|
|
87
|
+
/** The readiness probe (same program, `--probe`): GET the local ready route; true ⇔ 200 within `timeoutMs`. */
|
|
88
|
+
export declare function probeBroker(host: string, port: number, timeoutMs: number): Promise<boolean>;
|
|
89
|
+
//# sourceMappingURL=broker.d.ts.map
|