@sema-agent/server 7.146.0 → 7.148.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 +1423 -24
- package/README.md +21 -8
- package/README.zh-CN.md +15 -9
- package/USAGE.md +537 -216
- package/deploy/facts/lanes.json +7 -0
- package/deploy/sema-up/README.md +18 -7
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +42 -4
- package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -4
- package/deploy/sema-up/chart/templates/server.yaml +5 -4
- package/deploy/sema-up/chart/values.yaml +4 -3
- package/deploy/sema-up/cluster-up.sh +75 -176
- package/deploy/sema-up/kube-up.sh +29 -49
- package/deploy/sema-up/lib/chart-run.sh +23 -0
- package/deploy/sema-up/lib/dataroot.sh +3 -3
- package/deploy/sema-up/lib/flagshape.sh +4 -0
- package/deploy/sema-up/lib/health.sh +62 -13
- package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
- package/deploy/sema-up/lib/helm-values-kube.py +35 -0
- package/deploy/sema-up/lib/lanes.json +2 -5
- package/deploy/sema-up/lib/regcred.py +8 -0
- package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
- package/deploy/sema-up/lib/remote/image-import.sh +6 -0
- package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
- package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
- package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
- package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
- package/deploy/sema-up/lib/render-stack.py +17 -0
- package/deploy/sema-up/lib/shell-text.sh +87 -0
- package/deploy/sema-up/lib/usage-flags.txt +10 -0
- package/deploy/sema-up/lib/usage-head.txt +1 -0
- package/deploy/sema-up/lib/usage-tail.txt +13 -0
- package/deploy/sema-up/preflight.sh +10 -8
- package/deploy/sema-up/sema-up.sh +26 -48
- package/deploy/sema-up/smoke.sh +7 -6
- package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
- package/deploy/sema-up/stack/compose.yaml +18 -5
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +25 -3
- package/dist/adoption/plan.d.ts +24 -0
- package/dist/adoption/plan.js +53 -1
- package/dist/adoption/runner.d.ts +10 -1
- package/dist/adoption/runner.js +36 -16
- package/dist/adoption/wire.d.ts +3 -3
- package/dist/approval-card.d.ts +32 -34
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-reconciler.d.ts +4 -13
- package/dist/approval-reconciler.js +2 -2
- package/dist/approval.d.ts +16 -14
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +17 -9
- package/dist/auth-bridge.d.ts +0 -14
- package/dist/auth-bridge.js +0 -7
- package/dist/auto-mode-face.d.ts +10 -7
- package/dist/auto-mode-face.js +7 -4
- package/dist/background-agent-name.d.ts +19 -1
- package/dist/background-agent-name.js +12 -2
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/bake-runner/main.js +9 -6
- package/dist/bench/s1/arms.js +6 -5
- package/dist/bench/s1/live-deps.js +8 -3
- package/dist/bench/s1/run-firm.js +6 -5
- package/dist/bind-host.d.ts +25 -0
- package/dist/bind-host.js +25 -0
- package/dist/boot/adoption.d.ts +3 -0
- package/dist/boot/adoption.js +1 -0
- package/dist/boot/crash-last.js +2 -1
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/device-lane.js +5 -5
- package/dist/boot/engine-lease.d.ts +12 -11
- package/dist/boot/execution-env.d.ts +19 -8
- package/dist/boot/execution-env.js +80 -62
- package/dist/boot/execution-lane.d.ts +37 -9
- package/dist/boot/execution-lane.js +74 -20
- package/dist/boot/exit-boundary.d.ts +3 -3
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/exit-last.js +2 -1
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/governance-seams.d.ts +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +18 -16
- package/dist/boot/memory-boundary.d.ts +11 -11
- package/dist/boot/memory-boundary.js +3 -3
- package/dist/boot/memory-consolidation.d.ts +50 -53
- package/dist/boot/memory-consolidation.js +11 -18
- package/dist/boot/org-memory.js +4 -3
- package/dist/boot/parked-revive-gate.d.ts +1 -1
- package/dist/boot/parked-revive-gate.js +3 -3
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +20 -17
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +133 -165
- package/dist/boot/retention-lane.d.ts +7 -45
- package/dist/boot/retention-lane.js +2 -2
- package/dist/boot/runner-deps.d.ts +28 -7
- package/dist/boot/runner-deps.js +11 -4
- package/dist/boot/runtime-caps.d.ts +2 -2
- package/dist/boot/runtime-caps.js +16 -2
- package/dist/boot/session-faces.d.ts +17 -7
- package/dist/boot/session-faces.js +122 -96
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.d.ts +1 -1
- package/dist/boot/stage-01-config.js +14 -2
- package/dist/boot/stage-02-web-admin-pull.d.ts +2 -1
- package/dist/boot/stage-02-web-admin-pull.js +15 -8
- package/dist/boot/stage-03-store-backend.d.ts +4 -1
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +3 -1
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +9 -5
- package/dist/boot/stage-05-execution-env.js +5 -5
- package/dist/boot/stage-06-runners.d.ts +13 -15
- package/dist/boot/stage-06-runners.js +24 -18
- package/dist/boot/stage-07-capability-layer.d.ts +14 -11
- package/dist/boot/stage-07-capability-layer.js +9 -12
- package/dist/boot/stage-08-reapers.d.ts +14 -11
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +16 -18
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +16 -18
- package/dist/boot/stage-10-http-server.js +9 -5
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +12 -0
- package/dist/boot/stores.js +39 -17
- package/dist/boot/task-list-lane.d.ts +4 -4
- package/dist/boot/web-admin.d.ts +4 -2
- package/dist/boot/web-admin.js +58 -38
- package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
- package/dist/boot-reclaim.d.ts +3 -1
- package/dist/boot-reclaim.js +1 -1
- package/dist/brain.d.ts +7 -18
- package/dist/brain.js +5 -17
- package/dist/budget.js +6 -6
- package/dist/capabilities/center-plugins.d.ts +9 -1
- package/dist/capabilities/center-plugins.js +37 -11
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +3 -2
- package/dist/capabilities/composite-members.js +3 -2
- package/dist/capabilities/execution-lane.d.ts +7 -7
- package/dist/capabilities/execution-lane.js +2 -2
- package/dist/capabilities/hands-lane.d.ts +1 -1
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +38 -33
- package/dist/capabilities/scenarios.js +24 -25
- package/dist/capabilities/settings-contract.d.ts +29 -0
- package/dist/capabilities/settings-contract.js +14 -0
- package/dist/capabilities/skills.d.ts +6 -6
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +69 -4
- package/dist/capability-facts.js +77 -5
- package/dist/card-void.d.ts +4 -4
- package/dist/card-void.js +1 -1
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +10 -5
- package/dist/config-catalog.d.ts +16 -1
- package/dist/config-catalog.js +68 -61
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +58 -4
- package/dist/config-invariants.js +104 -23
- package/dist/config-lkg.d.ts +24 -2
- package/dist/config-lkg.js +22 -9
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -108
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +215 -202
- package/dist/config.d.ts +69 -14
- package/dist/config.js +188 -96
- package/dist/degenerate-instrument.js +1 -1
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deploy-facts.js +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +51 -16
- package/dist/deployment-shape.js +31 -6
- package/dist/egress-redirect.d.ts +25 -7
- package/dist/egress-redirect.js +20 -2
- package/dist/elicitation.d.ts +6 -5
- package/dist/elicitation.js +23 -22
- package/dist/engine-identity.d.ts +28 -0
- package/dist/engine-identity.js +10 -0
- package/dist/entry-problems.d.ts +5 -7
- package/dist/entry-problems.js +1 -1
- package/dist/env-facts.d.ts +7 -5
- package/dist/env-facts.js +12 -7
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-config-root.d.ts +5 -5
- package/dist/execution-config-root.js +5 -5
- package/dist/execution-env-purpose.d.ts +14 -0
- package/dist/execution-env-purpose.js +29 -0
- package/dist/execution-lane-caps.d.ts +53 -103
- package/dist/execution-lane-caps.js +51 -83
- package/dist/execution-placement.d.ts +65 -9
- package/dist/execution-placement.js +58 -0
- package/dist/field-conflict.d.ts +7 -11
- package/dist/field-conflict.js +3 -3
- package/dist/file-history-capture.d.ts +3 -3
- package/dist/file-history-disclosure.d.ts +2 -2
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/drain-entry.d.ts +17 -10
- package/dist/fleet/drain-entry.js +1 -1
- package/dist/fleet/fleet-bus.d.ts +21 -3
- package/dist/fleet/fleet-bus.js +35 -25
- package/dist/fleet/fleet-reconciler.js +2 -2
- package/dist/fleet/serving-lease.js +6 -7
- package/dist/fleet-client.js +3 -3
- package/dist/fleet-lease.d.ts +0 -1
- package/dist/fleet-lease.js +4 -5
- package/dist/history-anchor.d.ts +42 -0
- package/dist/history-anchor.js +34 -0
- package/dist/hitl-delivery.d.ts +90 -0
- package/dist/hitl-delivery.js +98 -0
- package/dist/hooks/classic-stations.d.ts +8 -11
- package/dist/hooks/classic-stations.js +0 -7
- package/dist/hooks/command-spawn.d.ts +1 -4
- package/dist/hooks/command-spawn.js +0 -11
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +119 -65
- package/dist/hooks/hook-runner.js +415 -217
- package/dist/host-lsp-manager.d.ts +22 -8
- package/dist/host-lsp-manager.js +4 -1
- package/dist/http/active-run-conflict.d.ts +2 -43
- package/dist/http/active-run-conflict.js +3 -7
- package/dist/http/admission.d.ts +4 -18
- package/dist/http/admission.js +75 -78
- package/dist/http/approval-sweeps.d.ts +5 -8
- package/dist/http/approval-sweeps.js +55 -30
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/checkpoint-ctx.d.ts +17 -0
- package/dist/http/checkpoint-ctx.js +6 -0
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claim-latency.d.ts +10 -0
- package/dist/http/claim-latency.js +12 -0
- package/dist/http/claimed-run.d.ts +4 -3
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +77 -31
- package/dist/http/durable-run-leg.d.ts +3 -3
- package/dist/http/durable-run-leg.js +18 -12
- package/dist/http/execution-context.d.ts +18 -42
- package/dist/http/execution-context.js +11 -5
- package/dist/http/health-reader.d.ts +36 -0
- package/dist/http/health-reader.js +21 -0
- package/dist/http/health-self-report.d.ts +9 -9
- package/dist/http/health-self-report.js +4 -4
- package/dist/http/idempotency.d.ts +9 -5
- package/dist/http/idempotency.js +4 -4
- package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
- package/dist/http/memory-compliance-failure-reply.js +7 -2
- package/dist/http/memory-face-fault-reply.d.ts +67 -0
- package/dist/http/memory-face-fault-reply.js +71 -0
- package/dist/http/memory-store-refusal-reply.d.ts +3 -3
- package/dist/http/memory-store-refusal-reply.js +6 -0
- package/dist/http/owner-access.d.ts +391 -56
- package/dist/http/owner-access.js +372 -33
- package/dist/http/principal-gate.d.ts +26 -94
- package/dist/http/principal-gate.js +24 -81
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +10 -14
- package/dist/http/request-guards.js +34 -68
- package/dist/http/resume-composition.d.ts +37 -0
- package/dist/http/resume-composition.js +18 -0
- package/dist/http/resume-ctx-read.d.ts +35 -12
- package/dist/http/resume-ctx-read.js +25 -6
- package/dist/http/resume-legs.d.ts +24 -24
- package/dist/http/resume-legs.js +260 -171
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/rewind-files-reply.d.ts +34 -0
- package/dist/http/rewind-files-reply.js +36 -0
- package/dist/http/route-ctx.d.ts +56 -47
- package/dist/http/route-table.js +2 -0
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +58 -37
- package/dist/http/routes/admin-config-refresh.js +2 -2
- package/dist/http/routes/admin-drain.js +2 -2
- package/dist/http/routes/admin-memory-optout.js +4 -3
- package/dist/http/routes/adoption.d.ts +3 -0
- package/dist/http/routes/adoption.js +17 -10
- package/dist/http/routes/agents-roster.js +13 -7
- package/dist/http/routes/approvals-assistant.js +73 -88
- package/dist/http/routes/attachments.js +2 -2
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/background.js +9 -17
- package/dist/http/routes/capabilities.js +23 -20
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +5 -5
- package/dist/http/routes/diagnostics.d.ts +27 -3
- package/dist/http/routes/diagnostics.js +27 -21
- package/dist/http/routes/engine.js +2 -2
- package/dist/http/routes/fleet.js +5 -3
- package/dist/http/routes/images.js +10 -6
- package/dist/http/routes/leader.d.ts +7 -2
- package/dist/http/routes/leader.js +12 -3
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +7 -15
- package/dist/http/routes/memory-bundle.js +4 -7
- package/dist/http/routes/memory-compliance.js +4 -4
- package/dist/http/routes/memory-consolidation.js +6 -9
- package/dist/http/routes/memory-origin.d.ts +3 -1
- package/dist/http/routes/memory-origin.js +7 -8
- package/dist/http/routes/memory-policy.js +17 -12
- package/dist/http/routes/notify-wake.js +12 -20
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/principal-inbox.d.ts +1 -1
- package/dist/http/routes/principal-inbox.js +2 -2
- package/dist/http/routes/projects.d.ts +70 -0
- package/dist/http/routes/projects.js +87 -0
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +50 -7
- package/dist/http/routes/run-memory-capture.d.ts +2 -2
- package/dist/http/routes/run-memory-capture.js +6 -12
- package/dist/http/routes/run-permission-mode.d.ts +2 -2
- package/dist/http/routes/run-permission-mode.js +10 -17
- package/dist/http/routes/runs.js +148 -233
- package/dist/http/routes/session-memory-sync.d.ts +2 -2
- package/dist/http/routes/session-memory-sync.js +7 -13
- package/dist/http/routes/session-sync.d.ts +4 -2
- package/dist/http/routes/session-sync.js +48 -30
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.d.ts +7 -1
- package/dist/http/routes/sessions.js +177 -112
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +144 -122
- package/dist/http/routes/trace-usage.d.ts +0 -12
- package/dist/http/routes/trace-usage.js +40 -46
- package/dist/http/routes/workflows.d.ts +39 -4
- package/dist/http/routes/workflows.js +42 -14
- package/dist/http/run-concurrency-cap.d.ts +20 -12
- package/dist/http/run-concurrency-cap.js +39 -26
- package/dist/http/run-read-face.d.ts +3 -5
- package/dist/http/run-read-face.js +8 -13
- package/dist/http/send.d.ts +12 -3
- package/dist/http/send.js +42 -6
- package/dist/http/server.d.ts +63 -50
- package/dist/http/server.js +52 -16
- package/dist/http/sse-log.d.ts +17 -10
- package/dist/http/sse-log.js +7 -7
- package/dist/http/stored-body-replay.d.ts +17 -3
- package/dist/http/stored-body-replay.js +11 -2
- package/dist/http/submit-ctx.d.ts +16 -8
- package/dist/http/submit-ctx.js +6 -2
- package/dist/http/submit-replay.d.ts +19 -6
- package/dist/http/submit-replay.js +18 -6
- package/dist/http/sync-submit-body.d.ts +3 -4
- package/dist/http/sync-submit-body.js +4 -5
- package/dist/http/wire-types.d.ts +23 -13
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -1
- package/dist/instruction-source-notice.d.ts +1 -1
- package/dist/key-resolver.d.ts +32 -0
- package/dist/key-resolver.js +23 -9
- package/dist/leader/diffup.js +2 -1
- package/dist/leader/endpoint.d.ts +26 -5
- package/dist/leader/endpoint.js +154 -14
- package/dist/leader/fanout.d.ts +3 -0
- package/dist/leader/fanout.js +78 -63
- package/dist/leader/leader.d.ts +16 -0
- package/dist/leader/leader.js +43 -3
- package/dist/leader/merge.d.ts +9 -1
- package/dist/leader/merge.js +16 -1
- package/dist/leader/repair-wire.js +1 -1
- package/dist/leader/wire.d.ts +36 -3
- package/dist/leader/wire.js +59 -18
- package/dist/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/memory-embedder-reembed.d.ts +38 -0
- package/dist/memory-embedder-reembed.js +20 -0
- package/dist/memory-incident-sink.d.ts +0 -28
- package/dist/memory-incident-sink.js +5 -0
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-scope.d.ts +31 -4
- package/dist/memory-scope.js +65 -16
- package/dist/memory-store-refusal.d.ts +20 -4
- package/dist/memory-store-refusal.js +1 -1
- package/dist/memory-sync-client.d.ts +5 -2
- package/dist/memory-sync-client.js +19 -14
- package/dist/memory-sync.js +1 -1
- package/dist/model-compat.d.ts +51 -28
- package/dist/model-compat.js +55 -23
- package/dist/model-context-window.d.ts +18 -0
- package/dist/model-context-window.js +2 -0
- package/dist/model-entry-headers.d.ts +46 -4
- package/dist/model-entry-headers.js +2 -2
- package/dist/model-entry-refusal.d.ts +46 -17
- package/dist/model-entry-refusal.js +47 -27
- package/dist/model-plane-face.d.ts +19 -11
- package/dist/model-plane-face.js +9 -1
- package/dist/model-plane-probe.d.ts +2 -0
- package/dist/model-plane-probe.js +17 -0
- package/dist/model-provider.d.ts +3 -3
- package/dist/model-route-endpoint.d.ts +9 -5
- package/dist/model-route-endpoint.js +29 -7
- package/dist/model-select.d.ts +16 -0
- package/dist/model-select.js +4 -0
- package/dist/mountinfo.d.ts +37 -0
- package/dist/mountinfo.js +47 -0
- package/dist/namespaced-rule-name.d.ts +28 -2
- package/dist/namespaced-rule-name.js +10 -1
- package/dist/net-address.d.ts +1 -1
- package/dist/observability/corrupt-read-seat.d.ts +4 -4
- package/dist/observability/corrupt-read-seat.js +5 -3
- package/dist/observability/fail-open.d.ts +75 -47
- package/dist/observability/fail-open.js +77 -47
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.d.ts +2 -0
- package/dist/observability/metrics.js +5 -4
- package/dist/observability/otel-exporter.js +2 -1
- package/dist/observability/principal-context.d.ts +14 -7
- package/dist/observability/principal-context.js +8 -3
- package/dist/observability/run-terminal.d.ts +7 -1
- package/dist/observability/run-terminal.js +5 -2
- package/dist/observability/secret-env-scrub.d.ts +30 -4
- package/dist/observability/secret-env-scrub.js +15 -3
- package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
- package/dist/orchestration/hardened-vm-runner.js +11 -5
- package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
- package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
- package/dist/orchestration/hardened-vm-worker.js +2 -1
- package/dist/orchestration/workflow-agent-session-index.d.ts +7 -12
- package/dist/orchestration/workflow-agent-session-index.js +1 -6
- package/dist/orchestration/workflow-completion-inbox.d.ts +29 -9
- package/dist/orchestration/workflow-completion-inbox.js +65 -46
- package/dist/org-delivery-gate.d.ts +5 -4
- package/dist/org-delivery-gate.js +7 -6
- package/dist/org-memory-admission.d.ts +5 -2
- package/dist/org-memory-admission.js +25 -10
- package/dist/outbound-dispatcher.d.ts +1 -1
- package/dist/outbound-dispatcher.js +6 -12
- package/dist/owner-brands.d.ts +81 -0
- package/dist/owner-brands.js +42 -0
- package/dist/owner-faces.d.ts +531 -0
- package/dist/owner-faces.js +126 -0
- package/dist/parked-decide.d.ts +100 -31
- package/dist/parked-decide.js +162 -48
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +6 -8
- package/dist/peer-directory.js +3 -2
- package/dist/permission-rule-vocab.d.ts +53 -8
- package/dist/permission-rule-vocab.js +30 -2
- package/dist/plugins/adoption-log-sql.d.ts +0 -22
- package/dist/plugins/adoption-log-sql.js +5 -3
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
- package/dist/plugins/approval-ask-store-file.d.ts +28 -9
- package/dist/plugins/approval-ask-store-file.js +74 -18
- package/dist/plugins/approval-ask-store-memory.d.ts +17 -7
- package/dist/plugins/approval-ask-store-memory.js +35 -12
- package/dist/plugins/approval-ask-store-sql.d.ts +42 -20
- package/dist/plugins/approval-ask-store-sql.js +44 -11
- package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
- package/dist/plugins/approval-exemption-skill-m46.js +25 -0
- package/dist/plugins/approval-exemption-store.d.ts +6 -1
- package/dist/plugins/approval-exemption-store.js +14 -0
- package/dist/plugins/approval-nonce-store.d.ts +39 -12
- package/dist/plugins/approval-nonce-store.js +72 -23
- package/dist/plugins/blob-backend.d.ts +40 -195
- package/dist/plugins/blob-backend.js +41 -234
- package/dist/plugins/caching-session-store.d.ts +22 -5
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +33 -6
- package/dist/plugins/checkpoint-index-columns.js +39 -3
- package/dist/plugins/checkpoint-store-face.d.ts +84 -11
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.d.ts +2 -2
- package/dist/plugins/device-store-sql.js +6 -10
- package/dist/plugins/ensure-index.d.ts +13 -1
- package/dist/plugins/ensure-index.js +154 -21
- package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
- package/dist/plugins/ensure-schema-lock-policy.js +3 -2
- package/dist/plugins/execution-lane-rename-m40.d.ts +20 -0
- package/dist/plugins/execution-lane-rename-m40.js +10 -0
- package/dist/plugins/execution-placement-sql.d.ts +63 -88
- package/dist/plugins/execution-placement-sql.js +94 -54
- package/dist/plugins/file-run-store.d.ts +89 -35
- package/dist/plugins/file-run-store.js +197 -142
- package/dist/plugins/host-platform.d.ts +24 -3
- package/dist/plugins/host-platform.js +15 -1
- package/dist/plugins/image-bake-store-sql.js +2 -0
- package/dist/plugins/imported-layer-root-retirement.d.ts +19 -10
- package/dist/plugins/imported-layer-root-retirement.js +4 -8
- package/dist/plugins/inbox-payload-column.d.ts +14 -0
- package/dist/plugins/inbox-payload-column.js +13 -0
- package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
- package/dist/plugins/k8s-pod-reaper.js +0 -1
- package/dist/plugins/leader-run-store-sql.d.ts +22 -0
- package/dist/plugins/leader-run-store-sql.js +34 -4
- package/dist/plugins/local-checkpoint-store.d.ts +63 -23
- package/dist/plugins/local-checkpoint-store.js +204 -81
- package/dist/plugins/local-data-dir-modes-m39.d.ts +48 -0
- package/dist/plugins/local-data-dir-modes-m39.js +183 -0
- package/dist/plugins/local-docker-capacity.d.ts +93 -0
- package/dist/plugins/local-docker-capacity.js +194 -0
- package/dist/plugins/local-docker-reaper.d.ts +92 -0
- package/dist/plugins/local-docker-reaper.js +102 -0
- package/dist/plugins/local-engine-high-water.d.ts +13 -0
- package/dist/plugins/local-engine-high-water.js +62 -0
- package/dist/plugins/local-session-store.d.ts +442 -143
- package/dist/plugins/local-session-store.js +941 -289
- package/dist/plugins/local-session-window.d.ts +3 -2
- package/dist/plugins/local-session-window.js +3 -2
- package/dist/plugins/local-sidecar-quarantine.js +3 -2
- package/dist/plugins/local-task-attachment-store.d.ts +20 -1
- package/dist/plugins/local-task-attachment-store.js +32 -12
- package/dist/plugins/memory-embedder-fingerprint.d.ts +33 -10
- package/dist/plugins/memory-embedder-fingerprint.js +52 -12
- package/dist/plugins/memory-embedder.d.ts +1 -1
- package/dist/plugins/memory-embedder.js +11 -9
- package/dist/plugins/memory-engine-pg.d.ts +7 -5
- package/dist/plugins/memory-engine-pg.js +18 -9
- package/dist/plugins/memory-engine-sql-apply.d.ts +21 -8
- package/dist/plugins/memory-engine-sql-apply.js +7 -9
- package/dist/plugins/memory-engine-tidb.d.ts +12 -7
- package/dist/plugins/memory-engine-tidb.js +18 -10
- package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
- package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
- package/dist/plugins/memory-run-store.d.ts +39 -27
- package/dist/plugins/memory-run-store.js +72 -70
- package/dist/plugins/one-time-migration-marker.d.ts +10 -0
- package/dist/plugins/one-time-migration-marker.js +7 -0
- package/dist/plugins/one-time-migrations.d.ts +325 -74
- package/dist/plugins/one-time-migrations.js +705 -230
- package/dist/plugins/org-delivery-quota-store.js +2 -1
- package/dist/plugins/owner-only-file-mode.d.ts +29 -0
- package/dist/plugins/owner-only-file-mode.js +141 -0
- package/dist/plugins/permission-rule-store-file.d.ts +11 -11
- package/dist/plugins/permission-rule-store-file.js +14 -2
- package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
- package/dist/plugins/permission-rule-store-sql.js +6 -86
- package/dist/plugins/pg-pool.d.ts +3 -32
- package/dist/plugins/pg-pool.js +27 -11
- package/dist/plugins/release-version.d.ts +20 -0
- package/dist/plugins/release-version.js +28 -0
- package/dist/plugins/remote-env-adb.d.ts +20 -4
- package/dist/plugins/remote-env-adb.js +39 -11
- package/dist/plugins/remote-env-e2b.d.ts +19 -28
- package/dist/plugins/remote-env-e2b.js +40 -29
- package/dist/plugins/remote-env-host.d.ts +11 -10
- package/dist/plugins/remote-env-host.js +40 -27
- package/dist/plugins/remote-env-k8s.d.ts +45 -47
- package/dist/plugins/remote-env-k8s.js +122 -62
- package/dist/plugins/remote-env-local-docker.d.ts +152 -15
- package/dist/plugins/remote-env-local-docker.js +370 -75
- package/dist/plugins/remote-env-ssh.d.ts +8 -2
- package/dist/plugins/remote-env-ssh.js +26 -24
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/remote-shell.d.ts +59 -30
- package/dist/plugins/remote-shell.js +175 -62
- package/dist/plugins/retention-declaration.d.ts +37 -0
- package/dist/plugins/retention-declaration.js +9 -0
- package/dist/plugins/retention-deployment.d.ts +158 -0
- package/dist/plugins/retention-deployment.js +119 -0
- package/dist/plugins/retention-lane-store-sql.d.ts +74 -4
- package/dist/plugins/retention-lane-store-sql.js +103 -1
- package/dist/plugins/retention-sql.d.ts +29 -0
- package/dist/plugins/retention-sql.js +8 -0
- package/dist/plugins/run-preview-m45.d.ts +11 -0
- package/dist/plugins/run-preview-m45.js +19 -0
- package/dist/plugins/run-store-sql.d.ts +56 -68
- package/dist/plugins/run-store-sql.js +127 -116
- package/dist/plugins/s3-answer.d.ts +2 -1
- package/dist/plugins/sandbox-reaper.d.ts +26 -0
- package/dist/plugins/sandbox-reaper.js +2 -0
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
- package/dist/plugins/scheduler-support.d.ts +16 -1
- package/dist/plugins/scheduler-support.js +22 -2
- package/dist/plugins/schema-consistency.d.ts +42 -15
- package/dist/plugins/schema-consistency.js +213 -13
- package/dist/plugins/schema-drift-sentence.d.ts +4 -1
- package/dist/plugins/schema-drift-sentence.js +4 -4
- package/dist/plugins/schema-ensure-legs.d.ts +10 -1
- package/dist/plugins/schema-ensure-legs.js +12 -2
- package/dist/plugins/schema-indexes.js +3 -0
- package/dist/plugins/schema-live-columns.d.ts +14 -5
- package/dist/plugins/schema-live-columns.js +10 -10
- package/dist/plugins/send-user-file.js +2 -1
- package/dist/plugins/session-birth.d.ts +37 -0
- package/dist/plugins/session-birth.js +38 -0
- package/dist/plugins/session-epoch-anchor.d.ts +40 -12
- package/dist/plugins/session-epoch-anchor.js +33 -11
- package/dist/plugins/session-ext-table.d.ts +98 -0
- package/dist/plugins/session-ext-table.js +134 -0
- package/dist/plugins/session-fork.d.ts +16 -2
- package/dist/plugins/session-fork.js +3 -0
- package/dist/plugins/session-ownership.d.ts +1 -1
- package/dist/plugins/session-placement.d.ts +22 -16
- package/dist/plugins/session-placement.js +15 -12
- package/dist/plugins/session-row-sql.d.ts +20 -7
- package/dist/plugins/session-row-sql.js +16 -8
- package/dist/plugins/session-run-rollup.d.ts +29 -0
- package/dist/plugins/session-run-rollup.js +40 -0
- package/dist/plugins/session-store-sql.d.ts +157 -0
- package/dist/plugins/session-store-sql.js +398 -0
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/session-workspace-cell.d.ts +2 -2
- package/dist/plugins/session-workspace-cell.js +2 -2
- package/dist/plugins/shared-memory-store-sql.d.ts +10 -69
- package/dist/plugins/shared-memory-store-sql.js +15 -14
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
- package/dist/plugins/snapshot-bucket-presence.js +1 -1
- package/dist/plugins/sql-driver.d.ts +24 -8
- package/dist/plugins/sql-driver.js +43 -9
- package/dist/plugins/sql-errors.d.ts +35 -5
- package/dist/plugins/sql-errors.js +55 -3
- package/dist/plugins/sql-json-column.d.ts +8 -7
- package/dist/plugins/sql-json-column.js +10 -6
- package/dist/plugins/store-backend.d.ts +114 -18
- package/dist/plugins/store-backend.js +340 -87
- package/dist/plugins/store-contracts.d.ts +97 -30
- package/dist/plugins/store-contracts.js +23 -1
- package/dist/plugins/store-fault.d.ts +28 -2
- package/dist/plugins/store-fault.js +20 -2
- package/dist/plugins/task-attachment-store.d.ts +21 -11
- package/dist/plugins/task-attachment-store.js +37 -19
- package/dist/plugins/task-list-store-sql.d.ts +1 -1
- package/dist/plugins/text-column-capacity.d.ts +21 -0
- package/dist/plugins/text-column-capacity.js +5 -0
- package/dist/plugins/tidb-pool.d.ts +3 -2
- package/dist/plugins/tidb-pool.js +42 -39
- package/dist/plugins/user-input-ledger-sql.d.ts +1 -1
- package/dist/plugins/web-search.js +5 -3
- package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
- package/dist/plugins/workflow-run-store-sql.js +11 -5
- package/dist/principal-jwt.d.ts +4 -4
- package/dist/principal-jwt.js +20 -5
- package/dist/principal-shape.d.ts +41 -0
- package/dist/principal-shape.js +19 -0
- package/dist/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/read-face-posture.d.ts +6 -6
- package/dist/read-face-posture.js +2 -2
- package/dist/request-declaration-refusal.d.ts +35 -12
- package/dist/request-declaration-refusal.js +21 -9
- package/dist/request-form.d.ts +58 -0
- package/dist/request-form.js +72 -0
- package/dist/request-image-urls.d.ts +8 -2
- package/dist/request-image-urls.js +2 -1
- package/dist/request-images.d.ts +20 -0
- package/dist/request-images.js +59 -0
- package/dist/request-key-closure.d.ts +6 -7
- package/dist/request-key-closure.js +15 -2
- package/dist/request-value-closure.d.ts +5 -5
- package/dist/request-value-closure.js +1 -1
- package/dist/resource-suspend.d.ts +7 -16
- package/dist/resource-suspend.js +1 -1
- package/dist/retired-name-host-notice.d.ts +21 -0
- package/dist/retired-name-host-notice.js +12 -0
- package/dist/rule-entry-list.d.ts +2 -2
- package/dist/rule-entry-list.js +3 -4
- package/dist/rule-issue-reading.d.ts +58 -0
- package/dist/rule-issue-reading.js +14 -0
- package/dist/rules-consent.d.ts +46 -16
- package/dist/rules-consent.js +102 -53
- package/dist/run-acceptance.d.ts +3 -1
- package/dist/run-acceptance.js +3 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +109 -93
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +73 -44
- package/dist/runs.js +65 -43
- package/dist/runtime-caps-resolver.d.ts +36 -14
- package/dist/runtime-caps-resolver.js +31 -14
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -6
- package/dist/sealed-key-layout.js +5 -1
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +116 -26
- package/dist/security.d.ts +133 -161
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +27 -2
- package/dist/server-secret-env.d.ts +23 -5
- package/dist/server-secret-env.js +14 -4
- package/dist/service-version.d.ts +2 -1
- package/dist/service-version.js +2 -2
- package/dist/session-children-retire.d.ts +7 -5
- package/dist/session-children-retire.js +7 -2
- package/dist/session-deletion.d.ts +88 -0
- package/dist/session-deletion.js +8 -0
- package/dist/session-erase.d.ts +145 -0
- package/dist/session-erase.js +115 -0
- package/dist/session-error-wire.d.ts +6 -6
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +60 -10
- package/dist/session-incarnation.js +19 -2
- package/dist/session-policy-wire.d.ts +6 -3
- package/dist/session-policy-wire.js +11 -1
- package/dist/session-resident-background.d.ts +29 -47
- package/dist/session-resident-background.js +77 -8
- package/dist/session-row.d.ts +3 -2
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-sync-kernel.d.ts +1 -1
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/session-workspace.d.ts +11 -2
- package/dist/session-workspace.js +5 -0
- package/dist/sighup-idle.d.ts +1 -1
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-posture.d.ts +138 -21
- package/dist/store-posture.js +188 -3
- package/dist/stored-request-hooks-m20.d.ts +3 -2
- package/dist/stored-request-hooks-m20.js +21 -16
- package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
- package/dist/stores-sql/background-agent-store-sql.js +73 -20
- package/dist/stores-sql/blob-index-sql.d.ts +148 -0
- package/dist/stores-sql/blob-index-sql.js +154 -0
- package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
- package/dist/stores-sql/checkpoint-store-sql.js +86 -71
- package/dist/{plugins → stores-sql}/file-history-store-sql.d.ts +23 -11
- package/dist/{plugins → stores-sql}/file-history-store-sql.js +23 -18
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/{plugins → stores-sql}/pg-session-storage.d.ts +30 -81
- package/dist/{plugins → stores-sql}/pg-session-storage.js +123 -244
- package/dist/{plugins → stores-sql}/retention-store-sql.d.ts +197 -223
- package/dist/{plugins → stores-sql}/retention-store-sql.js +148 -207
- package/dist/{plugins → stores-sql}/session-event-payload.d.ts +1 -1
- package/dist/{plugins → stores-sql}/session-event-payload.js +1 -1
- package/dist/stores-sql/session-policy-store-sql.d.ts +33 -11
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +65 -0
- package/dist/stores-sql/session-write-hooks.js +2 -0
- package/dist/{plugins → stores-sql}/tidb-session-storage.d.ts +14 -15
- package/dist/{plugins → stores-sql}/tidb-session-storage.js +22 -28
- package/dist/{plugins → stores-sql}/tidb-session-store.d.ts +67 -138
- package/dist/{plugins → stores-sql}/tidb-session-store.js +130 -200
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +1 -1
- package/dist/stores-sql/windowed-session-storage.d.ts +61 -0
- package/dist/stores-sql/windowed-session-storage.js +70 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +7 -1
- package/dist/task-a2a.js +18 -17
- package/dist/task-cwd.d.ts +31 -3
- package/dist/task-cwd.js +25 -1
- package/dist/task-mcp.d.ts +11 -3
- package/dist/task-mcp.js +16 -19
- package/dist/task-settings.d.ts +23 -14
- package/dist/task-settings.js +35 -13
- package/dist/terminal.d.ts +25 -43
- package/dist/terminal.js +31 -11
- package/dist/tool-approval.d.ts +152 -137
- package/dist/tool-approval.js +199 -199
- package/dist/trace/core-keyset-guard.d.ts +22 -9
- package/dist/trace/core-vocab-wire.d.ts +95 -0
- package/dist/trace/core-vocab-wire.js +15 -0
- package/dist/trace/engine-notice-wire.d.ts +1 -1
- package/dist/trace/engine-notice-wire.js +2 -0
- package/dist/trace/exit-seat.d.ts +52 -4
- package/dist/trace/exit-seat.js +43 -36
- package/dist/trace/extension-call-face.d.ts +3 -2
- package/dist/trace/extension-call-face.js +3 -1
- package/dist/trace/ledger-events.d.ts +4 -7
- package/dist/trace/ledger-sink.d.ts +1 -30
- package/dist/trace/ledger-sink.js +0 -11
- package/dist/trace/model-segment.d.ts +5 -5
- package/dist/trace/model-segment.js +5 -5
- package/dist/trace/project.d.ts +88 -58
- package/dist/trace/project.js +64 -28
- package/dist/trace/redact.d.ts +124 -28
- package/dist/trace/redact.js +936 -328
- package/dist/trace/self-minted-wire.d.ts +750 -29
- package/dist/trace/self-minted-wire.js +262 -25
- package/dist/trace/sema-provenance.d.ts +45 -41
- package/dist/trace/sema-provenance.js +81 -10
- package/dist/trace/task-notification-facets.d.ts +70 -2
- package/dist/trace/task-notification-facets.js +71 -1
- package/dist/trace/wire-projection-faces.d.ts +43 -8
- package/dist/trace/wire-projection-faces.js +28 -3
- package/dist/unread-request-members.d.ts +66 -0
- package/dist/unread-request-members.js +41 -0
- package/dist/upstream-body.d.ts +23 -0
- package/dist/upstream-body.js +16 -0
- package/dist/url-refusal.d.ts +3 -3
- package/dist/url-refusal.js +11 -4
- package/dist/user-authored-text.d.ts +1 -1
- package/dist/user-input-ledger.d.ts +7 -8
- package/dist/user-input-ledger.js +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +6 -3
- package/dist/web-admin-client/apply-effective.js +33 -40
- package/dist/web-admin-client/apply-ledger.d.ts +16 -7
- package/dist/web-admin-client/apply-ledger.js +5 -2
- package/dist/web-admin-client/candidate-gate.d.ts +35 -3
- package/dist/web-admin-client/candidate-gate.js +53 -5
- package/dist/web-admin-client/center-request.d.ts +6 -3
- package/dist/web-admin-client/center-request.js +17 -16
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -2
- package/dist/web-admin-client/entry-metadata.d.ts +8 -0
- package/dist/web-admin-client/entry-metadata.js +13 -0
- package/dist/web-admin-client/facade.d.ts +1 -1
- package/dist/web-admin-client/http-client.d.ts +2 -1
- package/dist/web-admin-client/http-client.js +40 -13
- package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
- package/dist/web-admin-client/mcp-revocation.js +2 -1
- package/dist/web-admin-client/read-warnings.d.ts +1 -0
- package/dist/web-admin-client/read-warnings.js +1 -0
- package/dist/web-admin-client/restart-signal.js +13 -6
- package/dist/web-admin-client/skills-mcp.d.ts +22 -8
- package/dist/web-admin-client/skills-mcp.js +26 -21
- package/dist/web-admin-client/types.d.ts +35 -51
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/package.json +16 -12
- package/scripts/drain-check-local.mjs +118 -173
- package/scripts/drain-check.mysql.sql +20 -16
- package/scripts/drain-check.pg.sql +20 -16
- package/wire-changes/server@7.147.0.json +813 -0
- package/wire-changes/server@7.148.0.json +1517 -0
- package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
- package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
- package/dist/http/memory-layer-reply.d.ts +0 -30
- package/dist/http/memory-layer-reply.js +0 -24
- package/dist/lsp/e2b-bridge.d.ts +0 -57
- package/dist/lsp/e2b-bridge.js +0 -139
- package/dist/lsp/e2b-manager.d.ts +0 -93
- package/dist/lsp/e2b-manager.js +0 -178
- package/dist/lsp/lsp-frames.d.ts +0 -14
- package/dist/lsp/lsp-frames.js +0 -25
- package/dist/lsp/manager.d.ts +0 -129
- package/dist/lsp/manager.js +0 -127
- package/dist/lsp/types.d.ts +0 -12
- package/dist/lsp/types.js +0 -2
- package/dist/lsp/ws-transport.d.ts +0 -40
- package/dist/lsp/ws-transport.js +0 -210
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* core 的 `ControlPlaneCorruptError` ⇒ typed 500 `internal.memory_control_plane_corrupt` 的 **HTTP 映射** —— 唯一一处码字面量、唯一一处 `instanceof` 判别。
|
|
3
|
-
*
|
|
4
|
-
* ## 为什么是一只
|
|
5
|
-
* 这是 core 的 fail-closed 信号:记忆引擎的控制面(账本 / 事务日志 / 清标账 / 治理账)说不清,它宁可不答,也不在一个说不清的账上拼一个答案。
|
|
6
|
-
* 凡是会碰控制面的 operator 记忆口,对它的答法必须是同一句话:消费端按 `errorCode` 分支,运维有具体动作(修 / 重建账本后重试)。
|
|
7
|
-
* 此前这条映射写在四个地方(导出 / 导入口、外源标记口、整理口、合规口),码字面量与判别各一份 = 第五个口加错码或漏一支的口子。
|
|
8
|
-
* 同族的店形拒早已是一只(`sentMemoryStoreRefusal`,在 `memory-store-refusal-reply.ts`);本文件是第二只。挂在每一个**已分类收尾**上:
|
|
9
|
-
* `routes/memory-bundle.ts`(导出 / 导入)· `routes/memory-origin.ts`(外源列表 / 清标 / 清标账列表 —— 清标账列表是纯控制面读,店形拒不挂在它上面,它的损坏信号走这一只)·
|
|
10
|
-
* `routes/memory-consolidation.ts`(整理)· `memory-compliance-failure-reply.ts`(出处 / 抹除,两受众)。
|
|
11
|
-
*
|
|
12
|
-
* ## 文案按受众分(码与状态不分;与 `memory-compliance-failure-reply.ts` 同一条规则)
|
|
13
|
-
* · operator ⇒ 引擎原句上 wire(点名**哪一张**控制面账本坏了,运维下一步动作取决于它;原句带宿主路径,过了 operator 门的受众拿它不是泄露);
|
|
14
|
-
* · 会话所有者(自助抹除口,只有这一个口有这个受众)⇒ 一句固定指路,引擎原句整句交 `withheld` 落运维行 —— 不逐句判断哪句安全。
|
|
15
|
-
* 固定句**一码两义都真**:操作前账本读不出 ⇒ 什么都没发生;落定后残留枚举失败 ⇒ 抹除已提交、重放收敛(core 原话)。两句都不许诺零删除,
|
|
16
|
-
* 都指路「运维修好后用同一个 requestId 重发」。本层**不**嗅 core 文案去分辨哪一义(拿上游自由文本当判别式是第二真源)。
|
|
17
|
-
*
|
|
18
|
-
* 两处 `sendError` 的码都写**字面量**:错误码目录门(`test/error-code-catalog-live.test.ts`)与文案冻结门(`test/api-error-text-freeze.test.ts`,
|
|
19
|
-
* 固定句是它冻的那一句)扫的是源码字面量,变量态的码 / 句对它们隐形。
|
|
20
|
-
*/
|
|
21
|
-
import type { ServerResponse } from "node:http";
|
|
22
|
-
import type { MemoryComplianceAudience } from "./memory-compliance-failure-reply.js";
|
|
23
|
-
/** `err` 是 core 的控制面损坏 ⇒ 500 `internal.memory_control_plane_corrupt`(文案按受众),返回 true(已应答);否则 false,一个字节都不写。 */
|
|
24
|
-
export declare function sentControlPlaneCorrupt(res: ServerResponse, err: unknown, audience: MemoryComplianceAudience): boolean;
|
|
25
|
-
//# sourceMappingURL=memory-control-plane-corrupt-reply.d.ts.map
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { ControlPlaneCorruptError } from "@sema-agent/core";
|
|
2
|
-
import { assertNever } from "./route-ctx.js";
|
|
3
|
-
import { sendError } from "./send.js";
|
|
4
|
-
export function sentControlPlaneCorrupt(res, err, audience) {
|
|
5
|
-
if (!(err instanceof ControlPlaneCorruptError))
|
|
6
|
-
return false;
|
|
7
|
-
switch (audience.kind) {
|
|
8
|
-
case "operator":
|
|
9
|
-
sendError(res, 500, "internal.memory_control_plane_corrupt", err.message);
|
|
10
|
-
return true;
|
|
11
|
-
case "session_owner":
|
|
12
|
-
audience.withheld(err.message);
|
|
13
|
-
sendError(res, 500, "internal.memory_control_plane_corrupt", "session memory erasure could not be completed — this deployment's memory control plane could not be read cleanly (depending on where it stopped, either nothing was changed or the deletions were already committed and a replay finishes them); ask the operator to repair it, then resend with the same requestId");
|
|
14
|
-
return true;
|
|
15
|
-
default:
|
|
16
|
-
return assertNever(audience);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=memory-control-plane-corrupt-reply.js.map
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 记忆动词的**层座**与「这次请求落不到一只记忆店」的拒 —— 两件的 HTTP 半场,唯一一处。
|
|
3
|
-
*
|
|
4
|
-
* ## 规则(店的那一半在 `src/memory-scope-stores.ts`)
|
|
5
|
-
* 一次记忆请求只落一只店:请求点名的层住的那一只;不点名层的动词(条目 id / 店级账本)答在本部署点名的层与部署的店共处的那一只上,
|
|
6
|
-
* 两只店分住时不猜、拒。会话 id 的两口不点名层时不拒:记忆状态读本部署的每一只店再折成一份,按会话抹除落部署的店(`memory-operator-faces.ts`)。
|
|
7
|
-
* 不点名层的动词因此多一个可选的**层座** `scope`:GET 口在查询串(`?scope=<层键>`),POST 口在体里(`"scope": "<层键>"`);
|
|
8
|
-
* 点名的层只用来定店,动词本身的语义不变。点名层的动词(导出 / 导入 / 外源列表 / 整理 / operator 抹除的 `select.scope` 与 `expectedScopes`)
|
|
9
|
-
* 本来就点名,不加座。
|
|
10
|
-
*
|
|
11
|
-
* ## 层座的读法({@link readLayerSeat})
|
|
12
|
-
* 缺席 ⇒ 没点名;在场 ⇒ 必须是非空串,否则 400 `request.field_invalid`、面一次都不调(空串与非串不是「没点名」—— 静默当缺席会把请求答在
|
|
13
|
-
* 另一只店上)。
|
|
14
|
-
*
|
|
15
|
-
* ## 拒的映射({@link sentMemoryLayerRefusal})
|
|
16
|
-
* `MemoryLayerRefusal` ⇒ 400 `request.memory_layer`:请求可以改对(点名层 / 按店拆成几次),服务器没坏,也不是盘形问题。
|
|
17
|
-
* 文案按受众分(与 `memory-compliance-failure-reply.ts` 同一条规则):operator ⇒ 原句(点名部署配置的层、哪几层住在哪只店 —— 运维要的就是它);
|
|
18
|
-
* 会话所有者 ⇒ 固定一句(只说怎么办),原句交 `withheld` 落运维行 —— 部署配置的层键不是这个受众的材料。
|
|
19
|
-
*/
|
|
20
|
-
import type { ServerResponse } from "node:http";
|
|
21
|
-
import type { MemoryLayerSeat } from "../memory-operator-faces.js";
|
|
22
|
-
import type { MemoryComplianceAudience } from "./memory-compliance-failure-reply.js";
|
|
23
|
-
/**
|
|
24
|
-
* 层座:`present` = 键在不在(查询串 `has` / 体 `in`),`value` = 它的值。缺席 ⇒ `undefined`;非空串 ⇒ `{ layer }`;
|
|
25
|
-
* 其余 ⇒ 已答 400 `request.field_invalid`,返回 `null`(调用方 `return`)。
|
|
26
|
-
*/
|
|
27
|
-
export declare function readLayerSeat(res: ServerResponse, present: boolean, value: unknown): MemoryLayerSeat | undefined | null;
|
|
28
|
-
/** `err` 是本服务的层拒 ⇒ 400 `request.memory_layer`(文案按受众),返回 true;否则 false,一个字节都不写。 */
|
|
29
|
-
export declare function sentMemoryLayerRefusal(res: ServerResponse, err: unknown, audience: MemoryComplianceAudience): boolean;
|
|
30
|
-
//# sourceMappingURL=memory-layer-reply.d.ts.map
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { MemoryLayerRefusal } from "../memory-scope-stores.js";
|
|
2
|
-
import { sendError } from "./send.js";
|
|
3
|
-
export function readLayerSeat(res, present, value) {
|
|
4
|
-
if (!present)
|
|
5
|
-
return undefined;
|
|
6
|
-
if (typeof value === "string" && value.length > 0)
|
|
7
|
-
return { layer: value };
|
|
8
|
-
sendError(res, 400, "request.field_invalid", "scope must be a non-empty memory layer key when present — it names the layer whose memory store this request is answered on");
|
|
9
|
-
return null;
|
|
10
|
-
}
|
|
11
|
-
export function sentMemoryLayerRefusal(res, err, audience) {
|
|
12
|
-
if (!(err instanceof MemoryLayerRefusal))
|
|
13
|
-
return false;
|
|
14
|
-
switch (audience.kind) {
|
|
15
|
-
case "operator":
|
|
16
|
-
sendError(res, 400, "request.memory_layer", err.message);
|
|
17
|
-
return true;
|
|
18
|
-
case "session_owner":
|
|
19
|
-
audience.withheld(err.message);
|
|
20
|
-
sendError(res, 400, "request.memory_layer", "the memory store this request reaches cannot be told — the `scope` in the request is not a memory layer this deployment can read, or this deployment's own memory layer configuration cannot be read; resend without `scope` (or with a readable layer), or ask the operator");
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=memory-layer-reply.js.map
|
package/dist/lsp/e2b-bridge.d.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bridges WS ⇄ a language server's stdio. Server command from `LSP_CMD`, port `LSP_PORT`, and a per-session
|
|
3
|
-
* **auth token** `LSP_TOKEN` (the endpoint is a public `wss://<port>-<id>.e2b.app` URL — the runner connects with
|
|
4
|
-
* `?token=<secret>`; without it, anyone with the URL could read the workspace via LSP, council #4). Frame parsing
|
|
5
|
-
* uses the unit-tested {@link FRAME_DECODER_JS} (council #1/#2/#5).
|
|
6
|
-
*
|
|
7
|
-
* redesign⑤ (#96 §DESIGN-V2 F4): the WS server now rides an explicit `http.createServer` instead of binding its
|
|
8
|
-
* own socket (`new WebSocketServer({host,port})`) — the same port also answers `GET /healthz` (host-side liveness
|
|
9
|
-
* probe, §DESIGN-V2 F2/C6) without a second port or dependency. The EADDRINUSE loud-exit handler MOVES with the
|
|
10
|
-
* bind onto the http server (`server.on('error', …)`, same `lsp-bridge wss error` text + `exit 1` — test/lsp-e2b.test.ts
|
|
11
|
-
* :256-269 pins this exact text/code); `ws` still forwards its underlying server's `'error'` to `wss`, so nothing
|
|
12
|
-
* downstream (per-connection handling) changes.
|
|
13
|
-
*/
|
|
14
|
-
export declare const BRIDGE_SOURCE: string;
|
|
15
|
-
/** Bridge dir inside the sandbox(声明提前:tsserver 定值路径引用它)。 */
|
|
16
|
-
export declare const BRIDGE_DIR = "/home/user/.lsp-bridge";
|
|
17
|
-
/** tls 的 tsserver.js 定值路径(#96 真机门):install 腿保证在场,connect 腿经
|
|
18
|
-
* `initializationOptions.tsserver.path` 告知 tls(v4 起无 CLI 旗可用)。 */
|
|
19
|
-
export declare const TSSERVER_JS_PATH = "/home/user/.lsp-bridge/node_modules/typescript/lib/tsserver.js";
|
|
20
|
-
/** Language server command per languageId. P1 = typescript/javascript; dart/kotlin land with their template servers.
|
|
21
|
-
* `--stdio` only where the server needs it to pick stdio over its other transports (the node-based servers);
|
|
22
|
-
* gopls/jdtls/kotlin-language-server/sourcekit-lsp/`dart language-server` speak LSP over stdio by default.
|
|
23
|
-
* #96 真机门发现(E2B 真沙箱逐帧取证,test/lsp-e2b-bridge-live.test.ts):typescript-language-server
|
|
24
|
-
* **不自动发现全局 typescript**(只认 workspace 内 node_modules/typescript 或显式 tsserver 路径),
|
|
25
|
-
* `npm i -g … typescript` 装成之后 initialize 仍答 "Could not find a valid TypeScript installation";
|
|
26
|
-
* 且 v4 起 `--tsserver-path` CLI 旗已移除(未知参数=进程退 1,第二轮真机实测)——路径只能走 LSP
|
|
27
|
-
* `initializationOptions.tsserver.path`(TSSERVER_JS_PATH,connectE2bLspBridge 对 ts/js 传入),
|
|
28
|
-
* typescript 本体由 lspInstallCommand 落进 BRIDGE_DIR 定值路径(烤好模板文件在场则秒过)。 */
|
|
29
|
-
export declare const SERVER_CMD: Readonly<Record<string, string>>;
|
|
30
|
-
/** npm packages a non-baked sandbox needs (on-the-fly install). Languages absent here (go) REQUIRE a baked template. */
|
|
31
|
-
export declare const SERVER_NPM: Readonly<Record<string, string>>;
|
|
32
|
-
/** One bridge process per language → distinct ports.(BRIDGE_DIR 声明已提前至 SERVER_CMD 上方。) */
|
|
33
|
-
export declare function portForLanguage(language: string): number;
|
|
34
|
-
/** FOREGROUND install (run via `env.exec` — must finish before the start). A baked template makes both checks
|
|
35
|
-
* skip instantly; a non-baked sandbox npm-installs the server + ws here (slow once per sandbox). */
|
|
36
|
-
export declare function lspInstallCommand(language: string): string;
|
|
37
|
-
/** Start the bridge — run as a TRUE background command (`env.startBackground`), NOT `&`-backgrounded inside a
|
|
38
|
-
* foreground run: E2B reaps the foreground process group on completion, killing an in-shell `&`/nohup child.
|
|
39
|
-
* So node is the FOREGROUND here and E2B keeps the background command alive. */
|
|
40
|
-
export declare function lspStartCommand(language: string, port: number, token: string): string;
|
|
41
|
-
/** Where the on-the-fly `npm i` output from {@link lspInstallCommand} lands — previously had zero readers
|
|
42
|
-
* (§DESIGN-V2 F7 bonus fix); an install failure now tails this for the `lastError`/event snippet. */
|
|
43
|
-
export declare const LSP_SETUP_LOG = "/tmp/lsp-setup.log";
|
|
44
|
-
/** BRIDGE_DIR-relative log the bridge process itself appends to (fatal errors, child exits) — §DESIGN-V2 C4. */
|
|
45
|
-
export declare function bridgeLogFile(): string;
|
|
46
|
-
/** Per-port pidfile the bridge writes ONLY after a confirmed bind (BRIDGE_SOURCE's `listen` callback) — see its
|
|
47
|
-
* header comment for why a losing (EADDRINUSE) second bridge must never clobber this. */
|
|
48
|
-
export declare function bridgePidFile(port: number): string;
|
|
49
|
-
/** §DESIGN-V2 F3: verify a prior bridge generation ACTUALLY stopped before the host mints a replacement.
|
|
50
|
-
* Exit 0 = confirmed dead (or the pidfile never existed — nothing was ever listening) → safe to start a new
|
|
51
|
-
* generation on this port. Exit 1 = still alive after the bound wait — the caller MUST NOT start a new bridge:
|
|
52
|
-
* an unconfirmed kill risks EADDRINUSE (the new generation's fresh token would then be permanently rejected by
|
|
53
|
-
* the still-listening old process, the token check in BRIDGE_SOURCE) — better to stay `dead` than double-burn
|
|
54
|
-
* the restart budget on a doomed attempt. POSIX `sh` only (no `seq`/bashisms — sandboxes vary in shell).
|
|
55
|
-
* Bound: 20 × 0.1s = 2s. */
|
|
56
|
-
export declare function terminateBridgeCommand(port: number): string;
|
|
57
|
-
//# sourceMappingURL=e2b-bridge.d.ts.map
|
package/dist/lsp/e2b-bridge.js
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { FRAME_DECODER_JS } from "./lsp-frames.js";
|
|
2
|
-
export const BRIDGE_SOURCE = FRAME_DECODER_JS +
|
|
3
|
-
String.raw `
|
|
4
|
-
const { WebSocketServer } = require('ws');
|
|
5
|
-
const { spawn } = require('child_process');
|
|
6
|
-
const { URLSearchParams } = require('url');
|
|
7
|
-
const http = require('http');
|
|
8
|
-
const fs = require('fs');
|
|
9
|
-
const PORT = Number(process.env.LSP_PORT || 8123);
|
|
10
|
-
const CMD = (process.env.LSP_CMD || 'typescript-language-server --stdio').split(' ');
|
|
11
|
-
const TOKEN = process.env.LSP_TOKEN || '';
|
|
12
|
-
const MAX = 50 * 1024 * 1024;
|
|
13
|
-
const HEARTBEAT_MS = Number(process.env.LSP_HEARTBEAT_MS || 30000);
|
|
14
|
-
const START_MS = Date.now();
|
|
15
|
-
// Per-port pidfile (BRIDGE_DIR-relative — lspStartCommand cd's there first): the host reads this to verify a
|
|
16
|
-
// prior generation ACTUALLY stopped before minting a replacement (§DESIGN-V2 F3) — an unconfirmed kill risks a
|
|
17
|
-
// new generation's token being permanently rejected by a still-listening old process (the token check below).
|
|
18
|
-
// Written ONLY after a successful bind (inside the listen callback) — a SECOND bridge racing this same port
|
|
19
|
-
// must NOT clobber the FIRST (still listening) bridge's pidfile with its own (about-to-die) pid.
|
|
20
|
-
const PIDFILE = 'bridge-' + PORT + '.pid';
|
|
21
|
-
const LOGFILE = 'bridge.log';
|
|
22
|
-
function logLine(line) { try { fs.appendFileSync(LOGFILE, line + '\n'); } catch {} }
|
|
23
|
-
// Process-fatal hardening (§DESIGN-V2 C1/C2): an uncaught exception/rejection anywhere in this process previously
|
|
24
|
-
// died silently (no stderr line, no log) — the host's only signal was the WS going dead with no explanation.
|
|
25
|
-
process.on('uncaughtException', (err) => { const m = 'lsp-bridge fatal ' + (err && err.message); console.error(m); logLine(m); process.exit(1); });
|
|
26
|
-
process.on('unhandledRejection', (err) => { const m = 'lsp-bridge fatal ' + (err && err.message); console.error(m); logLine(m); process.exit(1); });
|
|
27
|
-
function tokenOf(url) { return new URLSearchParams(((url || '').split('?')[1]) || '').get('token'); }
|
|
28
|
-
const server = http.createServer((req, res) => {
|
|
29
|
-
const path = ((req && req.url) || '').split('?')[0];
|
|
30
|
-
if (path === '/healthz') {
|
|
31
|
-
// Same-origin auth as the WS gate below: TOKEN unset = open (dev/test), TOKEN set + mismatch = 401.
|
|
32
|
-
if (TOKEN && tokenOf(req.url) !== TOKEN) { res.writeHead(401); res.end(); return; }
|
|
33
|
-
const body = JSON.stringify({ pid: process.pid, uptimeMs: Date.now() - START_MS, connections: wss.clients.size, generationToken: TOKEN.slice(0, 8) });
|
|
34
|
-
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
35
|
-
res.end(body);
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
const body = http.STATUS_CODES[426]; // preserves ws's own default "upgrade required" response for any other path
|
|
39
|
-
res.writeHead(426, { 'Content-Length': Buffer.byteLength(body), 'Content-Type': 'text/plain' });
|
|
40
|
-
res.end(body);
|
|
41
|
-
});
|
|
42
|
-
// A zero-listener 'error' on ANY EventEmitter throws and crashes the process (Node default). Without this, a
|
|
43
|
-
// bind failure (e.g. EADDRINUSE — a second bridge start racing the same port) took down the WHOLE bridge
|
|
44
|
-
// process, killing every language's LSP session in the sandbox, not just the one that failed to start (HRD-LSP-4).
|
|
45
|
-
// Exit loud + explicit instead of an uncaught-exception dump so the failure is at least attributable.
|
|
46
|
-
server.on('error', (err) => { const m = 'lsp-bridge wss error ' + (err && err.message); console.error(m); logLine(m); process.exit(1); });
|
|
47
|
-
const wss = new WebSocketServer({ server });
|
|
48
|
-
wss.on('connection', (ws, req) => {
|
|
49
|
-
// Same zero-listener 'error' hazard as wss above, but per-connection: registered FIRST, before anything else
|
|
50
|
-
// touches this socket. Close (don't crash) — the heartbeat reaper's own ws.terminate() below is a routine
|
|
51
|
-
// source of a socket 'error' on an already-half-open connection (HRD-LSP-4).
|
|
52
|
-
ws.on('error', () => { try { ws.terminate(); } catch {} });
|
|
53
|
-
const q = ((req && req.url) || '').split('?')[1] || '';
|
|
54
|
-
if (TOKEN && new URLSearchParams(q).get('token') !== TOKEN) { ws.close(); return; } // auth (council #4)
|
|
55
|
-
ws.isAlive = true;
|
|
56
|
-
ws.on('pong', () => { ws.isAlive = true; });
|
|
57
|
-
const child = spawn(CMD[0], CMD.slice(1), { stdio: ['pipe', 'pipe', 'inherit'] });
|
|
58
|
-
child.stdin.on('error', () => {}); // EPIPE on a write racing the server's exit must not crash the bridge
|
|
59
|
-
child.on('error', () => { try { ws.close(); } catch {} }); // spawn failure (missing binary) → close, don't crash
|
|
60
|
-
const decode = makeFrameDecoder(MAX);
|
|
61
|
-
child.stdout.on('data', (d) => { for (const f of decode(d)) ws.send(f); });
|
|
62
|
-
ws.on('message', (data) => { const p = Buffer.from(data.toString(), 'utf8'); child.stdin.write('Content-Length: ' + p.length + '\r\n\r\n'); child.stdin.write(p); });
|
|
63
|
-
// pid guard: the child 'error' handler above routes spawn FAILURES (missing binary — pid never assigned)
|
|
64
|
-
// through ws.close() → this 'close' handler. Killing a child whose pid was never assigned can signal the
|
|
65
|
-
// CALLER's process group instead of the (nonexistent) child (HRD-LSP-4; same hazard class as bake-runner's
|
|
66
|
-
// spawner, src/bake-runner/main.ts).
|
|
67
|
-
ws.on('close', () => { if (child.pid !== undefined) child.kill(); });
|
|
68
|
-
child.on('exit', (code, signal) => { logLine('lsp-bridge child exit code=' + code + ' signal=' + signal); try { ws.close(); } catch {} });
|
|
69
|
-
});
|
|
70
|
-
// Reap half-open connections: the E2B proxy kills a WS at ~60-75s and the kill can be SILENT on THIS side too —
|
|
71
|
-
// no close frame, so the per-connection language server above would outlive its dead socket (one leaked server
|
|
72
|
-
// per heal; a long task accumulates them until the sandbox OOMs). terminate() fires 'close' → child.kill().
|
|
73
|
-
setInterval(() => {
|
|
74
|
-
for (const ws of wss.clients) {
|
|
75
|
-
if (ws.isAlive === false) { try { ws.terminate(); } catch {} continue; }
|
|
76
|
-
ws.isAlive = false;
|
|
77
|
-
try { ws.ping(); } catch {}
|
|
78
|
-
}
|
|
79
|
-
}, HEARTBEAT_MS);
|
|
80
|
-
server.listen(PORT, '0.0.0.0', () => {
|
|
81
|
-
try { fs.writeFileSync(PIDFILE, String(process.pid)); } catch (e) { logLine('lsp-bridge pidfile write failed ' + (e && e.message)); }
|
|
82
|
-
console.log('lsp-bridge listening', PORT);
|
|
83
|
-
});
|
|
84
|
-
`;
|
|
85
|
-
export const BRIDGE_DIR = "/home/user/.lsp-bridge";
|
|
86
|
-
export const TSSERVER_JS_PATH = `${BRIDGE_DIR}/node_modules/typescript/lib/tsserver.js`;
|
|
87
|
-
export const SERVER_CMD = {
|
|
88
|
-
typescript: "typescript-language-server --stdio",
|
|
89
|
-
javascript: "typescript-language-server --stdio",
|
|
90
|
-
python: "pyright-langserver --stdio",
|
|
91
|
-
go: "gopls",
|
|
92
|
-
dart: "dart language-server",
|
|
93
|
-
kotlin: "kotlin-language-server",
|
|
94
|
-
java: "jdtls",
|
|
95
|
-
swift: "sourcekit-lsp",
|
|
96
|
-
};
|
|
97
|
-
export const SERVER_NPM = {
|
|
98
|
-
typescript: "typescript-language-server typescript",
|
|
99
|
-
javascript: "typescript-language-server typescript",
|
|
100
|
-
python: "pyright",
|
|
101
|
-
};
|
|
102
|
-
export function portForLanguage(language) {
|
|
103
|
-
const ports = { typescript: 8123, javascript: 8123, dart: 8124, kotlin: 8125, python: 8126, go: 8127, java: 8128, swift: 8129 };
|
|
104
|
-
return ports[language] ?? 8123;
|
|
105
|
-
}
|
|
106
|
-
export function lspInstallCommand(language) {
|
|
107
|
-
const cmd = SERVER_CMD[language];
|
|
108
|
-
const npm = SERVER_NPM[language];
|
|
109
|
-
return [
|
|
110
|
-
`mkdir -p ${BRIDGE_DIR}`,
|
|
111
|
-
`[ -f ${BRIDGE_DIR}/node_modules/ws/package.json ] || (cd ${BRIDGE_DIR} && echo '{}' > package.json && npm i ws >/tmp/lsp-setup.log 2>&1)`,
|
|
112
|
-
npm ? `command -v ${cmd.split(" ")[0]} >/dev/null || npm i -g ${npm} >>/tmp/lsp-setup.log 2>&1` : "true",
|
|
113
|
-
npm?.includes("typescript")
|
|
114
|
-
? `[ -f ${TSSERVER_JS_PATH} ] || (cd ${BRIDGE_DIR} && npm i typescript@5 >>/tmp/lsp-setup.log 2>&1)`
|
|
115
|
-
: "true",
|
|
116
|
-
].join(" && ");
|
|
117
|
-
}
|
|
118
|
-
export function lspStartCommand(language, port, token) {
|
|
119
|
-
return `cd ${BRIDGE_DIR} && LSP_PORT=${port} LSP_TOKEN='${token}' LSP_CMD='${SERVER_CMD[language]}' node bridge.cjs`;
|
|
120
|
-
}
|
|
121
|
-
export const LSP_SETUP_LOG = "/tmp/lsp-setup.log";
|
|
122
|
-
export function bridgeLogFile() {
|
|
123
|
-
return `${BRIDGE_DIR}/bridge.log`;
|
|
124
|
-
}
|
|
125
|
-
export function bridgePidFile(port) {
|
|
126
|
-
return `${BRIDGE_DIR}/bridge-${port}.pid`;
|
|
127
|
-
}
|
|
128
|
-
export function terminateBridgeCommand(port) {
|
|
129
|
-
const pidfile = bridgePidFile(port);
|
|
130
|
-
return [
|
|
131
|
-
`[ -f ${pidfile} ] || exit 0`,
|
|
132
|
-
`PID=$(cat ${pidfile})`,
|
|
133
|
-
`kill "$PID" 2>/dev/null`,
|
|
134
|
-
`i=0`,
|
|
135
|
-
`while [ $i -lt 20 ]; do kill -0 "$PID" 2>/dev/null || exit 0; i=$((i+1)); sleep 0.1; done`,
|
|
136
|
-
`exit 1`,
|
|
137
|
-
].join("; ");
|
|
138
|
-
}
|
|
139
|
-
//# sourceMappingURL=e2b-bridge.js.map
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { connectWsLspTransport } from "./ws-transport.js";
|
|
2
|
-
import { E2bLspManager, type LspCapableEnv, type LspUnavailableReason } from "./manager.js";
|
|
3
|
-
import type { LspTransport } from "./types.js";
|
|
4
|
-
export interface E2bLspOptions {
|
|
5
|
-
/** Injectable for tests (no E2B/ws). */
|
|
6
|
-
connect?: typeof connectWsLspTransport;
|
|
7
|
-
retry?: {
|
|
8
|
-
attempts: number;
|
|
9
|
-
delayMs: number;
|
|
10
|
-
};
|
|
11
|
-
/** Bridge auth token override. The manager pins ONE token per env+PORT — the bridge RESOURCE, not the
|
|
12
|
-
* language (`portForLanguage` maps several languages, e.g. typescript/javascript, onto the SAME port/process
|
|
13
|
-
* — see `createE2bLspManager`). On a RE-open (transport heal after the E2B proxy idle-killed the WS) the
|
|
14
|
-
* original bridge process is still listening with the FIRST token — a fresh random token would be rejected
|
|
15
|
-
* and the reconnect would always fail. */
|
|
16
|
-
token?: string;
|
|
17
|
-
/** WS scheme for the bridge URL. E2B's `getHost` returns a public TLS proxy host → `wss` (default);
|
|
18
|
-
* the k8s adapter returns a cluster-internal `podIP:port` → plain `ws` (no TLS on the pod network;
|
|
19
|
-
* the per-session bridge token still gates access). */
|
|
20
|
-
scheme?: "ws" | "wss";
|
|
21
|
-
/** Observability hook (open/heal/degrade events) — prod wires the service logger. */
|
|
22
|
-
log?: (event: string, fields: Record<string, unknown>) => void;
|
|
23
|
-
/** §DESIGN-V2 F11: metrics registry (structural — matches the narrow surface remote-env-e2b.ts's `cfg.metrics`
|
|
24
|
-
* already uses). `provider`/`generation`/`reason` labels are filled in by this module, never left freeform. */
|
|
25
|
-
metrics?: {
|
|
26
|
-
inc(name: string, labels?: Record<string, string>): void;
|
|
27
|
-
};
|
|
28
|
-
/** §DESIGN-V2 F11: the deployment lane feeding this manager (boot/execution-env.ts passes it explicitly —
|
|
29
|
-
* "e2b" or "k8s" — rather than this module guessing it back out of `scheme`, which is a WS-protocol detail
|
|
30
|
-
* that happens to correlate with the lane but isn't the same axis). Defaults to inferring from `scheme` only
|
|
31
|
-
* so existing callers that don't pass it (tests) keep working. */
|
|
32
|
-
provider?: string;
|
|
33
|
-
/** §DESIGN-V2 F2/C6: health-probe override for tests (no real sandbox network). Defaults to a real
|
|
34
|
-
* `GET /healthz` fetch (1s timeout) — `scheme` maps to the probe's URL scheme, F11 (`wss→https`, `ws→http`). */
|
|
35
|
-
probe?: (env: LspCapableEnv, port: number, token: string, scheme: "ws" | "wss") => Promise<boolean>;
|
|
36
|
-
}
|
|
37
|
-
/** Start (+ install on a non-baked template) the language server + bridge inside THIS env's sandbox, then connect.
|
|
38
|
-
* Every call starts (or re-starts) the bridge unconditionally — the one production caller is
|
|
39
|
-
* `createE2bLspManager`, which de-dupes per env+port before ever reaching here (see its doc). */
|
|
40
|
-
export declare function openE2bLspTransport(language: string, env: LspCapableEnv, opts?: E2bLspOptions): Promise<LspTransport | undefined>;
|
|
41
|
-
/** §DESIGN-V2 A: `starting` while the write+install+startBackground sequence is in flight; `ready` once at
|
|
42
|
-
* least one WS connect through this generation has succeeded; `dead` once this generation is confirmed (or
|
|
43
|
-
* presumed, per its own failure) unusable — the ONLY way out of `dead` is minting a new generation. */
|
|
44
|
-
export type BridgeState = "starting" | "ready" | "dead";
|
|
45
|
-
/**
|
|
46
|
-
* §DESIGN-V2 A/F3/F6: one bridge RESOURCE per env+port (not per language — `portForLanguage` maps
|
|
47
|
-
* typescript/javascript onto the SAME port/process off the same `SERVER_CMD`, HRD-LSP-4). A crashed/never-
|
|
48
|
-
* booted bridge can be replaced by minting a new `generation` (bounded by `MAX_BRIDGE_GENERATIONS` — a
|
|
49
|
-
* crash-loop must degrade the language, not burn the sandbox indefinitely); the NEW generation is only ever
|
|
50
|
-
* minted after `terminateBridgeCommand` confirms the OLD one actually stopped (F3) — an unconfirmed kill risks
|
|
51
|
-
* EADDRINUSE permanently rejecting the new generation's fresh token (the old process is still the one
|
|
52
|
-
* listening, and its token check has no way to know a replacement was intended).
|
|
53
|
-
*/
|
|
54
|
-
export interface E2bBridgeHandle {
|
|
55
|
-
readonly port: number;
|
|
56
|
-
/** Pinned once per generation — the shared bridge resource's auth secret. A per-LANGUAGE token would be
|
|
57
|
-
* rejected by the one bridge process actually listening whenever two languages share a port (see the
|
|
58
|
-
* module doc's HRD-LSP-4 reference): the second language mints a different token, the bridge only
|
|
59
|
-
* recognizes whichever token started it, auth fails, retries exhaust, and that language is permanently
|
|
60
|
-
* degraded to grep/read_file for the task. */
|
|
61
|
-
readonly token: string;
|
|
62
|
-
/** The `LSP_CMD` this generation's bridge process was launched with — identity documentation (ts/js sharing
|
|
63
|
-
* one value/port/process is legitimate, §DESIGN-V2 "不做"); not read back by this module. */
|
|
64
|
-
readonly serverCmd: string;
|
|
65
|
-
/** 1 at first mint; +1 every restart. Bounds the restart budget (`MAX_BRIDGE_GENERATIONS`). */
|
|
66
|
-
readonly generation: number;
|
|
67
|
-
state: BridgeState;
|
|
68
|
-
/** The most recent human-readable diagnostic (write/install/start/connect failure, or a probe verdict) —
|
|
69
|
-
* feeds `lastError`-style debugging; the MODEL-facing word is `deathReason` (via `unavailableReason`), not
|
|
70
|
-
* this free-text string. */
|
|
71
|
-
lastError?: string;
|
|
72
|
-
/** The SPECIFIC reason THIS generation died (unset while starting/ready). `unavailableReason`-facing
|
|
73
|
-
* reporting overrides this to `bridge-restart-budget-exhausted` once `generation >= MAX_BRIDGE_GENERATIONS`
|
|
74
|
-
* — "further restarts won't help" is a different (and, once true, more useful) word than "what killed the
|
|
75
|
-
* last one." */
|
|
76
|
-
deathReason?: LspUnavailableReason;
|
|
77
|
-
/** True once this generation has completed at least one real WS connect. Gates the fast healthz-probe heal
|
|
78
|
-
* path (§DESIGN-V2 F2/F6): a generation that has never connected yet is still cold-starting, not dead —
|
|
79
|
-
* treating an unreachable healthz as "dead" during that window would misjudge ordinary boot lag as a crash
|
|
80
|
-
* and burn a restart generation for nothing. A generation that HAS connected before, though, really should
|
|
81
|
-
* be reachable again quickly, so it skips the blind 6×1500ms retry loop and asks the bridge directly. */
|
|
82
|
-
everConnected: boolean;
|
|
83
|
-
/** Resolves once the write+install+startBackground sequence has been ATTEMPTED for this generation — `false`
|
|
84
|
-
* (with `state` already flipped to `dead` + `deathReason`/`lastError` set) means it failed before ever
|
|
85
|
-
* reaching a connect attempt. */
|
|
86
|
-
ready: Promise<boolean>;
|
|
87
|
-
}
|
|
88
|
-
/** A crash-loop must degrade the language, not retry the sandbox forever. 3 covers "an occasional OOM kill";
|
|
89
|
-
* a bridge that dies again immediately after 3 fresh starts is a standing failure, not a blip. */
|
|
90
|
-
export declare const MAX_BRIDGE_GENERATIONS = 3;
|
|
91
|
-
/** The single shared `LspServerManager` for the deployment (`RunnerDeps.lspManager`). */
|
|
92
|
-
export declare function createE2bLspManager(opts?: E2bLspOptions): E2bLspManager;
|
|
93
|
-
//# sourceMappingURL=e2b-manager.d.ts.map
|
package/dist/lsp/e2b-manager.js
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { connectWsLspTransport } from "./ws-transport.js";
|
|
3
|
-
import { E2bLspManager } from "./manager.js";
|
|
4
|
-
import { BRIDGE_DIR, BRIDGE_SOURCE, TSSERVER_JS_PATH, LSP_SETUP_LOG, bridgeLogFile, lspInstallCommand, lspStartCommand, portForLanguage, SERVER_CMD, terminateBridgeCommand, } from "./e2b-bridge.js";
|
|
5
|
-
function describeErr(e) {
|
|
6
|
-
return e instanceof Error ? e.message : String(e);
|
|
7
|
-
}
|
|
8
|
-
async function tailLog(env, path, lines = 40, capBytes = 4096) {
|
|
9
|
-
const r = await env.exec(`tail -n ${lines} ${path} 2>/dev/null`).catch(() => undefined);
|
|
10
|
-
if (!r?.ok)
|
|
11
|
-
return undefined;
|
|
12
|
-
const out = r.value?.stdout ?? "";
|
|
13
|
-
return out.length > capBytes ? out.slice(-capBytes) : out;
|
|
14
|
-
}
|
|
15
|
-
function httpSchemeFor(scheme) {
|
|
16
|
-
return scheme === "wss" ? "https" : "http";
|
|
17
|
-
}
|
|
18
|
-
async function defaultProbeHealthz(env, port, token, scheme) {
|
|
19
|
-
const host = await env.getHost(port);
|
|
20
|
-
if (!host)
|
|
21
|
-
return false;
|
|
22
|
-
try {
|
|
23
|
-
const res = await fetch(`${httpSchemeFor(scheme)}://${host}/healthz?token=${token}`, { signal: AbortSignal.timeout(1000) });
|
|
24
|
-
return res.ok;
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
async function startE2bBridge(language, env, port, token) {
|
|
31
|
-
const wrote = await env.writeFile(`${BRIDGE_DIR}/bridge.cjs`, BRIDGE_SOURCE).catch((e) => ({ ok: false, error: e }));
|
|
32
|
-
if (!wrote.ok) {
|
|
33
|
-
const detail = "error" in wrote && wrote.error !== undefined ? `bridge.cjs write failed: ${describeErr(wrote.error)}` : "bridge.cjs write failed";
|
|
34
|
-
return { ok: false, reason: "bridge-start-failed", detail };
|
|
35
|
-
}
|
|
36
|
-
const installed = await env.exec(lspInstallCommand(language)).catch(() => undefined);
|
|
37
|
-
if (!installed || !installed.ok || installed.value?.exitCode !== 0) {
|
|
38
|
-
const snippet = await tailLog(env, LSP_SETUP_LOG);
|
|
39
|
-
return { ok: false, reason: "install-failed", detail: snippet ? `install failed: ${snippet}` : "install failed (no setup log)" };
|
|
40
|
-
}
|
|
41
|
-
try {
|
|
42
|
-
await env.startBackground(lspStartCommand(language, port, token));
|
|
43
|
-
}
|
|
44
|
-
catch (e) {
|
|
45
|
-
return { ok: false, reason: "bridge-start-failed", detail: `background start failed: ${describeErr(e)}` };
|
|
46
|
-
}
|
|
47
|
-
return { ok: true };
|
|
48
|
-
}
|
|
49
|
-
async function connectE2bLspBridge(env, port, token, opts, language) {
|
|
50
|
-
const connect = opts?.connect ?? connectWsLspTransport;
|
|
51
|
-
const retry = opts?.retry ?? { attempts: 6, delayMs: 1500 };
|
|
52
|
-
const root = env.workspaceHandle().mountPath;
|
|
53
|
-
const initOptions = language === "typescript" || language === "javascript" ? { tsserver: { path: TSSERVER_JS_PATH } } : undefined;
|
|
54
|
-
const scheme = opts?.scheme ?? "wss";
|
|
55
|
-
for (let attempt = 0; attempt < retry.attempts; attempt++) {
|
|
56
|
-
const host = await env.getHost(port);
|
|
57
|
-
if (host) {
|
|
58
|
-
const transport = await connect(`${scheme}://${host}/?token=${token}`, root, undefined, initOptions);
|
|
59
|
-
if (transport)
|
|
60
|
-
return transport;
|
|
61
|
-
}
|
|
62
|
-
await new Promise((r) => setTimeout(r, retry.delayMs));
|
|
63
|
-
}
|
|
64
|
-
return undefined;
|
|
65
|
-
}
|
|
66
|
-
export async function openE2bLspTransport(language, env, opts) {
|
|
67
|
-
if (!SERVER_CMD[language])
|
|
68
|
-
return undefined;
|
|
69
|
-
const port = portForLanguage(language);
|
|
70
|
-
const token = opts?.token ?? randomUUID();
|
|
71
|
-
const started = await startE2bBridge(language, env, port, token);
|
|
72
|
-
if (!started.ok)
|
|
73
|
-
return undefined;
|
|
74
|
-
return connectE2bLspBridge(env, port, token, opts, language);
|
|
75
|
-
}
|
|
76
|
-
export const MAX_BRIDGE_GENERATIONS = 3;
|
|
77
|
-
export function createE2bLspManager(opts) {
|
|
78
|
-
const bridges = new WeakMap();
|
|
79
|
-
const scheme = opts?.scheme ?? "wss";
|
|
80
|
-
const provider = opts?.provider ?? (scheme === "ws" ? "k8s" : "e2b");
|
|
81
|
-
const log = opts?.log ?? (() => { });
|
|
82
|
-
const metrics = opts?.metrics;
|
|
83
|
-
const probe = opts?.probe ?? defaultProbeHealthz;
|
|
84
|
-
function reasonFor(handle) {
|
|
85
|
-
if (handle.generation >= MAX_BRIDGE_GENERATIONS)
|
|
86
|
-
return "bridge-restart-budget-exhausted";
|
|
87
|
-
return handle.deathReason ?? "bridge-connect-exhausted";
|
|
88
|
-
}
|
|
89
|
-
function markDead(handle, reason, detail) {
|
|
90
|
-
if (handle.state === "dead")
|
|
91
|
-
return reasonFor(handle);
|
|
92
|
-
handle.state = "dead";
|
|
93
|
-
handle.deathReason = reason;
|
|
94
|
-
handle.lastError = detail;
|
|
95
|
-
const reported = reasonFor(handle);
|
|
96
|
-
metrics?.inc("lsp_bridge_dead_total", { reason: reported });
|
|
97
|
-
log("lsp_bridge_dead", { port: handle.port, generation: handle.generation, reason: reported, detail });
|
|
98
|
-
return reported;
|
|
99
|
-
}
|
|
100
|
-
async function postmortem(env, port) {
|
|
101
|
-
const tail = await tailLog(env, bridgeLogFile());
|
|
102
|
-
if (tail !== undefined)
|
|
103
|
-
log("lsp_bridge_postmortem", { port, tail });
|
|
104
|
-
}
|
|
105
|
-
return new E2bLspManager({
|
|
106
|
-
log: opts?.log,
|
|
107
|
-
metrics,
|
|
108
|
-
hasServerCommand: (language) => Boolean(SERVER_CMD[language]),
|
|
109
|
-
transportFactory: async (language, env) => {
|
|
110
|
-
if (!SERVER_CMD[language])
|
|
111
|
-
return { ok: false, reason: "no-server-command" };
|
|
112
|
-
const port = portForLanguage(language);
|
|
113
|
-
let perPort = bridges.get(env);
|
|
114
|
-
if (!perPort) {
|
|
115
|
-
perPort = new Map();
|
|
116
|
-
bridges.set(env, perPort);
|
|
117
|
-
}
|
|
118
|
-
let handle = perPort.get(port);
|
|
119
|
-
if (!handle || handle.state === "dead") {
|
|
120
|
-
if (handle && handle.generation >= MAX_BRIDGE_GENERATIONS)
|
|
121
|
-
return { ok: false, reason: reasonFor(handle) };
|
|
122
|
-
const priorHandle = handle;
|
|
123
|
-
const generation = handle ? handle.generation + 1 : 1;
|
|
124
|
-
const token = opts?.token ?? randomUUID();
|
|
125
|
-
const newHandle = {
|
|
126
|
-
port,
|
|
127
|
-
token,
|
|
128
|
-
serverCmd: SERVER_CMD[language],
|
|
129
|
-
generation,
|
|
130
|
-
state: "starting",
|
|
131
|
-
everConnected: false,
|
|
132
|
-
ready: Promise.resolve(false),
|
|
133
|
-
};
|
|
134
|
-
newHandle.ready = (async () => {
|
|
135
|
-
if (priorHandle) {
|
|
136
|
-
const released = await env.exec(terminateBridgeCommand(port)).catch(() => undefined);
|
|
137
|
-
if (!released?.ok || released.value?.exitCode !== 0) {
|
|
138
|
-
markDead(newHandle, "bridge-start-failed", "previous generation could not be confirmed stopped — held back from starting to avoid a doomed EADDRINUSE race");
|
|
139
|
-
log("lsp_bridge_restart_blocked", { port, generation });
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
const started = await startE2bBridge(language, env, port, token);
|
|
144
|
-
if (!started.ok) {
|
|
145
|
-
markDead(newHandle, started.reason ?? "bridge-start-failed", started.detail ?? "bridge start failed");
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
metrics?.inc("lsp_bridge_start_total", { provider, generation: String(generation) });
|
|
149
|
-
log("lsp_bridge_start", { port, generation });
|
|
150
|
-
return true;
|
|
151
|
-
})();
|
|
152
|
-
perPort.set(port, newHandle);
|
|
153
|
-
handle = newHandle;
|
|
154
|
-
}
|
|
155
|
-
const started = await handle.ready;
|
|
156
|
-
if (!started)
|
|
157
|
-
return { ok: false, reason: reasonFor(handle) };
|
|
158
|
-
if (handle.everConnected) {
|
|
159
|
-
const alive = await probe(env, handle.port, handle.token, scheme);
|
|
160
|
-
if (!alive) {
|
|
161
|
-
const reason = markDead(handle, "bridge-connect-exhausted", "healthz probe reported the bridge unreachable");
|
|
162
|
-
await postmortem(env, port);
|
|
163
|
-
return { ok: false, reason };
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
const transport = await connectE2bLspBridge(env, handle.port, handle.token, opts, language);
|
|
167
|
-
if (!transport) {
|
|
168
|
-
const reason = markDead(handle, "bridge-connect-exhausted", "bridge connect exhausted after all retries");
|
|
169
|
-
await postmortem(env, port);
|
|
170
|
-
return { ok: false, reason };
|
|
171
|
-
}
|
|
172
|
-
handle.everConnected = true;
|
|
173
|
-
handle.state = "ready";
|
|
174
|
-
return { ok: true, transport };
|
|
175
|
-
},
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
//# sourceMappingURL=e2b-manager.js.map
|
package/dist/lsp/lsp-frames.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The LSP stdio Content-Length frame decoder, as JS SOURCE — embedded verbatim into `BRIDGE_SOURCE` (which runs
|
|
3
|
-
* inside the E2B sandbox, can't import TS) AND unit-tested here (test/lsp-frames.test.ts evals this same string).
|
|
4
|
-
* So the in-sandbox parser is actually exercised (council #5: the untestable raw-string parser was the risk).
|
|
5
|
-
*
|
|
6
|
-
* Guards: a frame claiming a non-finite / negative / over-cap length is skipped instead of looping or waiting
|
|
7
|
-
* forever (council #1 defense); the accumulator is dropped if it exceeds the cap with no complete frame (council
|
|
8
|
-
* #2 — a server that never sends `\r\n\r\n`, or a huge Content-Length, can't grow the buffer without bound).
|
|
9
|
-
* The runaway cap carries a `HEADER_SLACK` (core 1.196 #6 twin): a VALID frame whose PAYLOAD passes the
|
|
10
|
-
* `len <= maxBytes` check but whose `Content-Length: <n>\r\n\r\n` header pushes header+payload just over `maxBytes`
|
|
11
|
-
* must NOT be wiped mid-arrival (that silently dropped an in-window legal reply) — so cap at `maxBytes + 128`.
|
|
12
|
-
*/
|
|
13
|
-
export declare const FRAME_DECODER_JS: string;
|
|
14
|
-
//# sourceMappingURL=lsp-frames.d.ts.map
|
package/dist/lsp/lsp-frames.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export const FRAME_DECODER_JS = String.raw `
|
|
2
|
-
function makeFrameDecoder(maxBytes) {
|
|
3
|
-
var HEADER_SLACK = 128; // room for "Content-Length: <n>\r\n\r\n" ON TOP of a max-size payload (core 1.196 #6 twin)
|
|
4
|
-
let buf = Buffer.alloc(0);
|
|
5
|
-
return function decode(chunk) {
|
|
6
|
-
const frames = [];
|
|
7
|
-
buf = Buffer.concat([buf, chunk]);
|
|
8
|
-
if (buf.length > maxBytes + HEADER_SLACK) buf = Buffer.alloc(0); // runaway / no delimiter → drop (council #2); +slack so a valid frame isn't wiped when its header pushes total past maxBytes (core #6)
|
|
9
|
-
for (;;) {
|
|
10
|
-
const he = buf.indexOf('\r\n\r\n');
|
|
11
|
-
if (he === -1) break;
|
|
12
|
-
const m = /Content-Length:\s*(\d+)/i.exec(buf.slice(0, he).toString('ascii'));
|
|
13
|
-
if (!m) { buf = buf.slice(he + 4); continue; }
|
|
14
|
-
const len = Number(m[1]);
|
|
15
|
-
if (!Number.isFinite(len) || len < 0 || len > maxBytes) { buf = buf.slice(he + 4); continue; } // skip bad frame (council #1/#2)
|
|
16
|
-
const start = he + 4;
|
|
17
|
-
if (buf.length < start + len) break; // wait for the rest of this frame
|
|
18
|
-
frames.push(buf.slice(start, start + len).toString('utf8'));
|
|
19
|
-
buf = buf.slice(start + len);
|
|
20
|
-
}
|
|
21
|
-
return frames;
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
`;
|
|
25
|
-
//# sourceMappingURL=lsp-frames.js.map
|