@hashgraphonline/standards-sdk 0.1.186 → 0.1.188

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +3 -0
  2. package/dist/browser/services/registry-broker/client/agent-network.d.ts +974 -0
  3. package/dist/browser/services/registry-broker/client/agent-network.d.ts.map +1 -0
  4. package/dist/browser/services/registry-broker/client/base-client.d.ts +4 -0
  5. package/dist/browser/services/registry-broker/client/base-client.d.ts.map +1 -1
  6. package/dist/browser/services/registry-broker/client.d.ts +1 -0
  7. package/dist/browser/services/registry-broker/client.d.ts.map +1 -1
  8. package/dist/browser/standards-sdk.browser.js +149 -0
  9. package/dist/browser/standards-sdk.browser.js.map +1 -1
  10. package/dist/browser-root/services/registry-broker/client/agent-network.d.ts +974 -0
  11. package/dist/browser-root/services/registry-broker/client/agent-network.d.ts.map +1 -0
  12. package/dist/browser-root/services/registry-broker/client/base-client.d.ts +4 -0
  13. package/dist/browser-root/services/registry-broker/client/base-client.d.ts.map +1 -1
  14. package/dist/browser-root/services/registry-broker/client.d.ts +1 -0
  15. package/dist/browser-root/services/registry-broker/client.d.ts.map +1 -1
  16. package/dist/browser-root/standards-sdk.root-browser.js +404 -15
  17. package/dist/browser-root/standards-sdk.root-browser.js.map +1 -1
  18. package/dist/cjs/services/registry-broker/client/agent-network.d.ts +974 -0
  19. package/dist/cjs/services/registry-broker/client/agent-network.d.ts.map +1 -0
  20. package/dist/cjs/services/registry-broker/client/base-client.d.ts +4 -0
  21. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  22. package/dist/cjs/services/registry-broker/client.d.ts +1 -0
  23. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  24. package/dist/cjs/standards-sdk.cjs +2 -2
  25. package/dist/cjs/standards-sdk.cjs.map +1 -1
  26. package/dist/es/services/registry-broker/client/agent-network.d.ts +974 -0
  27. package/dist/es/services/registry-broker/client/agent-network.d.ts.map +1 -0
  28. package/dist/es/services/registry-broker/client/base-client.d.ts +4 -0
  29. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  30. package/dist/es/services/registry-broker/client.d.ts +1 -0
  31. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  32. package/dist/es/standards-sdk.es.js +50 -27
  33. package/dist/es/standards-sdk.es.js.map +1 -1
  34. package/dist/es/standards-sdk.es104.js +1 -1
  35. package/dist/es/standards-sdk.es106.js +1 -1
  36. package/dist/es/standards-sdk.es108.js +1 -1
  37. package/dist/es/standards-sdk.es11.js +1 -1
  38. package/dist/es/standards-sdk.es110.js +1 -1
  39. package/dist/es/standards-sdk.es116.js +2 -2
  40. package/dist/es/standards-sdk.es12.js +1 -1
  41. package/dist/es/standards-sdk.es120.js +4 -4
  42. package/dist/es/standards-sdk.es121.js +11 -11
  43. package/dist/es/standards-sdk.es126.js +1 -1
  44. package/dist/es/standards-sdk.es132.js +3 -2
  45. package/dist/es/standards-sdk.es132.js.map +1 -1
  46. package/dist/es/standards-sdk.es147.js +2 -2
  47. package/dist/es/standards-sdk.es148.js +1 -1
  48. package/dist/es/standards-sdk.es150.js +23 -14
  49. package/dist/es/standards-sdk.es150.js.map +1 -1
  50. package/dist/es/standards-sdk.es152.js +372 -248
  51. package/dist/es/standards-sdk.es152.js.map +1 -1
  52. package/dist/es/standards-sdk.es153.js +259 -4
  53. package/dist/es/standards-sdk.es153.js.map +1 -1
  54. package/dist/es/standards-sdk.es154.js +4 -81
  55. package/dist/es/standards-sdk.es154.js.map +1 -1
  56. package/dist/es/standards-sdk.es155.js +71 -77
  57. package/dist/es/standards-sdk.es155.js.map +1 -1
  58. package/dist/es/standards-sdk.es156.js +80 -53
  59. package/dist/es/standards-sdk.es156.js.map +1 -1
  60. package/dist/es/standards-sdk.es157.js +59 -2546
  61. package/dist/es/standards-sdk.es157.js.map +1 -1
  62. package/dist/es/standards-sdk.es158.js +2547 -159
  63. package/dist/es/standards-sdk.es158.js.map +1 -1
  64. package/dist/es/standards-sdk.es159.js +159 -7
  65. package/dist/es/standards-sdk.es159.js.map +1 -1
  66. package/dist/es/standards-sdk.es16.js +3 -2
  67. package/dist/es/standards-sdk.es16.js.map +1 -1
  68. package/dist/es/standards-sdk.es160.js +7 -86
  69. package/dist/es/standards-sdk.es160.js.map +1 -1
  70. package/dist/es/standards-sdk.es161.js +64 -43
  71. package/dist/es/standards-sdk.es161.js.map +1 -1
  72. package/dist/es/standards-sdk.es162.js +57 -186
  73. package/dist/es/standards-sdk.es162.js.map +1 -1
  74. package/dist/es/standards-sdk.es163.js +188 -20
  75. package/dist/es/standards-sdk.es163.js.map +1 -1
  76. package/dist/es/standards-sdk.es164.js +22 -54
  77. package/dist/es/standards-sdk.es164.js.map +1 -1
  78. package/dist/es/standards-sdk.es165.js +41 -78
  79. package/dist/es/standards-sdk.es165.js.map +1 -1
  80. package/dist/es/standards-sdk.es166.js +81 -35
  81. package/dist/es/standards-sdk.es166.js.map +1 -1
  82. package/dist/es/standards-sdk.es167.js +36 -191
  83. package/dist/es/standards-sdk.es167.js.map +1 -1
  84. package/dist/es/standards-sdk.es168.js +191 -43
  85. package/dist/es/standards-sdk.es168.js.map +1 -1
  86. package/dist/es/standards-sdk.es169.js +46 -39
  87. package/dist/es/standards-sdk.es169.js.map +1 -1
  88. package/dist/es/standards-sdk.es170.js +37 -44
  89. package/dist/es/standards-sdk.es170.js.map +1 -1
  90. package/dist/es/standards-sdk.es171.js +46 -39
  91. package/dist/es/standards-sdk.es171.js.map +1 -1
  92. package/dist/es/standards-sdk.es172.js +29 -102
  93. package/dist/es/standards-sdk.es172.js.map +1 -1
  94. package/dist/es/standards-sdk.es173.js +104 -36
  95. package/dist/es/standards-sdk.es173.js.map +1 -1
  96. package/dist/es/standards-sdk.es174.js +43 -33
  97. package/dist/es/standards-sdk.es174.js.map +1 -1
  98. package/dist/es/standards-sdk.es175.js +44 -72
  99. package/dist/es/standards-sdk.es175.js.map +1 -1
  100. package/dist/es/standards-sdk.es176.js +65 -61
  101. package/dist/es/standards-sdk.es176.js.map +1 -1
  102. package/dist/es/standards-sdk.es177.js +63 -39
  103. package/dist/es/standards-sdk.es177.js.map +1 -1
  104. package/dist/es/standards-sdk.es178.js +44 -36
  105. package/dist/es/standards-sdk.es178.js.map +1 -1
  106. package/dist/es/standards-sdk.es179.js +36 -30
  107. package/dist/es/standards-sdk.es179.js.map +1 -1
  108. package/dist/es/standards-sdk.es18.js +6 -5
  109. package/dist/es/standards-sdk.es18.js.map +1 -1
  110. package/dist/es/standards-sdk.es180.js +30 -34
  111. package/dist/es/standards-sdk.es180.js.map +1 -1
  112. package/dist/es/standards-sdk.es181.js +34 -48
  113. package/dist/es/standards-sdk.es181.js.map +1 -1
  114. package/dist/es/standards-sdk.es182.js +48 -138
  115. package/dist/es/standards-sdk.es182.js.map +1 -1
  116. package/dist/es/standards-sdk.es183.js +133 -37
  117. package/dist/es/standards-sdk.es183.js.map +1 -1
  118. package/dist/es/standards-sdk.es184.js +34 -12474
  119. package/dist/es/standards-sdk.es184.js.map +1 -1
  120. package/dist/es/standards-sdk.es185.js +12477 -12
  121. package/dist/es/standards-sdk.es185.js.map +1 -1
  122. package/dist/es/standards-sdk.es186.js +55 -671
  123. package/dist/es/standards-sdk.es186.js.map +1 -1
  124. package/dist/es/standards-sdk.es188.js +71 -63
  125. package/dist/es/standards-sdk.es188.js.map +1 -1
  126. package/dist/es/standards-sdk.es189.js +192 -48
  127. package/dist/es/standards-sdk.es189.js.map +1 -1
  128. package/dist/es/standards-sdk.es19.js +4 -3
  129. package/dist/es/standards-sdk.es19.js.map +1 -1
  130. package/dist/es/standards-sdk.es190.js +15 -79
  131. package/dist/es/standards-sdk.es190.js.map +1 -1
  132. package/dist/es/standards-sdk.es191.js +659 -187
  133. package/dist/es/standards-sdk.es191.js.map +1 -1
  134. package/dist/es/standards-sdk.es198.js +60 -126
  135. package/dist/es/standards-sdk.es198.js.map +1 -1
  136. package/dist/es/standards-sdk.es199.js +104 -482
  137. package/dist/es/standards-sdk.es199.js.map +1 -1
  138. package/dist/es/standards-sdk.es200.js +480 -222
  139. package/dist/es/standards-sdk.es200.js.map +1 -1
  140. package/dist/es/standards-sdk.es201.js +239 -176
  141. package/dist/es/standards-sdk.es201.js.map +1 -1
  142. package/dist/es/standards-sdk.es202.js +178 -101
  143. package/dist/es/standards-sdk.es202.js.map +1 -1
  144. package/dist/es/standards-sdk.es203.js +75 -108
  145. package/dist/es/standards-sdk.es203.js.map +1 -1
  146. package/dist/es/standards-sdk.es204.js +116 -148
  147. package/dist/es/standards-sdk.es204.js.map +1 -1
  148. package/dist/es/standards-sdk.es205.js +146 -646
  149. package/dist/es/standards-sdk.es205.js.map +1 -1
  150. package/dist/es/standards-sdk.es206.js +661 -162
  151. package/dist/es/standards-sdk.es206.js.map +1 -1
  152. package/dist/es/standards-sdk.es207.js +156 -206
  153. package/dist/es/standards-sdk.es207.js.map +1 -1
  154. package/dist/es/standards-sdk.es208.js +219 -223
  155. package/dist/es/standards-sdk.es208.js.map +1 -1
  156. package/dist/es/standards-sdk.es209.js +242 -0
  157. package/dist/es/standards-sdk.es209.js.map +1 -0
  158. package/dist/es/standards-sdk.es22.js +1 -1
  159. package/dist/es/standards-sdk.es27.js +6 -5
  160. package/dist/es/standards-sdk.es27.js.map +1 -1
  161. package/dist/es/standards-sdk.es30.js +1 -1
  162. package/dist/es/standards-sdk.es31.js +1 -1
  163. package/dist/es/standards-sdk.es35.js +4 -3
  164. package/dist/es/standards-sdk.es35.js.map +1 -1
  165. package/dist/es/standards-sdk.es36.js +3 -3
  166. package/dist/es/standards-sdk.es37.js +1 -1
  167. package/dist/es/standards-sdk.es4.js +1 -1
  168. package/dist/es/standards-sdk.es53.js +1 -1
  169. package/dist/es/standards-sdk.es56.js +1 -1
  170. package/dist/es/standards-sdk.es59.js +1 -1
  171. package/dist/es/standards-sdk.es62.js +1 -1
  172. package/dist/es/standards-sdk.es63.js +2 -2
  173. package/dist/es/standards-sdk.es64.js +1 -1
  174. package/dist/es/standards-sdk.es65.js +1 -1
  175. package/dist/es/standards-sdk.es67.js +4 -3
  176. package/dist/es/standards-sdk.es67.js.map +1 -1
  177. package/dist/es/standards-sdk.es7.js +1 -1
  178. package/dist/es/standards-sdk.es71.js +1 -1
  179. package/dist/es/standards-sdk.es72.js +2 -2
  180. package/dist/es/standards-sdk.es75.js +3 -3
  181. package/dist/es/standards-sdk.es76.js +1 -1
  182. package/dist/es/standards-sdk.es78.js +1 -1
  183. package/dist/es/standards-sdk.es83.js +1 -1
  184. package/dist/es/standards-sdk.es84.js +3 -2
  185. package/dist/es/standards-sdk.es84.js.map +1 -1
  186. package/dist/es/standards-sdk.es85.js +1 -1
  187. package/dist/es/standards-sdk.es88.js +1 -1
  188. package/dist/es/standards-sdk.es90.js +1 -1
  189. package/dist/es/standards-sdk.es94.js +3 -3
  190. package/dist/es/standards-sdk.es98.js +1 -1
  191. package/dist/es/standards-sdk.es99.js +1 -1
  192. package/package.json +1 -1
