tamperward 2.39.2 → 2.39.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli/index.js +56 -19
  2. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -19758,6 +19758,29 @@ var init_trace_verify = __esm({
19758
19758
  }
19759
19759
  });
19760
19760
 
19761
+ // src/immutable.ts
19762
+ function isPlainData(value) {
19763
+ if (value === null || typeof value !== "object") return false;
19764
+ const proto = Object.getPrototypeOf(value);
19765
+ return proto === Object.prototype || proto === Array.prototype || proto === null;
19766
+ }
19767
+ function deepFreeze(value) {
19768
+ const seen = /* @__PURE__ */ new WeakSet();
19769
+ const walk2 = (node) => {
19770
+ if (!isPlainData(node) || seen.has(node)) return;
19771
+ seen.add(node);
19772
+ Object.freeze(node);
19773
+ for (const key2 of Reflect.ownKeys(node)) walk2(Reflect.get(node, key2));
19774
+ };
19775
+ walk2(value);
19776
+ return value;
19777
+ }
19778
+ var init_immutable = __esm({
19779
+ "src/immutable.ts"() {
19780
+ "use strict";
19781
+ }
19782
+ });
19783
+
19761
19784
  // src/runtimes.ts
19762
19785
  import { existsSync as existsSync17, readFileSync as readFileSync20 } from "node:fs";
19763
19786
  import { join as join25 } from "node:path";
@@ -19854,7 +19877,8 @@ var KNOWN_RUNTIMES;
19854
19877
  var init_runtimes = __esm({
19855
19878
  "src/runtimes.ts"() {
19856
19879
  "use strict";
19857
- KNOWN_RUNTIMES = [
19880
+ init_immutable();
19881
+ KNOWN_RUNTIMES = deepFreeze([
19858
19882
  {
19859
19883
  id: "claude-code",
19860
19884
  // Markers are Claude Code files `init` never writes, so detection never mistakes
@@ -19891,7 +19915,7 @@ var init_runtimes = __esm({
19891
19915
  adapterTracking: "#482",
19892
19916
  note: "agent-neutral layers (pre-commit + CI) today; a native in-loop adapter is tracked in #482."
19893
19917
  }
19894
- ];
19918
+ ]);
19895
19919
  }
19896
19920
  });
19897
19921
 
@@ -19934,11 +19958,22 @@ function failClosedResult(outcome, detail, phase, denyPayload) {
19934
19958
  const wire = denyPayload(findings, phase);
19935
19959
  return { outcome, detail, wire, decision: { verdict: "deny", findings, reason: wire } };
19936
19960
  }
19937
- var OPERATION_KINDS;
19961
+ var STEERING_PHASES, CONTRACT_TO_RESEARCH_LAYER, OPERATION_KINDS;
19938
19962
  var init_contract = __esm({
19939
19963
  "src/adapters/contract.ts"() {
19940
19964
  "use strict";
19941
- OPERATION_KINDS = ["shell", "file-edit", "file-read", "mcp", "other"];
19965
+ init_immutable();
19966
+ STEERING_PHASES = Object.freeze(["pre-action", "post-action", "end-of-turn"]);
19967
+ CONTRACT_TO_RESEARCH_LAYER = deepFreeze([
19968
+ { source: "pre-action", layer: "pre-tool-use", note: "synchronous pre-execution deny (Claude PreToolUse)" },
19969
+ { source: "end-of-turn", layer: "stop-sweep", note: "mandatory end-of-turn reconciliation (Claude Stop)" },
19970
+ {
19971
+ source: "post-exit-envelope",
19972
+ layer: "envelope",
19973
+ note: "the run envelope around the whole agent process; post-action outcome observation lives here, not in a per-tool veto"
19974
+ }
19975
+ ]);
19976
+ OPERATION_KINDS = Object.freeze(["shell", "file-edit", "file-read", "mcp", "other"]);
19942
19977
  }
19943
19978
  });
19944
19979
 
@@ -21288,24 +21323,24 @@ var init_registry = __esm({
21288
21323
  init_adapter2();
21289
21324
  init_adapter3();
21290
21325
  init_adapter4();
21291
- RUNTIME_ADAPTERS = [
21326
+ RUNTIME_ADAPTERS = Object.freeze([
21292
21327
  claudeAdapter,
21293
21328
  codexAdapter,
21294
21329
  copilotAdapter,
21295
21330
  copilotSdkAdapter
21296
- ];
21297
- ADAPTER_LABELS = {
21331
+ ]);
21332
+ ADAPTER_LABELS = Object.freeze({
21298
21333
  "claude-code": "Claude Code",
21299
21334
  codex: "Codex",
21300
21335
  "github-copilot-cli": "GitHub Copilot CLI",
21301
21336
  "github-copilot-sdk-hosted": "GitHub Copilot SDK (hosted)"
21302
- };
21303
- ADAPTER_ALIASES = {
21337
+ });
21338
+ ADAPTER_ALIASES = Object.freeze({
21304
21339
  claude: "claude-code",
21305
21340
  copilot: "github-copilot-cli",
21306
21341
  "copilot-cli": "github-copilot-cli",
21307
21342
  "copilot-sdk": "github-copilot-sdk-hosted"
21308
- };
21343
+ });
21309
21344
  }
21310
21345
  });
21311
21346
 
@@ -21330,7 +21365,8 @@ var RETAINED_EVIDENCE;
21330
21365
  var init_evidence = __esm({
21331
21366
  "src/adapters/evidence.ts"() {
21332
21367
  "use strict";
21333
- RETAINED_EVIDENCE = [
21368
+ init_immutable();
21369
+ RETAINED_EVIDENCE = deepFreeze([
21334
21370
  {
21335
21371
  ref: "copilot-sdk-capture-2026-09-20",
21336
21372
  source: "harness/adapters/copilot-sdk/evidence/capture-2026-09-20.json",
@@ -21371,7 +21407,7 @@ var init_evidence = __esm({
21371
21407
  }
21372
21408
  ]
21373
21409
  }
21374
- ];
21410
+ ]);
21375
21411
  }
21376
21412
  });
21377
21413
 
@@ -21590,19 +21626,19 @@ function evidenceId(binding, assessments) {
21590
21626
  };
21591
21627
  return sha16(JSON.stringify(projection));
21592
21628
  }
