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.
@@ -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$2(value) {
947
- if (Array.isArray(value)) return `[${value.map(stable$2).join(",")}]`;
948
- 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(",")}}`;
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$2([...projection.items.values()].sort((a, b) => a.id.localeCompare(b.id)).map((item) => [
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$1(value) {
1954
- if (Array.isArray(value)) return `[${value.map(stable$1).join(",")}]`;
1955
- if (value && typeof value === "object") return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, entry]) => `${JSON.stringify(key)}:${stable$1(entry)}`).join(",")}}`;
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$1(left ?? {}) === stable$1(right ?? {});
1959
+ return stable$2(left ?? {}) === stable$2(right ?? {});
1960
1960
  }
1961
1961
  function transitionsEqual(left, right) {
1962
- return stable$1(left) === stable$1(right);
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$1(observed[key]) === stable$1(resolved[key]) && stable$1(params[key]) === stable$1(resolved[key]));
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$1(observed.post_digest) === stable$1(params.post_digest);
2057
- case "restart": return stable$1(params.pre_generation) === stable$1(resolved.pre_generation) && stable$1(observed.new_generation) !== stable$1(resolved.pre_generation) && stable$1(observed.health) === stable$1(params.health);
2058
- case "commit": return stable$1(params.pre_head_oid) === stable$1(resolved.pre_head_oid) && stable$1(params.change_set_digest) === stable$1(resolved.change_set_digest) && stable$1(observed.pre_head_oid) === stable$1(resolved.pre_head_oid) && stable$1(observed.post_head_oid) !== stable$1(resolved.pre_head_oid);
2059
- case "push": return stable$1(observed.remote_oid) === stable$1(resolved.local_oid) && stable$1(params.local_oid) === stable$1(resolved.local_oid);
2060
- case "pull": return stable$1(resolved.pull_mode) === stable$1("ff-only") && stable$1(params.pull_mode) === stable$1("ff-only") && stable$1(params.upstream_oid) === stable$1(resolved.upstream_oid) && stable$1(params.pre_head_oid) === stable$1(resolved.pre_head_oid) && stable$1(observed.post_head_oid) === stable$1(resolved.upstream_oid) && stable$1(observed.tracking_ref_oid) === stable$1(resolved.upstream_oid);
2061
- case "fetch": return stable$1(params.upstream_oid) === stable$1(resolved.upstream_oid) && stable$1(params.pre_head_oid) === stable$1(resolved.pre_head_oid) && stable$1(observed.tracking_ref_oid) === stable$1(resolved.upstream_oid) && stable$1(observed.post_head_oid) === stable$1(resolved.pre_head_oid);
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$1(params[key]) === stable$1(resolved[key])) && stable$1(params.upstream_oid) === stable$1(observed.upstream_oid);
2071
- return stable$1(params) === stable$1({
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$1(resolution.expectedTransition))) return { rejected: {
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$1(value) === stable$1(effectTarget[key])) && Object.entries(binding.observedState ?? {}).every(([key, value]) => Object.hasOwn(effectObserved, key) && stable$1(value) === stable$1(effectObserved[key]))) || effectAction === action && (!tuplesEqual(binding.resolvedTarget, effectTarget) || !tuplesEqual(binding.observedState, effectObserved))) return { rejected: {
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
- * Audited host cohort registry. The rc.2 cohort keeps the exact identities
3017
- * audited for 0.3.0/0.3.1 on macOS and Windows. The alpha.2 cohort carries the
3018
- * exact package graph extracted from native macOS and Windows DSH
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 HOST_COHORTS = [defineCohort("dsh-0.1.1-rc.2", ["0.1.1-rc.2"], ["posix", "windows"], [
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
- export { segmentAuthorityBlocks as $, extractToolSubject as A, STATEFUL_ACTIONS as At, DEFAULT_HOST_LOCK as B, validateActionTarget as Bt, latestAssistantText as C, segmentClauses as Ct, supersedeItem as D, ACTION_MANIFEST_VERSION as Dt, deriveProjection as E, ACTION_MANIFEST as Et, parsePwshCommand as F, requestedTargetAuthorizesMutation as Ft, bindExecutableIdentity as G, normalizeClause as Gt, GOAL_HOST_PACKAGES as H, validateManifest as Ht, parseShellCommand as I, requestedTargetMatchesResolved as It, evaluateHostCapability as J, sha256 as Jt, bindLiveGoalCapability as K, sanitizeClauseText as Kt, goalCompletionDenial as L, semanticActionFromCommand as Lt, withDurability as M, SUPPORTED_EVIDENCE_ADAPTERS as Mt, canonicalArgvFromCommand as N, actionCompatible as Nt, evidenceFromPersistedToolResult as O, CERTIFICATE_VERSION as Ot, isRunExecutable as P, isStatefulAction as Pt, authorityCaptureCounts as Q, hasCurrentCertificate as R, semanticActionFromText as Rt, isWholeTaskCompletionClaim as S, isInformationalMessage as St, PROTOCOL_V3_NOTICE as T, npmEscapedPackageName as Tt, HOST_CAPABILITY_PACKAGE_GROUPS as U, canonicalizePath as Ut, EXPECTED_HOST_PACKAGES as V, COMMAND_SURFACE_MANIFEST as Vt, HOST_COHORTS as W, digestStrings as Wt, evaluateToolSurfaceCapability as X, evaluateHostLock as Y, createProjection as Yt, selectHostCohort as Z, revalidateGitPrestate as _, captureItem as _t, packageRowsFromActiveGraph as a, certifyCheckpoint as at, decideTurnBoundary as b, extractMethod as bt, resolveInstalledHostLock as c, openItems$1 as ct, commitIndexSnapshotDigest as d, bindingSatisfies as dt, classifyUserInteraction as et, commitTreeSnapshotDigest as f, evidenceCoverage as ft, parseGitCommandManifest as g, captureClause as gt, gitCommandMatchesTarget as h, currentContractDigest as ht, injectActiveProfileHostLock as i, qualifyBoundary as it, isDeterministicCheck as j, STOP_PROTOCOL_VERSION as jt, extractTextContent as k, SEMANTIC_ACTIONS as kt, verifyComposedHostLockDump as l, recoveryDigest as lt, executeRevalidatedGitEffect as m, isVerifyingCapability as mt, hostLockContextFromComposedDump as n, effectuateBoundary as nt, packageRowsFromPnpmLock as o, DEFAULT_RECOVERY_CHAR_BUDGET as ot, createGitPrestateEnvelope as p, evidenceMatchesItem as pt, evaluateExternalWaitCapability as q, sanitizeUrl as qt, hostLockRowsFromComposedDump as r, isCurrentAcceptedBoundary as rt, resolveActiveProfileHostLock as s, closingHint as st, HostProfileError as t, availableBoundaryQualifications as tt, GIT_COMMAND_MANIFEST_IDS as u, renderRecoveryPacket as ut, verifiedLinearCommitReadback as v, classifyClause as vt, observeAssistantOutcome as w, canonicalRegistryBase as wt, decideTurnStopping as x, extractOperation as xt, classifyCompletionClaim as y, extractArtifactPaths as yt, BASE_HOST_PACKAGES as z, validateActionManifest as zt };
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 };