@sema-agent/core 7.33.6 → 7.33.7

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/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## 7.33.7 — 2026-09-28
2
+
3
+ ### Fix — the OpenTelemetry OTLP exporter's header lists are withheld from the tool shell and language-server children by name (#1180; security; behavior narrowing; +0 exports, +0 wire keys, `SecretEnvFindingKind` unchanged) (@server)
4
+
5
+ - **Before.** `OTEL_EXPORTER_OTLP_HEADERS` and the per-signal `OTEL_EXPORTER_OTLP_{TRACES,METRICS,LOGS}_HEADERS` carry no credential word, so the name rules passed them and the scrub never reads their value: with `Authorization=Bearer <token>`, `api-key=<token>` or `Authorization=Basic <base64>` in the engine's environment, every tool shell and language server inherited the variable and a model-chosen `env` printed the collector credential (`isSecretEnvKey` answered `false` for all four names × all three values on 7.33.6).
6
+ - **Now.** The exporter's header-list names join the exact credential-name list: `OTEL_EXPORTER_OTLP_HEADERS`, `…_TRACES_HEADERS`, `…_METRICS_HEADERS`, `…_LOGS_HEADERS` (OpenTelemetry specification, `protocol/exporter.md`, v1.0.0 onward: the value is the request headers the exporter sends, `key1=value1,…`), `…_PROFILES_HEADERS` (opentelemetry.io OTLP exporter configuration, profiles signal) and the v0.7.0 per-signal spellings `…_SPAN_HEADERS` / `…_METRIC_HEADERS`. The name decides and the value is not read — an empty or credential-free header list is withheld too; findings are `exact-name`, confidence `high`. Exact names, not a `_HEADERS` shape: `CORS_ALLOW_HEADERS` and `OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_*` (header names, not values) stay. The exporter's other settings (`OTEL_SERVICE_NAME`, `OTEL_EXPORTER_OTLP_ENDPOINT`, `…_PROTOCOL`, `OTEL_RESOURCE_ATTRIBUTES`, …) are handed on as before.
7
+ - **Who needs it.** Deployments that configure OTLP export with header authentication in the engine's environment — including a server that merges its credentials file into the engine process environment, where `OTEL_EXPORTER_OTLP_HEADERS` is one of the credential slots.
8
+ - **Who is hurt / compensation.** A deployment that authenticates OTLP with headers and lets the model's shell inherit them: the child no longer has the variable, so an OpenTelemetry client run inside the model's shell (or a language server) exports without its authentication header and the collector may reject it. Compensation: hand the name back explicitly — `inheritEnv: [..., "OTEL_EXPORTER_OTLP_HEADERS"]` or `shellEnv: { OTEL_EXPORTER_OTLP_HEADERS: … }` on the exec env, `NodeLspManagerOptions.env` for a language server. Over-drop and residual (KL-1180): a credential-free header list is withheld too; a numbered or decorated spelling, a dotted spelling (OpenTelemetry's Java SDK also reads `otel.exporter.otlp.headers` / `OTEL_EXPORTER_OTLP.TRACES_HEADERS` as these settings), a vendor SDK's own header variable and an OTLP endpoint written with a userinfo are still handed on (values of other names are not read). The scope is the scrub's: the tool shell (`NodeExecutionEnv`, default `inheritEnv`) and the default language-server spawn; a `runSpec` oracle gate's command inherits the engine's environment as before.
9
+ - Pins: `test/backlog1180-otlp-headers-secret-env.test.ts` — seven names × three header values (`exact-name`, `high`, value absent from findings), value-blindness (no value, empty, credential-free lists), eleven controls; the server's thirteen secret-env names each withheld by name with a harmless value; a real shell spawned by `NodeExecutionEnv` whose `env` holds none of the planted names or values and keeps the controls, with the notice naming them; the `inheritEnv` allow list and `shellEnv` put-back through a real shell; the default language-server spawn.
10
+
1
11
  ## 7.33.6 — 2026-09-28
2
12
 
3
13
  ### Fix — a withheld entry of git's indexed env config keeps its index, holding a placeholder entry; the record is never renumbered and the count never rewritten (#1160; 7.33.5 regression; behavior; +0 exports, +0 wire keys) (@server)
@@ -9,6 +9,9 @@ const SECRET_ENV_EXACT_NAMES = new Set([
9
9
  "DATABASE_URL", "CONNECTION_STRING", "DSN", "NPM_AUTH",
10
10
  "PGPASSWORD", "MYSQL_PWD", "SSHPASS", "GPG_PASSPHRASE", "GH_PAT", "GITHUB_PAT",
11
11
  "NPM_CONFIG__AUTH", "NPM_CONFIG__AUTHTOKEN",
12
+ "OTEL_EXPORTER_OTLP_HEADERS", "OTEL_EXPORTER_OTLP_TRACES_HEADERS", "OTEL_EXPORTER_OTLP_METRICS_HEADERS",
13
+ "OTEL_EXPORTER_OTLP_LOGS_HEADERS", "OTEL_EXPORTER_OTLP_PROFILES_HEADERS",
14
+ "OTEL_EXPORTER_OTLP_SPAN_HEADERS", "OTEL_EXPORTER_OTLP_METRIC_HEADERS",
12
15
  ]);
13
16
  const NON_SECRET_ENV_EXACT_NAMES = new Set([
14
17
  "PARTITION_KEY", "SORT_KEY", "RANGE_KEY", "IDEMPOTENCY_KEY", "CACHE_KEY", "ROUTING_KEY",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/core",
3
- "version": "7.33.6",
3
+ "version": "7.33.7",
4
4
  "description": "Stateless, task-oriented AI agent core",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",
@@ -0,0 +1,63 @@
1
+ {
2
+ "repo": "core",
3
+ "version": "7.33.7",
4
+ "from": "af66de6b6e52c72e094d79a3308788bad6e08824",
5
+ "to": "v7.33.7",
6
+ "added": [],
7
+ "removed": [],
8
+ "changed": [],
9
+ "narrowed": [
10
+ {
11
+ "id": "F1",
12
+ "source": "behaviorFlips.summary",
13
+ "text": "#1180 (security, narrowing): the OpenTelemetry OTLP exporter's header-list names — `OTEL_EXPORTER_OTLP_HEADERS`, `OTEL_EXPORTER_OTLP_{TRACES,METRICS,LOGS,PROFILES}_HEADERS` and the specification v0.7.0 spellings `OTEL_EXPORTER_OTLP_{SPAN,METRIC}_HEADERS` — are withheld by name, value-blind, from the children the scrub covers (the tool shell `NodeExecutionEnv` with the default `inheritEnv`, the default language-server spawn) (`SecretEnvFinding.kind` = `exact-name`, confidence `high`; `SecretEnvFindingKind` unchanged)."
14
+ }
15
+ ],
16
+ "closedSetMembers": [],
17
+ "closedSetsUnreadable": [],
18
+ "typeKeys": [],
19
+ "typeKeysUnreadableArms": [],
20
+ "typeKeysFlattenedCount": 217,
21
+ "declarationMoves": [],
22
+ "mintMoves": [],
23
+ "criteriaObserves": [
24
+ {
25
+ "kind": "engineNoticeCode",
26
+ "name": "config.secret_env_scrubbed",
27
+ "assertions": [
28
+ "G1.c"
29
+ ]
30
+ },
31
+ {
32
+ "kind": "typeMember",
33
+ "name": "SecretEnvFinding.confidence",
34
+ "assertions": [
35
+ "G1.a"
36
+ ]
37
+ },
38
+ {
39
+ "kind": "typeMember",
40
+ "name": "SecretEnvFinding.key",
41
+ "assertions": [
42
+ "G1.b"
43
+ ]
44
+ },
45
+ {
46
+ "kind": "typeMember",
47
+ "name": "SecretEnvFinding.kind",
48
+ "assertions": [
49
+ "G1.a",
50
+ "G1.c"
51
+ ]
52
+ }
53
+ ],
54
+ "consumersHint": {
55
+ "cli": [],
56
+ "server": [],
57
+ "sdk": [],
58
+ "note": "scanned cli@4e593722 server@46b7fe60 sdk@8c379ef — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it"
59
+ },
60
+ "breakingCount": 0,
61
+ "breakingItems": [],
62
+ "toResolvedAt": "27d0adda64b75d026baee92fc39e95b57bfef5a0"
63
+ }