dsh-completion-guard 0.3.2 → 0.4.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/CHANGELOG.md +21 -3
- package/CHANGELOG.zh-CN.md +21 -3
- package/README.md +21 -6
- package/README.zh-CN.md +21 -6
- package/dist/domain/index.d.ts +2 -2
- package/dist/domain/index.js +2 -2
- package/dist/{domain-DPPFAcbF.js → domain-CHTQFIT8.js} +630 -213
- package/dist/{index-CTFLYvNL.d.ts → index-AtjJOrK8.d.ts} +76 -4
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/docs/COMPATIBILITY.md +144 -11
- package/docs/LOCAL_ACCEPTANCE.md +69 -5
- package/docs/PORTING_NOTES.md +13 -3
- package/docs/SEMANTIC_COMPATIBILITY.md +20 -16
- package/docs/UPSTREAM_BASE.md +8 -1
- package/docs/distribution.md +18 -2
- package/docs/upstream-deltas.json +3 -3
- package/manifests/supported-host.v1.json +418 -0
- package/package.json +9 -9
|
@@ -943,14 +943,14 @@ function captureClause(text, sourceMessageId, id, revision, scope = {}) {
|
|
|
943
943
|
|
|
944
944
|
//#endregion
|
|
945
945
|
//#region src/domain/contract-digest.ts
|
|
946
|
-
function stable$
|
|
947
|
-
if (Array.isArray(value)) return `[${value.map(stable$
|
|
948
|
-
if (value && typeof value === "object") return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, entry]) => `${JSON.stringify(key)}:${stable$
|
|
946
|
+
function stable$3(value) {
|
|
947
|
+
if (Array.isArray(value)) return `[${value.map(stable$3).join(",")}]`;
|
|
948
|
+
if (value && typeof value === "object") return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, entry]) => `${JSON.stringify(key)}:${stable$3(entry)}`).join(",")}}`;
|
|
949
949
|
return JSON.stringify(value);
|
|
950
950
|
}
|
|
951
951
|
/** One authoritative contract identity shared by checkpoints and boundaries. */
|
|
952
952
|
function currentContractDigest(projection) {
|
|
953
|
-
return sha256(stable$
|
|
953
|
+
return sha256(stable$3([...projection.items.values()].sort((a, b) => a.id.localeCompare(b.id)).map((item) => [
|
|
954
954
|
item.id,
|
|
955
955
|
item.revision,
|
|
956
956
|
item.kind,
|
|
@@ -1950,16 +1950,16 @@ function renderRecoveryPacket(projection, options = {}) {
|
|
|
1950
1950
|
|
|
1951
1951
|
//#endregion
|
|
1952
1952
|
//#region src/domain/checkpoint.ts
|
|
1953
|
-
function stable$
|
|
1954
|
-
if (Array.isArray(value)) return `[${value.map(stable$
|
|
1955
|
-
if (value && typeof value === "object") return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, entry]) => `${JSON.stringify(key)}:${stable$
|
|
1953
|
+
function stable$2(value) {
|
|
1954
|
+
if (Array.isArray(value)) return `[${value.map(stable$2).join(",")}]`;
|
|
1955
|
+
if (value && typeof value === "object") return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, entry]) => `${JSON.stringify(key)}:${stable$2(entry)}`).join(",")}}`;
|
|
1956
1956
|
return JSON.stringify(value);
|
|
1957
1957
|
}
|
|
1958
1958
|
function tuplesEqual(left, right) {
|
|
1959
|
-
return stable$
|
|
1959
|
+
return stable$2(left ?? {}) === stable$2(right ?? {});
|
|
1960
1960
|
}
|
|
1961
1961
|
function transitionsEqual(left, right) {
|
|
1962
|
-
return stable$
|
|
1962
|
+
return stable$2(left) === stable$2(right);
|
|
1963
1963
|
}
|
|
1964
1964
|
function transitionIsSelfConsistent(action, transition) {
|
|
1965
1965
|
if (!transition?.parameters || transition.predicateId !== ACTION_MANIFEST.actions[action].predicateId || transition.version !== 1 || transition.predParamsKind !== "inline") return false;
|
|
@@ -2051,14 +2051,14 @@ function expectedTransitionMatches(action, transition, resolved, observed) {
|
|
|
2051
2051
|
"version",
|
|
2052
2052
|
"integrity_digest",
|
|
2053
2053
|
...action === "publish" ? ["registry"] : ["profile"]
|
|
2054
|
-
].every((key) => stable$
|
|
2054
|
+
].every((key) => stable$2(observed[key]) === stable$2(resolved[key]) && stable$2(params[key]) === stable$2(resolved[key]));
|
|
2055
2055
|
case "create":
|
|
2056
|
-
case "modify": return stable$
|
|
2057
|
-
case "restart": return stable$
|
|
2058
|
-
case "commit": return stable$
|
|
2059
|
-
case "push": return stable$
|
|
2060
|
-
case "pull": return stable$
|
|
2061
|
-
case "fetch": return stable$
|
|
2056
|
+
case "modify": return stable$2(observed.post_digest) === stable$2(params.post_digest);
|
|
2057
|
+
case "restart": return stable$2(params.pre_generation) === stable$2(resolved.pre_generation) && stable$2(observed.new_generation) !== stable$2(resolved.pre_generation) && stable$2(observed.health) === stable$2(params.health);
|
|
2058
|
+
case "commit": return stable$2(params.pre_head_oid) === stable$2(resolved.pre_head_oid) && stable$2(params.change_set_digest) === stable$2(resolved.change_set_digest) && stable$2(observed.pre_head_oid) === stable$2(resolved.pre_head_oid) && stable$2(observed.post_head_oid) !== stable$2(resolved.pre_head_oid);
|
|
2059
|
+
case "push": return stable$2(observed.remote_oid) === stable$2(resolved.local_oid) && stable$2(params.local_oid) === stable$2(resolved.local_oid);
|
|
2060
|
+
case "pull": return stable$2(resolved.pull_mode) === stable$2("ff-only") && stable$2(params.pull_mode) === stable$2("ff-only") && stable$2(params.upstream_oid) === stable$2(resolved.upstream_oid) && stable$2(params.pre_head_oid) === stable$2(resolved.pre_head_oid) && stable$2(observed.post_head_oid) === stable$2(resolved.upstream_oid) && stable$2(observed.tracking_ref_oid) === stable$2(resolved.upstream_oid);
|
|
2061
|
+
case "fetch": return stable$2(params.upstream_oid) === stable$2(resolved.upstream_oid) && stable$2(params.pre_head_oid) === stable$2(resolved.pre_head_oid) && stable$2(observed.tracking_ref_oid) === stable$2(resolved.upstream_oid) && stable$2(observed.post_head_oid) === stable$2(resolved.pre_head_oid);
|
|
2062
2062
|
default: return true;
|
|
2063
2063
|
}
|
|
2064
2064
|
}
|
|
@@ -2067,8 +2067,8 @@ function nonStatefulTransitionMatches(action, transition, resolved, observed) {
|
|
|
2067
2067
|
const params = transition.parameters;
|
|
2068
2068
|
const recomputed = predParamsDigest(params, resolveAllowlist("product"));
|
|
2069
2069
|
if (transition.parametersDigest && transition.parametersDigest !== recomputed) return false;
|
|
2070
|
-
if (action === "inspect_remote_updates") return ["remote", "version"].every((key) => stable$
|
|
2071
|
-
return stable$
|
|
2070
|
+
if (action === "inspect_remote_updates") return ["remote", "version"].every((key) => stable$2(params[key]) === stable$2(resolved[key])) && stable$2(params.upstream_oid) === stable$2(observed.upstream_oid);
|
|
2071
|
+
return stable$2(params) === stable$2({
|
|
2072
2072
|
expected_outcome: {
|
|
2073
2073
|
k: "e",
|
|
2074
2074
|
v: "success"
|
|
@@ -2175,7 +2175,7 @@ function richStatefulRecord(projection, item, binding) {
|
|
|
2175
2175
|
reason: "resolution fact does not bind an expected transition digest",
|
|
2176
2176
|
reasonCode: "resolution_expected_transition_digest_missing"
|
|
2177
2177
|
} };
|
|
2178
|
-
if (resolution.expectedTransitionDigest !== sha256(stable$
|
|
2178
|
+
if (resolution.expectedTransitionDigest !== sha256(stable$2(resolution.expectedTransition))) return { rejected: {
|
|
2179
2179
|
itemId: item.id,
|
|
2180
2180
|
reason: "resolution expected transition digest does not match its stable payload",
|
|
2181
2181
|
reasonCode: "resolution_expected_transition_digest_mismatch"
|
|
@@ -2270,7 +2270,7 @@ function simpleRecord(projection, item, binding) {
|
|
|
2270
2270
|
const effectAction = effect.semanticAction ?? "generic_run";
|
|
2271
2271
|
const effectTarget = effect.resolvedTarget ?? {};
|
|
2272
2272
|
const effectObserved = effect.observedState ?? {};
|
|
2273
|
-
if (!(Object.entries(binding.resolvedTarget ?? {}).every(([key, value]) => Object.hasOwn(effectTarget, key) && stable$
|
|
2273
|
+
if (!(Object.entries(binding.resolvedTarget ?? {}).every(([key, value]) => Object.hasOwn(effectTarget, key) && stable$2(value) === stable$2(effectTarget[key])) && Object.entries(binding.observedState ?? {}).every(([key, value]) => Object.hasOwn(effectObserved, key) && stable$2(value) === stable$2(effectObserved[key]))) || effectAction === action && (!tuplesEqual(binding.resolvedTarget, effectTarget) || !tuplesEqual(binding.observedState, effectObserved))) return { rejected: {
|
|
2274
2274
|
itemId: item.id,
|
|
2275
2275
|
reason: "binding target does not match the cited effect evidence",
|
|
2276
2276
|
reasonCode: "binding_state_cross_pairing"
|
|
@@ -2929,6 +2929,186 @@ function authorityCaptureCounts(blocks) {
|
|
|
2929
2929
|
};
|
|
2930
2930
|
}
|
|
2931
2931
|
|
|
2932
|
+
//#endregion
|
|
2933
|
+
//#region src/domain/alpha3-host.ts
|
|
2934
|
+
/** Exact 34-row alpha.3 runtime/web graph from the 2026-09-01 annex audit. */
|
|
2935
|
+
const ALPHA3_HOST_PACKAGES = [
|
|
2936
|
+
[
|
|
2937
|
+
"@deepseek-ai/cordis",
|
|
2938
|
+
"4.0.2",
|
|
2939
|
+
"sha512-asOnXP1TzFSFQlHb1iegDZp0z/8WD1c7YNrwJR/Tx2bzNuMXfcekE/I67Iv6SQXeLB4csxqCngzQKANP7gdw0g=="
|
|
2940
|
+
],
|
|
2941
|
+
[
|
|
2942
|
+
"@deepseek-ai/dsh",
|
|
2943
|
+
"0.1.2-alpha.3",
|
|
2944
|
+
"sha512-VvATzYmQ4LMJREJ9e2POKksSHRfqP3y9pghplLBaQBuw2BqfbC0mQUVsaPwxe4wlcpj+riEgn8OJB01YnpF+3A=="
|
|
2945
|
+
],
|
|
2946
|
+
[
|
|
2947
|
+
"@deepseek-ai/dsh-agent",
|
|
2948
|
+
"0.1.2-alpha.3",
|
|
2949
|
+
"sha512-K1Pj9wqXmXjbMv4//wbPEPzaRBIYGluLzgnym2NPZFr9uS5h1soowUWVmI0lb3iU5FIUKuCg7YYEOrGSwPtRhQ=="
|
|
2950
|
+
],
|
|
2951
|
+
[
|
|
2952
|
+
"@deepseek-ai/dsh-agent-loop",
|
|
2953
|
+
"0.1.2-alpha.3",
|
|
2954
|
+
"sha512-SXA7eKvcpYjexnkY3MLUbJOPaLGXrCCPI/eA1ohhYFiuRsu4y4Lt5C0CchtXWqIxlKDdW3lWapj81OpeYHTi2A=="
|
|
2955
|
+
],
|
|
2956
|
+
[
|
|
2957
|
+
"@deepseek-ai/dsh-attachment",
|
|
2958
|
+
"0.1.2-alpha.3",
|
|
2959
|
+
"sha512-KiJy3esEEthj2alvZLqGN6YH7Ncmia+lzJW9VWf8J9EThlmUrX9xcG6k8v/paLMyrAv2w4JKxvZCIuWZK5mIwA=="
|
|
2960
|
+
],
|
|
2961
|
+
[
|
|
2962
|
+
"@deepseek-ai/dsh-bash-sandbox",
|
|
2963
|
+
"0.1.2-alpha.3",
|
|
2964
|
+
"sha512-U3U6ageI0VPs9TmIqtZtztJRBCwGszSbNLHe24h1kPKDAy3UveGNUDdq89OgINJH7U1Ce213uucRcqY8tjkPfw=="
|
|
2965
|
+
],
|
|
2966
|
+
[
|
|
2967
|
+
"@deepseek-ai/dsh-commands",
|
|
2968
|
+
"0.1.2-alpha.3",
|
|
2969
|
+
"sha512-lXB+f7B5a1gDatCtpww5AvM2TCltb95xkHZMkAmwleBJJgx5iqtKtEelObigXZu14HtZpLdO6v/0Fvm/akOyIg=="
|
|
2970
|
+
],
|
|
2971
|
+
[
|
|
2972
|
+
"@deepseek-ai/dsh-fs",
|
|
2973
|
+
"0.1.2-alpha.3",
|
|
2974
|
+
"sha512-qOaZ7JRFNJYtdG2EkHpXs4yzypRZX5YHOjZ7RLe571T/eLegg9nCJIEr4gFr1LvPn2nuLdJmwTB2x4ckZkXIuw=="
|
|
2975
|
+
],
|
|
2976
|
+
[
|
|
2977
|
+
"@deepseek-ai/dsh-fs-local",
|
|
2978
|
+
"0.1.2-alpha.3",
|
|
2979
|
+
"sha512-QzLTaj92cJ4RrE5NTx9NaV5ZhlC0mgSLHK3Z6ePXyHFcgAPGh3dJ6pw4q3r2dC7vlDTKyBIHHCb6MLwSUU8+BA=="
|
|
2980
|
+
],
|
|
2981
|
+
[
|
|
2982
|
+
"@deepseek-ai/dsh-fs-observation-policy",
|
|
2983
|
+
"0.1.2-alpha.3",
|
|
2984
|
+
"sha512-HDbTSazpoRIyPwmfip5k0nT4FfboaiViJqQplAUulCDxRK0QykuMQPUdkzANEXkvMBR2meTYurR6OPE0NZKuWw=="
|
|
2985
|
+
],
|
|
2986
|
+
[
|
|
2987
|
+
"@deepseek-ai/dsh-fs-sandbox",
|
|
2988
|
+
"0.1.2-alpha.3",
|
|
2989
|
+
"sha512-Ady8S/1NJcVv2SHgzOWHmhFcfmfidUBN1F5d5KFywHwYzYChtjldiieJvxU7dH7opH/sdX8kxOgFoDqauE4g8w=="
|
|
2990
|
+
],
|
|
2991
|
+
[
|
|
2992
|
+
"@deepseek-ai/dsh-goal",
|
|
2993
|
+
"0.1.2-alpha.3",
|
|
2994
|
+
"sha512-mExFFbFDupDTwbVagDbHVGJ0jYvGiFYFocAwfGYxPQGxZRcU8d4BgFir60GhbHsKtoSLDc48IlWscTZ6CXD3CA=="
|
|
2995
|
+
],
|
|
2996
|
+
[
|
|
2997
|
+
"@deepseek-ai/dsh-host-plugin-inventory",
|
|
2998
|
+
"0.1.2-alpha.3",
|
|
2999
|
+
"sha512-NagByjrXyIQRLaTGFmkqZ50HpgkEKuNHvwLskMGgu5ej8ucAQKOvJ2B+iyAlbtXj4Pkr84HKIX6smqjbGJNDxA=="
|
|
3000
|
+
],
|
|
3001
|
+
[
|
|
3002
|
+
"@deepseek-ai/dsh-host-webserver",
|
|
3003
|
+
"0.1.2-alpha.3",
|
|
3004
|
+
"sha512-VSlbioqJZ8JSQmFnjYXr7U/R7NCfL8fo9ztiYpRTAoqrSoodaabA6hH79Mueb+gAVHOtzpNRLK8dWDkqczmDVA=="
|
|
3005
|
+
],
|
|
3006
|
+
[
|
|
3007
|
+
"@deepseek-ai/dsh-jobs",
|
|
3008
|
+
"0.1.2-alpha.3",
|
|
3009
|
+
"sha512-P5jS3kqNrnPktvSQLBWsAnf5Dpa20EzVo9giUQQKE6WKgPV9Z3tnRVybV2TFTU6MqGClNAqZmY8tnEMABzgA9g=="
|
|
3010
|
+
],
|
|
3011
|
+
[
|
|
3012
|
+
"@deepseek-ai/dsh-jobs-local",
|
|
3013
|
+
"0.1.2-alpha.3",
|
|
3014
|
+
"sha512-d77W8jURnp9pVxnU0fuYt8lDmmiJcR9FWzNwPqvk/uwjx9zwtMtkCU0WtBcyxVqVGpEmG2pU2upln1m0eCfVBA=="
|
|
3015
|
+
],
|
|
3016
|
+
[
|
|
3017
|
+
"@deepseek-ai/dsh-llm",
|
|
3018
|
+
"0.1.2-alpha.3",
|
|
3019
|
+
"sha512-xGedBtvxb1HJWCmVO9v3fhHqoZ1iMDQU1x7fqAhhDfjKjmLTljWC1/RdZqUFI/1a/CM1iGPSaDuPZDCMu45AtA=="
|
|
3020
|
+
],
|
|
3021
|
+
[
|
|
3022
|
+
"@deepseek-ai/dsh-pwsh-sandbox",
|
|
3023
|
+
"0.1.2-alpha.3",
|
|
3024
|
+
"sha512-nVYijWMJilFWGF/nJLieNyM1c4PY1CdMN0QmHQGMiE9kyL5+MR8xzqlgxQ3I3GzX9zzbN1NjLbm+t+QHaDlLUQ=="
|
|
3025
|
+
],
|
|
3026
|
+
[
|
|
3027
|
+
"@deepseek-ai/dsh-sandbox",
|
|
3028
|
+
"0.1.2-alpha.3",
|
|
3029
|
+
"sha512-lKM+jhpxvfY48Se+J2sewIY2QP+eGCeSAazlvOsW3VMkzoVSA7RVIJFh6/xn3t1N9wrOXawii5Ex/vGVJ44HBQ=="
|
|
3030
|
+
],
|
|
3031
|
+
[
|
|
3032
|
+
"@deepseek-ai/dsh-sandbox-policy",
|
|
3033
|
+
"0.1.2-alpha.3",
|
|
3034
|
+
"sha512-Lj75///rZ/5x60aM5fds3u8S4o1QTiy2/TKvqLUr+xT9CJRfk6v81LxV/SYc6DmP2pN0TKwL/50/kL44wbxzvw=="
|
|
3035
|
+
],
|
|
3036
|
+
[
|
|
3037
|
+
"@deepseek-ai/dsh-session",
|
|
3038
|
+
"0.1.2-alpha.3",
|
|
3039
|
+
"sha512-iwWs0FdShoiCLLVk6lSZL18vKlFuliQXqy6gnu4U34B8K3uPb+QYWHjB3PrTXcK8ZVmb0zdWeyZ9osmANWWKnw=="
|
|
3040
|
+
],
|
|
3041
|
+
[
|
|
3042
|
+
"@deepseek-ai/dsh-shell",
|
|
3043
|
+
"0.1.2-alpha.3",
|
|
3044
|
+
"sha512-UM+ZObnmKVEy+/d2hKUNAIctpLojpbs7isOyZ3LoWtcVnIK2kjPCPDHBeUj/3DMSzxYR7Ak9QRnNxnG5cXgvDg=="
|
|
3045
|
+
],
|
|
3046
|
+
[
|
|
3047
|
+
"@deepseek-ai/dsh-shell-env",
|
|
3048
|
+
"0.1.2-alpha.3",
|
|
3049
|
+
"sha512-Phgv3Zuao0jKlS++uyUlQw+7x2Zk3DFcG2qOb86JwP3WpzqgdzoKoplcc3wev3J8+RX5TkNq7Dl92UKPvynGTw=="
|
|
3050
|
+
],
|
|
3051
|
+
[
|
|
3052
|
+
"@deepseek-ai/dsh-subprocess-local",
|
|
3053
|
+
"0.1.2-alpha.3",
|
|
3054
|
+
"sha512-T2HPtqL17ODH5AS7E6cQKtiulJSGv7HEQmYbQKiSaR2CCiLHlXosUPuGis+yuCfBZ8GZOjwn18abkDraKOOFCg=="
|
|
3055
|
+
],
|
|
3056
|
+
[
|
|
3057
|
+
"@deepseek-ai/dsh-system-prompt",
|
|
3058
|
+
"0.1.2-alpha.3",
|
|
3059
|
+
"sha512-R+VVDew/0DdTypypAjkgTygh3M2yNYXNFO+DvMfdX98jgD7MSluw2iYaCFR/ax9bBNHXXHQ7eXHsIYI1a0FrPg=="
|
|
3060
|
+
],
|
|
3061
|
+
[
|
|
3062
|
+
"@deepseek-ai/dsh-tool-bash",
|
|
3063
|
+
"0.1.2-alpha.3",
|
|
3064
|
+
"sha512-eQ3IQ+Jz0CI2e24gx8Q8xg1MyYcE48UP/asWEBfSuM0ycmexbGLPPip/H137NbxBXx1O4Ewok8ipVLyHYx7QjQ=="
|
|
3065
|
+
],
|
|
3066
|
+
[
|
|
3067
|
+
"@deepseek-ai/dsh-tool-fs",
|
|
3068
|
+
"0.1.2-alpha.3",
|
|
3069
|
+
"sha512-YiY/hxBh11Lu3wKjtGxhDFYHf2ACWpUlhTM1JopJhiEdrIAsZ7wXeRHfLzvMaHJG30+vgIekbY/zY8EOGkOsww=="
|
|
3070
|
+
],
|
|
3071
|
+
[
|
|
3072
|
+
"@deepseek-ai/dsh-tool-goal",
|
|
3073
|
+
"0.1.2-alpha.3",
|
|
3074
|
+
"sha512-YQ1JwXIGiIDkATlrqV6CV1sbHFd95tbmNPlbsuwjKXETMcGO09iTtOoYCONBT8aIx9TSqcloM37TjDGgpEXFYQ=="
|
|
3075
|
+
],
|
|
3076
|
+
[
|
|
3077
|
+
"@deepseek-ai/dsh-tool-jobs",
|
|
3078
|
+
"0.1.2-alpha.3",
|
|
3079
|
+
"sha512-tsBJslgxjlv92/8guVjUEOPkr+JlC83BGiJJpHAponyPBdCF/mVy8zBO6V89yEgmjW/nRWTUwv2dZnnHtOCptQ=="
|
|
3080
|
+
],
|
|
3081
|
+
[
|
|
3082
|
+
"@deepseek-ai/dsh-tool-pwsh",
|
|
3083
|
+
"0.1.2-alpha.3",
|
|
3084
|
+
"sha512-QxCPtD9EcjoKuo1MZid/fkbsXHDKRpF3s1iXUuFIMsjBZs7ip/qoieL/bTpqiyHJcuhHjWver8hKkEdL/nqBdA=="
|
|
3085
|
+
],
|
|
3086
|
+
[
|
|
3087
|
+
"@deepseek-ai/dsh-tools",
|
|
3088
|
+
"0.1.2-alpha.3",
|
|
3089
|
+
"sha512-ffcpryQgwqAHIkN326CKqH3kueCMKXgbRU4D0Lp+Kwql97NVZrmRxI8ExERJtTju1adtowwVOXIdPjD4XyB44w=="
|
|
3090
|
+
],
|
|
3091
|
+
[
|
|
3092
|
+
"@deepseek-ai/dsh-user-approval",
|
|
3093
|
+
"0.1.2-alpha.3",
|
|
3094
|
+
"sha512-ulp0zA1JnzrjJVyg4DbKMR6Vxz66+ltbIXKhDQcrPgYE93woI0U2VoWiQPuvlozcWqpEvDsmsmdM3rMTxQrB0A=="
|
|
3095
|
+
],
|
|
3096
|
+
[
|
|
3097
|
+
"@deepseek-ai/dsh-web-app",
|
|
3098
|
+
"0.1.2-alpha.3",
|
|
3099
|
+
"sha512-ntOJ9WOU+KPOuWBRxTibM89BxiAYN20bKcp3ozn0M5A5+IHG/7QFUxcZUZCq03eVpNR59l/EgGrHdxy7r+ON9g=="
|
|
3100
|
+
],
|
|
3101
|
+
[
|
|
3102
|
+
"dshmarket",
|
|
3103
|
+
"1.39.0",
|
|
3104
|
+
"sha512-URuXIuuNRfX6k0Flo7CJxeA7EVLhLGYDm3Lk4BoEXW1Qlg+boX/LI8wCE8hGC0FMBftFr9j8D/ulGNTdFM67nQ=="
|
|
3105
|
+
]
|
|
3106
|
+
].map(([name, version, integrity]) => ({
|
|
3107
|
+
name,
|
|
3108
|
+
version,
|
|
3109
|
+
integrity
|
|
3110
|
+
}));
|
|
3111
|
+
|
|
2932
3112
|
//#endregion
|
|
2933
3113
|
//#region src/domain/host-lock.ts
|
|
2934
3114
|
/**
|
|
@@ -3013,185 +3193,11 @@ function defineCohort(id, supportedGoalVersions, auditedPlatforms, packages) {
|
|
|
3013
3193
|
};
|
|
3014
3194
|
}
|
|
3015
3195
|
/**
|
|
3016
|
-
*
|
|
3017
|
-
*
|
|
3018
|
-
*
|
|
3019
|
-
* `0.1.2-alpha.2` / dshmarket `1.38.1` runtimes. Graphs that mix cohorts,
|
|
3020
|
-
* lack rows, duplicate rows, or use
|
|
3021
|
-
* versions outside both cohorts fail closed.
|
|
3196
|
+
* alpha.2 audited package identities (second registry cohort), hoisted so the
|
|
3197
|
+
* alpha.2 + dshmarket 1.39.0 cohort can reuse the exact natively audited rows
|
|
3198
|
+
* with only the dshmarket identity substituted.
|
|
3022
3199
|
*/
|
|
3023
|
-
const
|
|
3024
|
-
{
|
|
3025
|
-
name: "@deepseek-ai/cordis",
|
|
3026
|
-
version: "4.0.1",
|
|
3027
|
-
integrity: "sha512-YBdskTU2Po1kru3GgcUWUbkTsPMA9LkSQDAY8rBkFJeajdgcQad3QPJZE26JyK99Xb6HaASvoXg2DSUTeN/0Nw=="
|
|
3028
|
-
},
|
|
3029
|
-
{
|
|
3030
|
-
name: "@deepseek-ai/dsh-agent",
|
|
3031
|
-
version: "0.1.1-rc.2",
|
|
3032
|
-
integrity: "sha512-cC7lnJe7JgPFcreNXxcxLMxQd78LnpVO9ZXROjZsGRQN1zGH6i/DduI892F1am85IfzzO+XTxMwwUHmfwamb0g=="
|
|
3033
|
-
},
|
|
3034
|
-
{
|
|
3035
|
-
name: "@deepseek-ai/dsh-commands",
|
|
3036
|
-
version: "0.1.1-rc.2",
|
|
3037
|
-
integrity: "sha512-BOIe4Sht9rmMv1a6b3GWjWBbeWr7PtHlAy41vgpaymvUUuzOapOIA648ZMGCI/crRIt72Umev2FHtSwCNSbYZg=="
|
|
3038
|
-
},
|
|
3039
|
-
{
|
|
3040
|
-
name: "@deepseek-ai/dsh-goal",
|
|
3041
|
-
version: "0.1.1-rc.2",
|
|
3042
|
-
integrity: "sha512-lSHTh4vfS6eRb9to/y+bjRf2+0QkNpY3tHJ29HMTewR9fJYZsEVVu4Hc+GPhPEjF7RpiD35/sKx+akijtDasyg=="
|
|
3043
|
-
},
|
|
3044
|
-
{
|
|
3045
|
-
name: "@deepseek-ai/dsh-llm",
|
|
3046
|
-
version: "0.1.1-rc.2",
|
|
3047
|
-
integrity: "sha512-ASJfjIdZbIXvLwi3rGo+eZb/GxMVV/WO5/XVD3B96mT8EIzrlw3+nMR6/CvmJVzcycKQ2XN0wj7jD6TasPRySA=="
|
|
3048
|
-
},
|
|
3049
|
-
{
|
|
3050
|
-
name: "@deepseek-ai/dsh-session",
|
|
3051
|
-
version: "0.1.1-rc.2",
|
|
3052
|
-
integrity: "sha512-4/cv6X9HPhm47eyRhCu/WZwzrtJKegk5J+0xaxcZ9i8S0smdxP57tqy8a0jkSshLQn7BzMFxneQrlYExrLrDhQ=="
|
|
3053
|
-
},
|
|
3054
|
-
{
|
|
3055
|
-
name: "@deepseek-ai/dsh-tools",
|
|
3056
|
-
version: "0.1.1-rc.2",
|
|
3057
|
-
integrity: "sha512-0GGL4D55MwYDepzZMOI3L0ycu5b2qr96GL0Y7snwhAnpK2Di61rbX3fJE+PB3ZrovGX0csIRdt9n3iJZDVtDrw=="
|
|
3058
|
-
},
|
|
3059
|
-
{
|
|
3060
|
-
name: "@deepseek-ai/dsh-tool-goal",
|
|
3061
|
-
version: "0.1.1-rc.2",
|
|
3062
|
-
integrity: "sha512-kTECpE732uwlxRJr/jBZb1BqaxZzrA7Rv4KuM3eolvhoTJ5zjyiR2YHmDmCSfuI6zmA/BEfWss7D0mLbVtJEZA=="
|
|
3063
|
-
},
|
|
3064
|
-
{
|
|
3065
|
-
name: "@deepseek-ai/dsh-agent-loop",
|
|
3066
|
-
version: "0.1.1-rc.2",
|
|
3067
|
-
integrity: "sha512-2uJZ6kjJ3IYLRGn6/NhiZgD576ABcbERB/nkReR9TEUMO2zWkz6OuKtVwLyFCFSni2T25Jv+clKQWt7D4MhU3A=="
|
|
3068
|
-
},
|
|
3069
|
-
{
|
|
3070
|
-
name: "@deepseek-ai/dsh-tool-bash",
|
|
3071
|
-
version: "0.1.1-rc.2",
|
|
3072
|
-
integrity: "sha512-YNmrKmBanj5EQn1zejjbo4UUFtg2/h3s9y0lY3vBu+dezNz4HdUlSkSZACbNUAZywyLomdhlt4rJdtdnrqyS7Q=="
|
|
3073
|
-
},
|
|
3074
|
-
{
|
|
3075
|
-
name: "@deepseek-ai/dsh-tool-pwsh",
|
|
3076
|
-
version: "0.1.1-rc.2",
|
|
3077
|
-
integrity: "sha512-Gr0F4VWCIIR25qWVv4mMEJnewXILHLCkZwrLfbHA2OOI7DNvvdB5wjJxhuo+ZQa8/3KJ/byQGtEBqCY9mb10Zg=="
|
|
3078
|
-
},
|
|
3079
|
-
{
|
|
3080
|
-
name: "@deepseek-ai/dsh-shell",
|
|
3081
|
-
version: "0.1.1-rc.2",
|
|
3082
|
-
integrity: "sha512-gEqPUxKOpOV66wvM4o8Z5FEuWmsEvYzD9OQy3cyo/kjzlx+2+KUWi22cl/YWtBs/zUtRJbdG5UqMnh8GUeO8Hg=="
|
|
3083
|
-
},
|
|
3084
|
-
{
|
|
3085
|
-
name: "@deepseek-ai/dsh-subprocess-local",
|
|
3086
|
-
version: "0.1.1-rc.2",
|
|
3087
|
-
integrity: "sha512-I4pyzpohZEVRQQbuEpMP0t8oKsf+XIlRo64aJVKGXI2eMcg9f9gbfhKQNYNqRGbegQL1HYpSLU6Rzyibldgwaw=="
|
|
3088
|
-
},
|
|
3089
|
-
{
|
|
3090
|
-
name: "@deepseek-ai/dsh-bash-sandbox",
|
|
3091
|
-
version: "0.1.1-rc.2",
|
|
3092
|
-
integrity: "sha512-bagZDMZ73C1dVDBjFCn1flNZ8aOEel4dsmDJTfmagqeYPXfIJDFKPhDc3lWjc+o6jMNfmumeUJ62dwhHkjJHKA=="
|
|
3093
|
-
},
|
|
3094
|
-
{
|
|
3095
|
-
name: "@deepseek-ai/dsh-pwsh-sandbox",
|
|
3096
|
-
version: "0.1.1-rc.2",
|
|
3097
|
-
integrity: "sha512-hBUTg5p8TTQifZrfstbimVlBFyUOb7JhNkWKc+n6UpTzoFRSkPAvrjGeXKDmFI6jXpL4nXzLJoaIssfYnRg7bw=="
|
|
3098
|
-
},
|
|
3099
|
-
{
|
|
3100
|
-
name: "@deepseek-ai/dsh-shell-env",
|
|
3101
|
-
version: "0.1.1-rc.2",
|
|
3102
|
-
integrity: "sha512-dDKKqsxsbklUpxX5ornd/SKJ2yfr/SOHOWDgeJkYvx3SMSXq8EvhCK/VEvHswXQ25rRLFWM4/Mr3htk1hn/GPA=="
|
|
3103
|
-
},
|
|
3104
|
-
{
|
|
3105
|
-
name: "@deepseek-ai/dsh",
|
|
3106
|
-
version: "0.1.1-rc.2",
|
|
3107
|
-
integrity: "sha512-UP1UIh6q3Gme/yXRn/QL2P8IsVlv8Shpg22TRJIZPsCRWLm4CBiA1MUvXmJAfsOEETBMLAl+xWPtFw6ICsN3wg=="
|
|
3108
|
-
},
|
|
3109
|
-
{
|
|
3110
|
-
name: "@deepseek-ai/dsh-host-plugin-inventory",
|
|
3111
|
-
version: "0.1.1-rc.2",
|
|
3112
|
-
integrity: "sha512-Hud9ezW0bexWfhX7C+c5rdUDX1xzbEGDzj1lGQyj/QxdrxHYHjGrJq3tLRyvN6K4FSmEdG2IBKdQGCOLVrIthA=="
|
|
3113
|
-
},
|
|
3114
|
-
{
|
|
3115
|
-
name: "dshmarket",
|
|
3116
|
-
version: "1.36.0",
|
|
3117
|
-
integrity: "sha512-xX8CCoXdIALaxtLosj+5qGg8r1cykW2zo1AOPJcSQepg2r4Vd2K0NmERldDqfeyFV0pCuZsUoAPe1Q/BW7De/g=="
|
|
3118
|
-
},
|
|
3119
|
-
{
|
|
3120
|
-
name: "@deepseek-ai/dsh-host-webserver",
|
|
3121
|
-
version: "0.1.1-rc.2",
|
|
3122
|
-
integrity: "sha512-t9MrjC65QHiiWhG9V8UZxgfE/aWYhJHHrIM0kbTvtXxg4tLGIKo/upHp7iiag65F3HTkVLrH/DUyPMi4v2ZA7g=="
|
|
3123
|
-
},
|
|
3124
|
-
{
|
|
3125
|
-
name: "@deepseek-ai/dsh-web-app",
|
|
3126
|
-
version: "0.1.1-rc.2",
|
|
3127
|
-
integrity: "sha512-1zGHY7qwBVlVJrzIWu+86SuBZXaVUxe2JRfffsuRvKXq2QcR/K4CoJJfZ43cDoWKu9xPvvxz7w2ezV+EdXgg1A=="
|
|
3128
|
-
},
|
|
3129
|
-
{
|
|
3130
|
-
name: "@deepseek-ai/dsh-jobs",
|
|
3131
|
-
version: "0.1.1-rc.2",
|
|
3132
|
-
integrity: "sha512-SXvDJMvcUrGrlzIyE7j8/lI4Pj1nDe/UOR8C05Zagp+/0R8p46n6KylySvZdPAFENV5t8WX3Fw3eOaS4No0+wQ=="
|
|
3133
|
-
},
|
|
3134
|
-
{
|
|
3135
|
-
name: "@deepseek-ai/dsh-jobs-local",
|
|
3136
|
-
version: "0.1.1-rc.2",
|
|
3137
|
-
integrity: "sha512-26lg7mi9RKnu8IP8SWLbY+uZenbqF2AkAZvgZaLDlw1z58NtBsbgKgh6FNC8JXEyknAwYc6auQQKF+nLTlEjCw=="
|
|
3138
|
-
},
|
|
3139
|
-
{
|
|
3140
|
-
name: "@deepseek-ai/dsh-tool-jobs",
|
|
3141
|
-
version: "0.1.1-rc.2",
|
|
3142
|
-
integrity: "sha512-wCU7mo2uoQcAtz7de4ZXP2es9lALsmz6XzC+KAlS2e7/yTBi9a5LL2vdSr6XhExVAuhu/6f9eM/w4EQBOxtKlw=="
|
|
3143
|
-
},
|
|
3144
|
-
{
|
|
3145
|
-
name: "@deepseek-ai/dsh-tool-fs",
|
|
3146
|
-
version: "0.1.1-rc.2",
|
|
3147
|
-
integrity: "sha512-llX8AWbaI3CGme/a2eeTSfy5atk8u3iJeOFzmZV/KZ0v0hMhKZIK1xQInWwC9OmSDJ/StStJe0hDPVLWbB7hVg=="
|
|
3148
|
-
},
|
|
3149
|
-
{
|
|
3150
|
-
name: "@deepseek-ai/dsh-fs",
|
|
3151
|
-
version: "0.1.1-rc.2",
|
|
3152
|
-
integrity: "sha512-8j+6MffvCHATLQrhAVfc9rKyunKu/O7mjjJzmdsUSdID7V4iUYMwqPamhlAyI+tfohZu/vcforKzCRIZGmCYug=="
|
|
3153
|
-
},
|
|
3154
|
-
{
|
|
3155
|
-
name: "@deepseek-ai/dsh-fs-local",
|
|
3156
|
-
version: "0.1.1-rc.2",
|
|
3157
|
-
integrity: "sha512-jvn1MsAMqCmt5SjRNkPjmpc+RIWrZQrBVtf/OpmKr2PaBEGqSbCkPApWDE9iSMhcuQg6k5evScOXwAsduzKOLA=="
|
|
3158
|
-
},
|
|
3159
|
-
{
|
|
3160
|
-
name: "@deepseek-ai/dsh-fs-sandbox",
|
|
3161
|
-
version: "0.1.1-rc.2",
|
|
3162
|
-
integrity: "sha512-PI65uLZ3ARkfVV/PXvACS1HEXggoOaXgYQzXQFdLOfm7AiHOdZWZccUAXBetpZhcNYIOKsVoLnfZkXcHByqecQ=="
|
|
3163
|
-
},
|
|
3164
|
-
{
|
|
3165
|
-
name: "@deepseek-ai/dsh-fs-observation-policy",
|
|
3166
|
-
version: "0.1.1-rc.2",
|
|
3167
|
-
integrity: "sha512-rlq7yu4xavkKK1Oa1/aNCOeUW7t/3OXJJOfOcZXuUgJn5f8G0AbpTDpp2CeuL1cHlKpbunGhEkKQ2N/dv7ZR9w=="
|
|
3168
|
-
},
|
|
3169
|
-
{
|
|
3170
|
-
name: "@deepseek-ai/dsh-sandbox",
|
|
3171
|
-
version: "0.1.1-rc.2",
|
|
3172
|
-
integrity: "sha512-rnO2RqZ+ycpwrXrXlMcrhWAICdui3ZVTjNQ8eZrOPE18hAbX3tw0nLFq26sBjMSnBfDQHNZ4VaFpt0p8qhkPWQ=="
|
|
3173
|
-
},
|
|
3174
|
-
{
|
|
3175
|
-
name: "@deepseek-ai/dsh-sandbox-policy",
|
|
3176
|
-
version: "0.1.1-rc.2",
|
|
3177
|
-
integrity: "sha512-cpoIUxCzpZJDTMXVt9gS+qgWEDAWf6rIe715uY1NF0ROoiEXPlmToLsHLF+4pXTW3wWWzpGVswO0bPYEKrQr3g=="
|
|
3178
|
-
},
|
|
3179
|
-
{
|
|
3180
|
-
name: "@deepseek-ai/dsh-user-approval",
|
|
3181
|
-
version: "0.1.1-rc.2",
|
|
3182
|
-
integrity: "sha512-SdsO4Rs+NeJFoertkVilXBACREOLfkKPJJznYKqDhJxeRo38RJ56dtj0Xd0/6rERmsQiMck4Bwdrzg1ubUqPNA=="
|
|
3183
|
-
},
|
|
3184
|
-
{
|
|
3185
|
-
name: "@deepseek-ai/dsh-attachment",
|
|
3186
|
-
version: "0.1.1-rc.2",
|
|
3187
|
-
integrity: "sha512-rCYAt8QsawP1yfDCU7XxNwYT/XWvyFsxYrkwhLLkdfW83QVD0CQHizSkTQE7RFX74nKUD1z3sTLfnLr7xneArw=="
|
|
3188
|
-
},
|
|
3189
|
-
{
|
|
3190
|
-
name: "@deepseek-ai/dsh-system-prompt",
|
|
3191
|
-
version: "0.1.1-rc.2",
|
|
3192
|
-
integrity: "sha512-on4hjAlYI5uX9q7Sf95YkMMBVe6heywtA/H50ksrIMUub8U2B98hO9iQpHhjwIO1F1vu+5pLcPvRr6yUGGmtXQ=="
|
|
3193
|
-
}
|
|
3194
|
-
]), defineCohort("dsh-0.1.2-alpha.2", ["0.1.2-alpha.2"], ["posix", "windows"], [
|
|
3200
|
+
const ALPHA2_HOST_PACKAGES = [
|
|
3195
3201
|
{
|
|
3196
3202
|
name: "@deepseek-ai/cordis",
|
|
3197
3203
|
version: "4.0.2",
|
|
@@ -3362,7 +3368,207 @@ const HOST_COHORTS = [defineCohort("dsh-0.1.1-rc.2", ["0.1.1-rc.2"], ["posix", "
|
|
|
3362
3368
|
version: "1.38.1",
|
|
3363
3369
|
integrity: "sha512-Z9VleLtCXwk5OlbSJKayWtbMaKACL8JUMyb/JHpErS4N3q//GJS+cgOhhxNkZYmXxB8/lv9IbhX1CBzlMhJeJg=="
|
|
3364
3370
|
}
|
|
3365
|
-
]
|
|
3371
|
+
];
|
|
3372
|
+
/**
|
|
3373
|
+
* The exact graph the Windows daily runtime realized when it upgraded
|
|
3374
|
+
* dshmarket to 1.39.0 on an otherwise alpha.2 install — the combination whose
|
|
3375
|
+
* rejection was Guard 0.3.2's real web_control failure. It is one audited
|
|
3376
|
+
* whole-graph cohort: alpha.2 rows keep their native macOS/Windows audit
|
|
3377
|
+
* identities and the dshmarket 1.39.0 identity is the authoritative row from
|
|
3378
|
+
* the 2026-09-01 alpha.3 annex audit. Guard 0.4.0 supports this combination.
|
|
3379
|
+
*/
|
|
3380
|
+
const ALPHA2_DSHMARKET_139_HOST_PACKAGES = ALPHA2_HOST_PACKAGES.map((row) => row.name === "dshmarket" ? {
|
|
3381
|
+
name: "dshmarket",
|
|
3382
|
+
version: "1.39.0",
|
|
3383
|
+
integrity: ALPHA3_HOST_PACKAGES.find((entry) => entry.name === "dshmarket").integrity
|
|
3384
|
+
} : row);
|
|
3385
|
+
/**
|
|
3386
|
+
* Audited host cohort registry. The rc.2 cohort keeps the exact identities
|
|
3387
|
+
* audited for 0.3.0/0.3.1 on macOS and Windows. The alpha.2 cohort carries the
|
|
3388
|
+
* exact package graph extracted from native macOS and Windows DSH
|
|
3389
|
+
* `0.1.2-alpha.2` / dshmarket `1.38.1` runtimes. The alpha.2+dshmarket-1.39.0
|
|
3390
|
+
* cohort carries the exact upgraded-Windows graph. The alpha.3 cohort carries
|
|
3391
|
+
* the graph audited in the 2026-09-01 annex. Graphs that mix cohorts, lack
|
|
3392
|
+
* rows, duplicate rows, or use identities outside every registered cohort
|
|
3393
|
+
* fail closed.
|
|
3394
|
+
*/
|
|
3395
|
+
const HOST_COHORTS = [
|
|
3396
|
+
defineCohort("dsh-0.1.1-rc.2", ["0.1.1-rc.2"], ["posix", "windows"], [
|
|
3397
|
+
{
|
|
3398
|
+
name: "@deepseek-ai/cordis",
|
|
3399
|
+
version: "4.0.1",
|
|
3400
|
+
integrity: "sha512-YBdskTU2Po1kru3GgcUWUbkTsPMA9LkSQDAY8rBkFJeajdgcQad3QPJZE26JyK99Xb6HaASvoXg2DSUTeN/0Nw=="
|
|
3401
|
+
},
|
|
3402
|
+
{
|
|
3403
|
+
name: "@deepseek-ai/dsh-agent",
|
|
3404
|
+
version: "0.1.1-rc.2",
|
|
3405
|
+
integrity: "sha512-cC7lnJe7JgPFcreNXxcxLMxQd78LnpVO9ZXROjZsGRQN1zGH6i/DduI892F1am85IfzzO+XTxMwwUHmfwamb0g=="
|
|
3406
|
+
},
|
|
3407
|
+
{
|
|
3408
|
+
name: "@deepseek-ai/dsh-commands",
|
|
3409
|
+
version: "0.1.1-rc.2",
|
|
3410
|
+
integrity: "sha512-BOIe4Sht9rmMv1a6b3GWjWBbeWr7PtHlAy41vgpaymvUUuzOapOIA648ZMGCI/crRIt72Umev2FHtSwCNSbYZg=="
|
|
3411
|
+
},
|
|
3412
|
+
{
|
|
3413
|
+
name: "@deepseek-ai/dsh-goal",
|
|
3414
|
+
version: "0.1.1-rc.2",
|
|
3415
|
+
integrity: "sha512-lSHTh4vfS6eRb9to/y+bjRf2+0QkNpY3tHJ29HMTewR9fJYZsEVVu4Hc+GPhPEjF7RpiD35/sKx+akijtDasyg=="
|
|
3416
|
+
},
|
|
3417
|
+
{
|
|
3418
|
+
name: "@deepseek-ai/dsh-llm",
|
|
3419
|
+
version: "0.1.1-rc.2",
|
|
3420
|
+
integrity: "sha512-ASJfjIdZbIXvLwi3rGo+eZb/GxMVV/WO5/XVD3B96mT8EIzrlw3+nMR6/CvmJVzcycKQ2XN0wj7jD6TasPRySA=="
|
|
3421
|
+
},
|
|
3422
|
+
{
|
|
3423
|
+
name: "@deepseek-ai/dsh-session",
|
|
3424
|
+
version: "0.1.1-rc.2",
|
|
3425
|
+
integrity: "sha512-4/cv6X9HPhm47eyRhCu/WZwzrtJKegk5J+0xaxcZ9i8S0smdxP57tqy8a0jkSshLQn7BzMFxneQrlYExrLrDhQ=="
|
|
3426
|
+
},
|
|
3427
|
+
{
|
|
3428
|
+
name: "@deepseek-ai/dsh-tools",
|
|
3429
|
+
version: "0.1.1-rc.2",
|
|
3430
|
+
integrity: "sha512-0GGL4D55MwYDepzZMOI3L0ycu5b2qr96GL0Y7snwhAnpK2Di61rbX3fJE+PB3ZrovGX0csIRdt9n3iJZDVtDrw=="
|
|
3431
|
+
},
|
|
3432
|
+
{
|
|
3433
|
+
name: "@deepseek-ai/dsh-tool-goal",
|
|
3434
|
+
version: "0.1.1-rc.2",
|
|
3435
|
+
integrity: "sha512-kTECpE732uwlxRJr/jBZb1BqaxZzrA7Rv4KuM3eolvhoTJ5zjyiR2YHmDmCSfuI6zmA/BEfWss7D0mLbVtJEZA=="
|
|
3436
|
+
},
|
|
3437
|
+
{
|
|
3438
|
+
name: "@deepseek-ai/dsh-agent-loop",
|
|
3439
|
+
version: "0.1.1-rc.2",
|
|
3440
|
+
integrity: "sha512-2uJZ6kjJ3IYLRGn6/NhiZgD576ABcbERB/nkReR9TEUMO2zWkz6OuKtVwLyFCFSni2T25Jv+clKQWt7D4MhU3A=="
|
|
3441
|
+
},
|
|
3442
|
+
{
|
|
3443
|
+
name: "@deepseek-ai/dsh-tool-bash",
|
|
3444
|
+
version: "0.1.1-rc.2",
|
|
3445
|
+
integrity: "sha512-YNmrKmBanj5EQn1zejjbo4UUFtg2/h3s9y0lY3vBu+dezNz4HdUlSkSZACbNUAZywyLomdhlt4rJdtdnrqyS7Q=="
|
|
3446
|
+
},
|
|
3447
|
+
{
|
|
3448
|
+
name: "@deepseek-ai/dsh-tool-pwsh",
|
|
3449
|
+
version: "0.1.1-rc.2",
|
|
3450
|
+
integrity: "sha512-Gr0F4VWCIIR25qWVv4mMEJnewXILHLCkZwrLfbHA2OOI7DNvvdB5wjJxhuo+ZQa8/3KJ/byQGtEBqCY9mb10Zg=="
|
|
3451
|
+
},
|
|
3452
|
+
{
|
|
3453
|
+
name: "@deepseek-ai/dsh-shell",
|
|
3454
|
+
version: "0.1.1-rc.2",
|
|
3455
|
+
integrity: "sha512-gEqPUxKOpOV66wvM4o8Z5FEuWmsEvYzD9OQy3cyo/kjzlx+2+KUWi22cl/YWtBs/zUtRJbdG5UqMnh8GUeO8Hg=="
|
|
3456
|
+
},
|
|
3457
|
+
{
|
|
3458
|
+
name: "@deepseek-ai/dsh-subprocess-local",
|
|
3459
|
+
version: "0.1.1-rc.2",
|
|
3460
|
+
integrity: "sha512-I4pyzpohZEVRQQbuEpMP0t8oKsf+XIlRo64aJVKGXI2eMcg9f9gbfhKQNYNqRGbegQL1HYpSLU6Rzyibldgwaw=="
|
|
3461
|
+
},
|
|
3462
|
+
{
|
|
3463
|
+
name: "@deepseek-ai/dsh-bash-sandbox",
|
|
3464
|
+
version: "0.1.1-rc.2",
|
|
3465
|
+
integrity: "sha512-bagZDMZ73C1dVDBjFCn1flNZ8aOEel4dsmDJTfmagqeYPXfIJDFKPhDc3lWjc+o6jMNfmumeUJ62dwhHkjJHKA=="
|
|
3466
|
+
},
|
|
3467
|
+
{
|
|
3468
|
+
name: "@deepseek-ai/dsh-pwsh-sandbox",
|
|
3469
|
+
version: "0.1.1-rc.2",
|
|
3470
|
+
integrity: "sha512-hBUTg5p8TTQifZrfstbimVlBFyUOb7JhNkWKc+n6UpTzoFRSkPAvrjGeXKDmFI6jXpL4nXzLJoaIssfYnRg7bw=="
|
|
3471
|
+
},
|
|
3472
|
+
{
|
|
3473
|
+
name: "@deepseek-ai/dsh-shell-env",
|
|
3474
|
+
version: "0.1.1-rc.2",
|
|
3475
|
+
integrity: "sha512-dDKKqsxsbklUpxX5ornd/SKJ2yfr/SOHOWDgeJkYvx3SMSXq8EvhCK/VEvHswXQ25rRLFWM4/Mr3htk1hn/GPA=="
|
|
3476
|
+
},
|
|
3477
|
+
{
|
|
3478
|
+
name: "@deepseek-ai/dsh",
|
|
3479
|
+
version: "0.1.1-rc.2",
|
|
3480
|
+
integrity: "sha512-UP1UIh6q3Gme/yXRn/QL2P8IsVlv8Shpg22TRJIZPsCRWLm4CBiA1MUvXmJAfsOEETBMLAl+xWPtFw6ICsN3wg=="
|
|
3481
|
+
},
|
|
3482
|
+
{
|
|
3483
|
+
name: "@deepseek-ai/dsh-host-plugin-inventory",
|
|
3484
|
+
version: "0.1.1-rc.2",
|
|
3485
|
+
integrity: "sha512-Hud9ezW0bexWfhX7C+c5rdUDX1xzbEGDzj1lGQyj/QxdrxHYHjGrJq3tLRyvN6K4FSmEdG2IBKdQGCOLVrIthA=="
|
|
3486
|
+
},
|
|
3487
|
+
{
|
|
3488
|
+
name: "dshmarket",
|
|
3489
|
+
version: "1.36.0",
|
|
3490
|
+
integrity: "sha512-xX8CCoXdIALaxtLosj+5qGg8r1cykW2zo1AOPJcSQepg2r4Vd2K0NmERldDqfeyFV0pCuZsUoAPe1Q/BW7De/g=="
|
|
3491
|
+
},
|
|
3492
|
+
{
|
|
3493
|
+
name: "@deepseek-ai/dsh-host-webserver",
|
|
3494
|
+
version: "0.1.1-rc.2",
|
|
3495
|
+
integrity: "sha512-t9MrjC65QHiiWhG9V8UZxgfE/aWYhJHHrIM0kbTvtXxg4tLGIKo/upHp7iiag65F3HTkVLrH/DUyPMi4v2ZA7g=="
|
|
3496
|
+
},
|
|
3497
|
+
{
|
|
3498
|
+
name: "@deepseek-ai/dsh-web-app",
|
|
3499
|
+
version: "0.1.1-rc.2",
|
|
3500
|
+
integrity: "sha512-1zGHY7qwBVlVJrzIWu+86SuBZXaVUxe2JRfffsuRvKXq2QcR/K4CoJJfZ43cDoWKu9xPvvxz7w2ezV+EdXgg1A=="
|
|
3501
|
+
},
|
|
3502
|
+
{
|
|
3503
|
+
name: "@deepseek-ai/dsh-jobs",
|
|
3504
|
+
version: "0.1.1-rc.2",
|
|
3505
|
+
integrity: "sha512-SXvDJMvcUrGrlzIyE7j8/lI4Pj1nDe/UOR8C05Zagp+/0R8p46n6KylySvZdPAFENV5t8WX3Fw3eOaS4No0+wQ=="
|
|
3506
|
+
},
|
|
3507
|
+
{
|
|
3508
|
+
name: "@deepseek-ai/dsh-jobs-local",
|
|
3509
|
+
version: "0.1.1-rc.2",
|
|
3510
|
+
integrity: "sha512-26lg7mi9RKnu8IP8SWLbY+uZenbqF2AkAZvgZaLDlw1z58NtBsbgKgh6FNC8JXEyknAwYc6auQQKF+nLTlEjCw=="
|
|
3511
|
+
},
|
|
3512
|
+
{
|
|
3513
|
+
name: "@deepseek-ai/dsh-tool-jobs",
|
|
3514
|
+
version: "0.1.1-rc.2",
|
|
3515
|
+
integrity: "sha512-wCU7mo2uoQcAtz7de4ZXP2es9lALsmz6XzC+KAlS2e7/yTBi9a5LL2vdSr6XhExVAuhu/6f9eM/w4EQBOxtKlw=="
|
|
3516
|
+
},
|
|
3517
|
+
{
|
|
3518
|
+
name: "@deepseek-ai/dsh-tool-fs",
|
|
3519
|
+
version: "0.1.1-rc.2",
|
|
3520
|
+
integrity: "sha512-llX8AWbaI3CGme/a2eeTSfy5atk8u3iJeOFzmZV/KZ0v0hMhKZIK1xQInWwC9OmSDJ/StStJe0hDPVLWbB7hVg=="
|
|
3521
|
+
},
|
|
3522
|
+
{
|
|
3523
|
+
name: "@deepseek-ai/dsh-fs",
|
|
3524
|
+
version: "0.1.1-rc.2",
|
|
3525
|
+
integrity: "sha512-8j+6MffvCHATLQrhAVfc9rKyunKu/O7mjjJzmdsUSdID7V4iUYMwqPamhlAyI+tfohZu/vcforKzCRIZGmCYug=="
|
|
3526
|
+
},
|
|
3527
|
+
{
|
|
3528
|
+
name: "@deepseek-ai/dsh-fs-local",
|
|
3529
|
+
version: "0.1.1-rc.2",
|
|
3530
|
+
integrity: "sha512-jvn1MsAMqCmt5SjRNkPjmpc+RIWrZQrBVtf/OpmKr2PaBEGqSbCkPApWDE9iSMhcuQg6k5evScOXwAsduzKOLA=="
|
|
3531
|
+
},
|
|
3532
|
+
{
|
|
3533
|
+
name: "@deepseek-ai/dsh-fs-sandbox",
|
|
3534
|
+
version: "0.1.1-rc.2",
|
|
3535
|
+
integrity: "sha512-PI65uLZ3ARkfVV/PXvACS1HEXggoOaXgYQzXQFdLOfm7AiHOdZWZccUAXBetpZhcNYIOKsVoLnfZkXcHByqecQ=="
|
|
3536
|
+
},
|
|
3537
|
+
{
|
|
3538
|
+
name: "@deepseek-ai/dsh-fs-observation-policy",
|
|
3539
|
+
version: "0.1.1-rc.2",
|
|
3540
|
+
integrity: "sha512-rlq7yu4xavkKK1Oa1/aNCOeUW7t/3OXJJOfOcZXuUgJn5f8G0AbpTDpp2CeuL1cHlKpbunGhEkKQ2N/dv7ZR9w=="
|
|
3541
|
+
},
|
|
3542
|
+
{
|
|
3543
|
+
name: "@deepseek-ai/dsh-sandbox",
|
|
3544
|
+
version: "0.1.1-rc.2",
|
|
3545
|
+
integrity: "sha512-rnO2RqZ+ycpwrXrXlMcrhWAICdui3ZVTjNQ8eZrOPE18hAbX3tw0nLFq26sBjMSnBfDQHNZ4VaFpt0p8qhkPWQ=="
|
|
3546
|
+
},
|
|
3547
|
+
{
|
|
3548
|
+
name: "@deepseek-ai/dsh-sandbox-policy",
|
|
3549
|
+
version: "0.1.1-rc.2",
|
|
3550
|
+
integrity: "sha512-cpoIUxCzpZJDTMXVt9gS+qgWEDAWf6rIe715uY1NF0ROoiEXPlmToLsHLF+4pXTW3wWWzpGVswO0bPYEKrQr3g=="
|
|
3551
|
+
},
|
|
3552
|
+
{
|
|
3553
|
+
name: "@deepseek-ai/dsh-user-approval",
|
|
3554
|
+
version: "0.1.1-rc.2",
|
|
3555
|
+
integrity: "sha512-SdsO4Rs+NeJFoertkVilXBACREOLfkKPJJznYKqDhJxeRo38RJ56dtj0Xd0/6rERmsQiMck4Bwdrzg1ubUqPNA=="
|
|
3556
|
+
},
|
|
3557
|
+
{
|
|
3558
|
+
name: "@deepseek-ai/dsh-attachment",
|
|
3559
|
+
version: "0.1.1-rc.2",
|
|
3560
|
+
integrity: "sha512-rCYAt8QsawP1yfDCU7XxNwYT/XWvyFsxYrkwhLLkdfW83QVD0CQHizSkTQE7RFX74nKUD1z3sTLfnLr7xneArw=="
|
|
3561
|
+
},
|
|
3562
|
+
{
|
|
3563
|
+
name: "@deepseek-ai/dsh-system-prompt",
|
|
3564
|
+
version: "0.1.1-rc.2",
|
|
3565
|
+
integrity: "sha512-on4hjAlYI5uX9q7Sf95YkMMBVe6heywtA/H50ksrIMUub8U2B98hO9iQpHhjwIO1F1vu+5pLcPvRr6yUGGmtXQ=="
|
|
3566
|
+
}
|
|
3567
|
+
]),
|
|
3568
|
+
defineCohort("dsh-0.1.2-alpha.2", ["0.1.2-alpha.2"], ["posix", "windows"], ALPHA2_HOST_PACKAGES),
|
|
3569
|
+
defineCohort("dsh-0.1.2-alpha.2-dshmarket-1.39.0", ["0.1.2-alpha.2"], ["posix", "windows"], ALPHA2_DSHMARKET_139_HOST_PACKAGES),
|
|
3570
|
+
defineCohort("dsh-0.1.2-alpha.3", ["0.1.2-alpha.3"], ["posix", "windows"], ALPHA3_HOST_PACKAGES)
|
|
3571
|
+
];
|
|
3366
3572
|
/**
|
|
3367
3573
|
* rc.2 audited package identities (first registry cohort). The audited
|
|
3368
3574
|
* cohort is an atomic whole-graph contract (CG-DSH-001): any drifted,
|
|
@@ -3453,11 +3659,11 @@ function statusForPackages(id, rows, requiredNames, cohort) {
|
|
|
3453
3659
|
const counts = /* @__PURE__ */ new Map();
|
|
3454
3660
|
for (const row of relevant) counts.set(row.name, (counts.get(row.name) ?? 0) + 1);
|
|
3455
3661
|
const missingPackages = requiredPackages.filter((name) => !counts.has(name));
|
|
3456
|
-
const digest = safeHostLockDigest(relevant, { capabilityId: id }, cohort);
|
|
3662
|
+
const digest$1 = safeHostLockDigest(relevant, { capabilityId: id }, cohort);
|
|
3457
3663
|
if ([...counts.values()].some((count) => count > 1)) return {
|
|
3458
3664
|
id,
|
|
3459
3665
|
status: "unavailable",
|
|
3460
|
-
digest,
|
|
3666
|
+
digest: digest$1,
|
|
3461
3667
|
requiredPackages,
|
|
3462
3668
|
missingPackages,
|
|
3463
3669
|
reasonCode: "host_capability_duplicate_package"
|
|
@@ -3465,7 +3671,7 @@ function statusForPackages(id, rows, requiredNames, cohort) {
|
|
|
3465
3671
|
if (missingPackages.length > 0) return {
|
|
3466
3672
|
id,
|
|
3467
3673
|
status: "unavailable",
|
|
3468
|
-
digest,
|
|
3674
|
+
digest: digest$1,
|
|
3469
3675
|
requiredPackages,
|
|
3470
3676
|
missingPackages,
|
|
3471
3677
|
reasonCode: "host_capability_missing"
|
|
@@ -3476,7 +3682,7 @@ function statusForPackages(id, rows, requiredNames, cohort) {
|
|
|
3476
3682
|
if (!row.version || !row.integrity) return {
|
|
3477
3683
|
id,
|
|
3478
3684
|
status: "unavailable",
|
|
3479
|
-
digest,
|
|
3685
|
+
digest: digest$1,
|
|
3480
3686
|
requiredPackages,
|
|
3481
3687
|
missingPackages,
|
|
3482
3688
|
reasonCode: "host_capability_missing"
|
|
@@ -3484,7 +3690,7 @@ function statusForPackages(id, rows, requiredNames, cohort) {
|
|
|
3484
3690
|
if (row.version !== pinned.version) return {
|
|
3485
3691
|
id,
|
|
3486
3692
|
status: "unsupported",
|
|
3487
|
-
digest,
|
|
3693
|
+
digest: digest$1,
|
|
3488
3694
|
requiredPackages,
|
|
3489
3695
|
missingPackages,
|
|
3490
3696
|
reasonCode: "host_capability_version_mismatch"
|
|
@@ -3492,7 +3698,7 @@ function statusForPackages(id, rows, requiredNames, cohort) {
|
|
|
3492
3698
|
if (row.integrity !== pinned.integrity) return {
|
|
3493
3699
|
id,
|
|
3494
3700
|
status: "unsupported",
|
|
3495
|
-
digest,
|
|
3701
|
+
digest: digest$1,
|
|
3496
3702
|
requiredPackages,
|
|
3497
3703
|
missingPackages,
|
|
3498
3704
|
reasonCode: "host_capability_integrity_mismatch"
|
|
@@ -3501,7 +3707,7 @@ function statusForPackages(id, rows, requiredNames, cohort) {
|
|
|
3501
3707
|
return {
|
|
3502
3708
|
id,
|
|
3503
3709
|
status: "supported",
|
|
3504
|
-
digest,
|
|
3710
|
+
digest: digest$1,
|
|
3505
3711
|
requiredPackages,
|
|
3506
3712
|
missingPackages
|
|
3507
3713
|
};
|
|
@@ -3521,13 +3727,13 @@ function evaluateHostLock(rows, context = {}) {
|
|
|
3521
3727
|
for (const row of supplied) counts.set(row.name, (counts.get(row.name) ?? 0) + 1);
|
|
3522
3728
|
const goalRows = [...GOAL_HOST_PACKAGES].filter((name) => counts.has(name));
|
|
3523
3729
|
const goalAvailable = goalRows.length === GOAL_HOST_PACKAGES.size;
|
|
3524
|
-
const digest = safeHostLockDigest(supplied, context, cohort);
|
|
3730
|
+
const digest$1 = safeHostLockDigest(supplied, context, cohort);
|
|
3525
3731
|
const base = statusForPackages("base", supplied, BASE_HOST_PACKAGES, cohort);
|
|
3526
3732
|
const missingPackages = cohort.packages.map((row) => row.name).filter((name) => (counts.get(name) ?? 0) === 0).sort((a, b) => a.localeCompare(b));
|
|
3527
3733
|
const registryNames = new Set(HOST_COHORTS.flatMap((entry) => entry.packages.map((row) => row.name)));
|
|
3528
3734
|
const unknown = supplied.find((row) => !registryNames.has(row.name));
|
|
3529
3735
|
const baseResult = {
|
|
3530
|
-
digest,
|
|
3736
|
+
digest: digest$1,
|
|
3531
3737
|
goalAvailable,
|
|
3532
3738
|
packages: supplied,
|
|
3533
3739
|
capabilities,
|
|
@@ -4485,9 +4691,9 @@ function resolveCommandPath(reference, cwd) {
|
|
|
4485
4691
|
if (/^[A-Za-z]:[\\/]/.test(reference) || reference.startsWith("//") || reference.startsWith("\\\\") || reference.startsWith("/") || reference.startsWith("\\")) return reference;
|
|
4486
4692
|
return `${cwd.replace(/[\\/]+$/, "")}/${reference}`;
|
|
4487
4693
|
}
|
|
4488
|
-
function stable(value) {
|
|
4489
|
-
if (Array.isArray(value)) return `[${value.map(stable).join(",")}]`;
|
|
4490
|
-
if (value && typeof value === "object") return `{${Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => `${JSON.stringify(key)}:${stable(entry)}`).join(",")}}`;
|
|
4694
|
+
function stable$1(value) {
|
|
4695
|
+
if (Array.isArray(value)) return `[${value.map(stable$1).join(",")}]`;
|
|
4696
|
+
if (value && typeof value === "object") return `{${Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => `${JSON.stringify(key)}:${stable$1(entry)}`).join(",")}}`;
|
|
4491
4697
|
return JSON.stringify(value);
|
|
4492
4698
|
}
|
|
4493
4699
|
function structuredGuardMeta(meta, toolName) {
|
|
@@ -4502,7 +4708,7 @@ function structuredGuardMeta(meta, toolName) {
|
|
|
4502
4708
|
const rawExpected = asRecord$1(value.expectedTransition);
|
|
4503
4709
|
const expectedParameters = asRecord$1(rawExpected?.parameters);
|
|
4504
4710
|
const expectedDigest = value.expectedTransitionDigest;
|
|
4505
|
-
const expectedTransition = rawExpected && typeof rawExpected.predicateId === "string" && rawExpected.version === 1 && rawExpected.predParamsKind === "inline" && expectedParameters && typeof expectedDigest === "string" && expectedDigest === sha256(stable(rawExpected)) ? rawExpected : void 0;
|
|
4711
|
+
const expectedTransition = rawExpected && typeof rawExpected.predicateId === "string" && rawExpected.version === 1 && rawExpected.predParamsKind === "inline" && expectedParameters && typeof expectedDigest === "string" && expectedDigest === sha256(stable$1(rawExpected)) ? rawExpected : void 0;
|
|
4506
4712
|
if (typeof value.adapterId !== "string" || typeof value.adapterVersion !== "string") return void 0;
|
|
4507
4713
|
if (SUPPORTED_EVIDENCE_ADAPTERS[value.adapterId] !== value.adapterVersion) return void 0;
|
|
4508
4714
|
if (typeof action !== "string" || typeof role !== "string" || !resolved) return void 0;
|
|
@@ -5108,6 +5314,7 @@ function deriveProjection(sourceEvents, config, scope, durableConfirmed, hostLoc
|
|
|
5108
5314
|
projection.hostLockDigest = hostLock.digest;
|
|
5109
5315
|
projection.hostStatus = hostLock.status;
|
|
5110
5316
|
projection.hostReasonCode = hostLock.reasonCode;
|
|
5317
|
+
projection.hostCohortId = hostLock.cohortId;
|
|
5111
5318
|
let enabled = config.activation === "always";
|
|
5112
5319
|
let epoch = 0;
|
|
5113
5320
|
let evidenceCounter = 0;
|
|
@@ -6132,4 +6339,214 @@ function verifyComposedHostLockDump(text, expected) {
|
|
|
6132
6339
|
}
|
|
6133
6340
|
|
|
6134
6341
|
//#endregion
|
|
6135
|
-
|
|
6342
|
+
//#region src/domain/proof.ts
|
|
6343
|
+
const PROOF_PROTOCOL_VERSION = "0.4.0";
|
|
6344
|
+
const PROOF_KINDS = [
|
|
6345
|
+
"subject_readback",
|
|
6346
|
+
"scope_coverage",
|
|
6347
|
+
"state_verification"
|
|
6348
|
+
];
|
|
6349
|
+
function stable(value) {
|
|
6350
|
+
if (Array.isArray(value)) return `[${value.map(stable).join(",")}]`;
|
|
6351
|
+
if (value && typeof value === "object") return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([k, v]) => `${JSON.stringify(k)}:${stable(v)}`).join(",")}}`;
|
|
6352
|
+
return JSON.stringify(value);
|
|
6353
|
+
}
|
|
6354
|
+
function digest(value) {
|
|
6355
|
+
return createHash("sha256").update("ccg.proofManifest.v1\n", "utf8").update(stable(value), "utf8").digest("hex");
|
|
6356
|
+
}
|
|
6357
|
+
function validDigest(value) {
|
|
6358
|
+
return /^[0-9a-f]{64}$/.test(value);
|
|
6359
|
+
}
|
|
6360
|
+
/**
|
|
6361
|
+
* The manifest digest root includes every integrity-bearing field, so a
|
|
6362
|
+
* tampered asset-set digest is exactly as detectable as a tampered obligation.
|
|
6363
|
+
*/
|
|
6364
|
+
function proofDigest(obligations, assetSetSha256) {
|
|
6365
|
+
return digest({
|
|
6366
|
+
proofProtocolVersion: PROOF_PROTOCOL_VERSION,
|
|
6367
|
+
obligations: [...obligations],
|
|
6368
|
+
...assetSetSha256 !== void 0 ? { assetSetSha256 } : {}
|
|
6369
|
+
});
|
|
6370
|
+
}
|
|
6371
|
+
function validateProofManifest(manifest) {
|
|
6372
|
+
const errors = [];
|
|
6373
|
+
if (!manifest || typeof manifest !== "object") return ["proof_manifest_invalid"];
|
|
6374
|
+
const value = manifest;
|
|
6375
|
+
if (value.proofProtocolVersion !== PROOF_PROTOCOL_VERSION) errors.push("proof_protocol_version_mismatch");
|
|
6376
|
+
if (!Array.isArray(value.obligations)) errors.push("proof_obligations_missing");
|
|
6377
|
+
if (value.assetSetSha256 !== void 0 && (typeof value.assetSetSha256 !== "string" || !validDigest(value.assetSetSha256))) errors.push("proof_asset_set_digest_invalid");
|
|
6378
|
+
if (typeof value.proofSha256 !== "string" || !validDigest(value.proofSha256)) errors.push("proof_digest_invalid");
|
|
6379
|
+
const obligations = Array.isArray(value.obligations) ? value.obligations : [];
|
|
6380
|
+
const ids = /* @__PURE__ */ new Set();
|
|
6381
|
+
for (const raw of obligations) {
|
|
6382
|
+
if (!raw || typeof raw !== "object") {
|
|
6383
|
+
errors.push("proof_obligation_invalid");
|
|
6384
|
+
continue;
|
|
6385
|
+
}
|
|
6386
|
+
const obligation = raw;
|
|
6387
|
+
if (typeof obligation.obligationId !== "string" || ids.has(obligation.obligationId)) errors.push("proof_obligation_id_duplicate_or_invalid");
|
|
6388
|
+
if (typeof obligation.obligationId === "string") ids.add(obligation.obligationId);
|
|
6389
|
+
if (!PROOF_KINDS.includes(obligation.kind)) errors.push("proof_kind_unsupported");
|
|
6390
|
+
if (![
|
|
6391
|
+
"artifact",
|
|
6392
|
+
"ui",
|
|
6393
|
+
"visual",
|
|
6394
|
+
"scope"
|
|
6395
|
+
].includes(String(obligation.surface))) errors.push("proof_surface_unsupported");
|
|
6396
|
+
if (!Array.isArray(obligation.subjectIds) || obligation.subjectIds.length === 0 || obligation.subjectIds.some((id) => typeof id !== "string" || id.startsWith("codex:unsupported/"))) errors.push("proof_subject_invalid");
|
|
6397
|
+
if (!Array.isArray(obligation.evidenceIds) || obligation.evidenceIds.length === 0 || new Set(obligation.evidenceIds).size !== obligation.evidenceIds.length) errors.push("proof_evidence_invalid");
|
|
6398
|
+
const expected = obligation.expectedScopeDigest;
|
|
6399
|
+
const observed = obligation.observedScopeDigest;
|
|
6400
|
+
for (const digestValue of [expected, observed]) if (digestValue !== void 0 && (typeof digestValue !== "string" || !validDigest(digestValue))) errors.push("proof_scope_digest_invalid");
|
|
6401
|
+
if (expected !== void 0 && observed !== expected) errors.push("proof_scope_digest_mismatch");
|
|
6402
|
+
if (expected === void 0 && observed !== void 0) errors.push("proof_scope_digest_mismatch");
|
|
6403
|
+
}
|
|
6404
|
+
if (errors.length === 0) {
|
|
6405
|
+
const assetSet = typeof value.assetSetSha256 === "string" ? value.assetSetSha256 : void 0;
|
|
6406
|
+
if (value.proofSha256 !== proofDigest(obligations, assetSet)) errors.push("proof_digest_mismatch");
|
|
6407
|
+
}
|
|
6408
|
+
return [...new Set(errors)];
|
|
6409
|
+
}
|
|
6410
|
+
function createProofManifest(obligations, assetSetSha256) {
|
|
6411
|
+
const normalized = obligations.map((obligation) => ({
|
|
6412
|
+
obligationId: obligation.obligationId,
|
|
6413
|
+
kind: obligation.kind,
|
|
6414
|
+
surface: obligation.surface,
|
|
6415
|
+
subjectIds: [...obligation.subjectIds].sort(),
|
|
6416
|
+
evidenceIds: [...obligation.evidenceIds].sort(),
|
|
6417
|
+
...obligation.expectedScopeDigest ? { expectedScopeDigest: obligation.expectedScopeDigest } : {},
|
|
6418
|
+
...obligation.observedScopeDigest ? { observedScopeDigest: obligation.observedScopeDigest } : {}
|
|
6419
|
+
})).sort((a, b) => a.obligationId.localeCompare(b.obligationId));
|
|
6420
|
+
const manifest = {
|
|
6421
|
+
proofProtocolVersion: PROOF_PROTOCOL_VERSION,
|
|
6422
|
+
obligations: normalized,
|
|
6423
|
+
...assetSetSha256 !== void 0 ? { assetSetSha256 } : {},
|
|
6424
|
+
proofSha256: proofDigest(normalized, assetSetSha256)
|
|
6425
|
+
};
|
|
6426
|
+
const errors = validateProofManifest(manifest);
|
|
6427
|
+
if (errors.length) throw new Error(`proof manifest rejected: ${errors.join(",")}`);
|
|
6428
|
+
return manifest;
|
|
6429
|
+
}
|
|
6430
|
+
/**
|
|
6431
|
+
* Bind a structurally valid proof to the actual replayed projection: every
|
|
6432
|
+
* obligation must name a pending item, every evidence id must exist in the
|
|
6433
|
+
* projection, and every bound evidence must satisfy the obligation's kind,
|
|
6434
|
+
* surface, subject, and outcome constraints. An empty projection therefore
|
|
6435
|
+
* rejects any proof, and cross-item or foreign evidence can never bind.
|
|
6436
|
+
*/
|
|
6437
|
+
function bindProofToProjection(projection, proof) {
|
|
6438
|
+
const errors = [];
|
|
6439
|
+
const items = projection.items;
|
|
6440
|
+
const evidence = projection.evidence;
|
|
6441
|
+
for (const obligation of proof.obligations) {
|
|
6442
|
+
const item = items.get(obligation.obligationId);
|
|
6443
|
+
if (!item) {
|
|
6444
|
+
errors.push("proof_obligation_unbound");
|
|
6445
|
+
continue;
|
|
6446
|
+
}
|
|
6447
|
+
if (item.status !== "pending") {
|
|
6448
|
+
errors.push("proof_obligation_not_pending");
|
|
6449
|
+
continue;
|
|
6450
|
+
}
|
|
6451
|
+
if (item.verification.surface !== void 0 && item.verification.surface !== obligation.surface) errors.push("proof_surface_unbound");
|
|
6452
|
+
const seen = /* @__PURE__ */ new Set();
|
|
6453
|
+
for (const evidenceId of obligation.evidenceIds) {
|
|
6454
|
+
const record = evidence.get(evidenceId);
|
|
6455
|
+
if (!record) {
|
|
6456
|
+
errors.push("proof_evidence_unknown");
|
|
6457
|
+
continue;
|
|
6458
|
+
}
|
|
6459
|
+
if (!seen.has(evidenceId)) seen.add(evidenceId);
|
|
6460
|
+
if (record.outcome !== "success") {
|
|
6461
|
+
errors.push("proof_evidence_outcome_invalid");
|
|
6462
|
+
continue;
|
|
6463
|
+
}
|
|
6464
|
+
if (!proofEvidenceConstraints(record, obligation)) errors.push("proof_evidence_constraint_failed");
|
|
6465
|
+
}
|
|
6466
|
+
if (obligation.kind === "scope_coverage") {
|
|
6467
|
+
const itemScope = item.requestedTarget?.scope;
|
|
6468
|
+
const itemSubject = item.verification.subject;
|
|
6469
|
+
if (!obligation.subjectIds.every((subject) => subject === itemScope || subject === itemSubject)) errors.push("proof_scope_subject_unbound");
|
|
6470
|
+
}
|
|
6471
|
+
}
|
|
6472
|
+
return [...new Set(errors)];
|
|
6473
|
+
}
|
|
6474
|
+
function canonicalProjection(projection) {
|
|
6475
|
+
return {
|
|
6476
|
+
epoch: projection.epoch,
|
|
6477
|
+
contractRevision: projection.contractRevision,
|
|
6478
|
+
sessionRefDigest: projection.sessionRefDigest,
|
|
6479
|
+
hostLockDigest: projection.hostLockDigest,
|
|
6480
|
+
hostStatus: projection.hostStatus,
|
|
6481
|
+
hostCohortId: projection.hostCohortId,
|
|
6482
|
+
integrity: projection.integrity,
|
|
6483
|
+
items: [...projection.items.values()].map(({ id, revision, kind, status, semanticAction, requestedTarget, verification }) => ({
|
|
6484
|
+
id,
|
|
6485
|
+
revision,
|
|
6486
|
+
kind,
|
|
6487
|
+
status,
|
|
6488
|
+
semanticAction,
|
|
6489
|
+
requestedTarget,
|
|
6490
|
+
verification
|
|
6491
|
+
})).sort((a, b) => a.id.localeCompare(b.id)),
|
|
6492
|
+
evidence: [...projection.evidence.values()].map(({ id, epoch, toolName, outcome, capabilities, subjects, surfaces, operations, semanticAction, evidenceRole, resolvedTarget, observedState }) => ({
|
|
6493
|
+
id,
|
|
6494
|
+
epoch,
|
|
6495
|
+
toolName,
|
|
6496
|
+
outcome,
|
|
6497
|
+
capabilities,
|
|
6498
|
+
subjects,
|
|
6499
|
+
surfaces,
|
|
6500
|
+
operations,
|
|
6501
|
+
semanticAction,
|
|
6502
|
+
evidenceRole,
|
|
6503
|
+
resolvedTarget,
|
|
6504
|
+
observedState
|
|
6505
|
+
})).sort((a, b) => a.id.localeCompare(b.id)),
|
|
6506
|
+
checkpoints: projection.checkpoints.map(({ id, certificationDigest: certificationDigest$1, result }) => ({
|
|
6507
|
+
id,
|
|
6508
|
+
certificationDigest: certificationDigest$1,
|
|
6509
|
+
result
|
|
6510
|
+
}))
|
|
6511
|
+
};
|
|
6512
|
+
}
|
|
6513
|
+
function sessionQuery(projection, proof) {
|
|
6514
|
+
if (proof) {
|
|
6515
|
+
if (validateProofManifest(proof).length) return {
|
|
6516
|
+
sessionRefDigest: projection.sessionRefDigest,
|
|
6517
|
+
epoch: projection.epoch,
|
|
6518
|
+
contractRevision: projection.contractRevision,
|
|
6519
|
+
state: "corrupt",
|
|
6520
|
+
reasonCode: "proof_invalid",
|
|
6521
|
+
cohortId: projection.hostCohortId
|
|
6522
|
+
};
|
|
6523
|
+
if (bindProofToProjection(projection, proof).length) return {
|
|
6524
|
+
sessionRefDigest: projection.sessionRefDigest,
|
|
6525
|
+
epoch: projection.epoch,
|
|
6526
|
+
contractRevision: projection.contractRevision,
|
|
6527
|
+
state: "corrupt",
|
|
6528
|
+
reasonCode: "proof_unbound",
|
|
6529
|
+
cohortId: projection.hostCohortId
|
|
6530
|
+
};
|
|
6531
|
+
}
|
|
6532
|
+
const state = projection.integrity === "valid" ? projection.hostStatus === "supported" ? "valid" : "unknown" : projection.integrity;
|
|
6533
|
+
return {
|
|
6534
|
+
sessionRefDigest: projection.sessionRefDigest,
|
|
6535
|
+
epoch: projection.epoch,
|
|
6536
|
+
contractRevision: projection.contractRevision,
|
|
6537
|
+
state,
|
|
6538
|
+
...proof ? { proof } : {},
|
|
6539
|
+
cohortId: projection.hostCohortId
|
|
6540
|
+
};
|
|
6541
|
+
}
|
|
6542
|
+
function proofEvidenceConstraints(evidence, obligation) {
|
|
6543
|
+
if (evidence.outcome !== "success" || evidence.surfaces.length !== 1 || evidence.surfaces[0] !== obligation.surface) return false;
|
|
6544
|
+
if (!obligation.subjectIds.every((subject) => evidence.subjects.includes(subject))) return false;
|
|
6545
|
+
if (obligation.kind === "subject_readback" && !(evidence.operations ?? []).some(({ op }) => op === "read" || op === "verify")) return false;
|
|
6546
|
+
if (obligation.kind === "scope_coverage" && !(evidence.operations ?? []).some(({ op }) => op === "run" || op === "verify")) return false;
|
|
6547
|
+
if (obligation.kind === "state_verification" && evidence.evidenceRole !== "state") return false;
|
|
6548
|
+
return true;
|
|
6549
|
+
}
|
|
6550
|
+
|
|
6551
|
+
//#endregion
|
|
6552
|
+
export { GOAL_HOST_PACKAGES as $, COMMAND_SURFACE_MANIFEST as $t, decideTurnStopping as A, classifyClause as At, isDeterministicCheck as B, CERTIFICATE_VERSION as Bt, executeRevalidatedGitEffect as C, bindingSatisfies as Ct, verifiedLinearCommitReadback as D, currentContractDigest as Dt, revalidateGitPrestate as E, isVerifyingCapability as Et, deriveProjection as F, segmentClauses as Ft, parseShellCommand as G, actionCompatible as Gt, canonicalArgvFromCommand as H, STATEFUL_ACTIONS as Ht, supersedeItem as I, canonicalRegistryBase as It, ALPHA2_DSHMARKET_139_HOST_PACKAGES as J, requestedTargetMatchesResolved as Jt, goalCompletionDenial as K, isStatefulAction as Kt, evidenceFromPersistedToolResult as L, npmEscapedPackageName as Lt, latestAssistantText as M, extractMethod as Mt, observeAssistantOutcome as N, extractOperation as Nt, classifyCompletionClaim as O, captureClause as Ot, PROTOCOL_V3_NOTICE as P, isInformationalMessage as Pt, EXPECTED_HOST_PACKAGES as Q, validateActionTarget as Qt, extractTextContent as R, ACTION_MANIFEST as Rt, createGitPrestateEnvelope as S, renderRecoveryPacket as St, parseGitCommandManifest as T, evidenceMatchesItem as Tt, isRunExecutable as U, STOP_PROTOCOL_VERSION as Ut, withDurability as V, SEMANTIC_ACTIONS as Vt, parsePwshCommand as W, SUPPORTED_EVIDENCE_ADAPTERS as Wt, BASE_HOST_PACKAGES as X, semanticActionFromText as Xt, ALPHA2_HOST_PACKAGES as Y, semanticActionFromCommand as Yt, DEFAULT_HOST_LOCK as Z, validateActionManifest as Zt, resolveInstalledHostLock as _, certifyCheckpoint as _t, createProofManifest as a, sanitizeUrl as an, evaluateHostCapability as at, commitIndexSnapshotDigest as b, openItems$1 as bt, sessionQuery as c, selectHostCohort as ct, hostLockContextFromComposedDump as d, segmentAuthorityBlocks as dt, validateManifest as en, HOST_CAPABILITY_PACKAGE_GROUPS as et, hostLockRowsFromComposedDump as f, classifyUserInteraction as ft, resolveActiveProfileHostLock as g, qualifyBoundary as gt, packageRowsFromPnpmLock as h, isCurrentAcceptedBoundary as ht, canonicalProjection as i, sanitizeClauseText as in, evaluateExternalWaitCapability as it, isWholeTaskCompletionClaim as j, extractArtifactPaths as jt, decideTurnBoundary as k, captureItem as kt, validateProofManifest as l, ALPHA3_HOST_PACKAGES as lt, packageRowsFromActiveGraph as m, effectuateBoundary as mt, PROOF_PROTOCOL_VERSION as n, digestStrings as nn, bindExecutableIdentity as nt, proofDigest as o, sha256 as on, evaluateHostLock as ot, injectActiveProfileHostLock as p, availableBoundaryQualifications as pt, hasCurrentCertificate as q, requestedTargetAuthorizesMutation as qt, bindProofToProjection as r, normalizeClause as rn, bindLiveGoalCapability as rt, proofEvidenceConstraints as s, createProjection as sn, evaluateToolSurfaceCapability as st, PROOF_KINDS as t, canonicalizePath as tn, HOST_COHORTS as tt, HostProfileError as u, authorityCaptureCounts as ut, verifyComposedHostLockDump as v, DEFAULT_RECOVERY_CHAR_BUDGET as vt, gitCommandMatchesTarget as w, evidenceCoverage as wt, commitTreeSnapshotDigest as x, recoveryDigest as xt, GIT_COMMAND_MANIFEST_IDS as y, closingHint as yt, extractToolSubject as z, ACTION_MANIFEST_VERSION as zt };
|