@@ -1,52 +1,59 @@
1
- import { readNumber, readSubjectAdditional, readString } from "./standards-sdk.es178.js";
2
- import "./standards-sdk.es162.js";
3
- import "./standards-sdk.es175.js";
1
+ import { clampScore } from "./standards-sdk.es119.js";
2
+ import { readMetadataRecord, readNumber, readString } from "./standards-sdk.es179.js";
3
+ import "./standards-sdk.es163.js";
4
4
  import "./standards-sdk.es176.js";
5
5
  import "./standards-sdk.es177.js";
6
- import { logScale } from "./standards-sdk.es163.js";
7
- const MISSING = { value: 0, status: "missing" };
8
- function readDownloadCount(subject) {
9
- const additional = readSubjectAdditional(subject);
10
- return readNumber(additional, "npmDownloads30d") ?? readNumber(additional, "pypiDownloads30d") ?? readNumber(additional, "packageDownloadCount");
6
+ import "./standards-sdk.es178.js";
7
+ import { clampUnit } from "./standards-sdk.es164.js";
8
+ const DEFAULT_EXCLUDED_REGISTRIES = [
9
+ "openrouter",
10
+ "near-ai",
11
+ "agentverse",
12
+ "uagent"
13
+ ];
14
+ const MISSING_SCORE = { value: 0, status: "missing" };
15
+ function normalizeEthos(subject, baselineScore, maxScore, maxContribution) {
16
+ const metadata = subject.metadata;
17
+ const composite = readMetadataRecord(subject, "ethosComposite");
18
+ const compositeScore = composite ? readNumber(composite, "score") : null;
19
+ const flatScore = metadata ? readNumber(metadata, "ethosScore") : null;
20
+ const status = metadata ? readString(metadata, "ethosScoreStatus") : null;
21
+ const rawScore = compositeScore ?? flatScore;
22
+ if (rawScore === null) {
23
+ if (status === "error") {
24
+ return { value: 0, status: "error" };
25
+ }
26
+ if (status === "ok") {
27
+ return { value: 0, status: "missing" };
28
+ }
29
+ return MISSING_SCORE;
30
+ }
31
+ const denominator = maxScore - baselineScore;
32
+ if (denominator <= 0) {
33
+ return { value: clampScore(maxContribution), status: "ok" };
34
+ }
35
+ const normalized = clampUnit((rawScore - baselineScore) / denominator);
36
+ return { value: clampScore(maxContribution * normalized), status: "ok" };
11
37
  }
12
- function createOssPopularityAdapter(options = {}) {
13
- const starsCap = options.starsCap ?? 5e3;
14
- const downloadsCap = options.downloadsCap ?? 1e5;
15
- const starsWeight = options.starsWeight ?? 0.6;
16
- const downloadsWeight = options.downloadsWeight ?? 0.4;
17
- const looksLikeOssArtifact = (subject) => {
18
- const additional = readSubjectAdditional(subject);
19
- return readString(additional, "githubRepo") !== null || readNumber(additional, "githubStars") !== null || readString(additional, "packageName") !== null;
20
- };
38
+ function createEthosAdapter(options = {}) {
39
+ const baselineScore = options.baselineScore ?? 1200;
40
+ const maxScore = options.maxScore ?? 2e3;
41
+ const maxContribution = options.maxContribution ?? 100;
21
42
  return {
22
- id: "oss-popularity",
23
- weight: 0.7,
24
- contributionMode: "scoped",
25
- appliesTo: looksLikeOssArtifact,
43
+ id: "ethos",
44
+ weight: 1,
45
+ contributionMode: "universal",
46
+ excludeRegistries: options.excludeRegistries ?? DEFAULT_EXCLUDED_REGISTRIES,
47
+ defaultComponentKey: "ethos.score",
26
48
  components: [
27
49
  {
28
- name: "githubStars",
29
- weight: starsWeight,
30
- normalize: ({ subject }) => {
31
- const stars = readNumber(
32
- readSubjectAdditional(subject),
33
- "githubStars"
34
- );
35
- return stars === null ? MISSING : { value: logScale(stars, starsCap), status: "ok" };
36
- }
37
- },
38
- {
39
- name: "downloads",
40
- weight: downloadsWeight,
41
- normalize: ({ subject }) => {
42
- const downloads = readDownloadCount(subject);
43
- return downloads === null ? MISSING : { value: logScale(downloads, downloadsCap), status: "ok" };
44
- }
50
+ name: "score",
51
+ normalize: ({ subject }) => normalizeEthos(subject, baselineScore, maxScore, maxContribution)
45
52
  }
46
53
  ]
47
54
  };
48
55
  }
49
56
  export {
50
- createOssPopularityAdapter
57
+ createEthosAdapter
51
58
  };
52
59
  //# sourceMappingURL=standards-sdk.es171.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es171.js","sources":["../../src/hcs-25/adapters/oss-popularity.ts"],"sourcesContent":["import type {\n Hcs25AdapterDefinition,\n Hcs25NormalizedValue,\n Hcs25Subject,\n} from '../types';\nimport { readNumber, readString, readSubjectAdditional } from '../signals';\nimport { logScale } from './normalization';\n\n/**\n * Options for the OSS popularity adapter.\n */\nexport interface Hcs25OssPopularityAdapterOptions {\n /** GitHub star cap for log scaling. Default 5000. */\n starsCap?: number;\n /** Package download cap for log scaling. Default 100000. */\n downloadsCap?: number;\n /** Within-adapter weight for the stars component. Default 0.6. */\n starsWeight?: number;\n /** Within-adapter weight for the downloads component. Default 0.4. */\n downloadsWeight?: number;\n}\n\nconst MISSING: Hcs25NormalizedValue = { value: 0, status: 'missing' };\n\nfunction readDownloadCount(subject: Hcs25Subject): number | null {\n const additional = readSubjectAdditional(subject);\n return (\n readNumber(additional, 'npmDownloads30d') ??\n readNumber(additional, 'pypiDownloads30d') ??\n readNumber(additional, 'packageDownloadCount')\n );\n}\n\n/**\n * Creates the `oss-popularity` adapter: log-scales GitHub stars and package\n * downloads into adoption-related trust components for open-source\n * artifacts. It only applies to subjects that look like software artifacts\n * (repository, star count, or package name present).\n */\nexport function createOssPopularityAdapter(\n options: Hcs25OssPopularityAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const starsCap = options.starsCap ?? 5000;\n const downloadsCap = options.downloadsCap ?? 100000;\n const starsWeight = options.starsWeight ?? 0.6;\n const downloadsWeight = options.downloadsWeight ?? 0.4;\n\n const looksLikeOssArtifact = (subject: Hcs25Subject): boolean => {\n const additional = readSubjectAdditional(subject);\n return (\n readString(additional, 'githubRepo') !== null ||\n readNumber(additional, 'githubStars') !== null ||\n readString(additional, 'packageName') !== null\n );\n };\n\n return {\n id: 'oss-popularity',\n weight: 0.7,\n contributionMode: 'scoped',\n appliesTo: looksLikeOssArtifact,\n components: [\n {\n name: 'githubStars',\n weight: starsWeight,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const stars = readNumber(\n readSubjectAdditional(subject),\n 'githubStars',\n );\n return stars === null\n ? MISSING\n : { value: logScale(stars, starsCap), status: 'ok' };\n },\n },\n {\n name: 'downloads',\n weight: downloadsWeight,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const downloads = readDownloadCount(subject);\n return downloads === null\n ? MISSING\n : { value: logScale(downloads, downloadsCap), status: 'ok' };\n },\n },\n ],\n };\n}\n"],"names":[],"mappings":";;;;;;AAsBA,MAAM,UAAgC,EAAE,OAAO,GAAG,QAAQ,UAAA;AAE1D,SAAS,kBAAkB,SAAsC;AAC/D,QAAM,aAAa,sBAAsB,OAAO;AAChD,SACE,WAAW,YAAY,iBAAiB,KACxC,WAAW,YAAY,kBAAkB,KACzC,WAAW,YAAY,sBAAsB;AAEjD;AAQO,SAAS,2BACd,UAA4C,IACpB;AACxB,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,eAAe,QAAQ,gBAAgB;AAC7C,QAAM,cAAc,QAAQ,eAAe;AAC3C,QAAM,kBAAkB,QAAQ,mBAAmB;AAEnD,QAAM,uBAAuB,CAAC,YAAmC;AAC/D,UAAM,aAAa,sBAAsB,OAAO;AAChD,WACE,WAAW,YAAY,YAAY,MAAM,QACzC,WAAW,YAAY,aAAa,MAAM,QAC1C,WAAW,YAAY,aAAa,MAAM;AAAA,EAE9C;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,WAAW,CAAC,EAAE,cAAoC;AAChD,gBAAM,QAAQ;AAAA,YACZ,sBAAsB,OAAO;AAAA,YAC7B;AAAA,UAAA;AAEF,iBAAO,UAAU,OACb,UACA,EAAE,OAAO,SAAS,OAAO,QAAQ,GAAG,QAAQ,KAAA;AAAA,QAClD;AAAA,MAAA;AAAA,MAEF;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,WAAW,CAAC,EAAE,cAAoC;AAChD,gBAAM,YAAY,kBAAkB,OAAO;AAC3C,iBAAO,cAAc,OACjB,UACA,EAAE,OAAO,SAAS,WAAW,YAAY,GAAG,QAAQ,KAAA;AAAA,QAC1D;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"standards-sdk.es171.js","sources":["../../src/hcs-25/adapters/ethos.ts"],"sourcesContent":["import { clampScore } from '../scoring';\nimport type {\n Hcs25AdapterDefinition,\n Hcs25NormalizedValue,\n Hcs25Subject,\n} from '../types';\nimport { readMetadataRecord, readNumber, readString } from '../signals';\nimport { clampUnit } from './normalization';\n\n/**\n * Options for the Ethos credibility adapter.\n */\nexport interface Hcs25EthosAdapterOptions {\n /** Raw Ethos score that maps to a zero contribution. Default 1200. */\n baselineScore?: number;\n /** Raw Ethos score that maps to the maximum contribution. Default 2000. */\n maxScore?: number;\n /** Maximum contribution budget in `[0,100]`. Default 100. */\n maxContribution?: number;\n /** Registries where Ethos identity mapping is undefined. */\n excludeRegistries?: readonly string[];\n}\n\nconst DEFAULT_EXCLUDED_REGISTRIES: readonly string[] = [\n 'openrouter',\n 'near-ai',\n 'agentverse',\n 'uagent',\n];\n\nconst MISSING_SCORE: Hcs25NormalizedValue = { value: 0, status: 'missing' };\n\nfunction normalizeEthos(\n subject: Hcs25Subject,\n baselineScore: number,\n maxScore: number,\n maxContribution: number,\n): Hcs25NormalizedValue {\n const metadata = subject.metadata;\n const composite = readMetadataRecord(subject, 'ethosComposite');\n const compositeScore = composite ? readNumber(composite, 'score') : null;\n const flatScore = metadata ? readNumber(metadata, 'ethosScore') : null;\n const status = metadata ? readString(metadata, 'ethosScoreStatus') : null;\n\n const rawScore = compositeScore ?? flatScore;\n if (rawScore === null) {\n if (status === 'error') {\n return { value: 0, status: 'error' };\n }\n if (status === 'ok') {\n return { value: 0, status: 'missing' };\n }\n return MISSING_SCORE;\n }\n\n const denominator = maxScore - baselineScore;\n if (denominator <= 0) {\n return { value: clampScore(maxContribution), status: 'ok' };\n }\n\n const normalized = clampUnit((rawScore - baselineScore) / denominator);\n return { value: clampScore(maxContribution * normalized), status: 'ok' };\n}\n\n/**\n * Creates the `ethos` adapter: maps a raw Ethos reputation score into a\n * bounded trust contribution using configured baseline, max, and budget\n * anchors.\n */\nexport function createEthosAdapter(\n options: Hcs25EthosAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const baselineScore = options.baselineScore ?? 1200;\n const maxScore = options.maxScore ?? 2000;\n const maxContribution = options.maxContribution ?? 100;\n\n return {\n id: 'ethos',\n weight: 1,\n contributionMode: 'universal',\n excludeRegistries: options.excludeRegistries ?? DEFAULT_EXCLUDED_REGISTRIES,\n defaultComponentKey: 'ethos.score',\n components: [\n {\n name: 'score',\n normalize: ({ subject }) =>\n normalizeEthos(subject, baselineScore, maxScore, maxContribution),\n },\n ],\n };\n}\n"],"names":[],"mappings":";;;;;;;AAuBA,MAAM,8BAAiD;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,gBAAsC,EAAE,OAAO,GAAG,QAAQ,UAAA;AAEhE,SAAS,eACP,SACA,eACA,UACA,iBACsB;AACtB,QAAM,WAAW,QAAQ;AACzB,QAAM,YAAY,mBAAmB,SAAS,gBAAgB;AAC9D,QAAM,iBAAiB,YAAY,WAAW,WAAW,OAAO,IAAI;AACpE,QAAM,YAAY,WAAW,WAAW,UAAU,YAAY,IAAI;AAClE,QAAM,SAAS,WAAW,WAAW,UAAU,kBAAkB,IAAI;AAErE,QAAM,WAAW,kBAAkB;AACnC,MAAI,aAAa,MAAM;AACrB,QAAI,WAAW,SAAS;AACtB,aAAO,EAAE,OAAO,GAAG,QAAQ,QAAA;AAAA,IAC7B;AACA,QAAI,WAAW,MAAM;AACnB,aAAO,EAAE,OAAO,GAAG,QAAQ,UAAA;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,WAAW;AAC/B,MAAI,eAAe,GAAG;AACpB,WAAO,EAAE,OAAO,WAAW,eAAe,GAAG,QAAQ,KAAA;AAAA,EACvD;AAEA,QAAM,aAAa,WAAW,WAAW,iBAAiB,WAAW;AACrE,SAAO,EAAE,OAAO,WAAW,kBAAkB,UAAU,GAAG,QAAQ,KAAA;AACpE;AAOO,SAAS,mBACd,UAAoC,IACZ;AACxB,QAAM,gBAAgB,QAAQ,iBAAiB;AAC/C,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,kBAAkB,QAAQ,mBAAmB;AAEnD,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,mBAAmB,QAAQ,qBAAqB;AAAA,IAChD,qBAAqB;AAAA,IACrB,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,WAAW,CAAC,EAAE,QAAA,MACZ,eAAe,SAAS,eAAe,UAAU,eAAe;AAAA,MAAA;AAAA,IACpE;AAAA,EACF;AAEJ;"}
@@ -1,125 +1,52 @@
1
- import { clampScore } from "./standards-sdk.es119.js";
2
- import { readMetadataRecord, readNumber, isJsonObject } from "./standards-sdk.es178.js";
3
- import "./standards-sdk.es162.js";
4
- import "./standards-sdk.es175.js";
1
+ import { readNumber, readSubjectAdditional, readString } from "./standards-sdk.es179.js";
2
+ import "./standards-sdk.es163.js";
5
3
  import "./standards-sdk.es176.js";
6
4
  import "./standards-sdk.es177.js";
7
- import { clampUnit } from "./standards-sdk.es163.js";
5
+ import "./standards-sdk.es178.js";
6
+ import { logScale } from "./standards-sdk.es164.js";
8
7
  const MISSING = { value: 0, status: "missing" };
9
- const DEFAULT_STAKE_MULTIPLIERS = {
10
- low: 0.5,
11
- medium: 1,
12
- high: 2,
13
- critical: 3
14
- };
15
- const DISCRIMINATIVE_POWER_BLOCK_RATE = 0.05;
16
- const STAKE_MULTIPLIER_QUALITY_CAP = 1.5;
17
- function computeStakeMultiplier(summary, multipliers) {
18
- const distribution = summary.stakeDistribution;
19
- if (!isJsonObject(distribution)) {
20
- return 1;
21
- }
22
- let weighted = 0;
23
- let unweighted = 0;
24
- for (const level of Object.keys(multipliers)) {
25
- const levelRecord = distribution[level];
26
- if (!isJsonObject(levelRecord)) {
27
- continue;
28
- }
29
- const checks = readNumber(levelRecord, "checks");
30
- if (checks === null) {
31
- continue;
32
- }
33
- weighted += checks * multipliers[level];
34
- unweighted += checks;
35
- }
36
- if (unweighted <= 0) {
37
- return 1;
38
- }
39
- const ratio = weighted / unweighted;
40
- return Math.min(3, Math.max(0.5, ratio));
41
- }
42
- function computeQuality(summary, multipliers) {
43
- const allowRate = clampUnit(readNumber(summary, "allowRate") ?? 0);
44
- const blockRate = clampUnit(readNumber(summary, "blockRate") ?? 0);
45
- const avgConfidence = clampUnit(readNumber(summary, "avgConfidence") ?? 0);
46
- const baseQuality = allowRate * avgConfidence;
47
- const discriminativePower = clampUnit(
48
- blockRate / DISCRIMINATIVE_POWER_BLOCK_RATE
49
- );
50
- const stakeMultiplier = computeStakeMultiplier(summary, multipliers);
51
- const cappedStakeMultiplier = Math.min(
52
- stakeMultiplier,
53
- STAKE_MULTIPLIER_QUALITY_CAP
54
- );
55
- return {
56
- value: clampScore(
57
- baseQuality * discriminativePower * cappedStakeMultiplier * 100
58
- ),
59
- status: "ok"
60
- };
8
+ function readDownloadCount(subject) {
9
+ const additional = readSubjectAdditional(subject);
10
+ return readNumber(additional, "npmDownloads30d") ?? readNumber(additional, "pypiDownloads30d") ?? readNumber(additional, "packageDownloadCount");
61
11
  }
62
- function computeCoverage(summary, volumeCap, volumeScale) {
63
- const totalChecks = readNumber(summary, "totalChecks");
64
- if (totalChecks === null) {
65
- return MISSING;
66
- }
67
- const volumeRaw = Math.min(
68
- volumeCap,
69
- Math.log10(totalChecks + 1) * volumeScale
70
- );
71
- return {
72
- value: clampScore(100 * clampUnit(volumeRaw / volumeCap)),
73
- status: "ok"
74
- };
75
- }
76
- function createOutputVerificationAdapter(options = {}) {
77
- const volumeCap = options.volumeCap ?? 50;
78
- const volumeScale = options.volumeScale ?? 20;
79
- const minChecks = options.minChecks ?? 10;
80
- const qualityWeight = options.qualityWeight ?? 0.7;
81
- const coverageWeight = options.coverageWeight ?? 0.3;
82
- const stakeMultipliers = options.stakeMultipliers ?? DEFAULT_STAKE_MULTIPLIERS;
83
- const hasVerificationHistory = (subject) => {
84
- const summary = readMetadataRecord(subject, "outputVerificationSummary");
85
- if (!summary) {
86
- return false;
87
- }
88
- const totalChecks = readNumber(summary, "totalChecks");
89
- return totalChecks !== null && totalChecks >= minChecks;
12
+ function createOssPopularityAdapter(options = {}) {
13
+ const starsCap = options.starsCap ?? 5e3;
14
+ const downloadsCap = options.downloadsCap ?? 1e5;
15
+ const starsWeight = options.starsWeight ?? 0.6;
16
+ const downloadsWeight = options.downloadsWeight ?? 0.4;
17
+ const looksLikeOssArtifact = (subject) => {
18
+ const additional = readSubjectAdditional(subject);
19
+ return readString(additional, "githubRepo") !== null || readNumber(additional, "githubStars") !== null || readString(additional, "packageName") !== null;
90
20
  };
91
21
  return {
92
- id: "output-verification",
93
- weight: 1,
22
+ id: "oss-popularity",
23
+ weight: 0.7,
94
24
  contributionMode: "scoped",
95
- appliesTo: hasVerificationHistory,
25
+ appliesTo: looksLikeOssArtifact,
96
26
  components: [
97
27
  {
98
- name: "quality",
99
- weight: qualityWeight,
28
+ name: "githubStars",
29
+ weight: starsWeight,
100
30
  normalize: ({ subject }) => {
101
- const summary = readMetadataRecord(
102
- subject,
103
- "outputVerificationSummary"
31
+ const stars = readNumber(
32
+ readSubjectAdditional(subject),
33
+ "githubStars"
104
34
  );
105
- return summary ? computeQuality(summary, stakeMultipliers) : MISSING;
35
+ return stars === null ? MISSING : { value: logScale(stars, starsCap), status: "ok" };
106
36
  }
107
37
  },
108
38
  {
109
- name: "coverage",
110
- weight: coverageWeight,
39
+ name: "downloads",
40
+ weight: downloadsWeight,
111
41
  normalize: ({ subject }) => {
112
- const summary = readMetadataRecord(
113
- subject,
114
- "outputVerificationSummary"
115
- );
116
- return summary ? computeCoverage(summary, volumeCap, volumeScale) : MISSING;
42
+ const downloads = readDownloadCount(subject);
43
+ return downloads === null ? MISSING : { value: logScale(downloads, downloadsCap), status: "ok" };
117
44
  }
118
45
  }
119
46
  ]
120
47
  };
121
48
  }
122
49
  export {
123
- createOutputVerificationAdapter
50
+ createOssPopularityAdapter
124
51
  };
125
52
  //# sourceMappingURL=standards-sdk.es172.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es172.js","sources":["../../src/hcs-25/adapters/output-verification.ts"],"sourcesContent":["import { clampScore } from '../scoring';\nimport type {\n Hcs25AdapterDefinition,\n Hcs25NormalizedValue,\n Hcs25Subject,\n} from '../types';\nimport {\n isJsonObject,\n readMetadataRecord,\n readNumber,\n type Hcs25JsonObject,\n} from '../signals';\nimport { clampUnit } from './normalization';\n\n/**\n * Options for the output verification adapter.\n */\nexport interface Hcs25OutputVerificationAdapterOptions {\n /** Volume cap for the log-scaled coverage component. Default 50. */\n volumeCap?: number;\n /** Multiplier on log10 of the check count. Default 20. */\n volumeScale?: number;\n /** Minimum total checks before the adapter applies. Default 10. */\n minChecks?: number;\n /** Within-adapter weight of the quality component. Default 0.7. */\n qualityWeight?: number;\n /** Within-adapter weight of the coverage component. Default 0.3. */\n coverageWeight?: number;\n /** Per-stake-level multipliers applied to check counts. */\n stakeMultipliers?: Readonly<Record<string, number>>;\n}\n\nconst MISSING: Hcs25NormalizedValue = { value: 0, status: 'missing' };\n\nconst DEFAULT_STAKE_MULTIPLIERS: Readonly<Record<string, number>> = {\n low: 0.5,\n medium: 1,\n high: 2,\n critical: 3,\n};\n\n/**\n * Block rate at which the verifier earns full discriminative-power credit.\n */\nconst DISCRIMINATIVE_POWER_BLOCK_RATE = 0.05;\n\n/**\n * Upper bound on the stake multiplier's influence on quality.\n */\nconst STAKE_MULTIPLIER_QUALITY_CAP = 1.5;\n\nfunction computeStakeMultiplier(\n summary: Hcs25JsonObject,\n multipliers: Readonly<Record<string, number>>,\n): number {\n const distribution = summary.stakeDistribution;\n if (!isJsonObject(distribution)) {\n return 1;\n }\n\n let weighted = 0;\n let unweighted = 0;\n for (const level of Object.keys(multipliers)) {\n const levelRecord = distribution[level];\n if (!isJsonObject(levelRecord)) {\n continue;\n }\n const checks = readNumber(levelRecord, 'checks');\n if (checks === null) {\n continue;\n }\n weighted += checks * multipliers[level];\n unweighted += checks;\n }\n\n if (unweighted <= 0) {\n return 1;\n }\n\n const ratio = weighted / unweighted;\n return Math.min(3, Math.max(0.5, ratio));\n}\n\nfunction computeQuality(\n summary: Hcs25JsonObject,\n multipliers: Readonly<Record<string, number>>,\n): Hcs25NormalizedValue {\n const allowRate = clampUnit(readNumber(summary, 'allowRate') ?? 0);\n const blockRate = clampUnit(readNumber(summary, 'blockRate') ?? 0);\n const avgConfidence = clampUnit(readNumber(summary, 'avgConfidence') ?? 0);\n\n const baseQuality = allowRate * avgConfidence;\n const discriminativePower = clampUnit(\n blockRate / DISCRIMINATIVE_POWER_BLOCK_RATE,\n );\n const stakeMultiplier = computeStakeMultiplier(summary, multipliers);\n const cappedStakeMultiplier = Math.min(\n stakeMultiplier,\n STAKE_MULTIPLIER_QUALITY_CAP,\n );\n\n return {\n value: clampScore(\n baseQuality * discriminativePower * cappedStakeMultiplier * 100,\n ),\n status: 'ok',\n };\n}\n\nfunction computeCoverage(\n summary: Hcs25JsonObject,\n volumeCap: number,\n volumeScale: number,\n): Hcs25NormalizedValue {\n const totalChecks = readNumber(summary, 'totalChecks');\n if (totalChecks === null) {\n return MISSING;\n }\n\n const volumeRaw = Math.min(\n volumeCap,\n Math.log10(totalChecks + 1) * volumeScale,\n );\n return {\n value: clampScore(100 * clampUnit(volumeRaw / volumeCap)),\n status: 'ok',\n };\n}\n\n/**\n * Creates the `output-verification` adapter: converts per-decision reasoning\n * verification summaries into a stake-weighted quality component and a\n * log-scaled coverage component. It penalizes rubber-stamp verifiers through\n * discriminative power, resists trivial-claim farming through stake\n * weighting, and excludes agents below the minimum check threshold.\n */\nexport function createOutputVerificationAdapter(\n options: Hcs25OutputVerificationAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const volumeCap = options.volumeCap ?? 50;\n const volumeScale = options.volumeScale ?? 20;\n const minChecks = options.minChecks ?? 10;\n const qualityWeight = options.qualityWeight ?? 0.7;\n const coverageWeight = options.coverageWeight ?? 0.3;\n const stakeMultipliers =\n options.stakeMultipliers ?? DEFAULT_STAKE_MULTIPLIERS;\n\n const hasVerificationHistory = (subject: Hcs25Subject): boolean => {\n const summary = readMetadataRecord(subject, 'outputVerificationSummary');\n if (!summary) {\n return false;\n }\n const totalChecks = readNumber(summary, 'totalChecks');\n return totalChecks !== null && totalChecks >= minChecks;\n };\n\n return {\n id: 'output-verification',\n weight: 1,\n contributionMode: 'scoped',\n appliesTo: hasVerificationHistory,\n components: [\n {\n name: 'quality',\n weight: qualityWeight,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const summary = readMetadataRecord(\n subject,\n 'outputVerificationSummary',\n );\n return summary ? computeQuality(summary, stakeMultipliers) : MISSING;\n },\n },\n {\n name: 'coverage',\n weight: coverageWeight,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const summary = readMetadataRecord(\n subject,\n 'outputVerificationSummary',\n );\n return summary\n ? computeCoverage(summary, volumeCap, volumeScale)\n : MISSING;\n },\n },\n ],\n };\n}\n"],"names":[],"mappings":";;;;;;;AAgCA,MAAM,UAAgC,EAAE,OAAO,GAAG,QAAQ,UAAA;AAE1D,MAAM,4BAA8D;AAAA,EAClE,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AACZ;AAKA,MAAM,kCAAkC;AAKxC,MAAM,+BAA+B;AAErC,SAAS,uBACP,SACA,aACQ;AACR,QAAM,eAAe,QAAQ;AAC7B,MAAI,CAAC,aAAa,YAAY,GAAG;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,WAAW;AACf,MAAI,aAAa;AACjB,aAAW,SAAS,OAAO,KAAK,WAAW,GAAG;AAC5C,UAAM,cAAc,aAAa,KAAK;AACtC,QAAI,CAAC,aAAa,WAAW,GAAG;AAC9B;AAAA,IACF;AACA,UAAM,SAAS,WAAW,aAAa,QAAQ;AAC/C,QAAI,WAAW,MAAM;AACnB;AAAA,IACF;AACA,gBAAY,SAAS,YAAY,KAAK;AACtC,kBAAc;AAAA,EAChB;AAEA,MAAI,cAAc,GAAG;AACnB,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,WAAW;AACzB,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC;AACzC;AAEA,SAAS,eACP,SACA,aACsB;AACtB,QAAM,YAAY,UAAU,WAAW,SAAS,WAAW,KAAK,CAAC;AACjE,QAAM,YAAY,UAAU,WAAW,SAAS,WAAW,KAAK,CAAC;AACjE,QAAM,gBAAgB,UAAU,WAAW,SAAS,eAAe,KAAK,CAAC;AAEzE,QAAM,cAAc,YAAY;AAChC,QAAM,sBAAsB;AAAA,IAC1B,YAAY;AAAA,EAAA;AAEd,QAAM,kBAAkB,uBAAuB,SAAS,WAAW;AACnE,QAAM,wBAAwB,KAAK;AAAA,IACjC;AAAA,IACA;AAAA,EAAA;AAGF,SAAO;AAAA,IACL,OAAO;AAAA,MACL,cAAc,sBAAsB,wBAAwB;AAAA,IAAA;AAAA,IAE9D,QAAQ;AAAA,EAAA;AAEZ;AAEA,SAAS,gBACP,SACA,WACA,aACsB;AACtB,QAAM,cAAc,WAAW,SAAS,aAAa;AACrD,MAAI,gBAAgB,MAAM;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,KAAK;AAAA,IACrB;AAAA,IACA,KAAK,MAAM,cAAc,CAAC,IAAI;AAAA,EAAA;AAEhC,SAAO;AAAA,IACL,OAAO,WAAW,MAAM,UAAU,YAAY,SAAS,CAAC;AAAA,IACxD,QAAQ;AAAA,EAAA;AAEZ;AASO,SAAS,gCACd,UAAiD,IACzB;AACxB,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,cAAc,QAAQ,eAAe;AAC3C,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,gBAAgB,QAAQ,iBAAiB;AAC/C,QAAM,iBAAiB,QAAQ,kBAAkB;AACjD,QAAM,mBACJ,QAAQ,oBAAoB;AAE9B,QAAM,yBAAyB,CAAC,YAAmC;AACjE,UAAM,UAAU,mBAAmB,SAAS,2BAA2B;AACvE,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,IACT;AACA,UAAM,cAAc,WAAW,SAAS,aAAa;AACrD,WAAO,gBAAgB,QAAQ,eAAe;AAAA,EAChD;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,WAAW,CAAC,EAAE,cAAoC;AAChD,gBAAM,UAAU;AAAA,YACd;AAAA,YACA;AAAA,UAAA;AAEF,iBAAO,UAAU,eAAe,SAAS,gBAAgB,IAAI;AAAA,QAC/D;AAAA,MAAA;AAAA,MAEF;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,WAAW,CAAC,EAAE,cAAoC;AAChD,gBAAM,UAAU;AAAA,YACd;AAAA,YACA;AAAA,UAAA;AAEF,iBAAO,UACH,gBAAgB,SAAS,WAAW,WAAW,IAC/C;AAAA,QACN;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"standards-sdk.es172.js","sources":["../../src/hcs-25/adapters/oss-popularity.ts"],"sourcesContent":["import type {\n Hcs25AdapterDefinition,\n Hcs25NormalizedValue,\n Hcs25Subject,\n} from '../types';\nimport { readNumber, readString, readSubjectAdditional } from '../signals';\nimport { logScale } from './normalization';\n\n/**\n * Options for the OSS popularity adapter.\n */\nexport interface Hcs25OssPopularityAdapterOptions {\n /** GitHub star cap for log scaling. Default 5000. */\n starsCap?: number;\n /** Package download cap for log scaling. Default 100000. */\n downloadsCap?: number;\n /** Within-adapter weight for the stars component. Default 0.6. */\n starsWeight?: number;\n /** Within-adapter weight for the downloads component. Default 0.4. */\n downloadsWeight?: number;\n}\n\nconst MISSING: Hcs25NormalizedValue = { value: 0, status: 'missing' };\n\nfunction readDownloadCount(subject: Hcs25Subject): number | null {\n const additional = readSubjectAdditional(subject);\n return (\n readNumber(additional, 'npmDownloads30d') ??\n readNumber(additional, 'pypiDownloads30d') ??\n readNumber(additional, 'packageDownloadCount')\n );\n}\n\n/**\n * Creates the `oss-popularity` adapter: log-scales GitHub stars and package\n * downloads into adoption-related trust components for open-source\n * artifacts. It only applies to subjects that look like software artifacts\n * (repository, star count, or package name present).\n */\nexport function createOssPopularityAdapter(\n options: Hcs25OssPopularityAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const starsCap = options.starsCap ?? 5000;\n const downloadsCap = options.downloadsCap ?? 100000;\n const starsWeight = options.starsWeight ?? 0.6;\n const downloadsWeight = options.downloadsWeight ?? 0.4;\n\n const looksLikeOssArtifact = (subject: Hcs25Subject): boolean => {\n const additional = readSubjectAdditional(subject);\n return (\n readString(additional, 'githubRepo') !== null ||\n readNumber(additional, 'githubStars') !== null ||\n readString(additional, 'packageName') !== null\n );\n };\n\n return {\n id: 'oss-popularity',\n weight: 0.7,\n contributionMode: 'scoped',\n appliesTo: looksLikeOssArtifact,\n components: [\n {\n name: 'githubStars',\n weight: starsWeight,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const stars = readNumber(\n readSubjectAdditional(subject),\n 'githubStars',\n );\n return stars === null\n ? MISSING\n : { value: logScale(stars, starsCap), status: 'ok' };\n },\n },\n {\n name: 'downloads',\n weight: downloadsWeight,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const downloads = readDownloadCount(subject);\n return downloads === null\n ? MISSING\n : { value: logScale(downloads, downloadsCap), status: 'ok' };\n },\n },\n ],\n };\n}\n"],"names":[],"mappings":";;;;;;AAsBA,MAAM,UAAgC,EAAE,OAAO,GAAG,QAAQ,UAAA;AAE1D,SAAS,kBAAkB,SAAsC;AAC/D,QAAM,aAAa,sBAAsB,OAAO;AAChD,SACE,WAAW,YAAY,iBAAiB,KACxC,WAAW,YAAY,kBAAkB,KACzC,WAAW,YAAY,sBAAsB;AAEjD;AAQO,SAAS,2BACd,UAA4C,IACpB;AACxB,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,eAAe,QAAQ,gBAAgB;AAC7C,QAAM,cAAc,QAAQ,eAAe;AAC3C,QAAM,kBAAkB,QAAQ,mBAAmB;AAEnD,QAAM,uBAAuB,CAAC,YAAmC;AAC/D,UAAM,aAAa,sBAAsB,OAAO;AAChD,WACE,WAAW,YAAY,YAAY,MAAM,QACzC,WAAW,YAAY,aAAa,MAAM,QAC1C,WAAW,YAAY,aAAa,MAAM;AAAA,EAE9C;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,WAAW,CAAC,EAAE,cAAoC;AAChD,gBAAM,QAAQ;AAAA,YACZ,sBAAsB,OAAO;AAAA,YAC7B;AAAA,UAAA;AAEF,iBAAO,UAAU,OACb,UACA,EAAE,OAAO,SAAS,OAAO,QAAQ,GAAG,QAAQ,KAAA;AAAA,QAClD;AAAA,MAAA;AAAA,MAEF;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,WAAW,CAAC,EAAE,cAAoC;AAChD,gBAAM,YAAY,kBAAkB,OAAO;AAC3C,iBAAO,cAAc,OACjB,UACA,EAAE,OAAO,SAAS,WAAW,YAAY,GAAG,QAAQ,KAAA;AAAA,QAC1D;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ;"}
@@ -1,57 +1,125 @@
1
1
  import { clampScore } from "./standards-sdk.es119.js";
2
- import { readSubjectAdditional, readString, readNumber } from "./standards-sdk.es178.js";
3
- import { mapSimpleEvalStatus } from "./standards-sdk.es162.js";
4
- import "./standards-sdk.es175.js";
2
+ import { readMetadataRecord, readNumber, isJsonObject } from "./standards-sdk.es179.js";
3
+ import "./standards-sdk.es163.js";
5
4
  import "./standards-sdk.es176.js";
6
5
  import "./standards-sdk.es177.js";
7
- function readSimpleEval(subject, family) {
8
- const additional = readSubjectAdditional(subject);
6
+ import "./standards-sdk.es178.js";
7
+ import { clampUnit } from "./standards-sdk.es164.js";
8
+ const MISSING = { value: 0, status: "missing" };
9
+ const DEFAULT_STAKE_MULTIPLIERS = {
10
+ low: 0.5,
11
+ medium: 1,
12
+ high: 2,
13
+ critical: 3
14
+ };
15
+ const DISCRIMINATIVE_POWER_BLOCK_RATE = 0.05;
16
+ const STAKE_MULTIPLIER_QUALITY_CAP = 1.5;
17
+ function computeStakeMultiplier(summary, multipliers) {
18
+ const distribution = summary.stakeDistribution;
19
+ if (!isJsonObject(distribution)) {
20
+ return 1;
21
+ }
22
+ let weighted = 0;
23
+ let unweighted = 0;
24
+ for (const level of Object.keys(multipliers)) {
25
+ const levelRecord = distribution[level];
26
+ if (!isJsonObject(levelRecord)) {
27
+ continue;
28
+ }
29
+ const checks = readNumber(levelRecord, "checks");
30
+ if (checks === null) {
31
+ continue;
32
+ }
33
+ weighted += checks * multipliers[level];
34
+ unweighted += checks;
35
+ }
36
+ if (unweighted <= 0) {
37
+ return 1;
38
+ }
39
+ const ratio = weighted / unweighted;
40
+ return Math.min(3, Math.max(0.5, ratio));
41
+ }
42
+ function computeQuality(summary, multipliers) {
43
+ const allowRate = clampUnit(readNumber(summary, "allowRate") ?? 0);
44
+ const blockRate = clampUnit(readNumber(summary, "blockRate") ?? 0);
45
+ const avgConfidence = clampUnit(readNumber(summary, "avgConfidence") ?? 0);
46
+ const baseQuality = allowRate * avgConfidence;
47
+ const discriminativePower = clampUnit(
48
+ blockRate / DISCRIMINATIVE_POWER_BLOCK_RATE
49
+ );
50
+ const stakeMultiplier = computeStakeMultiplier(summary, multipliers);
51
+ const cappedStakeMultiplier = Math.min(
52
+ stakeMultiplier,
53
+ STAKE_MULTIPLIER_QUALITY_CAP
54
+ );
9
55
  return {
10
- score: readNumber(additional, `a2aSimple${family}Score`) ?? readNumber(additional, `nandaSimple${family}Score`),
11
- statusToken: readString(additional, `a2aSimple${family}Status`) ?? readString(additional, `nandaSimple${family}Status`)
56
+ value: clampScore(
57
+ baseQuality * discriminativePower * cappedStakeMultiplier * 100
58
+ ),
59
+ status: "ok"
12
60
  };
13
61
  }
14
- function normalizeSimpleEval(subject, family) {
15
- const { score, statusToken } = readSimpleEval(subject, family);
16
- if (statusToken === null && score === null) {
17
- return { value: 0, status: "missing" };
18
- }
19
- const status = mapSimpleEvalStatus(statusToken);
20
- if (status !== "ok") {
21
- return { value: 0, status };
62
+ function computeCoverage(summary, volumeCap, volumeScale) {
63
+ const totalChecks = readNumber(summary, "totalChecks");
64
+ if (totalChecks === null) {
65
+ return MISSING;
22
66
  }
23
- return { value: clampScore(score ?? 0), status: "ok" };
24
- }
25
- function createSimpleMathAdapter() {
67
+ const volumeRaw = Math.min(
68
+ volumeCap,
69
+ Math.log10(totalChecks + 1) * volumeScale
70
+ );
26
71
  return {
27
- id: "simple-math",
28
- weight: 0.5,
29
- contributionMode: "scoped",
30
- defaultComponentKey: "simple-math.score",
31
- components: [
32
- {
33
- name: "score",
34
- normalize: ({ subject }) => normalizeSimpleEval(subject, "Math")
35
- }
36
- ]
72
+ value: clampScore(100 * clampUnit(volumeRaw / volumeCap)),
73
+ status: "ok"
37
74
  };
38
75
  }
39
- function createSimpleScienceAdapter() {
76
+ function createOutputVerificationAdapter(options = {}) {
77
+ const volumeCap = options.volumeCap ?? 50;
78
+ const volumeScale = options.volumeScale ?? 20;
79
+ const minChecks = options.minChecks ?? 10;
80
+ const qualityWeight = options.qualityWeight ?? 0.7;
81
+ const coverageWeight = options.coverageWeight ?? 0.3;
82
+ const stakeMultipliers = options.stakeMultipliers ?? DEFAULT_STAKE_MULTIPLIERS;
83
+ const hasVerificationHistory = (subject) => {
84
+ const summary = readMetadataRecord(subject, "outputVerificationSummary");
85
+ if (!summary) {
86
+ return false;
87
+ }
88
+ const totalChecks = readNumber(summary, "totalChecks");
89
+ return totalChecks !== null && totalChecks >= minChecks;
90
+ };
40
91
  return {
41
- id: "simple-science",
42
- weight: 0.5,
92
+ id: "output-verification",
93
+ weight: 1,
43
94
  contributionMode: "scoped",
44
- defaultComponentKey: "simple-science.score",
95
+ appliesTo: hasVerificationHistory,
45
96
  components: [
46
97
  {
47
- name: "score",
48
- normalize: ({ subject }) => normalizeSimpleEval(subject, "Science")
98
+ name: "quality",
99
+ weight: qualityWeight,
100
+ normalize: ({ subject }) => {
101
+ const summary = readMetadataRecord(
102
+ subject,
103
+ "outputVerificationSummary"
104
+ );
105
+ return summary ? computeQuality(summary, stakeMultipliers) : MISSING;
106
+ }
107
+ },
108
+ {
109
+ name: "coverage",
110
+ weight: coverageWeight,
111
+ normalize: ({ subject }) => {
112
+ const summary = readMetadataRecord(
113
+ subject,
114
+ "outputVerificationSummary"
115
+ );
116
+ return summary ? computeCoverage(summary, volumeCap, volumeScale) : MISSING;
117
+ }
49
118
  }
50
119
  ]
51
120
  };
52
121
  }
53
122
  export {
54
- createSimpleMathAdapter,
55
- createSimpleScienceAdapter
123
+ createOutputVerificationAdapter
56
124
  };
57
125
  //# sourceMappingURL=standards-sdk.es173.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es173.js","sources":["../../src/hcs-25/adapters/simple-evals.ts"],"sourcesContent":["import { clampScore } from '../scoring';\nimport type {\n Hcs25AdapterDefinition,\n Hcs25NormalizedValue,\n Hcs25Subject,\n} from '../types';\nimport {\n mapSimpleEvalStatus,\n readNumber,\n readString,\n readSubjectAdditional,\n type Hcs25JsonObject,\n} from '../signals';\n\ninterface SimpleEvalRead {\n score: number | null;\n statusToken: string | null;\n}\n\nfunction readSimpleEval(\n subject: Hcs25Subject,\n family: 'Math' | 'Science',\n): SimpleEvalRead {\n const additional: Hcs25JsonObject = readSubjectAdditional(subject);\n return {\n score:\n readNumber(additional, `a2aSimple${family}Score`) ??\n readNumber(additional, `nandaSimple${family}Score`),\n statusToken:\n readString(additional, `a2aSimple${family}Status`) ??\n readString(additional, `nandaSimple${family}Status`),\n };\n}\n\nfunction normalizeSimpleEval(\n subject: Hcs25Subject,\n family: 'Math' | 'Science',\n): Hcs25NormalizedValue {\n const { score, statusToken } = readSimpleEval(subject, family);\n if (statusToken === null && score === null) {\n return { value: 0, status: 'missing' };\n }\n\n const status = mapSimpleEvalStatus(statusToken);\n if (status !== 'ok') {\n return { value: 0, status };\n }\n\n return { value: clampScore(score ?? 0), status: 'ok' };\n}\n\n/**\n * Creates the `simple-math` adapter: scores baseline arithmetic correctness.\n * Missing, timed-out, or errored evals count as zero so sparse coverage\n * cannot inflate the composite by leaving the denominator.\n */\nexport function createSimpleMathAdapter(): Hcs25AdapterDefinition {\n return {\n id: 'simple-math',\n weight: 0.5,\n contributionMode: 'scoped',\n defaultComponentKey: 'simple-math.score',\n components: [\n {\n name: 'score',\n normalize: ({ subject }) => normalizeSimpleEval(subject, 'Math'),\n },\n ],\n };\n}\n\n/**\n * Creates the `simple-science` adapter: scores baseline multiple-choice\n * science correctness with the same missing-data policy as\n * `simple-math`.\n */\nexport function createSimpleScienceAdapter(): Hcs25AdapterDefinition {\n return {\n id: 'simple-science',\n weight: 0.5,\n contributionMode: 'scoped',\n defaultComponentKey: 'simple-science.score',\n components: [\n {\n name: 'score',\n normalize: ({ subject }) => normalizeSimpleEval(subject, 'Science'),\n },\n ],\n };\n}\n"],"names":[],"mappings":";;;;;;AAmBA,SAAS,eACP,SACA,QACgB;AAChB,QAAM,aAA8B,sBAAsB,OAAO;AACjE,SAAO;AAAA,IACL,OACE,WAAW,YAAY,YAAY,MAAM,OAAO,KAChD,WAAW,YAAY,cAAc,MAAM,OAAO;AAAA,IACpD,aACE,WAAW,YAAY,YAAY,MAAM,QAAQ,KACjD,WAAW,YAAY,cAAc,MAAM,QAAQ;AAAA,EAAA;AAEzD;AAEA,SAAS,oBACP,SACA,QACsB;AACtB,QAAM,EAAE,OAAO,YAAA,IAAgB,eAAe,SAAS,MAAM;AAC7D,MAAI,gBAAgB,QAAQ,UAAU,MAAM;AAC1C,WAAO,EAAE,OAAO,GAAG,QAAQ,UAAA;AAAA,EAC7B;AAEA,QAAM,SAAS,oBAAoB,WAAW;AAC9C,MAAI,WAAW,MAAM;AACnB,WAAO,EAAE,OAAO,GAAG,OAAA;AAAA,EACrB;AAEA,SAAO,EAAE,OAAO,WAAW,SAAS,CAAC,GAAG,QAAQ,KAAA;AAClD;AAOO,SAAS,0BAAkD;AAChE,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,WAAW,CAAC,EAAE,cAAc,oBAAoB,SAAS,MAAM;AAAA,MAAA;AAAA,IACjE;AAAA,EACF;AAEJ;AAOO,SAAS,6BAAqD;AACnE,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,WAAW,CAAC,EAAE,cAAc,oBAAoB,SAAS,SAAS;AAAA,MAAA;AAAA,IACpE;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"standards-sdk.es173.js","sources":["../../src/hcs-25/adapters/output-verification.ts"],"sourcesContent":["import { clampScore } from '../scoring';\nimport type {\n Hcs25AdapterDefinition,\n Hcs25NormalizedValue,\n Hcs25Subject,\n} from '../types';\nimport {\n isJsonObject,\n readMetadataRecord,\n readNumber,\n type Hcs25JsonObject,\n} from '../signals';\nimport { clampUnit } from './normalization';\n\n/**\n * Options for the output verification adapter.\n */\nexport interface Hcs25OutputVerificationAdapterOptions {\n /** Volume cap for the log-scaled coverage component. Default 50. */\n volumeCap?: number;\n /** Multiplier on log10 of the check count. Default 20. */\n volumeScale?: number;\n /** Minimum total checks before the adapter applies. Default 10. */\n minChecks?: number;\n /** Within-adapter weight of the quality component. Default 0.7. */\n qualityWeight?: number;\n /** Within-adapter weight of the coverage component. Default 0.3. */\n coverageWeight?: number;\n /** Per-stake-level multipliers applied to check counts. */\n stakeMultipliers?: Readonly<Record<string, number>>;\n}\n\nconst MISSING: Hcs25NormalizedValue = { value: 0, status: 'missing' };\n\nconst DEFAULT_STAKE_MULTIPLIERS: Readonly<Record<string, number>> = {\n low: 0.5,\n medium: 1,\n high: 2,\n critical: 3,\n};\n\n/**\n * Block rate at which the verifier earns full discriminative-power credit.\n */\nconst DISCRIMINATIVE_POWER_BLOCK_RATE = 0.05;\n\n/**\n * Upper bound on the stake multiplier's influence on quality.\n */\nconst STAKE_MULTIPLIER_QUALITY_CAP = 1.5;\n\nfunction computeStakeMultiplier(\n summary: Hcs25JsonObject,\n multipliers: Readonly<Record<string, number>>,\n): number {\n const distribution = summary.stakeDistribution;\n if (!isJsonObject(distribution)) {\n return 1;\n }\n\n let weighted = 0;\n let unweighted = 0;\n for (const level of Object.keys(multipliers)) {\n const levelRecord = distribution[level];\n if (!isJsonObject(levelRecord)) {\n continue;\n }\n const checks = readNumber(levelRecord, 'checks');\n if (checks === null) {\n continue;\n }\n weighted += checks * multipliers[level];\n unweighted += checks;\n }\n\n if (unweighted <= 0) {\n return 1;\n }\n\n const ratio = weighted / unweighted;\n return Math.min(3, Math.max(0.5, ratio));\n}\n\nfunction computeQuality(\n summary: Hcs25JsonObject,\n multipliers: Readonly<Record<string, number>>,\n): Hcs25NormalizedValue {\n const allowRate = clampUnit(readNumber(summary, 'allowRate') ?? 0);\n const blockRate = clampUnit(readNumber(summary, 'blockRate') ?? 0);\n const avgConfidence = clampUnit(readNumber(summary, 'avgConfidence') ?? 0);\n\n const baseQuality = allowRate * avgConfidence;\n const discriminativePower = clampUnit(\n blockRate / DISCRIMINATIVE_POWER_BLOCK_RATE,\n );\n const stakeMultiplier = computeStakeMultiplier(summary, multipliers);\n const cappedStakeMultiplier = Math.min(\n stakeMultiplier,\n STAKE_MULTIPLIER_QUALITY_CAP,\n );\n\n return {\n value: clampScore(\n baseQuality * discriminativePower * cappedStakeMultiplier * 100,\n ),\n status: 'ok',\n };\n}\n\nfunction computeCoverage(\n summary: Hcs25JsonObject,\n volumeCap: number,\n volumeScale: number,\n): Hcs25NormalizedValue {\n const totalChecks = readNumber(summary, 'totalChecks');\n if (totalChecks === null) {\n return MISSING;\n }\n\n const volumeRaw = Math.min(\n volumeCap,\n Math.log10(totalChecks + 1) * volumeScale,\n );\n return {\n value: clampScore(100 * clampUnit(volumeRaw / volumeCap)),\n status: 'ok',\n };\n}\n\n/**\n * Creates the `output-verification` adapter: converts per-decision reasoning\n * verification summaries into a stake-weighted quality component and a\n * log-scaled coverage component. It penalizes rubber-stamp verifiers through\n * discriminative power, resists trivial-claim farming through stake\n * weighting, and excludes agents below the minimum check threshold.\n */\nexport function createOutputVerificationAdapter(\n options: Hcs25OutputVerificationAdapterOptions = {},\n): Hcs25AdapterDefinition {\n const volumeCap = options.volumeCap ?? 50;\n const volumeScale = options.volumeScale ?? 20;\n const minChecks = options.minChecks ?? 10;\n const qualityWeight = options.qualityWeight ?? 0.7;\n const coverageWeight = options.coverageWeight ?? 0.3;\n const stakeMultipliers =\n options.stakeMultipliers ?? DEFAULT_STAKE_MULTIPLIERS;\n\n const hasVerificationHistory = (subject: Hcs25Subject): boolean => {\n const summary = readMetadataRecord(subject, 'outputVerificationSummary');\n if (!summary) {\n return false;\n }\n const totalChecks = readNumber(summary, 'totalChecks');\n return totalChecks !== null && totalChecks >= minChecks;\n };\n\n return {\n id: 'output-verification',\n weight: 1,\n contributionMode: 'scoped',\n appliesTo: hasVerificationHistory,\n components: [\n {\n name: 'quality',\n weight: qualityWeight,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const summary = readMetadataRecord(\n subject,\n 'outputVerificationSummary',\n );\n return summary ? computeQuality(summary, stakeMultipliers) : MISSING;\n },\n },\n {\n name: 'coverage',\n weight: coverageWeight,\n normalize: ({ subject }): Hcs25NormalizedValue => {\n const summary = readMetadataRecord(\n subject,\n 'outputVerificationSummary',\n );\n return summary\n ? computeCoverage(summary, volumeCap, volumeScale)\n : MISSING;\n },\n },\n ],\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1,47 +1,57 @@
1
- import { readMetadataRecord, readNumber } from "./standards-sdk.es178.js";
2
- import "./standards-sdk.es162.js";
3
- import "./standards-sdk.es175.js";
1
+ import { clampScore } from "./standards-sdk.es119.js";
2
+ import { readSubjectAdditional, readString, readNumber } from "./standards-sdk.es179.js";
3
+ import { mapSimpleEvalStatus } from "./standards-sdk.es163.js";
4
4
  import "./standards-sdk.es176.js";
5
5
  import "./standards-sdk.es177.js";
6
- import { logScale } from "./standards-sdk.es163.js";
7
- const MISSING = { value: 0, status: "missing" };
8
- function createX402Adapter(options = {}) {
9
- const volumeCapUsd = options.volumeCapUsd ?? 1e4;
10
- const tradesCap = options.tradesCap ?? 500;
11
- const hasX402Configuration = (subject) => readMetadataRecord(subject, "x402UsageSummary") !== void 0 || subject.metadata !== void 0 && subject.metadata.payTo !== void 0;
6
+ import "./standards-sdk.es178.js";
7
+ function readSimpleEval(subject, family) {
8
+ const additional = readSubjectAdditional(subject);
12
9
  return {
13
- id: "x402",
14
- weight: 1,
10
+ score: readNumber(additional, `a2aSimple${family}Score`) ?? readNumber(additional, `nandaSimple${family}Score`),
11
+ statusToken: readString(additional, `a2aSimple${family}Status`) ?? readString(additional, `nandaSimple${family}Status`)
12
+ };
13
+ }
14
+ function normalizeSimpleEval(subject, family) {
15
+ const { score, statusToken } = readSimpleEval(subject, family);
16
+ if (statusToken === null && score === null) {
17
+ return { value: 0, status: "missing" };
18
+ }
19
+ const status = mapSimpleEvalStatus(statusToken);
20
+ if (status !== "ok") {
21
+ return { value: 0, status };
22
+ }
23
+ return { value: clampScore(score ?? 0), status: "ok" };
24
+ }
25
+ function createSimpleMathAdapter() {
26
+ return {
27
+ id: "simple-math",
28
+ weight: 0.5,
15
29
  contributionMode: "scoped",
16
- appliesTo: hasX402Configuration,
30
+ defaultComponentKey: "simple-math.score",
17
31
  components: [
18
32
  {
19
- name: "volume7d",
20
- normalize: ({ subject }) => {
21
- const summary = readMetadataRecord(subject, "x402UsageSummary");
22
- const volume = summary ? readNumber(summary, "volume7dUsd") : null;
23
- return volume === null ? MISSING : { value: logScale(volume, volumeCapUsd), status: "ok" };
24
- }
25
- },
33
+ name: "score",
34
+ normalize: ({ subject }) => normalizeSimpleEval(subject, "Math")
35
+ }
36
+ ]
37
+ };
38
+ }
39
+ function createSimpleScienceAdapter() {
40
+ return {
41
+ id: "simple-science",
42
+ weight: 0.5,
43
+ contributionMode: "scoped",
44
+ defaultComponentKey: "simple-science.score",
45
+ components: [
26
46
  {
27
- name: "trades7d",
28
- normalize: ({ subject }) => {
29
- const summary = readMetadataRecord(subject, "x402UsageSummary");
30
- if (!summary) {
31
- return MISSING;
32
- }
33
- const inbound = readNumber(summary, "inboundTrades7d") ?? 0;
34
- const outbound = readNumber(summary, "outboundTrades7d") ?? 0;
35
- return {
36
- value: logScale(inbound + outbound, tradesCap),
37
- status: "ok"
38
- };
39
- }
47
+ name: "score",
48
+ normalize: ({ subject }) => normalizeSimpleEval(subject, "Science")
40
49
  }
41
50
  ]
42
51
  };
43
52
  }
44
53
  export {
45
- createX402Adapter
54
+ createSimpleMathAdapter,
55
+ createSimpleScienceAdapter
46
56
  };
47
57
  //# sourceMappingURL=standards-sdk.es174.js.map