@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.
Files changed (196) hide show
  1. package/dist/browser/services/registry-broker/client/agent-network.d.ts +1118 -0
  2. package/dist/browser/services/registry-broker/client/agent-network.d.ts.map +1 -0
  3. package/dist/browser/services/registry-broker/client/base-client.d.ts +4 -0
  4. package/dist/browser/services/registry-broker/client/base-client.d.ts.map +1 -1
  5. package/dist/browser/services/registry-broker/client.d.ts +1 -0
  6. package/dist/browser/services/registry-broker/client.d.ts.map +1 -1
  7. package/dist/browser/standards-sdk.browser.js +176 -0
  8. package/dist/browser/standards-sdk.browser.js.map +1 -1
  9. package/dist/browser-root/services/registry-broker/client/agent-network.d.ts +1118 -0
  10. package/dist/browser-root/services/registry-broker/client/agent-network.d.ts.map +1 -0
  11. package/dist/browser-root/services/registry-broker/client/base-client.d.ts +4 -0
  12. package/dist/browser-root/services/registry-broker/client/base-client.d.ts.map +1 -1
  13. package/dist/browser-root/services/registry-broker/client.d.ts +1 -0
  14. package/dist/browser-root/services/registry-broker/client.d.ts.map +1 -1
  15. package/dist/browser-root/standards-sdk.root-browser.js +471 -15
  16. package/dist/browser-root/standards-sdk.root-browser.js.map +1 -1
  17. package/dist/cjs/services/registry-broker/client/agent-network.d.ts +1118 -0
  18. package/dist/cjs/services/registry-broker/client/agent-network.d.ts.map +1 -0
  19. package/dist/cjs/services/registry-broker/client/base-client.d.ts +4 -0
  20. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  21. package/dist/cjs/services/registry-broker/client.d.ts +1 -0
  22. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  23. package/dist/cjs/standards-sdk.cjs +2 -2
  24. package/dist/cjs/standards-sdk.cjs.map +1 -1
  25. package/dist/es/services/registry-broker/client/agent-network.d.ts +1118 -0
  26. package/dist/es/services/registry-broker/client/agent-network.d.ts.map +1 -0
  27. package/dist/es/services/registry-broker/client/base-client.d.ts +4 -0
  28. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  29. package/dist/es/services/registry-broker/client.d.ts +1 -0
  30. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  31. package/dist/es/standards-sdk.es.js +54 -27
  32. package/dist/es/standards-sdk.es.js.map +1 -1
  33. package/dist/es/standards-sdk.es104.js +1 -1
  34. package/dist/es/standards-sdk.es106.js +1 -1
  35. package/dist/es/standards-sdk.es108.js +1 -1
  36. package/dist/es/standards-sdk.es11.js +1 -1
  37. package/dist/es/standards-sdk.es110.js +1 -1
  38. package/dist/es/standards-sdk.es116.js +2 -2
  39. package/dist/es/standards-sdk.es12.js +1 -1
  40. package/dist/es/standards-sdk.es120.js +4 -4
  41. package/dist/es/standards-sdk.es121.js +11 -11
  42. package/dist/es/standards-sdk.es126.js +1 -1
  43. package/dist/es/standards-sdk.es132.js +3 -2
  44. package/dist/es/standards-sdk.es132.js.map +1 -1
  45. package/dist/es/standards-sdk.es147.js +3 -3
  46. package/dist/es/standards-sdk.es148.js +1 -1
  47. package/dist/es/standards-sdk.es150.js +24 -15
  48. package/dist/es/standards-sdk.es150.js.map +1 -1
  49. package/dist/es/standards-sdk.es152.js +440 -248
  50. package/dist/es/standards-sdk.es152.js.map +1 -1
  51. package/dist/es/standards-sdk.es153.js +259 -4
  52. package/dist/es/standards-sdk.es153.js.map +1 -1
  53. package/dist/es/standards-sdk.es154.js +4 -81
  54. package/dist/es/standards-sdk.es154.js.map +1 -1
  55. package/dist/es/standards-sdk.es155.js +71 -77
  56. package/dist/es/standards-sdk.es155.js.map +1 -1
  57. package/dist/es/standards-sdk.es156.js +80 -53
  58. package/dist/es/standards-sdk.es156.js.map +1 -1
  59. package/dist/es/standards-sdk.es157.js +59 -2546
  60. package/dist/es/standards-sdk.es157.js.map +1 -1
  61. package/dist/es/standards-sdk.es158.js +2547 -159
  62. package/dist/es/standards-sdk.es158.js.map +1 -1
  63. package/dist/es/standards-sdk.es159.js +159 -7
  64. package/dist/es/standards-sdk.es159.js.map +1 -1
  65. package/dist/es/standards-sdk.es16.js +3 -2
  66. package/dist/es/standards-sdk.es16.js.map +1 -1
  67. package/dist/es/standards-sdk.es160.js +7 -86
  68. package/dist/es/standards-sdk.es160.js.map +1 -1
  69. package/dist/es/standards-sdk.es161.js +64 -43
  70. package/dist/es/standards-sdk.es161.js.map +1 -1
  71. package/dist/es/standards-sdk.es162.js +57 -186
  72. package/dist/es/standards-sdk.es162.js.map +1 -1
  73. package/dist/es/standards-sdk.es163.js +188 -20
  74. package/dist/es/standards-sdk.es163.js.map +1 -1
  75. package/dist/es/standards-sdk.es164.js +22 -54
  76. package/dist/es/standards-sdk.es164.js.map +1 -1
  77. package/dist/es/standards-sdk.es165.js +41 -78
  78. package/dist/es/standards-sdk.es165.js.map +1 -1
  79. package/dist/es/standards-sdk.es166.js +81 -35
  80. package/dist/es/standards-sdk.es166.js.map +1 -1
  81. package/dist/es/standards-sdk.es167.js +36 -191
  82. package/dist/es/standards-sdk.es167.js.map +1 -1
  83. package/dist/es/standards-sdk.es168.js +191 -43
  84. package/dist/es/standards-sdk.es168.js.map +1 -1
  85. package/dist/es/standards-sdk.es169.js +46 -39
  86. package/dist/es/standards-sdk.es169.js.map +1 -1
  87. package/dist/es/standards-sdk.es170.js +37 -44
  88. package/dist/es/standards-sdk.es170.js.map +1 -1
  89. package/dist/es/standards-sdk.es171.js +46 -39
  90. package/dist/es/standards-sdk.es171.js.map +1 -1
  91. package/dist/es/standards-sdk.es172.js +29 -102
  92. package/dist/es/standards-sdk.es172.js.map +1 -1
  93. package/dist/es/standards-sdk.es173.js +104 -36
  94. package/dist/es/standards-sdk.es173.js.map +1 -1
  95. package/dist/es/standards-sdk.es174.js +43 -33
  96. package/dist/es/standards-sdk.es174.js.map +1 -1
  97. package/dist/es/standards-sdk.es175.js +44 -72
  98. package/dist/es/standards-sdk.es175.js.map +1 -1
  99. package/dist/es/standards-sdk.es176.js +65 -61
  100. package/dist/es/standards-sdk.es176.js.map +1 -1
  101. package/dist/es/standards-sdk.es177.js +63 -39
  102. package/dist/es/standards-sdk.es177.js.map +1 -1
  103. package/dist/es/standards-sdk.es178.js +44 -36
  104. package/dist/es/standards-sdk.es178.js.map +1 -1
  105. package/dist/es/standards-sdk.es179.js +36 -30
  106. package/dist/es/standards-sdk.es179.js.map +1 -1
  107. package/dist/es/standards-sdk.es18.js +6 -5
  108. package/dist/es/standards-sdk.es18.js.map +1 -1
  109. package/dist/es/standards-sdk.es180.js +30 -34
  110. package/dist/es/standards-sdk.es180.js.map +1 -1
  111. package/dist/es/standards-sdk.es181.js +34 -48
  112. package/dist/es/standards-sdk.es181.js.map +1 -1
  113. package/dist/es/standards-sdk.es182.js +48 -138
  114. package/dist/es/standards-sdk.es182.js.map +1 -1
  115. package/dist/es/standards-sdk.es183.js +133 -37
  116. package/dist/es/standards-sdk.es183.js.map +1 -1
  117. package/dist/es/standards-sdk.es184.js +34 -12474
  118. package/dist/es/standards-sdk.es184.js.map +1 -1
  119. package/dist/es/standards-sdk.es185.js +12425 -615
  120. package/dist/es/standards-sdk.es185.js.map +1 -1
  121. package/dist/es/standards-sdk.es186.js +47 -102
  122. package/dist/es/standards-sdk.es186.js.map +1 -1
  123. package/dist/es/standards-sdk.es187.js +96 -58
  124. package/dist/es/standards-sdk.es187.js.map +1 -1
  125. package/dist/es/standards-sdk.es188.js +73 -48
  126. package/dist/es/standards-sdk.es188.js.map +1 -1
  127. package/dist/es/standards-sdk.es189.js +180 -61
  128. package/dist/es/standards-sdk.es189.js.map +1 -1
  129. package/dist/es/standards-sdk.es19.js +4 -3
  130. package/dist/es/standards-sdk.es19.js.map +1 -1
  131. package/dist/es/standards-sdk.es190.js +659 -187
  132. package/dist/es/standards-sdk.es190.js.map +1 -1
  133. package/dist/es/standards-sdk.es197.js +71 -15
  134. package/dist/es/standards-sdk.es197.js.map +1 -1
  135. package/dist/es/standards-sdk.es198.js +14 -136
  136. package/dist/es/standards-sdk.es198.js.map +1 -1
  137. package/dist/es/standards-sdk.es199.js +104 -482
  138. package/dist/es/standards-sdk.es199.js.map +1 -1
  139. package/dist/es/standards-sdk.es200.js +480 -222
  140. package/dist/es/standards-sdk.es200.js.map +1 -1
  141. package/dist/es/standards-sdk.es201.js +239 -176
  142. package/dist/es/standards-sdk.es201.js.map +1 -1
  143. package/dist/es/standards-sdk.es202.js +178 -101
  144. package/dist/es/standards-sdk.es202.js.map +1 -1
  145. package/dist/es/standards-sdk.es203.js +75 -108
  146. package/dist/es/standards-sdk.es203.js.map +1 -1
  147. package/dist/es/standards-sdk.es204.js +116 -148
  148. package/dist/es/standards-sdk.es204.js.map +1 -1
  149. package/dist/es/standards-sdk.es205.js +146 -646
  150. package/dist/es/standards-sdk.es205.js.map +1 -1
  151. package/dist/es/standards-sdk.es206.js +661 -162
  152. package/dist/es/standards-sdk.es206.js.map +1 -1
  153. package/dist/es/standards-sdk.es207.js +156 -206
  154. package/dist/es/standards-sdk.es207.js.map +1 -1
  155. package/dist/es/standards-sdk.es208.js +219 -223
  156. package/dist/es/standards-sdk.es208.js.map +1 -1
  157. package/dist/es/standards-sdk.es209.js +242 -0
  158. package/dist/es/standards-sdk.es209.js.map +1 -0
  159. package/dist/es/standards-sdk.es22.js +1 -1
  160. package/dist/es/standards-sdk.es27.js +6 -5
  161. package/dist/es/standards-sdk.es27.js.map +1 -1
  162. package/dist/es/standards-sdk.es30.js +1 -1
  163. package/dist/es/standards-sdk.es31.js +1 -1
  164. package/dist/es/standards-sdk.es35.js +4 -3
  165. package/dist/es/standards-sdk.es35.js.map +1 -1
  166. package/dist/es/standards-sdk.es36.js +3 -3
  167. package/dist/es/standards-sdk.es37.js +1 -1
  168. package/dist/es/standards-sdk.es4.js +1 -1
  169. package/dist/es/standards-sdk.es53.js +1 -1
  170. package/dist/es/standards-sdk.es56.js +1 -1
  171. package/dist/es/standards-sdk.es59.js +1 -1
  172. package/dist/es/standards-sdk.es60.js +1 -1
  173. package/dist/es/standards-sdk.es62.js +1 -1
  174. package/dist/es/standards-sdk.es63.js +2 -2
  175. package/dist/es/standards-sdk.es64.js +1 -1
  176. package/dist/es/standards-sdk.es65.js +1 -1
  177. package/dist/es/standards-sdk.es66.js +1 -1
  178. package/dist/es/standards-sdk.es67.js +4 -3
  179. package/dist/es/standards-sdk.es67.js.map +1 -1
  180. package/dist/es/standards-sdk.es69.js +1 -1
  181. package/dist/es/standards-sdk.es7.js +1 -1
  182. package/dist/es/standards-sdk.es71.js +1 -1
  183. package/dist/es/standards-sdk.es72.js +2 -2
  184. package/dist/es/standards-sdk.es75.js +3 -3
  185. package/dist/es/standards-sdk.es76.js +1 -1
  186. package/dist/es/standards-sdk.es78.js +1 -1
  187. package/dist/es/standards-sdk.es83.js +1 -1
  188. package/dist/es/standards-sdk.es84.js +3 -2
  189. package/dist/es/standards-sdk.es84.js.map +1 -1
  190. package/dist/es/standards-sdk.es85.js +1 -1
  191. package/dist/es/standards-sdk.es88.js +1 -1
  192. package/dist/es/standards-sdk.es90.js +1 -1
  193. package/dist/es/standards-sdk.es94.js +3 -3
  194. package/dist/es/standards-sdk.es98.js +1 -1
  195. package/dist/es/standards-sdk.es99.js +1 -1
  196. package/package.json +1 -1
