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.
- package/dist/cli/index.js +56 -19
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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",
|