@sema-agent/server 7.43.0 → 7.44.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/USAGE.md +18 -0
- package/dist/adoption/plan.js +31 -192
- package/dist/adoption/quiesce.js +3 -86
- package/dist/adoption/runner.js +3 -140
- package/dist/adoption/sql.js +0 -74
- package/dist/adoption/wire.js +0 -80
- package/dist/approval-ask-machine.js +0 -75
- package/dist/approval-card.js +0 -323
- package/dist/approval-deny-reasons.js +0 -42
- package/dist/approval-hmac.js +0 -35
- package/dist/approval-reconciler.js +8 -166
- package/dist/approval.js +4 -67
- package/dist/audit.js +1 -44
- package/dist/auth-bridge.js +4 -47
- package/dist/auth-keys.js +0 -23
- package/dist/bake-runner/main.js +4 -65
- package/dist/bake-runner/protocol.js +3 -58
- package/dist/bake-runner/runner.js +5 -91
- package/dist/bench/l8/artifact.js +2 -61
- package/dist/bench/l8/escape.js +0 -25
- package/dist/bench/l8/index.js +0 -14
- package/dist/bench/l8/probes.js +0 -60
- package/dist/bench/l8/run-probes.js +2 -45
- package/dist/bench/s1/arms.js +14 -189
- package/dist/bench/s1/live-deps.js +11 -253
- package/dist/bench/s1/oracle.js +1 -36
- package/dist/bench/s1/repair-oracle-adapter.js +0 -30
- package/dist/bench/s1/reviewer.js +0 -34
- package/dist/bench/s1/row.js +0 -62
- package/dist/bench/s1/run-firm.js +4 -70
- package/dist/bench/s1/runner-ctx.js +0 -40
- package/dist/bench/s1/tasks.js +0 -115
- package/dist/boot/adoption.js +0 -20
- package/dist/boot/budget-tracing.js +3 -55
- package/dist/boot/config-center.js +43 -551
- package/dist/boot/coordinators.js +1 -69
- package/dist/boot/crash-last.js +0 -18
- package/dist/boot/deferred-sandbox-path-env.js +3 -119
- package/dist/boot/execution-env.js +5 -171
- package/dist/boot/governance-seams.js +0 -92
- package/dist/boot/leader.js +0 -69
- package/dist/boot/limit-sync.js +0 -2
- package/dist/boot/memory-boundary.js +3 -91
- package/dist/boot/org-memory.js +1 -25
- package/dist/boot/parked-revive-gate.js +0 -150
- package/dist/boot/permission-rules-audit.js +1 -56
- package/dist/boot/reapers.js +15 -273
- package/dist/boot/resolve-spec.js +9 -768
- package/dist/boot/retention-lane.js +4 -87
- package/dist/boot/runner-deps.js +3 -297
- package/dist/boot/runtime-caps.js +0 -40
- package/dist/boot/session-faces.js +2 -133
- package/dist/boot/shutdown.js +9 -83
- package/dist/boot/side-query-lane.js +2 -137
- package/dist/boot/stores.js +15 -215
- package/dist/boot/task-list-lane.js +0 -18
- package/dist/boot/webfetch-summarize-lane.js +0 -47
- package/dist/boot/workflow-orchestration.js +3 -99
- package/dist/boot-reclaim.js +0 -20
- package/dist/bounded-session-map.js +0 -19
- package/dist/brain.js +2 -139
- package/dist/budget.js +9 -244
- package/dist/capabilities/builtin-tools.js +0 -3
- package/dist/capabilities/center-plugins.js +6 -51
- package/dist/capabilities/center-prompts.js +6 -71
- package/dist/capabilities/code-review-council.js +7 -40
- package/dist/capabilities/collab-workflows.js +1 -44
- package/dist/capabilities/hands-lane.js +0 -65
- package/dist/capabilities/memory-notice.js +0 -70
- package/dist/capabilities/prompt.js +0 -14
- package/dist/capabilities/prompts/code-review.js +0 -14
- package/dist/capabilities/prompts/identity.js +0 -6
- package/dist/capabilities/prompts/team.js +0 -4
- package/dist/capabilities/repo-tools.js +0 -34
- package/dist/capabilities/sandbox-file-send.js +3 -92
- package/dist/capabilities/scenarios.d.ts +0 -1
- package/dist/capabilities/scenarios.js +18 -279
- package/dist/capabilities/select-environment-tool.js +0 -32
- package/dist/capabilities/send-user-file-tool.js +2 -66
- package/dist/capabilities/skills.d.ts +1 -2
- package/dist/capabilities/skills.js +3 -21
- package/dist/capabilities/team.d.ts +3 -11
- package/dist/capabilities/team.js +3 -51
- package/dist/capabilities/tool-defer.js +0 -3
- package/dist/config-center/apply-effective.js +15 -330
- package/dist/config-center/apply-ledger.js +5 -38
- package/dist/config-center/facade.js +0 -41
- package/dist/config-center/hot-keys-registry.js +0 -20
- package/dist/config-center/http-client.js +2 -125
- package/dist/config-center/mcp-revocation.js +2 -34
- package/dist/config-center/read-face.js +0 -59
- package/dist/config-center/restart-signal.js +1 -85
- package/dist/config-center/skills-mcp.d.ts +1 -1
- package/dist/config-center/skills-mcp.js +9 -76
- package/dist/config-center/stage-limits.js +8 -35
- package/dist/config-invariants.js +0 -16
- package/dist/config-lkg.js +0 -42
- package/dist/config-provider.js +3 -186
- package/dist/config-types.js +0 -5
- package/dist/config.js +107 -1145
- package/dist/degenerate-instrument.js +3 -67
- package/dist/deployment-governance.js +0 -124
- package/dist/digest-form.js +0 -12
- package/dist/elicitation.js +3 -86
- package/dist/env-facts.js +7 -75
- package/dist/fleet/fleet-bus.js +34 -507
- package/dist/fleet/fleet-reconciler.js +9 -149
- package/dist/fleet/fleet-terminal-window.js +10 -178
- package/dist/fleet/subagent-tail-bus.js +3 -72
- package/dist/fleet-client.js +10 -70
- package/dist/fleet-lease.js +5 -79
- package/dist/git-api-kind.js +0 -3
- package/dist/governance-ask-marks.js +2 -78
- package/dist/hooks/branch-transcript.js +0 -74
- package/dist/hooks/cc-agent-hook-prompt.js +0 -29
- package/dist/hooks/cc-stop-prompt.js +1 -46
- package/dist/hooks/hook-llm.js +1 -53
- package/dist/hooks/hook-runner.js +20 -414
- package/dist/http/active-run-conflict.js +4 -129
- package/dist/http/cursor-fingerprint.d.ts +5 -0
- package/dist/http/cursor-fingerprint.js +5 -0
- package/dist/http/idempotency.js +0 -37
- package/dist/http/principal-gate.js +3 -40
- package/dist/http/route-ctx.js +0 -9
- package/dist/http/routes/a2a-serve.js +7 -319
- package/dist/http/routes/admin-config-refresh.js +0 -4
- package/dist/http/routes/admin-drain.js +0 -10
- package/dist/http/routes/adoption.js +1 -29
- package/dist/http/routes/agents-roster.js +1 -47
- package/dist/http/routes/approvals-assistant.js +32 -395
- package/dist/http/routes/attachments.js +4 -22
- package/dist/http/routes/capabilities.js +3 -420
- package/dist/http/routes/diagnostics.js +1 -81
- package/dist/http/routes/fleet.js +9 -185
- package/dist/http/routes/images.js +14 -239
- package/dist/http/routes/leader.js +0 -13
- package/dist/http/routes/memory-bundle.js +1 -61
- package/dist/http/routes/memory-policy.js +9 -99
- package/dist/http/routes/notify-wake.js +3 -37
- package/dist/http/routes/observability.js +2 -19
- package/dist/http/routes/retention-ops.js +2 -34
- package/dist/http/routes/rules.js +1 -93
- package/dist/http/routes/runs.js +64 -873
- package/dist/http/routes/session-sync.js +19 -258
- package/dist/http/routes/sessions-list.js +17 -43
- package/dist/http/routes/sessions.js +34 -226
- package/dist/http/routes/shared-memory.js +5 -36
- package/dist/http/routes/side-query.js +1 -87
- package/dist/http/routes/tasks.js +52 -722
- package/dist/http/routes/trace-usage.js +32 -195
- package/dist/http/routes/workflows.js +19 -195
- package/dist/http/run-meta.js +0 -6
- package/dist/http/send.js +0 -32
- package/dist/http/server.js +92 -1597
- package/dist/http/sse-lifecycle.js +2 -13
- package/dist/http/sse-log.js +3 -48
- package/dist/http/tar.js +5 -21
- package/dist/http/verify-rounds.js +0 -5
- package/dist/http/wire-gate.js +0 -9
- package/dist/http/workspace-content.js +0 -10
- package/dist/images/bake-validate.js +1 -70
- package/dist/images/manifest.js +1 -6
- package/dist/index.js +0 -21
- package/dist/key-resolver.js +2 -17
- package/dist/leader/diffout.js +1 -20
- package/dist/leader/diffup.js +0 -47
- package/dist/leader/endpoint.js +2 -57
- package/dist/leader/fanout.js +3 -45
- package/dist/leader/grader-env-factory.js +3 -72
- package/dist/leader/leader.js +5 -156
- package/dist/leader/merge.js +8 -115
- package/dist/leader/planner.js +3 -54
- package/dist/leader/repair-oracle.js +1 -60
- package/dist/leader/repair-wire.js +2 -79
- package/dist/leader/wire.js +8 -307
- package/dist/lsp/e2b-bridge.js +4 -64
- package/dist/lsp/e2b-manager.js +6 -94
- package/dist/lsp/lsp-frames.js +0 -12
- package/dist/lsp/manager.js +4 -96
- package/dist/lsp/ws-transport.js +5 -55
- package/dist/lsp-evict.js +1 -15
- package/dist/main.js +57 -765
- package/dist/memory-bundle-engine.js +0 -55
- package/dist/memory-export.js +0 -4
- package/dist/memory-posture.js +1 -15
- package/dist/memory-scope.js +11 -148
- package/dist/memory-sync-client.js +2 -44
- package/dist/memory-sync.js +1 -80
- package/dist/model-select.js +3 -80
- package/dist/observability/cost-quota.js +1 -17
- package/dist/observability/cost-taxonomy.js +0 -34
- package/dist/observability/fail-open.js +7 -86
- package/dist/observability/logger.js +0 -6
- package/dist/observability/metrics.js +0 -94
- package/dist/observability/otel-exporter.js +3 -13
- package/dist/observability/principal-context.js +0 -9
- package/dist/observability/prompt-manifest.js +1 -37
- package/dist/observability/rate-limit.js +0 -4
- package/dist/observability/secret-env-scrub.js +2 -56
- package/dist/observability/tool-trace.js +1 -70
- package/dist/orchestration/hardened-vm-runner.js +4 -118
- package/dist/orchestration/hardened-vm-worker-runner.js +1 -26
- package/dist/orchestration/hardened-vm-worker.js +0 -27
- package/dist/orchestration/subagent-steer.js +1 -45
- package/dist/orchestration/workflow-agent-steer.js +1 -80
- package/dist/orchestration/workflow-completion-inbox.js +32 -285
- package/dist/orchestration/workflow-notify-journal.js +16 -259
- package/dist/org-memory-admission.js +3 -47
- package/dist/parent-watch.js +2 -48
- package/dist/parked-decide.js +1 -109
- package/dist/per-task-image.js +0 -57
- package/dist/plan-cache-probe.js +3 -27
- package/dist/plugins/adoption-log-sql.js +2 -119
- package/dist/plugins/approval-ask-store-memory.js +3 -38
- package/dist/plugins/approval-ask-store-sql.js +6 -188
- package/dist/plugins/approval-exemption-store.js +2 -28
- package/dist/plugins/background-agent-store-sql.js +4 -105
- package/dist/plugins/background-shell-support.js +14 -122
- package/dist/plugins/blob-backend.js +6 -169
- package/dist/plugins/breaker-state-sql.js +8 -46
- package/dist/plugins/caching-session-store.js +4 -106
- package/dist/plugins/checkpoint-store-sql.js +18 -505
- package/dist/plugins/e2b-orphan-reclaim.js +0 -45
- package/dist/plugins/file-outcome-sink.js +0 -9
- package/dist/plugins/file-resume-anchor-store.js +4 -43
- package/dist/plugins/file-run-store.js +26 -364
- package/dist/plugins/file-snapshot-store-sql.js +10 -181
- package/dist/plugins/fork-routing-session-store.js +8 -111
- package/dist/plugins/host-platform.js +2 -91
- package/dist/plugins/image-bake-store-sql.js +7 -250
- package/dist/plugins/image-index-sql.js +4 -123
- package/dist/plugins/k8s-bg-scripts.js +4 -88
- package/dist/plugins/k8s-exec-protocol.js +0 -41
- package/dist/plugins/leader-run-store-sql.js +0 -101
- package/dist/plugins/local-checkpoint-store.js +8 -128
- package/dist/plugins/local-session-store.js +34 -296
- package/dist/plugins/local-task-attachment-store.js +2 -16
- package/dist/plugins/mailbox-store-sql.js +8 -65
- package/dist/plugins/memory-embedder-fingerprint.js +5 -166
- package/dist/plugins/memory-embedder.js +4 -70
- package/dist/plugins/memory-engine-pg.js +6 -170
- package/dist/plugins/memory-engine-tidb.js +7 -155
- package/dist/plugins/memory-engine-vector-util.js +0 -10
- package/dist/plugins/memory-key-guards.js +0 -34
- package/dist/plugins/memory-origin-law.js +0 -187
- package/dist/plugins/memory-resume-anchor-store.js +0 -17
- package/dist/plugins/memory-run-store.js +12 -89
- package/dist/plugins/memory-session-policy-store.js +0 -17
- package/dist/plugins/memory-sync-store-pg.js +4 -49
- package/dist/plugins/memory-sync-store-tidb.js +3 -35
- package/dist/plugins/outcome-ledger-sql.js +3 -97
- package/dist/plugins/permission-rule-store-file.js +5 -133
- package/dist/plugins/permission-rule-store-sql.d.ts +3 -0
- package/dist/plugins/permission-rule-store-sql.js +50 -307
- package/dist/plugins/pg-cost-quota.js +0 -7
- package/dist/plugins/pg-pool.js +0 -92
- package/dist/plugins/pg-rate-limiter.js +2 -13
- package/dist/plugins/pg-safe-json.js +4 -40
- package/dist/plugins/pg-session-storage.js +25 -189
- package/dist/plugins/posix-shell-fs.js +1 -31
- package/dist/plugins/remote-env-adb.js +12 -101
- package/dist/plugins/remote-env-e2b.js +40 -371
- package/dist/plugins/remote-env-file-error.js +0 -37
- package/dist/plugins/remote-env-host.js +63 -483
- package/dist/plugins/remote-env-k8s.js +32 -326
- package/dist/plugins/remote-env-local-docker.js +24 -157
- package/dist/plugins/remote-env-ssh.js +20 -128
- package/dist/plugins/remote-scratchpad.js +2 -32
- package/dist/plugins/remote-shell.js +1 -32
- package/dist/plugins/resume-anchor-store-sql.js +0 -11
- package/dist/plugins/retention-lane-store-sql.js +0 -108
- package/dist/plugins/retention-store-sql.js +4 -383
- package/dist/plugins/roster-store-sql.js +0 -55
- package/dist/plugins/run-store-sql.js +14 -251
- package/dist/plugins/s3-presign.js +2 -49
- package/dist/plugins/scheduler-support.js +3 -80
- package/dist/plugins/send-file-ledger.js +4 -53
- package/dist/plugins/send-user-file.js +4 -94
- package/dist/plugins/session-placement.js +1 -89
- package/dist/plugins/session-policy-store-sql.js +3 -81
- package/dist/plugins/session-store.js +0 -57
- package/dist/plugins/shared-memory-store-sql.js +4 -167
- package/dist/plugins/sql-driver.js +0 -17
- package/dist/plugins/sql-errors.js +0 -7
- package/dist/plugins/sql-escape.js +0 -8
- package/dist/plugins/sql-row-helpers.js +0 -25
- package/dist/plugins/store-backend.js +42 -222
- package/dist/plugins/store-contracts.js +2 -46
- package/dist/plugins/task-attachment-store.js +3 -49
- package/dist/plugins/task-list-store-sql.js +0 -79
- package/dist/plugins/tidb-cost-quota.js +1 -4
- package/dist/plugins/tidb-pool.js +1 -207
- package/dist/plugins/tidb-rate-limiter.js +3 -9
- package/dist/plugins/tidb-session-storage.js +4 -70
- package/dist/plugins/tidb-session-store.js +19 -341
- package/dist/plugins/tool-result-store-sql.js +4 -179
- package/dist/plugins/usage-window-store-sql.js +0 -8
- package/dist/plugins/web-search.js +10 -132
- package/dist/plugins/workflow-journal-store-sql.js +2 -58
- package/dist/plugins/workflow-run-store-sql.js +6 -91
- package/dist/plugins/worktree-isolation.js +6 -126
- package/dist/plugins/write-behind-counter.js +16 -75
- package/dist/principal-jwt.js +5 -60
- package/dist/project-memory.js +15 -146
- package/dist/prompts-domain-validate.js +1 -51
- package/dist/question.js +2 -111
- package/dist/resource-suspend.js +0 -18
- package/dist/router/route-orchestration.js +0 -77
- package/dist/rules-consent.d.ts +44 -5
- package/dist/rules-consent.js +75 -215
- package/dist/run-local.js +14 -381
- package/dist/runs.js +29 -617
- package/dist/runtime-caps-resolver.js +6 -132
- package/dist/runtime-governance.js +1 -232
- package/dist/sandbox-pkg-source.js +0 -37
- package/dist/sealed-key.js +3 -68
- package/dist/security.js +6 -291
- package/dist/session-leaf-bus.js +0 -32
- package/dist/session-sync-content.js +1 -69
- package/dist/session-sync-kernel.js +3 -60
- package/dist/session-sync.js +3 -66
- package/dist/session-titler.js +7 -41
- package/dist/session-watch.js +9 -73
- package/dist/shared-memory-scope-authorizer.js +0 -18
- package/dist/sighup-idle.js +1 -12
- package/dist/spec-fields.js +4 -143
- package/dist/store-live-probe.js +3 -49
- package/dist/task-a2a.js +1 -126
- package/dist/task-cwd.js +1 -103
- package/dist/task-mcp.js +1 -89
- package/dist/task-settings.js +10 -300
- package/dist/task-workflow.js +8 -75
- package/dist/tool-approval.d.ts +28 -1
- package/dist/tool-approval.js +70 -1430
- package/dist/trace/artifacts.js +5 -20
- package/dist/trace/engine-notice-wire.js +6 -138
- package/dist/trace/ledger-sink.js +7 -96
- package/dist/trace/project.js +4 -448
- package/dist/trace/redact.js +9 -77
- package/dist/turn-activity.js +1 -27
- package/dist/usage-analytics.js +4 -34
- package/dist/wall-clock-jump-guard.js +1 -68
- package/package.json +3 -3
- package/dist/capabilities/scenario-alias.d.ts +0 -27
- package/dist/capabilities/scenario-alias.js +0 -61
package/dist/env-facts.js
CHANGED
|
@@ -1,29 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RFC A1 (sema-internal server/docs/design/ENV-SELECT-AND-REGION-SOURCE.md) — the sandbox envFacts composer (service 半场).
|
|
3
|
-
* Shape ratified REV-1: `TaskSpec.envFacts?: { profile?, capabilities?[], pkgSource?, egress? }`.
|
|
4
|
-
* Core injects it into model context (escape+bound core-side); this module only COMPOSES the facts
|
|
5
|
-
* from deployment-trusted sources (image catalog entry + operator region config + exec-lane posture).
|
|
6
|
-
*
|
|
7
|
-
* Values are bounded here too (defense-in-depth, cheap): catalog data is trusted, but a hostile row must not
|
|
8
|
-
* become an unbounded prompt segment. Wire-up is flag-gated OFF until core lands the whitelist field
|
|
9
|
-
* (`SANDBOX_ENV_FACTS=true` — flipping early is inert: core ignores unknown spec fields).
|
|
10
|
-
*/
|
|
11
1
|
import { isAbsolute, join, resolve, sep } from "node:path";
|
|
12
2
|
import { mkdir, readdir, rm, stat } from "node:fs/promises";
|
|
13
3
|
import { createHash } from "node:crypto";
|
|
14
4
|
const MAX_STR = 64;
|
|
15
5
|
const MAX_CAPS = 16;
|
|
16
|
-
/** scratchpadDir gets its own cap: TRUNCATING a path points at a non-existent dir (worse than absence), so an
|
|
17
|
-
* over-long path DROPS the whole field instead. The threshold is aligned to core's RENDER limit (codex F4):
|
|
18
|
-
* core's buildScratchpadSection inlines the path via `inlineUntrusted` whose default cap is 160 CODE POINTS
|
|
19
|
-
* (untrusted-text LABEL_MAX) — a 161+ char path would be truncated with "…" in the prompt, i.e. the model would
|
|
20
|
-
* be handed a FAKE path. So any path core cannot render verbatim is omitted entirely (honest-facts). */
|
|
21
6
|
const MAX_PATH = 160;
|
|
22
7
|
const bound = (s) => (s.length > MAX_STR ? s.slice(0, MAX_STR) : s);
|
|
23
|
-
/** resumeFacts.note 是整句(64 截会砍在半句上);对齐 MAX_PATH 的 160 render 上限。 */
|
|
24
8
|
const bound2 = (s) => (s.length > MAX_PATH ? s.slice(0, MAX_PATH) : s);
|
|
25
|
-
/** Compose envFacts from what the deployment knows at spec-prep. Returns undefined when nothing is known
|
|
26
|
-
* (no fact beats a vacuous one — an empty block would still spend prompt tokens). */
|
|
27
9
|
export function buildEnvFacts(opts) {
|
|
28
10
|
const caps = Object.entries(opts.capabilities ?? {})
|
|
29
11
|
.filter(([, v]) => v === true)
|
|
@@ -41,11 +23,6 @@ export function buildEnvFacts(opts) {
|
|
|
41
23
|
};
|
|
42
24
|
return Object.keys(facts).length > 0 ? facts : undefined;
|
|
43
25
|
}
|
|
44
|
-
/** resumeFacts 按车道能力面的单真源(部署静态;undefined=整域不声明)。取值依据见
|
|
45
|
-
* {@link SandboxEnvFacts.resumeFacts} 的逐车道注。
|
|
46
|
-
* codex 复审 medium:k8s 必须按**有效快照能力**分叉,不能只看车道名——s3Snapshot 未配=park-only,
|
|
47
|
-
* resume 是全新 pod 且**工作区不恢复**,「文件已从快照恢复」那句会让模型信赖不存在的文件(比缺席
|
|
48
|
-
* 更糟的谎)。 */
|
|
49
26
|
export function resumeFactsForLane(provider, caps) {
|
|
50
27
|
switch (provider) {
|
|
51
28
|
case "e2b":
|
|
@@ -58,39 +35,20 @@ export function resumeFactsForLane(provider, caps) {
|
|
|
58
35
|
case "adb":
|
|
59
36
|
return { scratch: "preserved" };
|
|
60
37
|
case "host":
|
|
61
|
-
case undefined:
|
|
38
|
+
case undefined:
|
|
62
39
|
return { scratch: "preserved" };
|
|
63
40
|
default:
|
|
64
|
-
return undefined;
|
|
41
|
+
return undefined;
|
|
65
42
|
}
|
|
66
43
|
}
|
|
67
|
-
// ── [820]③ scratchpad directory(single source for the FACT and the future exemptDirs)──────────────
|
|
68
|
-
/** Path-safe session segment: the session id can be CALLER-SUPPLIED (body.sessionId), so it must not be able to
|
|
69
|
-
* walk the tree ("../", separators, control bytes). Allowlist [A-Za-z0-9_-] (dots excluded so ".." cannot
|
|
70
|
-
* survive), everything else becomes "_". Empty after sanitize → "_".
|
|
71
|
-
*
|
|
72
|
-
* INJECTIVITY (codex F3): allowlist sanitization alone is NOT injective — "team/a" and "team?a" both map to
|
|
73
|
-
* "team_a", so two DIFFERENT sessions (possibly different principals) would collide onto ONE scratchpad dir.
|
|
74
|
-
* The segment is therefore `<readable prefix (sanitized, ≤24)>-<sha256(FULL ORIGINAL sessionId) hex ≤16>`:
|
|
75
|
-
* the hash is over the raw pre-sanitize id, so distinct ids always produce distinct segments (the prefix stays
|
|
76
|
-
* purely for human readability). Max length 24+1+16=41 (uuidv7 = 36 raw). */
|
|
77
44
|
export function scratchpadSessionSegment(sessionId) {
|
|
78
45
|
const cleaned = sessionId.replace(/[^A-Za-z0-9_-]/g, "_").slice(0, 24);
|
|
79
46
|
const digest = createHash("sha256").update(sessionId).digest("hex").slice(0, 16);
|
|
80
47
|
return `${cleaned.length > 0 ? cleaned : "_"}-${digest}`;
|
|
81
48
|
}
|
|
82
|
-
/** THE scratchpad path convention: `<localDataRoot>/scratchpad/<sessionSegment>`. Session-scoped (core's
|
|
83
|
-
* prompt says "session-specific" — every task on the session shares one dir, which is the useful semantics:
|
|
84
|
-
* intermediate artifacts survive across turns/resume legs). Exported as the single source both the envFacts
|
|
85
|
-
* composer (below) and the future createFsWriteGatePolicy `exemptDirs` wiring ([820]①, 1.290) must use. */
|
|
86
49
|
export function scratchpadDirFor(localDataRoot, sessionId) {
|
|
87
50
|
return join(localDataRoot, "scratchpad", scratchpadSessionSegment(sessionId));
|
|
88
51
|
}
|
|
89
|
-
/** Resolve + CREATE the session scratchpad dir (mkdir -p, idempotent). Returns the path, or undefined when
|
|
90
|
-
* creation fails (honest-facts posture: never advertise a directory that does not exist — same class as
|
|
91
|
-
* egress/pkgSource "don't declare what you don't know"). Lifecycle: the reaper primitives live below —
|
|
92
|
-
* {@link purgeScratchpadDir}(session delete)+ {@link sweepStaleScratchpads}(mtime 周期扫),keyed by the
|
|
93
|
-
* same scratchpadDirFor convention;接线(E21 DELETE purge + 周期 sweep)在 main.ts 侧(D 组)。 */
|
|
94
52
|
export async function ensureScratchpadDir(localDataRoot, sessionId) {
|
|
95
53
|
const dir = scratchpadDirFor(localDataRoot, sessionId);
|
|
96
54
|
try {
|
|
@@ -101,24 +59,9 @@ export async function ensureScratchpadDir(localDataRoot, sessionId) {
|
|
|
101
59
|
return undefined;
|
|
102
60
|
}
|
|
103
61
|
}
|
|
104
|
-
/** G3([816] 壳侧承诺③/[820]③,[1840]§四接单):**壳供** scratchpad 路径的验收门。
|
|
105
|
-
*
|
|
106
|
-
* 壳(cli)vendored getScratchpadDir 算出 per-session scratchpad 路径随 `TaskRequest.scratchpadDir` 发来;
|
|
107
|
-
* 接受后它**优先于** server 自算(ensureScratchpadDir),喂 main.ts 的同一单点(envFacts 事实 +
|
|
108
|
-
* fs-write gate exemptDirs + additionalDirectories 根围栏)。「没到货引擎忽略 = 无害 additive」。
|
|
109
|
-
*
|
|
110
|
-
* 信任边界:这是 exemptDirs **放宽**输入,验收 fail-closed(任何拒收形回落自算,不 fault 任务):
|
|
111
|
-
* - 多租户(requirePrincipal)一律拒——共享 worker 盘上租户自选豁免目录=越权面;
|
|
112
|
-
* - 仅 host-semantics lane——远程沙箱 lane 的 worker 本机路径对 hands 是谎言(honest-facts 同轴);
|
|
113
|
-
* - 绝对路径 + ≤{@link MAX_PATH}(core 渲染上限同源,超限=core 只能给模型假路径)+ canonical
|
|
114
|
-
* 深度 ≥3(裸 /、/tmp、/home 一整块系统目录不能当豁免域;穿越形按 resolve 归一后判);
|
|
115
|
-
* - mkdir -p 确保存在(gate 的 canonicalize 与 core 根围栏都要真目录)。
|
|
116
|
-
* 敏感路径的最后一道**不在**写门折叠里(#177 起搬家):守卫集 `SENSITIVE_WRITE_PATTERNS` 由
|
|
117
|
-
* governance 拍(boot/resolve-spec.ts → applyRuntimeGovernance)无条件铸成 DENY 基线,经 tightenTaskSpec
|
|
118
|
-
* 与写门 deny-wins 折叠 —— 结论不变(deny 恒赢,本函数放出的 exemptDirs 越不过它),但施加点已换。 */
|
|
119
62
|
export async function acceptShellScratchpadDir(raw, opts) {
|
|
120
63
|
if (typeof raw !== "string" || raw.length === 0)
|
|
121
|
-
return undefined;
|
|
64
|
+
return undefined;
|
|
122
65
|
if (opts.requirePrincipal) {
|
|
123
66
|
opts.warn("shell_scratchpad_ignored", { reason: "multi_tenant", note: "tenant-supplied exempt dir on a shared worker disk — server-computed scratchpad used instead" });
|
|
124
67
|
return undefined;
|
|
@@ -136,7 +79,6 @@ export async function acceptShellScratchpadDir(raw, opts) {
|
|
|
136
79
|
return undefined;
|
|
137
80
|
}
|
|
138
81
|
const canonical = resolve(raw);
|
|
139
|
-
// 深度 = 根后的非空路径段数;<3 即一整块系统级目录(/、/tmp、/home/x 之类),不能当写门豁免域。
|
|
140
82
|
const depth = canonical.split(sep).filter((s) => s.length > 0).length;
|
|
141
83
|
if (depth < 3) {
|
|
142
84
|
opts.warn("shell_scratchpad_ignored", { reason: "too_shallow", canonical });
|
|
@@ -151,23 +93,15 @@ export async function acceptShellScratchpadDir(raw, opts) {
|
|
|
151
93
|
return undefined;
|
|
152
94
|
}
|
|
153
95
|
}
|
|
154
|
-
// ── 三路复审修4:scratchpad 清理原语(此前 deferred 注释=无 reap 无界增长;这里只出原语,
|
|
155
|
-
// D 组把它们接到 E21 DELETE purge 与周期 sweep——签名即 seam,勿改名/改形)──────────────────────
|
|
156
|
-
/** 删除一个 session 的 scratchpad 目录(rm -rf,幂等:目录不存在=no-op)。失败吞 warn 不抛——
|
|
157
|
-
* 清理绝不 fault 调用它的 session-delete 路径;下一轮 {@link sweepStaleScratchpads} 仍会兜到它。 */
|
|
158
96
|
export async function purgeScratchpadDir(localDataRoot, sessionId) {
|
|
159
97
|
const dir = scratchpadDirFor(localDataRoot, sessionId);
|
|
160
98
|
try {
|
|
161
|
-
await rm(dir, { recursive: true, force: true });
|
|
99
|
+
await rm(dir, { recursive: true, force: true });
|
|
162
100
|
}
|
|
163
101
|
catch (err) {
|
|
164
102
|
console.warn(`scratchpad_purge_failed dir=${dir}: ${err instanceof Error ? err.message : String(err)}`);
|
|
165
103
|
}
|
|
166
104
|
}
|
|
167
|
-
/** 周期 sweep:扫 `<localDataRoot>/scratchpad/` 下 mtime 早于 `olderThanMs` 且不属于 `activeSessionIds`
|
|
168
|
-
* (先经 {@link scratchpadSessionSegment} 映射到目录名域)的目录并删除,返回删除数。逐目录失败跳过
|
|
169
|
-
* (下一轮再兜);scratchpad 根不存在=0。mtime 取目录自身(子文件写入会碰父目录 mtime 的语义因平台而异
|
|
170
|
-
* ——诚实边界:一个只被读的活跃 session 目录可能被判过期,activeSessionIds 排除面才是活会话的真保险)。 */
|
|
171
105
|
export async function sweepStaleScratchpads(localDataRoot, opts) {
|
|
172
106
|
const root = join(localDataRoot, "scratchpad");
|
|
173
107
|
let names;
|
|
@@ -175,7 +109,7 @@ export async function sweepStaleScratchpads(localDataRoot, opts) {
|
|
|
175
109
|
names = await readdir(root);
|
|
176
110
|
}
|
|
177
111
|
catch {
|
|
178
|
-
return 0;
|
|
112
|
+
return 0;
|
|
179
113
|
}
|
|
180
114
|
const activeSegments = new Set([...(opts.activeSessionIds ?? [])].map((id) => scratchpadSessionSegment(id)));
|
|
181
115
|
const cutoff = Date.now() - opts.olderThanMs;
|
|
@@ -192,19 +126,17 @@ export async function sweepStaleScratchpads(localDataRoot, opts) {
|
|
|
192
126
|
removed++;
|
|
193
127
|
}
|
|
194
128
|
catch {
|
|
195
|
-
/* 单目录 stat/rm 失败(并发删除/权限)→ 跳过,本轮不计数 */
|
|
196
129
|
}
|
|
197
130
|
}
|
|
198
131
|
return removed;
|
|
199
132
|
}
|
|
200
|
-
/** Map the exec-lane posture to the egress fact (the model must know when downloads can't work). */
|
|
201
133
|
export function egressForRemoteExec(remoteExec) {
|
|
202
134
|
if (!remoteExec?.provider)
|
|
203
135
|
return undefined;
|
|
204
136
|
if (remoteExec.provider === "e2b")
|
|
205
137
|
return remoteExec.allowInternetAccess === false ? "none" : "full";
|
|
206
138
|
if (remoteExec.provider === "k8s")
|
|
207
|
-
return "full";
|
|
208
|
-
return undefined;
|
|
139
|
+
return "full";
|
|
140
|
+
return undefined;
|
|
209
141
|
}
|
|
210
142
|
//# sourceMappingURL=env-facts.js.map
|