21593
- var CAPABILITY_STATES, RUNTIME_CAPABILITY_IDS, EVIDENCE_SOURCES, FINAL_AUTHORITY, FAIL_OPEN_RE, PRE_DENY_UNPROVEN_RE, TRANSPORT_UNPROVEN_RE, LIFECYCLE_ONLY_RE, POST_ACTION_RE, TRANSPORT_KEYWORDS, PRE_DENY_IDS, REQUIRED_IN_LOOP_IDS;
21629
+ var CAPABILITY_STATES, RUNTIME_CAPABILITY_IDS, EVIDENCE_SOURCES, IN_LOOP_AGGREGATES, FINAL_AUTHORITY, FAIL_OPEN_RE, PRE_DENY_UNPROVEN_RE, TRANSPORT_UNPROVEN_RE, LIFECYCLE_ONLY_RE, POST_ACTION_RE, TRANSPORT_KEYWORDS, PRE_DENY_IDS, REQUIRED_IN_LOOP_IDS;
21594
21630
  var init_runtime_qualification = __esm({
21595
21631
  "src/runtime-qualification.ts"() {
21596
21632
  "use strict";
21597
- CAPABILITY_STATES = [
21633
+ CAPABILITY_STATES = Object.freeze([
21598
21634
  "PROVEN",
21599
21635
  "PARTIAL",
21600
21636
  "UNPROVEN",
21601
21637
  "UNSUPPORTED",
21602
21638
  "FAIL-OPEN",
21603
21639
  "INCONCLUSIVE"
21604
- ];
21605
- RUNTIME_CAPABILITY_IDS = [
21640
+ ]);
21641
+ RUNTIME_CAPABILITY_IDS = Object.freeze([
21606
21642
  "pre-deny:shell",
21607
21643
  "pre-deny:native-edit",
21608
21644
  "pre-deny:delete",
@@ -21620,8 +21656,8 @@ var init_runtime_qualification = __esm({
21620
21656
  "transport:empty",
21621
21657
  "hook-not-invoked",
21622
21658
  "detached/quiescence"
21623
- ];
21624
- EVIDENCE_SOURCES = [
21659
+ ]);
21660
+ EVIDENCE_SOURCES = Object.freeze([
21625
21661
  "adapter-declaration",
21626
21662
  // structural preDeny / postObserve / endOfTurn membership
21627
21663
  "adapter-unsupported",
@@ -21632,7 +21668,8 @@ var init_runtime_qualification = __esm({
21632
21668
  // a committed real-runtime evidence record proved it
21633
21669
  "not-declared"
21634
21670
  // absent from every declaration — no proof either way
21635
- ];
21671
+ ]);
21672
+ IN_LOOP_AGGREGATES = Object.freeze(["FULL", "PARTIAL", "NONE"]);
21636
21673
  FINAL_AUTHORITY = "AVAILABLE";
21637
21674
  FAIL_OPEN_RE = /fails?\s+open/i;
21638
21675
  PRE_DENY_UNPROVEN_RE = /pre-action deny|pre-deny|shell pre-deny/i;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tamperward",
3
- "version": "2.39.2",
3
+ "version": "2.39.3",
4
4
  "description": "The deterministic agent-integrity gate. One ruleset, evaluated on the actual diff/commands as a verdict, enforced everywhere a change can be made.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "hexrift",