@hashgraphonline/standards-sdk 0.1.187 → 0.1.189
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/services/registry-broker/client/agent-network.d.ts +1118 -0
- package/dist/browser/services/registry-broker/client/agent-network.d.ts.map +1 -0
- package/dist/browser/services/registry-broker/client/base-client.d.ts +4 -0
- package/dist/browser/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/browser/services/registry-broker/client.d.ts +1 -0
- package/dist/browser/services/registry-broker/client.d.ts.map +1 -1
- package/dist/browser/standards-sdk.browser.js +176 -0
- package/dist/browser/standards-sdk.browser.js.map +1 -1
- package/dist/browser-root/services/registry-broker/client/agent-network.d.ts +1118 -0
- package/dist/browser-root/services/registry-broker/client/agent-network.d.ts.map +1 -0
- package/dist/browser-root/services/registry-broker/client/base-client.d.ts +4 -0
- package/dist/browser-root/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/browser-root/services/registry-broker/client.d.ts +1 -0
- package/dist/browser-root/services/registry-broker/client.d.ts.map +1 -1
- package/dist/browser-root/standards-sdk.root-browser.js +471 -15
- package/dist/browser-root/standards-sdk.root-browser.js.map +1 -1
- package/dist/cjs/services/registry-broker/client/agent-network.d.ts +1118 -0
- package/dist/cjs/services/registry-broker/client/agent-network.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/base-client.d.ts +4 -0
- package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client.d.ts +1 -0
- package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +2 -2
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/services/registry-broker/client/agent-network.d.ts +1118 -0
- package/dist/es/services/registry-broker/client/agent-network.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/base-client.d.ts +4 -0
- package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client.d.ts +1 -0
- package/dist/es/services/registry-broker/client.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +54 -27
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +1 -1
- package/dist/es/standards-sdk.es106.js +1 -1
- package/dist/es/standards-sdk.es108.js +1 -1
- package/dist/es/standards-sdk.es11.js +1 -1
- package/dist/es/standards-sdk.es110.js +1 -1
- package/dist/es/standards-sdk.es116.js +2 -2
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es120.js +4 -4
- package/dist/es/standards-sdk.es121.js +11 -11
- package/dist/es/standards-sdk.es126.js +1 -1
- package/dist/es/standards-sdk.es132.js +3 -2
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +3 -3
- package/dist/es/standards-sdk.es148.js +1 -1
- package/dist/es/standards-sdk.es150.js +24 -15
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +440 -248
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +259 -4
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +4 -81
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +71 -77
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +80 -53
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +59 -2546
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +2547 -159
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +159 -7
- package/dist/es/standards-sdk.es159.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +3 -2
- package/dist/es/standards-sdk.es16.js.map +1 -1
- package/dist/es/standards-sdk.es160.js +7 -86
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +64 -43
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +57 -186
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +188 -20
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +22 -54
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +41 -78
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +81 -35
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +36 -191
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +191 -43
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +46 -39
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +37 -44
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +46 -39
- package/dist/es/standards-sdk.es171.js.map +1 -1
- package/dist/es/standards-sdk.es172.js +29 -102
- package/dist/es/standards-sdk.es172.js.map +1 -1
- package/dist/es/standards-sdk.es173.js +104 -36
- package/dist/es/standards-sdk.es173.js.map +1 -1
- package/dist/es/standards-sdk.es174.js +43 -33
- package/dist/es/standards-sdk.es174.js.map +1 -1
- package/dist/es/standards-sdk.es175.js +44 -72
- package/dist/es/standards-sdk.es175.js.map +1 -1
- package/dist/es/standards-sdk.es176.js +65 -61
- package/dist/es/standards-sdk.es176.js.map +1 -1
- package/dist/es/standards-sdk.es177.js +63 -39
- package/dist/es/standards-sdk.es177.js.map +1 -1
- package/dist/es/standards-sdk.es178.js +44 -36
- package/dist/es/standards-sdk.es178.js.map +1 -1
- package/dist/es/standards-sdk.es179.js +36 -30
- package/dist/es/standards-sdk.es179.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +6 -5
- package/dist/es/standards-sdk.es18.js.map +1 -1
- package/dist/es/standards-sdk.es180.js +30 -34
- package/dist/es/standards-sdk.es180.js.map +1 -1
- package/dist/es/standards-sdk.es181.js +34 -48
- package/dist/es/standards-sdk.es181.js.map +1 -1
- package/dist/es/standards-sdk.es182.js +48 -138
- package/dist/es/standards-sdk.es182.js.map +1 -1
- package/dist/es/standards-sdk.es183.js +133 -37
- package/dist/es/standards-sdk.es183.js.map +1 -1
- package/dist/es/standards-sdk.es184.js +34 -12474
- package/dist/es/standards-sdk.es184.js.map +1 -1
- package/dist/es/standards-sdk.es185.js +12425 -615
- package/dist/es/standards-sdk.es185.js.map +1 -1
- package/dist/es/standards-sdk.es186.js +47 -102
- package/dist/es/standards-sdk.es186.js.map +1 -1
- package/dist/es/standards-sdk.es187.js +96 -58
- package/dist/es/standards-sdk.es187.js.map +1 -1
- package/dist/es/standards-sdk.es188.js +73 -48
- package/dist/es/standards-sdk.es188.js.map +1 -1
- package/dist/es/standards-sdk.es189.js +180 -61
- package/dist/es/standards-sdk.es189.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +4 -3
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es190.js +659 -187
- package/dist/es/standards-sdk.es190.js.map +1 -1
- package/dist/es/standards-sdk.es197.js +71 -15
- package/dist/es/standards-sdk.es197.js.map +1 -1
- package/dist/es/standards-sdk.es198.js +14 -136
- package/dist/es/standards-sdk.es198.js.map +1 -1
- package/dist/es/standards-sdk.es199.js +104 -482
- package/dist/es/standards-sdk.es199.js.map +1 -1
- package/dist/es/standards-sdk.es200.js +480 -222
- package/dist/es/standards-sdk.es200.js.map +1 -1
- package/dist/es/standards-sdk.es201.js +239 -176
- package/dist/es/standards-sdk.es201.js.map +1 -1
- package/dist/es/standards-sdk.es202.js +178 -101
- package/dist/es/standards-sdk.es202.js.map +1 -1
- package/dist/es/standards-sdk.es203.js +75 -108
- package/dist/es/standards-sdk.es203.js.map +1 -1
- package/dist/es/standards-sdk.es204.js +116 -148
- package/dist/es/standards-sdk.es204.js.map +1 -1
- package/dist/es/standards-sdk.es205.js +146 -646
- package/dist/es/standards-sdk.es205.js.map +1 -1
- package/dist/es/standards-sdk.es206.js +661 -162
- package/dist/es/standards-sdk.es206.js.map +1 -1
- package/dist/es/standards-sdk.es207.js +156 -206
- package/dist/es/standards-sdk.es207.js.map +1 -1
- package/dist/es/standards-sdk.es208.js +219 -223
- package/dist/es/standards-sdk.es208.js.map +1 -1
- package/dist/es/standards-sdk.es209.js +242 -0
- package/dist/es/standards-sdk.es209.js.map +1 -0
- package/dist/es/standards-sdk.es22.js +1 -1
- package/dist/es/standards-sdk.es27.js +6 -5
- package/dist/es/standards-sdk.es27.js.map +1 -1
- package/dist/es/standards-sdk.es30.js +1 -1
- package/dist/es/standards-sdk.es31.js +1 -1
- package/dist/es/standards-sdk.es35.js +4 -3
- package/dist/es/standards-sdk.es35.js.map +1 -1
- package/dist/es/standards-sdk.es36.js +3 -3
- package/dist/es/standards-sdk.es37.js +1 -1
- package/dist/es/standards-sdk.es4.js +1 -1
- package/dist/es/standards-sdk.es53.js +1 -1
- package/dist/es/standards-sdk.es56.js +1 -1
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es60.js +1 -1
- package/dist/es/standards-sdk.es62.js +1 -1
- package/dist/es/standards-sdk.es63.js +2 -2
- package/dist/es/standards-sdk.es64.js +1 -1
- package/dist/es/standards-sdk.es65.js +1 -1
- package/dist/es/standards-sdk.es66.js +1 -1
- package/dist/es/standards-sdk.es67.js +4 -3
- package/dist/es/standards-sdk.es67.js.map +1 -1
- package/dist/es/standards-sdk.es69.js +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es71.js +1 -1
- package/dist/es/standards-sdk.es72.js +2 -2
- package/dist/es/standards-sdk.es75.js +3 -3
- package/dist/es/standards-sdk.es76.js +1 -1
- package/dist/es/standards-sdk.es78.js +1 -1
- package/dist/es/standards-sdk.es83.js +1 -1
- package/dist/es/standards-sdk.es84.js +3 -2
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +1 -1
- package/dist/es/standards-sdk.es88.js +1 -1
- package/dist/es/standards-sdk.es90.js +1 -1
- package/dist/es/standards-sdk.es94.js +3 -3
- package/dist/es/standards-sdk.es98.js +1 -1
- package/dist/es/standards-sdk.es99.js +1 -1
- package/package.json +1 -1
|
@@ -1,52 +1,59 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "./standards-sdk.
|
|
3
|
-
import "./standards-sdk.
|
|
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
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
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: "
|
|
23
|
-
weight:
|
|
24
|
-
contributionMode: "
|
|
25
|
-
|
|
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: "
|
|
29
|
-
|
|
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
|
-
|
|
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/
|
|
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 {
|
|
2
|
-
import
|
|
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
|
|
5
|
+
import "./standards-sdk.es178.js";
|
|
6
|
+
import { logScale } from "./standards-sdk.es164.js";
|
|
8
7
|
const MISSING = { value: 0, status: "missing" };
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
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: "
|
|
93
|
-
weight:
|
|
22
|
+
id: "oss-popularity",
|
|
23
|
+
weight: 0.7,
|
|
94
24
|
contributionMode: "scoped",
|
|
95
|
-
appliesTo:
|
|
25
|
+
appliesTo: looksLikeOssArtifact,
|
|
96
26
|
components: [
|
|
97
27
|
{
|
|
98
|
-
name: "
|
|
99
|
-
weight:
|
|
28
|
+
name: "githubStars",
|
|
29
|
+
weight: starsWeight,
|
|
100
30
|
normalize: ({ subject }) => {
|
|
101
|
-
const
|
|
102
|
-
subject,
|
|
103
|
-
"
|
|
31
|
+
const stars = readNumber(
|
|
32
|
+
readSubjectAdditional(subject),
|
|
33
|
+
"githubStars"
|
|
104
34
|
);
|
|
105
|
-
return
|
|
35
|
+
return stars === null ? MISSING : { value: logScale(stars, starsCap), status: "ok" };
|
|
106
36
|
}
|
|
107
37
|
},
|
|
108
38
|
{
|
|
109
|
-
name: "
|
|
110
|
-
weight:
|
|
39
|
+
name: "downloads",
|
|
40
|
+
weight: downloadsWeight,
|
|
111
41
|
normalize: ({ subject }) => {
|
|
112
|
-
const
|
|
113
|
-
|
|
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
|
-
|
|
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/
|
|
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 {
|
|
3
|
-
import
|
|
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
|
-
|
|
8
|
-
|
|
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
|
-
|
|
11
|
-
|
|
56
|
+
value: clampScore(
|
|
57
|
+
baseQuality * discriminativePower * cappedStakeMultiplier * 100
|
|
58
|
+
),
|
|
59
|
+
status: "ok"
|
|
12
60
|
};
|
|
13
61
|
}
|
|
14
|
-
function
|
|
15
|
-
const
|
|
16
|
-
if (
|
|
17
|
-
return
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
67
|
+
const volumeRaw = Math.min(
|
|
68
|
+
volumeCap,
|
|
69
|
+
Math.log10(totalChecks + 1) * volumeScale
|
|
70
|
+
);
|
|
26
71
|
return {
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
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: "
|
|
42
|
-
weight:
|
|
92
|
+
id: "output-verification",
|
|
93
|
+
weight: 1,
|
|
43
94
|
contributionMode: "scoped",
|
|
44
|
-
|
|
95
|
+
appliesTo: hasVerificationHistory,
|
|
45
96
|
components: [
|
|
46
97
|
{
|
|
47
|
-
name: "
|
|
48
|
-
|
|
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
|
-
|
|
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/
|
|
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 {
|
|
2
|
-
import "./standards-sdk.
|
|
3
|
-
import "./standards-sdk.
|
|
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
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
14
|
-
|
|
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
|
-
|
|
30
|
+
defaultComponentKey: "simple-math.score",
|
|
17
31
|
components: [
|
|
18
32
|
{
|
|
19
|
-
name: "
|
|
20
|
-
normalize: ({ subject }) =>
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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: "
|
|
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
|
-
|
|
54
|
+
createSimpleMathAdapter,
|
|
55
|
+
createSimpleScienceAdapter
|
|
46
56
|
};
|
|
47
57
|
//# sourceMappingURL=standards-sdk.es174.js.map
|