@@ -1,197 +1,68 @@
1
- import { z } from "zod";
2
- const SIMPLE_EVAL_GRADE_CORRECT = {
3
- status: "correct",
4
- score: 100
5
- };
6
- const SIMPLE_EVAL_GRADE_WRONG = {
7
- status: "wrong",
8
- score: 0
9
- };
10
- const SIMPLE_EVAL_GRADE_UNPARSEABLE = {
11
- status: "unparseable",
12
- score: 0
13
- };
14
- function mapSimpleEvalStatus(token) {
15
- switch (token) {
16
- case "timeout":
17
- return "timeout";
18
- case "missing":
19
- case "skipped":
20
- return "missing";
21
- case "upstream-error":
22
- case "error":
23
- return "error";
24
- default:
25
- return "ok";
1
+ import { Logger } from "./standards-sdk.es128.js";
2
+ const REFERENCE_THRESHOLD = 50 * 1024;
3
+ class ContentStoreServiceImpl {
4
+ constructor() {
5
+ this.contentStore = null;
6
+ this.logger = Logger.getInstance({ module: "ContentStoreService" });
26
7
  }
27
- }
28
- function gradeSimpleMathResponse(response, expected) {
29
- const match = response.match(/-?\d+(?:\.\d+)?/);
30
- if (!match) {
31
- return SIMPLE_EVAL_GRADE_UNPARSEABLE;
32
- }
33
- const value = Number.parseFloat(match[0]);
34
- return value === expected ? SIMPLE_EVAL_GRADE_CORRECT : SIMPLE_EVAL_GRADE_WRONG;
35
- }
36
- const SCIENCE_CHOICE_LETTERS = ["A", "B", "C", "D"];
37
- function gradeSimpleScienceResponse(response, correctChoice, options) {
38
- const letterMatch = response.match(/\b([A-Da-d])\b/);
39
- if (letterMatch) {
40
- return letterMatch[1].toUpperCase() === correctChoice ? SIMPLE_EVAL_GRADE_CORRECT : SIMPLE_EVAL_GRADE_WRONG;
8
+ static getInstance() {
9
+ if (!ContentStoreServiceImpl._instance) {
10
+ ContentStoreServiceImpl._instance = new ContentStoreServiceImpl();
11
+ }
12
+ return ContentStoreServiceImpl._instance;
41
13
  }
42
- if (options) {
43
- const normalized = response.toLowerCase();
44
- const matchedIndex = options.findIndex(
45
- (option) => option.length > 0 && normalized.includes(option.toLowerCase())
46
- );
47
- if (matchedIndex >= 0) {
48
- return SCIENCE_CHOICE_LETTERS[matchedIndex] === correctChoice ? SIMPLE_EVAL_GRADE_CORRECT : SIMPLE_EVAL_GRADE_WRONG;
14
+ /**
15
+ * Set the content store instance
16
+ */
17
+ async setInstance(store) {
18
+ if (this.contentStore) {
19
+ this.logger.warn("Content store already set, replacing");
49
20
  }
21
+ this.contentStore = store;
22
+ this.logger.info("Content store instance set");
50
23
  }
51
- return SIMPLE_EVAL_GRADE_UNPARSEABLE;
52
- }
53
- function randomInt(rng, minInclusive, maxInclusive) {
54
- const span = maxInclusive - minInclusive + 1;
55
- return minInclusive + Math.floor(rng() * span);
56
- }
57
- function generateSimpleMathQuestion(rng = Math.random) {
58
- const operations = ["add", "sub", "mul"];
59
- const operation = operations[Math.floor(rng() * operations.length) % operations.length];
60
- let left;
61
- let right;
62
- let expected;
63
- let expression;
64
- if (operation === "add") {
65
- left = randomInt(rng, 10, 100);
66
- right = randomInt(rng, 10, 100);
67
- expected = left + right;
68
- expression = `${left}+${right}`;
69
- } else if (operation === "sub") {
70
- left = randomInt(rng, 10, 100);
71
- right = randomInt(rng, 1, 50);
72
- expected = left - right;
73
- expression = `${left}-${right}`;
74
- } else {
75
- left = randomInt(rng, 2, 12);
76
- right = randomInt(rng, 2, 12);
77
- expected = left * right;
78
- expression = `${left}x${right}`;
24
+ /**
25
+ * Get the content store instance
26
+ */
27
+ getInstance() {
28
+ return this.contentStore;
29
+ }
30
+ /**
31
+ * Clear the content store instance
32
+ */
33
+ dispose() {
34
+ this.contentStore = null;
35
+ this.logger.info("Content store disposed");
36
+ }
37
+ /**
38
+ * Check if content store is available
39
+ */
40
+ isAvailable() {
41
+ return this.contentStore !== null;
79
42
  }
80
- const operator = operation === "add" ? "+" : operation === "sub" ? "−" : "×";
81
- return {
82
- questionId: `math:${operation}:${expression}`,
83
- prompt: `Answer with just the number.
84
-
85
- What is ${left} ${operator} ${right}?`,
86
- expected
87
- };
88
- }
89
- function sciencePrompt(stem, options) {
90
- const lines = options.map(
91
- (option, index) => `${SCIENCE_CHOICE_LETTERS[index]}) ${option}`
92
- );
93
- return `Answer with just A, B, C, or D.
94
-
95
- ${stem}
96
- ${lines.join("\n")}`;
97
43
  }
98
- function scienceQuestion(questionId, stem, options, correctIndex) {
99
- return {
100
- questionId,
101
- prompt: sciencePrompt(stem, options),
102
- options: [options[0], options[1], options[2], options[3]],
103
- correctChoice: SCIENCE_CHOICE_LETTERS[correctIndex]
104
- };
44
+ function extractReferenceId(input) {
45
+ const trimmed = input.trim();
46
+ const exactMatch = trimmed.match(/^content-ref:([a-f0-9]+)$/);
47
+ if (exactMatch) {
48
+ return exactMatch[1];
49
+ }
50
+ const embeddedMatch = trimmed.match(/content-ref:([a-f0-9]+)/);
51
+ if (embeddedMatch) {
52
+ return embeddedMatch[1];
53
+ }
54
+ return null;
105
55
  }
106
- const SIMPLE_SCIENCE_QUESTION_BANK = [
107
- scienceQuestion(
108
- "science:photosynthesis-gas",
109
- "Which gas do plants primarily absorb during photosynthesis?",
110
- ["Oxygen", "Carbon dioxide", "Nitrogen", "Helium"],
111
- 1
112
- ),
113
- scienceQuestion(
114
- "science:water-formula",
115
- "What is the chemical formula for water?",
116
- ["HO", "H2O2", "H2O", "O2H"],
117
- 2
118
- ),
119
- scienceQuestion(
120
- "science:blood-pump",
121
- "Which organ pumps blood through the human body?",
122
- ["Liver", "Heart", "Lungs", "Kidneys"],
123
- 1
124
- ),
125
- scienceQuestion(
126
- "science:vacuum-speed",
127
- "Which of these travels fastest in a vacuum?",
128
- ["Sound", "Water waves", "Wind", "Light"],
129
- 3
130
- ),
131
- scienceQuestion(
132
- "science:red-planet",
133
- "Which planet is known as the Red Planet?",
134
- ["Mars", "Venus", "Jupiter", "Mercury"],
135
- 0
136
- ),
137
- scienceQuestion(
138
- "science:boiling-point",
139
- "At what temperature does water boil at sea level, in Celsius?",
140
- ["50°C", "100°C", "150°C", "200°C"],
141
- 1
142
- ),
143
- scienceQuestion(
144
- "science:photosynthesis-energy",
145
- "What is the primary source of energy for photosynthesis?",
146
- ["Sunlight", "Moonlight", "Lightning", "Starlight"],
147
- 0
148
- ),
149
- scienceQuestion(
150
- "science:atom-charge",
151
- "What is the electrical charge of a proton?",
152
- ["Negative", "Neutral", "Positive", "Variable"],
153
- 2
154
- )
155
- ];
156
- function sampleSimpleScienceQuestion(rng = Math.random) {
157
- const index = Math.floor(rng() * SIMPLE_SCIENCE_QUESTION_BANK.length) % SIMPLE_SCIENCE_QUESTION_BANK.length;
158
- return SIMPLE_SCIENCE_QUESTION_BANK[index];
56
+ function shouldUseReference(content) {
57
+ const size = typeof content === "string" ? Buffer.byteLength(content, "utf8") : content.length;
58
+ return size > REFERENCE_THRESHOLD;
159
59
  }
160
- const hcs25SimpleEvalFieldsSchema = z.object({
161
- a2aSimpleMathScore: z.number().nullish(),
162
- a2aSimpleMathStatus: z.string().nullish(),
163
- a2aSimpleMathQuestionId: z.string().nullish(),
164
- a2aSimpleMathSessionId: z.string().nullish(),
165
- a2aSimpleMathResponse: z.string().nullish(),
166
- a2aSimpleMathError: z.string().nullish(),
167
- a2aSimpleMathUpdatedAt: z.string().nullish(),
168
- a2aSimpleScienceScore: z.number().nullish(),
169
- a2aSimpleScienceStatus: z.string().nullish(),
170
- a2aSimpleScienceQuestionId: z.string().nullish(),
171
- a2aSimpleScienceSessionId: z.string().nullish(),
172
- a2aSimpleScienceResponse: z.string().nullish(),
173
- a2aSimpleScienceError: z.string().nullish(),
174
- a2aSimpleScienceUpdatedAt: z.string().nullish(),
175
- nandaSimpleMathScore: z.number().nullish(),
176
- nandaSimpleMathStatus: z.string().nullish(),
177
- nandaSimpleMathQuestionId: z.string().nullish(),
178
- nandaSimpleMathResponse: z.string().nullish(),
179
- nandaSimpleMathError: z.string().nullish(),
180
- nandaSimpleMathUpdatedAt: z.string().nullish(),
181
- nandaSimpleScienceScore: z.number().nullish(),
182
- nandaSimpleScienceStatus: z.string().nullish(),
183
- nandaSimpleScienceQuestionId: z.string().nullish(),
184
- nandaSimpleScienceResponse: z.string().nullish(),
185
- nandaSimpleScienceError: z.string().nullish(),
186
- nandaSimpleScienceUpdatedAt: z.string().nullish()
187
- }).passthrough();
60
+ const ContentStoreService = ContentStoreServiceImpl.getInstance();
188
61
  export {
189
- SIMPLE_SCIENCE_QUESTION_BANK,
190
- generateSimpleMathQuestion,
191
- gradeSimpleMathResponse,
192
- gradeSimpleScienceResponse,
193
- hcs25SimpleEvalFieldsSchema,
194
- mapSimpleEvalStatus,
195
- sampleSimpleScienceQuestion
62
+ ContentStoreService,
63
+ ContentStoreServiceImpl,
64
+ REFERENCE_THRESHOLD,
65
+ extractReferenceId,
66
+ shouldUseReference
196
67
  };
197
68
  //# sourceMappingURL=standards-sdk.es162.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es162.js","sources":["../../src/hcs-25/signals/simple-evals.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport type { Hcs25SignalStatus } from '../types';\n\n/**\n * Status tokens emitted by simple eval runners, per the HCS-25 simple-evals\n * methodology.\n */\nexport type Hcs25SimpleEvalStatus =\n | 'correct'\n | 'wrong'\n | 'unparseable'\n | 'timeout'\n | 'missing'\n | 'empty'\n | 'skipped'\n | 'upstream-error'\n | 'error';\n\n/**\n * A graded simple-eval outcome. Scores are binary per the methodology.\n */\nexport interface Hcs25SimpleEvalGrade {\n status: Hcs25SimpleEvalStatus;\n score: number;\n}\n\nconst SIMPLE_EVAL_GRADE_CORRECT: Hcs25SimpleEvalGrade = {\n status: 'correct',\n score: 100,\n};\n\nconst SIMPLE_EVAL_GRADE_WRONG: Hcs25SimpleEvalGrade = {\n status: 'wrong',\n score: 0,\n};\n\nconst SIMPLE_EVAL_GRADE_UNPARSEABLE: Hcs25SimpleEvalGrade = {\n status: 'unparseable',\n score: 0,\n};\n\n/**\n * Maps a simple-eval status token onto an HCS-25 signal status code.\n * Substantive outcomes stay `ok` because the stored score carries the value;\n * skipped runs are treated as missing.\n */\nexport function mapSimpleEvalStatus(token: string | null): Hcs25SignalStatus {\n switch (token) {\n case 'timeout':\n return 'timeout';\n case 'missing':\n case 'skipped':\n return 'missing';\n case 'upstream-error':\n case 'error':\n return 'error';\n default:\n return 'ok';\n }\n}\n\n/**\n * Grades a SimpleMath response by extracting the first numeric token and\n * comparing it against the expected answer.\n */\nexport function gradeSimpleMathResponse(\n response: string,\n expected: number,\n): Hcs25SimpleEvalGrade {\n const match = response.match(/-?\\d+(?:\\.\\d+)?/);\n if (!match) {\n return SIMPLE_EVAL_GRADE_UNPARSEABLE;\n }\n\n const value = Number.parseFloat(match[0]);\n return value === expected\n ? SIMPLE_EVAL_GRADE_CORRECT\n : SIMPLE_EVAL_GRADE_WRONG;\n}\n\nconst SCIENCE_CHOICE_LETTERS = ['A', 'B', 'C', 'D'] as const;\n\n/**\n * Grades a SimpleScience response by extracting a standalone `A|B|C|D`\n * token, falling back to full option-text matching when options are\n * provided.\n */\nexport function gradeSimpleScienceResponse(\n response: string,\n correctChoice: (typeof SCIENCE_CHOICE_LETTERS)[number],\n options?: readonly string[],\n): Hcs25SimpleEvalGrade {\n const letterMatch = response.match(/\\b([A-Da-d])\\b/);\n if (letterMatch) {\n return letterMatch[1].toUpperCase() === correctChoice\n ? SIMPLE_EVAL_GRADE_CORRECT\n : SIMPLE_EVAL_GRADE_WRONG;\n }\n\n if (options) {\n const normalized = response.toLowerCase();\n const matchedIndex = options.findIndex(\n option => option.length > 0 && normalized.includes(option.toLowerCase()),\n );\n if (matchedIndex >= 0) {\n return SCIENCE_CHOICE_LETTERS[matchedIndex] === correctChoice\n ? SIMPLE_EVAL_GRADE_CORRECT\n : SIMPLE_EVAL_GRADE_WRONG;\n }\n }\n\n return SIMPLE_EVAL_GRADE_UNPARSEABLE;\n}\n\n/**\n * A generated SimpleMath question with its stable identifier and expected\n * answer.\n */\nexport interface Hcs25SimpleMathQuestion {\n questionId: string;\n prompt: string;\n expected: number;\n}\n\nfunction randomInt(\n rng: () => number,\n minInclusive: number,\n maxInclusive: number,\n): number {\n const span = maxInclusive - minInclusive + 1;\n return minInclusive + Math.floor(rng() * span);\n}\n\n/**\n * Generates a random SimpleMath question. Operand ranges follow the\n * methodology: addition uses two integers in 10–100, subtraction subtracts\n * 1–50 from 10–100, and multiplication uses small integers in 2–12. Pass a\n * seeded rng for deterministic generation.\n */\nexport function generateSimpleMathQuestion(\n rng: () => number = Math.random,\n): Hcs25SimpleMathQuestion {\n const operations = ['add', 'sub', 'mul'] as const;\n const operation =\n operations[Math.floor(rng() * operations.length) % operations.length];\n\n let left: number;\n let right: number;\n let expected: number;\n let expression: string;\n\n if (operation === 'add') {\n left = randomInt(rng, 10, 100);\n right = randomInt(rng, 10, 100);\n expected = left + right;\n expression = `${left}+${right}`;\n } else if (operation === 'sub') {\n left = randomInt(rng, 10, 100);\n right = randomInt(rng, 1, 50);\n expected = left - right;\n expression = `${left}-${right}`;\n } else {\n left = randomInt(rng, 2, 12);\n right = randomInt(rng, 2, 12);\n expected = left * right;\n expression = `${left}x${right}`;\n }\n\n const operator = operation === 'add' ? '+' : operation === 'sub' ? '−' : '×';\n\n return {\n questionId: `math:${operation}:${expression}`,\n prompt: `Answer with just the number.\\n\\nWhat is ${left} ${operator} ${right}?`,\n expected,\n };\n}\n\n/**\n * A curated SimpleScience multiple-choice question with exactly four\n * options and one unambiguous correct choice.\n */\nexport interface Hcs25SimpleScienceQuestion {\n questionId: string;\n prompt: string;\n options: readonly [string, string, string, string];\n correctChoice: (typeof SCIENCE_CHOICE_LETTERS)[number];\n}\n\nfunction sciencePrompt(stem: string, options: readonly string[]): string {\n const lines = options.map(\n (option, index) => `${SCIENCE_CHOICE_LETTERS[index]}) ${option}`,\n );\n return `Answer with just A, B, C, or D.\\n\\n${stem}\\n${lines.join('\\n')}`;\n}\n\nfunction scienceQuestion(\n questionId: string,\n stem: string,\n options: readonly string[],\n correctIndex: number,\n): Hcs25SimpleScienceQuestion {\n return {\n questionId,\n prompt: sciencePrompt(stem, options),\n options: [options[0], options[1], options[2], options[3]],\n correctChoice: SCIENCE_CHOICE_LETTERS[correctIndex],\n };\n}\n\n/**\n * A small curated bank of basic science facts spanning chemistry, biology,\n * physics, and earth science, per the methodology.\n */\nexport const SIMPLE_SCIENCE_QUESTION_BANK: readonly Hcs25SimpleScienceQuestion[] =\n [\n scienceQuestion(\n 'science:photosynthesis-gas',\n 'Which gas do plants primarily absorb during photosynthesis?',\n ['Oxygen', 'Carbon dioxide', 'Nitrogen', 'Helium'],\n 1,\n ),\n scienceQuestion(\n 'science:water-formula',\n 'What is the chemical formula for water?',\n ['HO', 'H2O2', 'H2O', 'O2H'],\n 2,\n ),\n scienceQuestion(\n 'science:blood-pump',\n 'Which organ pumps blood through the human body?',\n ['Liver', 'Heart', 'Lungs', 'Kidneys'],\n 1,\n ),\n scienceQuestion(\n 'science:vacuum-speed',\n 'Which of these travels fastest in a vacuum?',\n ['Sound', 'Water waves', 'Wind', 'Light'],\n 3,\n ),\n scienceQuestion(\n 'science:red-planet',\n 'Which planet is known as the Red Planet?',\n ['Mars', 'Venus', 'Jupiter', 'Mercury'],\n 0,\n ),\n scienceQuestion(\n 'science:boiling-point',\n 'At what temperature does water boil at sea level, in Celsius?',\n ['50°C', '100°C', '150°C', '200°C'],\n 1,\n ),\n scienceQuestion(\n 'science:photosynthesis-energy',\n 'What is the primary source of energy for photosynthesis?',\n ['Sunlight', 'Moonlight', 'Lightning', 'Starlight'],\n 0,\n ),\n scienceQuestion(\n 'science:atom-charge',\n 'What is the electrical charge of a proton?',\n ['Negative', 'Neutral', 'Positive', 'Variable'],\n 2,\n ),\n ];\n\n/**\n * Samples a random science question from the curated bank. Pass a seeded rng\n * for deterministic sampling.\n */\nexport function sampleSimpleScienceQuestion(\n rng: () => number = Math.random,\n): Hcs25SimpleScienceQuestion {\n const index =\n Math.floor(rng() * SIMPLE_SCIENCE_QUESTION_BANK.length) %\n SIMPLE_SCIENCE_QUESTION_BANK.length;\n return SIMPLE_SCIENCE_QUESTION_BANK[index];\n}\n\n/**\n * Stored-field schema for the shared A2A/NANDA simple-eval signal family.\n * Field names follow the `a2aSimple*` / `nandaSimple*` conventions.\n */\nexport const hcs25SimpleEvalFieldsSchema = z\n .object({\n a2aSimpleMathScore: z.number().nullish(),\n a2aSimpleMathStatus: z.string().nullish(),\n a2aSimpleMathQuestionId: z.string().nullish(),\n a2aSimpleMathSessionId: z.string().nullish(),\n a2aSimpleMathResponse: z.string().nullish(),\n a2aSimpleMathError: z.string().nullish(),\n a2aSimpleMathUpdatedAt: z.string().nullish(),\n a2aSimpleScienceScore: z.number().nullish(),\n a2aSimpleScienceStatus: z.string().nullish(),\n a2aSimpleScienceQuestionId: z.string().nullish(),\n a2aSimpleScienceSessionId: z.string().nullish(),\n a2aSimpleScienceResponse: z.string().nullish(),\n a2aSimpleScienceError: z.string().nullish(),\n a2aSimpleScienceUpdatedAt: z.string().nullish(),\n nandaSimpleMathScore: z.number().nullish(),\n nandaSimpleMathStatus: z.string().nullish(),\n nandaSimpleMathQuestionId: z.string().nullish(),\n nandaSimpleMathResponse: z.string().nullish(),\n nandaSimpleMathError: z.string().nullish(),\n nandaSimpleMathUpdatedAt: z.string().nullish(),\n nandaSimpleScienceScore: z.number().nullish(),\n nandaSimpleScienceStatus: z.string().nullish(),\n nandaSimpleScienceQuestionId: z.string().nullish(),\n nandaSimpleScienceResponse: z.string().nullish(),\n nandaSimpleScienceError: z.string().nullish(),\n nandaSimpleScienceUpdatedAt: z.string().nullish(),\n })\n .passthrough();\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es162.js","sources":["../../src/content-store/ContentStoreService.ts"],"sourcesContent":["/**\n * Content Store Service\n *\n * Provides utility functions for content storage and reference handling.\n */\n\nimport type { ContentStoreInterface } from './types';\nimport { Logger } from '../utils/logger';\n\n/**\n * Maximum content size before using references (50KB)\n */\nexport const REFERENCE_THRESHOLD = 50 * 1024;\n\n/**\n * Content store service for managing large content\n */\nexport class ContentStoreServiceImpl {\n private static _instance: ContentStoreServiceImpl;\n private contentStore: ContentStoreInterface | null = null;\n private logger = Logger.getInstance({ module: 'ContentStoreService' });\n\n static getInstance(): ContentStoreServiceImpl {\n if (!ContentStoreServiceImpl._instance) {\n ContentStoreServiceImpl._instance = new ContentStoreServiceImpl();\n }\n return ContentStoreServiceImpl._instance;\n }\n\n /**\n * Set the content store instance\n */\n async setInstance(store: ContentStoreInterface): Promise<void> {\n if (this.contentStore) {\n this.logger.warn('Content store already set, replacing');\n }\n this.contentStore = store;\n this.logger.info('Content store instance set');\n }\n\n /**\n * Get the content store instance\n */\n getInstance(): ContentStoreInterface | null {\n return this.contentStore;\n }\n\n /**\n * Clear the content store instance\n */\n dispose(): void {\n this.contentStore = null;\n this.logger.info('Content store disposed');\n }\n\n /**\n * Check if content store is available\n */\n isAvailable(): boolean {\n return this.contentStore !== null;\n }\n}\n\n/**\n * Extract reference ID from input string\n */\nexport function extractReferenceId(input: string): string | null {\n const trimmed = input.trim();\n\n const exactMatch = trimmed.match(/^content-ref:([a-f0-9]+)$/);\n if (exactMatch) {\n return exactMatch[1];\n }\n\n const embeddedMatch = trimmed.match(/content-ref:([a-f0-9]+)/);\n if (embeddedMatch) {\n return embeddedMatch[1];\n }\n\n return null;\n}\n\n/**\n * Check if content should use reference based on size\n */\nexport function shouldUseReference(content: string | Buffer): boolean {\n const size =\n typeof content === 'string'\n ? Buffer.byteLength(content, 'utf8')\n : content.length;\n\n return size > REFERENCE_THRESHOLD;\n}\n\nexport const ContentStoreService = ContentStoreServiceImpl.getInstance();\n"],"names":[],"mappings":";AAYO,MAAM,sBAAsB,KAAK;AAKjC,MAAM,wBAAwB;AAAA,EAA9B,cAAA;AAEL,SAAQ,eAA6C;AACrD,SAAQ,SAAS,OAAO,YAAY,EAAE,QAAQ,uBAAuB;AAAA,EAAA;AAAA,EAErE,OAAO,cAAuC;AAC5C,QAAI,CAAC,wBAAwB,WAAW;AACtC,8BAAwB,YAAY,IAAI,wBAAA;AAAA,IAC1C;AACA,WAAO,wBAAwB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,OAA6C;AAC7D,QAAI,KAAK,cAAc;AACrB,WAAK,OAAO,KAAK,sCAAsC;AAAA,IACzD;AACA,SAAK,eAAe;AACpB,SAAK,OAAO,KAAK,4BAA4B;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,cAA4C;AAC1C,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,SAAK,eAAe;AACpB,SAAK,OAAO,KAAK,wBAAwB;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,cAAuB;AACrB,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AACF;AAKO,SAAS,mBAAmB,OAA8B;AAC/D,QAAM,UAAU,MAAM,KAAA;AAEtB,QAAM,aAAa,QAAQ,MAAM,2BAA2B;AAC5D,MAAI,YAAY;AACd,WAAO,WAAW,CAAC;AAAA,EACrB;AAEA,QAAM,gBAAgB,QAAQ,MAAM,yBAAyB;AAC7D,MAAI,eAAe;AACjB,WAAO,cAAc,CAAC;AAAA,EACxB;AAEA,SAAO;AACT;AAKO,SAAS,mBAAmB,SAAmC;AACpE,QAAM,OACJ,OAAO,YAAY,WACf,OAAO,WAAW,SAAS,MAAM,IACjC,QAAQ;AAEd,SAAO,OAAO;AAChB;AAEO,MAAM,sBAAsB,wBAAwB,YAAA;"}
@@ -1,29 +1,197 @@
1
- import { clampScore } from "./standards-sdk.es119.js";
2
- function clampUnit(value) {
3
- return Math.min(1, Math.max(0, value));
1
+ import { z } from "zod";
2
+ const SIMPLE_EVAL_GRADE_CORRECT = {
3
+ status: "correct",
4
+ score: 100
5
+ };
6
+ const SIMPLE_EVAL_GRADE_WRONG = {
7
+ status: "wrong",
8
+ score: 0
9
+ };
10
+ const SIMPLE_EVAL_GRADE_UNPARSEABLE = {
11
+ status: "unparseable",
12
+ score: 0
13
+ };
14
+ function mapSimpleEvalStatus(token) {
15
+ switch (token) {
16
+ case "timeout":
17
+ return "timeout";
18
+ case "missing":
19
+ case "skipped":
20
+ return "missing";
21
+ case "upstream-error":
22
+ case "error":
23
+ return "error";
24
+ default:
25
+ return "ok";
26
+ }
4
27
  }
5
- function normalizeRatio(value) {
6
- return clampUnit(value > 1 ? value / 100 : value);
28
+ function gradeSimpleMathResponse(response, expected) {
29
+ const match = response.match(/-?\d+(?:\.\d+)?/);
30
+ if (!match) {
31
+ return SIMPLE_EVAL_GRADE_UNPARSEABLE;
32
+ }
33
+ const value = Number.parseFloat(match[0]);
34
+ return value === expected ? SIMPLE_EVAL_GRADE_CORRECT : SIMPLE_EVAL_GRADE_WRONG;
7
35
  }
8
- function logScale(value, cap) {
9
- if (cap <= 0) {
10
- return 0;
36
+ const SCIENCE_CHOICE_LETTERS = ["A", "B", "C", "D"];
37
+ function gradeSimpleScienceResponse(response, correctChoice, options) {
38
+ const letterMatch = response.match(/\b([A-Da-d])\b/);
39
+ if (letterMatch) {
40
+ return letterMatch[1].toUpperCase() === correctChoice ? SIMPLE_EVAL_GRADE_CORRECT : SIMPLE_EVAL_GRADE_WRONG;
11
41
  }
12
- return clampScore(
13
- 100 * clampUnit(Math.log1p(Math.max(0, value)) / Math.log1p(cap))
14
- );
42
+ if (options) {
43
+ const normalized = response.toLowerCase();
44
+ const matchedIndex = options.findIndex(
45
+ (option) => option.length > 0 && normalized.includes(option.toLowerCase())
46
+ );
47
+ if (matchedIndex >= 0) {
48
+ return SCIENCE_CHOICE_LETTERS[matchedIndex] === correctChoice ? SIMPLE_EVAL_GRADE_CORRECT : SIMPLE_EVAL_GRADE_WRONG;
49
+ }
50
+ }
51
+ return SIMPLE_EVAL_GRADE_UNPARSEABLE;
52
+ }
53
+ function randomInt(rng, minInclusive, maxInclusive) {
54
+ const span = maxInclusive - minInclusive + 1;
55
+ return minInclusive + Math.floor(rng() * span);
15
56
  }
16
- function meanOfPresent(values) {
17
- const present = values.filter((value) => value !== null);
18
- if (present.length === 0) {
19
- return null;
57
+ function generateSimpleMathQuestion(rng = Math.random) {
58
+ const operations = ["add", "sub", "mul"];
59
+ const operation = operations[Math.floor(rng() * operations.length) % operations.length];
60
+ let left;
61
+ let right;
62
+ let expected;
63
+ let expression;
64
+ if (operation === "add") {
65
+ left = randomInt(rng, 10, 100);
66
+ right = randomInt(rng, 10, 100);
67
+ expected = left + right;
68
+ expression = `${left}+${right}`;
69
+ } else if (operation === "sub") {
70
+ left = randomInt(rng, 10, 100);
71
+ right = randomInt(rng, 1, 50);
72
+ expected = left - right;
73
+ expression = `${left}-${right}`;
74
+ } else {
75
+ left = randomInt(rng, 2, 12);
76
+ right = randomInt(rng, 2, 12);
77
+ expected = left * right;
78
+ expression = `${left}x${right}`;
20
79
  }
21
- return present.reduce((sum, value) => sum + value, 0) / present.length;
80
+ const operator = operation === "add" ? "+" : operation === "sub" ? "−" : "×";
81
+ return {
82
+ questionId: `math:${operation}:${expression}`,
83
+ prompt: `Answer with just the number.
84
+
85
+ What is ${left} ${operator} ${right}?`,
86
+ expected
87
+ };
88
+ }
89
+ function sciencePrompt(stem, options) {
90
+ const lines = options.map(
91
+ (option, index) => `${SCIENCE_CHOICE_LETTERS[index]}) ${option}`
92
+ );
93
+ return `Answer with just A, B, C, or D.
94
+
95
+ ${stem}
96
+ ${lines.join("\n")}`;
97
+ }
98
+ function scienceQuestion(questionId, stem, options, correctIndex) {
99
+ return {
100
+ questionId,
101
+ prompt: sciencePrompt(stem, options),
102
+ options: [options[0], options[1], options[2], options[3]],
103
+ correctChoice: SCIENCE_CHOICE_LETTERS[correctIndex]
104
+ };
105
+ }
106
+ const SIMPLE_SCIENCE_QUESTION_BANK = [
107
+ scienceQuestion(
108
+ "science:photosynthesis-gas",
109
+ "Which gas do plants primarily absorb during photosynthesis?",
110
+ ["Oxygen", "Carbon dioxide", "Nitrogen", "Helium"],
111
+ 1
112
+ ),
113
+ scienceQuestion(
114
+ "science:water-formula",
115
+ "What is the chemical formula for water?",
116
+ ["HO", "H2O2", "H2O", "O2H"],
117
+ 2
118
+ ),
119
+ scienceQuestion(
120
+ "science:blood-pump",
121
+ "Which organ pumps blood through the human body?",
122
+ ["Liver", "Heart", "Lungs", "Kidneys"],
123
+ 1
124
+ ),
125
+ scienceQuestion(
126
+ "science:vacuum-speed",
127
+ "Which of these travels fastest in a vacuum?",
128
+ ["Sound", "Water waves", "Wind", "Light"],
129
+ 3
130
+ ),
131
+ scienceQuestion(
132
+ "science:red-planet",
133
+ "Which planet is known as the Red Planet?",
134
+ ["Mars", "Venus", "Jupiter", "Mercury"],
135
+ 0
136
+ ),
137
+ scienceQuestion(
138
+ "science:boiling-point",
139
+ "At what temperature does water boil at sea level, in Celsius?",
140
+ ["50°C", "100°C", "150°C", "200°C"],
141
+ 1
142
+ ),
143
+ scienceQuestion(
144
+ "science:photosynthesis-energy",
145
+ "What is the primary source of energy for photosynthesis?",
146
+ ["Sunlight", "Moonlight", "Lightning", "Starlight"],
147
+ 0
148
+ ),
149
+ scienceQuestion(
150
+ "science:atom-charge",
151
+ "What is the electrical charge of a proton?",
152
+ ["Negative", "Neutral", "Positive", "Variable"],
153
+ 2
154
+ )
155
+ ];
156
+ function sampleSimpleScienceQuestion(rng = Math.random) {
157
+ const index = Math.floor(rng() * SIMPLE_SCIENCE_QUESTION_BANK.length) % SIMPLE_SCIENCE_QUESTION_BANK.length;
158
+ return SIMPLE_SCIENCE_QUESTION_BANK[index];
22
159
  }
160
+ const hcs25SimpleEvalFieldsSchema = z.object({
161
+ a2aSimpleMathScore: z.number().nullish(),
162
+ a2aSimpleMathStatus: z.string().nullish(),
163
+ a2aSimpleMathQuestionId: z.string().nullish(),
164
+ a2aSimpleMathSessionId: z.string().nullish(),
165
+ a2aSimpleMathResponse: z.string().nullish(),
166
+ a2aSimpleMathError: z.string().nullish(),
167
+ a2aSimpleMathUpdatedAt: z.string().nullish(),
168
+ a2aSimpleScienceScore: z.number().nullish(),
169
+ a2aSimpleScienceStatus: z.string().nullish(),
170
+ a2aSimpleScienceQuestionId: z.string().nullish(),
171
+ a2aSimpleScienceSessionId: z.string().nullish(),
172
+ a2aSimpleScienceResponse: z.string().nullish(),
173
+ a2aSimpleScienceError: z.string().nullish(),
174
+ a2aSimpleScienceUpdatedAt: z.string().nullish(),
175
+ nandaSimpleMathScore: z.number().nullish(),
176
+ nandaSimpleMathStatus: z.string().nullish(),
177
+ nandaSimpleMathQuestionId: z.string().nullish(),
178
+ nandaSimpleMathResponse: z.string().nullish(),
179
+ nandaSimpleMathError: z.string().nullish(),
180
+ nandaSimpleMathUpdatedAt: z.string().nullish(),
181
+ nandaSimpleScienceScore: z.number().nullish(),
182
+ nandaSimpleScienceStatus: z.string().nullish(),
183
+ nandaSimpleScienceQuestionId: z.string().nullish(),
184
+ nandaSimpleScienceResponse: z.string().nullish(),
185
+ nandaSimpleScienceError: z.string().nullish(),
186
+ nandaSimpleScienceUpdatedAt: z.string().nullish()
187
+ }).passthrough();
23
188
  export {
24
- clampUnit,
25
- logScale,
26
- meanOfPresent,
27
- normalizeRatio
189
+ SIMPLE_SCIENCE_QUESTION_BANK,
190
+ generateSimpleMathQuestion,
191
+ gradeSimpleMathResponse,
192
+ gradeSimpleScienceResponse,
193
+ hcs25SimpleEvalFieldsSchema,
194
+ mapSimpleEvalStatus,
195
+ sampleSimpleScienceQuestion
28
196
  };
29
197
  //# sourceMappingURL=standards-sdk.es163.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es163.js","sources":["../../src/hcs-25/adapters/normalization.ts"],"sourcesContent":["import { clampScore } from '../scoring';\n\n/**\n * Clamps a value into the unit interval `[0, 1]`.\n */\nexport function clampUnit(value: number): number {\n return Math.min(1, Math.max(0, value));\n}\n\n/**\n * Normalizes a ratio that implementations may store either as `0..1` or as\n * `0..100`. Values above one are treated as percent scale.\n */\nexport function normalizeRatio(value: number): number {\n return clampUnit(value > 1 ? value / 100 : value);\n}\n\n/**\n * Log-scales a raw count into `[0, 100]` using `log1p` against a cap, per\n * the HCS-25 recommended log-scaling pattern.\n */\nexport function logScale(value: number, cap: number): number {\n if (cap <= 0) {\n return 0;\n }\n return clampScore(\n 100 * clampUnit(Math.log1p(Math.max(0, value)) / Math.log1p(cap)),\n );\n}\n\n/**\n * Computes the arithmetic mean of the provided values, returning null when\n * none are present.\n */\nexport function meanOfPresent(\n values: readonly (number | null)[],\n): number | null {\n const present = values.filter((value): value is number => value !== null);\n if (present.length === 0) {\n return null;\n }\n return present.reduce((sum, value) => sum + value, 0) / present.length;\n}\n"],"names":[],"mappings":";AAKO,SAAS,UAAU,OAAuB;AAC/C,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC;AACvC;AAMO,SAAS,eAAe,OAAuB;AACpD,SAAO,UAAU,QAAQ,IAAI,QAAQ,MAAM,KAAK;AAClD;AAMO,SAAS,SAAS,OAAe,KAAqB;AAC3D,MAAI,OAAO,GAAG;AACZ,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,MAAM,UAAU,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,GAAG,CAAC;AAAA,EAAA;AAEpE;AAMO,SAAS,cACd,QACe;AACf,QAAM,UAAU,OAAO,OAAO,CAAC,UAA2B,UAAU,IAAI;AACxE,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AACA,SAAO,QAAQ,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC,IAAI,QAAQ;AAClE;"}
1
+ {"version":3,"file":"standards-sdk.es163.js","sources":["../../src/hcs-25/signals/simple-evals.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport type { Hcs25SignalStatus } from '../types';\n\n/**\n * Status tokens emitted by simple eval runners, per the HCS-25 simple-evals\n * methodology.\n */\nexport type Hcs25SimpleEvalStatus =\n | 'correct'\n | 'wrong'\n | 'unparseable'\n | 'timeout'\n | 'missing'\n | 'empty'\n | 'skipped'\n | 'upstream-error'\n | 'error';\n\n/**\n * A graded simple-eval outcome. Scores are binary per the methodology.\n */\nexport interface Hcs25SimpleEvalGrade {\n status: Hcs25SimpleEvalStatus;\n score: number;\n}\n\nconst SIMPLE_EVAL_GRADE_CORRECT: Hcs25SimpleEvalGrade = {\n status: 'correct',\n score: 100,\n};\n\nconst SIMPLE_EVAL_GRADE_WRONG: Hcs25SimpleEvalGrade = {\n status: 'wrong',\n score: 0,\n};\n\nconst SIMPLE_EVAL_GRADE_UNPARSEABLE: Hcs25SimpleEvalGrade = {\n status: 'unparseable',\n score: 0,\n};\n\n/**\n * Maps a simple-eval status token onto an HCS-25 signal status code.\n * Substantive outcomes stay `ok` because the stored score carries the value;\n * skipped runs are treated as missing.\n */\nexport function mapSimpleEvalStatus(token: string | null): Hcs25SignalStatus {\n switch (token) {\n case 'timeout':\n return 'timeout';\n case 'missing':\n case 'skipped':\n return 'missing';\n case 'upstream-error':\n case 'error':\n return 'error';\n default:\n return 'ok';\n }\n}\n\n/**\n * Grades a SimpleMath response by extracting the first numeric token and\n * comparing it against the expected answer.\n */\nexport function gradeSimpleMathResponse(\n response: string,\n expected: number,\n): Hcs25SimpleEvalGrade {\n const match = response.match(/-?\\d+(?:\\.\\d+)?/);\n if (!match) {\n return SIMPLE_EVAL_GRADE_UNPARSEABLE;\n }\n\n const value = Number.parseFloat(match[0]);\n return value === expected\n ? SIMPLE_EVAL_GRADE_CORRECT\n : SIMPLE_EVAL_GRADE_WRONG;\n}\n\nconst SCIENCE_CHOICE_LETTERS = ['A', 'B', 'C', 'D'] as const;\n\n/**\n * Grades a SimpleScience response by extracting a standalone `A|B|C|D`\n * token, falling back to full option-text matching when options are\n * provided.\n */\nexport function gradeSimpleScienceResponse(\n response: string,\n correctChoice: (typeof SCIENCE_CHOICE_LETTERS)[number],\n options?: readonly string[],\n): Hcs25SimpleEvalGrade {\n const letterMatch = response.match(/\\b([A-Da-d])\\b/);\n if (letterMatch) {\n return letterMatch[1].toUpperCase() === correctChoice\n ? SIMPLE_EVAL_GRADE_CORRECT\n : SIMPLE_EVAL_GRADE_WRONG;\n }\n\n if (options) {\n const normalized = response.toLowerCase();\n const matchedIndex = options.findIndex(\n option => option.length > 0 && normalized.includes(option.toLowerCase()),\n );\n if (matchedIndex >= 0) {\n return SCIENCE_CHOICE_LETTERS[matchedIndex] === correctChoice\n ? SIMPLE_EVAL_GRADE_CORRECT\n : SIMPLE_EVAL_GRADE_WRONG;\n }\n }\n\n return SIMPLE_EVAL_GRADE_UNPARSEABLE;\n}\n\n/**\n * A generated SimpleMath question with its stable identifier and expected\n * answer.\n */\nexport interface Hcs25SimpleMathQuestion {\n questionId: string;\n prompt: string;\n expected: number;\n}\n\nfunction randomInt(\n rng: () => number,\n minInclusive: number,\n maxInclusive: number,\n): number {\n const span = maxInclusive - minInclusive + 1;\n return minInclusive + Math.floor(rng() * span);\n}\n\n/**\n * Generates a random SimpleMath question. Operand ranges follow the\n * methodology: addition uses two integers in 10–100, subtraction subtracts\n * 1–50 from 10–100, and multiplication uses small integers in 2–12. Pass a\n * seeded rng for deterministic generation.\n */\nexport function generateSimpleMathQuestion(\n rng: () => number = Math.random,\n): Hcs25SimpleMathQuestion {\n const operations = ['add', 'sub', 'mul'] as const;\n const operation =\n operations[Math.floor(rng() * operations.length) % operations.length];\n\n let left: number;\n let right: number;\n let expected: number;\n let expression: string;\n\n if (operation === 'add') {\n left = randomInt(rng, 10, 100);\n right = randomInt(rng, 10, 100);\n expected = left + right;\n expression = `${left}+${right}`;\n } else if (operation === 'sub') {\n left = randomInt(rng, 10, 100);\n right = randomInt(rng, 1, 50);\n expected = left - right;\n expression = `${left}-${right}`;\n } else {\n left = randomInt(rng, 2, 12);\n right = randomInt(rng, 2, 12);\n expected = left * right;\n expression = `${left}x${right}`;\n }\n\n const operator = operation === 'add' ? '+' : operation === 'sub' ? '−' : '×';\n\n return {\n questionId: `math:${operation}:${expression}`,\n prompt: `Answer with just the number.\\n\\nWhat is ${left} ${operator} ${right}?`,\n expected,\n };\n}\n\n/**\n * A curated SimpleScience multiple-choice question with exactly four\n * options and one unambiguous correct choice.\n */\nexport interface Hcs25SimpleScienceQuestion {\n questionId: string;\n prompt: string;\n options: readonly [string, string, string, string];\n correctChoice: (typeof SCIENCE_CHOICE_LETTERS)[number];\n}\n\nfunction sciencePrompt(stem: string, options: readonly string[]): string {\n const lines = options.map(\n (option, index) => `${SCIENCE_CHOICE_LETTERS[index]}) ${option}`,\n );\n return `Answer with just A, B, C, or D.\\n\\n${stem}\\n${lines.join('\\n')}`;\n}\n\nfunction scienceQuestion(\n questionId: string,\n stem: string,\n options: readonly string[],\n correctIndex: number,\n): Hcs25SimpleScienceQuestion {\n return {\n questionId,\n prompt: sciencePrompt(stem, options),\n options: [options[0], options[1], options[2], options[3]],\n correctChoice: SCIENCE_CHOICE_LETTERS[correctIndex],\n };\n}\n\n/**\n * A small curated bank of basic science facts spanning chemistry, biology,\n * physics, and earth science, per the methodology.\n */\nexport const SIMPLE_SCIENCE_QUESTION_BANK: readonly Hcs25SimpleScienceQuestion[] =\n [\n scienceQuestion(\n 'science:photosynthesis-gas',\n 'Which gas do plants primarily absorb during photosynthesis?',\n ['Oxygen', 'Carbon dioxide', 'Nitrogen', 'Helium'],\n 1,\n ),\n scienceQuestion(\n 'science:water-formula',\n 'What is the chemical formula for water?',\n ['HO', 'H2O2', 'H2O', 'O2H'],\n 2,\n ),\n scienceQuestion(\n 'science:blood-pump',\n 'Which organ pumps blood through the human body?',\n ['Liver', 'Heart', 'Lungs', 'Kidneys'],\n 1,\n ),\n scienceQuestion(\n 'science:vacuum-speed',\n 'Which of these travels fastest in a vacuum?',\n ['Sound', 'Water waves', 'Wind', 'Light'],\n 3,\n ),\n scienceQuestion(\n 'science:red-planet',\n 'Which planet is known as the Red Planet?',\n ['Mars', 'Venus', 'Jupiter', 'Mercury'],\n 0,\n ),\n scienceQuestion(\n 'science:boiling-point',\n 'At what temperature does water boil at sea level, in Celsius?',\n ['50°C', '100°C', '150°C', '200°C'],\n 1,\n ),\n scienceQuestion(\n 'science:photosynthesis-energy',\n 'What is the primary source of energy for photosynthesis?',\n ['Sunlight', 'Moonlight', 'Lightning', 'Starlight'],\n 0,\n ),\n scienceQuestion(\n 'science:atom-charge',\n 'What is the electrical charge of a proton?',\n ['Negative', 'Neutral', 'Positive', 'Variable'],\n 2,\n ),\n ];\n\n/**\n * Samples a random science question from the curated bank. Pass a seeded rng\n * for deterministic sampling.\n */\nexport function sampleSimpleScienceQuestion(\n rng: () => number = Math.random,\n): Hcs25SimpleScienceQuestion {\n const index =\n Math.floor(rng() * SIMPLE_SCIENCE_QUESTION_BANK.length) %\n SIMPLE_SCIENCE_QUESTION_BANK.length;\n return SIMPLE_SCIENCE_QUESTION_BANK[index];\n}\n\n/**\n * Stored-field schema for the shared A2A/NANDA simple-eval signal family.\n * Field names follow the `a2aSimple*` / `nandaSimple*` conventions.\n */\nexport const hcs25SimpleEvalFieldsSchema = z\n .object({\n a2aSimpleMathScore: z.number().nullish(),\n a2aSimpleMathStatus: z.string().nullish(),\n a2aSimpleMathQuestionId: z.string().nullish(),\n a2aSimpleMathSessionId: z.string().nullish(),\n a2aSimpleMathResponse: z.string().nullish(),\n a2aSimpleMathError: z.string().nullish(),\n a2aSimpleMathUpdatedAt: z.string().nullish(),\n a2aSimpleScienceScore: z.number().nullish(),\n a2aSimpleScienceStatus: z.string().nullish(),\n a2aSimpleScienceQuestionId: z.string().nullish(),\n a2aSimpleScienceSessionId: z.string().nullish(),\n a2aSimpleScienceResponse: z.string().nullish(),\n a2aSimpleScienceError: z.string().nullish(),\n a2aSimpleScienceUpdatedAt: z.string().nullish(),\n nandaSimpleMathScore: z.number().nullish(),\n nandaSimpleMathStatus: z.string().nullish(),\n nandaSimpleMathQuestionId: z.string().nullish(),\n nandaSimpleMathResponse: z.string().nullish(),\n nandaSimpleMathError: z.string().nullish(),\n nandaSimpleMathUpdatedAt: z.string().nullish(),\n nandaSimpleScienceScore: z.number().nullish(),\n nandaSimpleScienceStatus: z.string().nullish(),\n nandaSimpleScienceQuestionId: z.string().nullish(),\n nandaSimpleScienceResponse: z.string().nullish(),\n nandaSimpleScienceError: z.string().nullish(),\n nandaSimpleScienceUpdatedAt: z.string().nullish(),\n })\n .passthrough();\n"],"names":[],"mappings":";AA2BA,MAAM,4BAAkD;AAAA,EACtD,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,MAAM,0BAAgD;AAAA,EACpD,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,MAAM,gCAAsD;AAAA,EAC1D,QAAQ;AAAA,EACR,OAAO;AACT;AAOO,SAAS,oBAAoB,OAAyC;AAC3E,UAAQ,OAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;AAMO,SAAS,wBACd,UACA,UACsB;AACtB,QAAM,QAAQ,SAAS,MAAM,iBAAiB;AAC9C,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,OAAO,WAAW,MAAM,CAAC,CAAC;AACxC,SAAO,UAAU,WACb,4BACA;AACN;AAEA,MAAM,yBAAyB,CAAC,KAAK,KAAK,KAAK,GAAG;AAO3C,SAAS,2BACd,UACA,eACA,SACsB;AACtB,QAAM,cAAc,SAAS,MAAM,gBAAgB;AACnD,MAAI,aAAa;AACf,WAAO,YAAY,CAAC,EAAE,YAAA,MAAkB,gBACpC,4BACA;AAAA,EACN;AAEA,MAAI,SAAS;AACX,UAAM,aAAa,SAAS,YAAA;AAC5B,UAAM,eAAe,QAAQ;AAAA,MAC3B,CAAA,WAAU,OAAO,SAAS,KAAK,WAAW,SAAS,OAAO,aAAa;AAAA,IAAA;AAEzE,QAAI,gBAAgB,GAAG;AACrB,aAAO,uBAAuB,YAAY,MAAM,gBAC5C,4BACA;AAAA,IACN;AAAA,EACF;AAEA,SAAO;AACT;AAYA,SAAS,UACP,KACA,cACA,cACQ;AACR,QAAM,OAAO,eAAe,eAAe;AAC3C,SAAO,eAAe,KAAK,MAAM,IAAA,IAAQ,IAAI;AAC/C;AAQO,SAAS,2BACd,MAAoB,KAAK,QACA;AACzB,QAAM,aAAa,CAAC,OAAO,OAAO,KAAK;AACvC,QAAM,YACJ,WAAW,KAAK,MAAM,QAAQ,WAAW,MAAM,IAAI,WAAW,MAAM;AAEtE,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,MAAI,cAAc,OAAO;AACvB,WAAO,UAAU,KAAK,IAAI,GAAG;AAC7B,YAAQ,UAAU,KAAK,IAAI,GAAG;AAC9B,eAAW,OAAO;AAClB,iBAAa,GAAG,IAAI,IAAI,KAAK;AAAA,EAC/B,WAAW,cAAc,OAAO;AAC9B,WAAO,UAAU,KAAK,IAAI,GAAG;AAC7B,YAAQ,UAAU,KAAK,GAAG,EAAE;AAC5B,eAAW,OAAO;AAClB,iBAAa,GAAG,IAAI,IAAI,KAAK;AAAA,EAC/B,OAAO;AACL,WAAO,UAAU,KAAK,GAAG,EAAE;AAC3B,YAAQ,UAAU,KAAK,GAAG,EAAE;AAC5B,eAAW,OAAO;AAClB,iBAAa,GAAG,IAAI,IAAI,KAAK;AAAA,EAC/B;AAEA,QAAM,WAAW,cAAc,QAAQ,MAAM,cAAc,QAAQ,MAAM;AAEzE,SAAO;AAAA,IACL,YAAY,QAAQ,SAAS,IAAI,UAAU;AAAA,IAC3C,QAAQ;AAAA;AAAA,UAA2C,IAAI,IAAI,QAAQ,IAAI,KAAK;AAAA,IAC5E;AAAA,EAAA;AAEJ;AAaA,SAAS,cAAc,MAAc,SAAoC;AACvE,QAAM,QAAQ,QAAQ;AAAA,IACpB,CAAC,QAAQ,UAAU,GAAG,uBAAuB,KAAK,CAAC,KAAK,MAAM;AAAA,EAAA;AAEhE,SAAO;AAAA;AAAA,EAAsC,IAAI;AAAA,EAAK,MAAM,KAAK,IAAI,CAAC;AACxE;AAEA,SAAS,gBACP,YACA,MACA,SACA,cAC4B;AAC5B,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,cAAc,MAAM,OAAO;AAAA,IACnC,SAAS,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;AAAA,IACxD,eAAe,uBAAuB,YAAY;AAAA,EAAA;AAEtD;AAMO,MAAM,+BACX;AAAA,EACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,CAAC,UAAU,kBAAkB,YAAY,QAAQ;AAAA,IACjD;AAAA,EAAA;AAAA,EAEF;AAAA,IACE;AAAA,IACA;AAAA,IACA,CAAC,MAAM,QAAQ,OAAO,KAAK;AAAA,IAC3B;AAAA,EAAA;AAAA,EAEF;AAAA,IACE;AAAA,IACA;AAAA,IACA,CAAC,SAAS,SAAS,SAAS,SAAS;AAAA,IACrC;AAAA,EAAA;AAAA,EAEF;AAAA,IACE;AAAA,IACA;AAAA,IACA,CAAC,SAAS,eAAe,QAAQ,OAAO;AAAA,IACxC;AAAA,EAAA;AAAA,EAEF;AAAA,IACE;AAAA,IACA;AAAA,IACA,CAAC,QAAQ,SAAS,WAAW,SAAS;AAAA,IACtC;AAAA,EAAA;AAAA,EAEF;AAAA,IACE;AAAA,IACA;AAAA,IACA,CAAC,QAAQ,SAAS,SAAS,OAAO;AAAA,IAClC;AAAA,EAAA;AAAA,EAEF;AAAA,IACE;AAAA,IACA;AAAA,IACA,CAAC,YAAY,aAAa,aAAa,WAAW;AAAA,IAClD;AAAA,EAAA;AAAA,EAEF;AAAA,IACE;AAAA,IACA;AAAA,IACA,CAAC,YAAY,WAAW,YAAY,UAAU;AAAA,IAC9C;AAAA,EAAA;AAEJ;AAMK,SAAS,4BACd,MAAoB,KAAK,QACG;AAC5B,QAAM,QACJ,KAAK,MAAM,IAAA,IAAQ,6BAA6B,MAAM,IACtD,6BAA6B;AAC/B,SAAO,6BAA6B,KAAK;AAC3C;AAMO,MAAM,8BAA8B,EACxC,OAAO;AAAA,EACN,oBAAoB,EAAE,OAAA,EAAS,QAAA;AAAA,EAC/B,qBAAqB,EAAE,OAAA,EAAS,QAAA;AAAA,EAChC,yBAAyB,EAAE,OAAA,EAAS,QAAA;AAAA,EACpC,wBAAwB,EAAE,OAAA,EAAS,QAAA;AAAA,EACnC,uBAAuB,EAAE,OAAA,EAAS,QAAA;AAAA,EAClC,oBAAoB,EAAE,OAAA,EAAS,QAAA;AAAA,EAC/B,wBAAwB,EAAE,OAAA,EAAS,QAAA;AAAA,EACnC,uBAAuB,EAAE,OAAA,EAAS,QAAA;AAAA,EAClC,wBAAwB,EAAE,OAAA,EAAS,QAAA;AAAA,EACnC,4BAA4B,EAAE,OAAA,EAAS,QAAA;AAAA,EACvC,2BAA2B,EAAE,OAAA,EAAS,QAAA;AAAA,EACtC,0BAA0B,EAAE,OAAA,EAAS,QAAA;AAAA,EACrC,uBAAuB,EAAE,OAAA,EAAS,QAAA;AAAA,EAClC,2BAA2B,EAAE,OAAA,EAAS,QAAA;AAAA,EACtC,sBAAsB,EAAE,OAAA,EAAS,QAAA;AAAA,EACjC,uBAAuB,EAAE,OAAA,EAAS,QAAA;AAAA,EAClC,2BAA2B,EAAE,OAAA,EAAS,QAAA;AAAA,EACtC,yBAAyB,EAAE,OAAA,EAAS,QAAA;AAAA,EACpC,sBAAsB,EAAE,OAAA,EAAS,QAAA;AAAA,EACjC,0BAA0B,EAAE,OAAA,EAAS,QAAA;AAAA,EACrC,yBAAyB,EAAE,OAAA,EAAS,QAAA;AAAA,EACpC,0BAA0B,EAAE,OAAA,EAAS,QAAA;AAAA,EACrC,8BAA8B,EAAE,OAAA,EAAS,QAAA;AAAA,EACzC,4BAA4B,EAAE,OAAA,EAAS,QAAA;AAAA,EACvC,yBAAyB,EAAE,OAAA,EAAS,QAAA;AAAA,EACpC,6BAA6B,EAAE,OAAA,EAAS,QAAA;AAC1C,CAAC,EACA,YAAA;"}
@@ -1,61 +1,29 @@
1
1
  import { clampScore } from "./standards-sdk.es119.js";
2
- import { readNumber, readSubjectMetrics } from "./standards-sdk.es178.js";
3
- import "./standards-sdk.es162.js";
4
- import "./standards-sdk.es175.js";
5
- import "./standards-sdk.es176.js";
6
- import "./standards-sdk.es177.js";
7
- import { normalizeRatio, logScale } from "./standards-sdk.es163.js";
8
- const DEFAULT_INCLUDED_REGISTRIES = ["virtuals-protocol"];
9
- const MISSING = { value: 0, status: "missing" };
10
- function readAcpField(subject, key) {
11
- const metricsValue = readNumber(readSubjectMetrics(subject), key);
12
- if (metricsValue !== null) {
13
- return metricsValue;
2
+ function clampUnit(value) {
3
+ return Math.min(1, Math.max(0, value));
4
+ }
5
+ function normalizeRatio(value) {
6
+ return clampUnit(value > 1 ? value / 100 : value);
7
+ }
8
+ function logScale(value, cap) {
9
+ if (cap <= 0) {
10
+ return 0;
14
11
  }
15
- const metadata = subject.metadata;
16
- return metadata ? readNumber(metadata, key) : null;
12
+ return clampScore(
13
+ 100 * clampUnit(Math.log1p(Math.max(0, value)) / Math.log1p(cap))
14
+ );
17
15
  }
18
- function createAcpAdapter(options = {}) {
19
- const volumeCap = options.volumeCap ?? 500;
20
- const revenueCap = options.revenueCap ?? 1e4;
21
- return {
22
- id: "acp",
23
- weight: 2,
24
- contributionMode: "scoped",
25
- includeRegistries: options.includeRegistries ?? DEFAULT_INCLUDED_REGISTRIES,
26
- components: [
27
- {
28
- name: "jobs.successRate",
29
- normalize: ({ subject }) => {
30
- const raw = readAcpField(subject, "successRate");
31
- return raw === null ? MISSING : { value: clampScore(normalizeRatio(raw) * 100), status: "ok" };
32
- }
33
- },
34
- {
35
- name: "jobs.deliveryVolume",
36
- normalize: ({ subject }) => {
37
- const volume = readAcpField(subject, "volume") ?? readAcpField(subject, "successfulJobCount");
38
- return volume === null ? MISSING : { value: logScale(volume, volumeCap), status: "ok" };
39
- }
40
- },
41
- {
42
- name: "jobs.revenue",
43
- normalize: ({ subject }) => {
44
- const revenue = readAcpField(subject, "revenue");
45
- return revenue === null ? MISSING : { value: logScale(revenue, revenueCap), status: "ok" };
46
- }
47
- },
48
- {
49
- name: "reviews.rating",
50
- normalize: ({ subject }) => {
51
- const rating = readAcpField(subject, "rating");
52
- return rating === null ? MISSING : { value: clampScore(rating / 5 * 100), status: "ok" };
53
- }
54
- }
55
- ]
56
- };
16
+ function meanOfPresent(values) {
17
+ const present = values.filter((value) => value !== null);
18
+ if (present.length === 0) {
19
+ return null;
20
+ }
21
+ return present.reduce((sum, value) => sum + value, 0) / present.length;
57
22
  }
58
23
  export {
59
- createAcpAdapter
24
+ clampUnit,
25
+ logScale,
26
+ meanOfPresent,
27
+ normalizeRatio
60
28
  };
61
29
  //# sourceMappingURL=standards-sdk.es164.js.map