openmerit 0.1.12 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +11 -27
  3. package/dist/pi/scout-extension.mjs +23 -10
  4. package/dist/terminal/scout-update.json +1 -1
  5. package/dist/terminal/src/browser.mjs +2 -4
  6. package/dist/terminal/src/cli.mjs +6 -56
  7. package/dist/terminal/src/install.mjs +3 -2
  8. package/dist/terminal/src/scout-instructions.js +23 -10
  9. package/dist/terminal/src/scout-pi.js +1 -1
  10. package/dist/terminal/src/scout.js +181 -0
  11. package/dist/terminal/src/telemetry.mjs +8 -60
  12. package/docs/agent-evaluations.md +8 -148
  13. package/docs/commands.md +4 -86
  14. package/docs/getting-started.md +2 -16
  15. package/docs/index.md +4 -27
  16. package/docs/inference-terminal.md +13 -655
  17. package/docs/pi-extension.md +1 -1
  18. package/docs/roadmap.md +4 -17
  19. package/docs/scout.md +34 -251
  20. package/docs/security.md +8 -33
  21. package/docs/testing.md +7 -47
  22. package/docs/troubleshooting.md +3 -3
  23. package/package.json +13 -46
  24. package/dist/core/src/index.d.ts +0 -101
  25. package/dist/core/src/index.js +0 -1649
  26. package/dist/core/src/store.d.ts +0 -35
  27. package/dist/core/src/store.js +0 -102
  28. package/dist/eval/src/adapters.mjs +0 -112
  29. package/dist/eval/src/cli.mjs +0 -151
  30. package/dist/eval/src/config.mjs +0 -108
  31. package/dist/eval/src/process.mjs +0 -44
  32. package/dist/eval/src/report.mjs +0 -59
  33. package/dist/eval/src/runner.mjs +0 -123
  34. package/dist/eval/src/scout.mjs +0 -48
  35. package/dist/protocol/src/index.d.ts +0 -484
  36. package/dist/protocol/src/index.js +0 -47
  37. package/dist/protocol/src/schemas.d.ts +0 -576
  38. package/dist/protocol/src/schemas.js +0 -280
  39. package/dist/terminal/public/app.js +0 -298
  40. package/dist/terminal/public/brands/anthropic.png +0 -0
  41. package/dist/terminal/public/brands/baai.png +0 -0
  42. package/dist/terminal/public/brands/baseten.png +0 -0
  43. package/dist/terminal/public/brands/cerebras.png +0 -0
  44. package/dist/terminal/public/brands/cohere.png +0 -0
  45. package/dist/terminal/public/brands/deepseek.ico +0 -0
  46. package/dist/terminal/public/brands/google.png +0 -0
  47. package/dist/terminal/public/brands/groq.ico +0 -0
  48. package/dist/terminal/public/brands/huggingface.svg +0 -8
  49. package/dist/terminal/public/brands/lm-studio.png +0 -0
  50. package/dist/terminal/public/brands/meta.ico +0 -0
  51. package/dist/terminal/public/brands/mistral.png +0 -0
  52. package/dist/terminal/public/brands/nomic.png +0 -0
  53. package/dist/terminal/public/brands/ollama.png +0 -0
  54. package/dist/terminal/public/brands/openai.png +0 -0
  55. package/dist/terminal/public/brands/openrouter.png +0 -0
  56. package/dist/terminal/public/brands/qwen.png +0 -0
  57. package/dist/terminal/public/brands/vllm.ico +0 -0
  58. package/dist/terminal/public/brands/vllm.png +0 -0
  59. package/dist/terminal/public/favicon.svg +0 -1
  60. package/dist/terminal/public/flow.css +0 -1
  61. package/dist/terminal/public/flow.js +0 -770
  62. package/dist/terminal/public/index.html +0 -22
  63. package/dist/terminal/public/styles.css +0 -1046
  64. package/dist/terminal/src/activity-merge.mjs +0 -66
  65. package/dist/terminal/src/collect.mjs +0 -370
  66. package/dist/terminal/src/coverage.mjs +0 -33
  67. package/dist/terminal/src/demo-policy.mjs +0 -205
  68. package/dist/terminal/src/discovery.mjs +0 -99
  69. package/dist/terminal/src/enterprise-sample.mjs +0 -151
  70. package/dist/terminal/src/hardware.mjs +0 -57
  71. package/dist/terminal/src/history.mjs +0 -32
  72. package/dist/terminal/src/log-continuity.mjs +0 -26
  73. package/dist/terminal/src/project-activity.mjs +0 -157
  74. package/dist/terminal/src/repository-background.mjs +0 -37
  75. package/dist/terminal/src/repository-index.mjs +0 -267
  76. package/dist/terminal/src/repository-policy.mjs +0 -3
  77. package/dist/terminal/src/repository-syntax.mjs +0 -236
  78. package/dist/terminal/src/repository-worker.mjs +0 -15
  79. package/dist/terminal/src/sample.mjs +0 -171
  80. package/dist/terminal/src/scout-credentials.d.ts +0 -12
  81. package/dist/terminal/src/scout-credentials.ts +0 -44
  82. package/dist/terminal/src/scout-instructions.d.ts +0 -5
  83. package/dist/terminal/src/scout-instructions.ts +0 -106
  84. package/dist/terminal/src/scout-pi.d.ts +0 -44
  85. package/dist/terminal/src/scout-pi.ts +0 -76
  86. package/dist/terminal/src/server.mjs +0 -95
  87. package/dist/terminal/src/service-registry.mjs +0 -78
  88. package/dist/terminal/src/services.mjs +0 -44
  89. package/dist/terminal/src/topology.mjs +0 -30
  90. package/dist/terminal/src/updates.d.ts +0 -62
  91. package/dist/terminal/src/updates.ts +0 -313
  92. package/docs/adapter-guide.md +0 -191
  93. package/docs/architecture.md +0 -61
  94. package/docs/automation.md +0 -76
  95. package/docs/budgets.md +0 -39
  96. package/docs/demo-backfill.md +0 -31
  97. package/docs/demo-fieldkit.md +0 -49
  98. package/docs/demo-placement.md +0 -32
  99. package/docs/demo-spam.md +0 -17
  100. package/docs/demo-support.md +0 -44
  101. package/docs/demo.md +0 -74
  102. package/docs/first-trial.md +0 -62
  103. package/docs/interactive-demo.md +0 -118
  104. package/docs/lifecycle.md +0 -32
  105. package/docs/metrics-and-evidence.md +0 -48
  106. package/docs/operations.md +0 -40
  107. package/docs/pareto-spec.md +0 -76
  108. package/docs/ux-reference.md +0 -32
@@ -1,280 +0,0 @@
1
- import { Type } from "typebox";
2
- import { Check, Errors } from "typebox/value";
3
- export const OPENMERIT_SCHEMA_DIALECT = "https://json-schema.org/draft/2020-12/schema";
4
- export const OPENMERIT_RESULT_SCHEMA_VERSION = "0.2";
5
- const strictObject = (properties, options = {}) => Type.Object(properties, { additionalProperties: false, ...options });
6
- const metricIds = [
7
- "task_quality", "task_success", "consistency", "instruction_following",
8
- "tool_use_performance", "structured_output_reliability", "hallucination_rate",
9
- "reasoning_efficiency", "input_token_consumption", "output_token_consumption",
10
- "total_task_cost", "cost_per_successful_task", "time_to_first_useful_output",
11
- "end_to_end_task_latency", "throughput", "retry_rate", "agent_steps",
12
- "recovery_ability", "context_handling", "retrieval_use_quality",
13
- "long_horizon_performance", "human_intervention_rate", "preference_fit",
14
- ];
15
- const evidenceSources = [
16
- "harness_trace", "evaluation_artifact", "observability_record", "external_source", "user_feedback",
17
- ];
18
- const stringEnum = (values) => Type.Union(values.map((value) => Type.Literal(value)));
19
- const cadenceSchema = () => strictObject({
20
- afterCompletedTasks: Type.Optional(Type.Integer({ minimum: 1 })),
21
- afterElapsedSeconds: Type.Optional(Type.Integer({ minimum: 1 })),
22
- });
23
- export const EvidenceReferenceSchema = strictObject({
24
- id: Type.String({ minLength: 1 }),
25
- source: stringEnum(evidenceSources),
26
- uri: Type.String({ minLength: 1 }),
27
- mediaType: Type.Optional(Type.String({ minLength: 1 })),
28
- digest: Type.Optional(Type.String({ minLength: 1 })),
29
- });
30
- export const MetricObjectiveSchema = strictObject({
31
- metricId: stringEnum(metricIds),
32
- required: Type.Boolean(),
33
- minimumSamples: Type.Integer({ minimum: 1 }),
34
- tolerance: Type.Number({ minimum: 0 }),
35
- samplingPlan: strictObject({
36
- strategy: stringEnum([
37
- "single_run", "repeated_same_input", "representative_task_set",
38
- "repeated_representative_task_set", "load_test",
39
- ]),
40
- representativeCaseCount: Type.Integer({ minimum: 1 }),
41
- repetitionsPerCase: Type.Integer({ minimum: 1 }),
42
- aggregation: stringEnum(["single_value", "mean", "rate", "distribution", "percentile"]),
43
- rationale: Type.String({ minLength: 1 }),
44
- }),
45
- constraint: Type.Optional(strictObject({
46
- operator: stringEnum(["at_least", "at_most"]),
47
- value: Type.Number(),
48
- })),
49
- });
50
- export const ApplicationLlmTargetSchema = strictObject({
51
- id: Type.String({ minLength: 1 }),
52
- kind: Type.Literal("application_llm_call"),
53
- name: Type.String({ minLength: 1 }),
54
- applicationId: Type.String({ minLength: 1 }),
55
- callSites: Type.Array(Type.String({ minLength: 1 }), { minItems: 1 }),
56
- routeKey: Type.String({ minLength: 1 }),
57
- confirmedAt: Type.String({ minLength: 1 }),
58
- });
59
- export const TaskProfileSchema = strictObject({
60
- id: Type.String({ minLength: 1 }),
61
- revision: Type.Integer({ minimum: 1 }),
62
- name: Type.String({ minLength: 1 }),
63
- goal: Type.String({ minLength: 1 }),
64
- applicationTarget: ApplicationLlmTargetSchema,
65
- objectives: Type.Array(MetricObjectiveSchema, { minItems: 1 }),
66
- createdAt: Type.String({ minLength: 1 }),
67
- confirmedAt: Type.Optional(Type.String({ minLength: 1 })),
68
- });
69
- export const ObservabilityCoverageSchema = strictObject({
70
- targetId: Type.String({ minLength: 1 }),
71
- status: stringEnum(["ready", "incomplete"]),
72
- requiredMetricIds: Type.Array(stringEnum(metricIds)),
73
- coveredMetricIds: Type.Array(stringEnum(metricIds)),
74
- missingMetricIds: Type.Array(stringEnum(metricIds)),
75
- checkedAt: Type.String({ minLength: 1 }),
76
- });
77
- const ConfirmedTaskProfileSchema = strictObject({
78
- ...TaskProfileSchema.properties,
79
- confirmedAt: Type.String({ minLength: 1 }),
80
- });
81
- export const SupervisedGraduationPolicySchema = strictObject({
82
- mode: Type.Literal("supervised_graduation"),
83
- evaluationBudget: strictObject({
84
- currency: Type.String({ minLength: 1 }),
85
- maximumSpend: Type.Number({ minimum: 0 }),
86
- maximumCandidateCount: Type.Optional(Type.Integer({ minimum: 1 })),
87
- maximumRunsPerCandidate: Type.Optional(Type.Integer({ minimum: 1 })),
88
- expiresAt: Type.Optional(Type.String({ minLength: 1 })),
89
- }),
90
- automaticSwapsEnabled: Type.Boolean(),
91
- confirmationRequiredUntilVerifiedSwaps: Type.Integer({ minimum: 0 }),
92
- requirePostSwapVerification: Type.Literal(true),
93
- rollbackOnRegression: Type.Boolean(),
94
- checkPolicy: strictObject({
95
- baselineAssessment: cadenceSchema(),
96
- frontierReassessment: strictObject({
97
- afterCompletedTasks: Type.Optional(Type.Integer({ minimum: 1 })),
98
- afterElapsedSeconds: Type.Optional(Type.Integer({ minimum: 1 })),
99
- onModelCatalogChange: Type.Boolean(),
100
- }),
101
- regressionCheck: strictObject({
102
- afterCompletedTasks: Type.Optional(Type.Integer({ minimum: 1 })),
103
- afterElapsedSeconds: Type.Optional(Type.Integer({ minimum: 1 })),
104
- thresholds: Type.Array(strictObject({
105
- metricId: stringEnum(metricIds),
106
- relativeChangeAtLeast: Type.Number({ exclusiveMinimum: 0 }),
107
- })),
108
- }),
109
- postSwapVerification: cadenceSchema(),
110
- cooldownSeconds: Type.Integer({ minimum: 0 }),
111
- execution: strictObject({
112
- mode: stringEnum(["active_session_only", "persistent"]),
113
- infrastructureChangesAllowed: Type.Boolean(),
114
- }),
115
- }),
116
- });
117
- export const MetricRecordSchema = strictObject({
118
- targetId: Type.String({ minLength: 1 }),
119
- metricId: stringEnum(metricIds),
120
- state: stringEnum(["measured", "not_applicable", "not_configured", "insufficient_evidence"]),
121
- scope: stringEnum(["single_run", "sample_window"]),
122
- direction: stringEnum(["maximize", "minimize"]),
123
- method: stringEnum(["observed", "derived", "evaluator", "human", "external"]),
124
- aggregation: stringEnum(["single_value", "sum", "mean", "rate", "distribution", "percentile"]),
125
- value: Type.Optional(Type.Number()),
126
- unit: Type.String({ minLength: 1 }),
127
- sampleCount: Type.Integer({ minimum: 0 }),
128
- interval: Type.Optional(strictObject({
129
- lower: Type.Number(),
130
- upper: Type.Number(),
131
- confidenceLevel: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })),
132
- })),
133
- window: Type.Optional(strictObject({
134
- startedAt: Type.String({ minLength: 1 }),
135
- endedAt: Type.String({ minLength: 1 }),
136
- })),
137
- evidence: Type.Array(EvidenceReferenceSchema),
138
- note: Type.Optional(Type.String()),
139
- });
140
- export const CandidateDescriptorSchema = strictObject({
141
- targetId: Type.String({ minLength: 1 }),
142
- candidateId: Type.String({ minLength: 1 }),
143
- modelId: Type.String({ minLength: 1 }),
144
- modelVersion: Type.Optional(Type.String({ minLength: 1 })),
145
- reasons: Type.Array(Type.String()),
146
- });
147
- export const PreliminaryModelLeadSchema = strictObject({
148
- targetId: Type.String({ minLength: 1 }),
149
- modelId: Type.String({ minLength: 1 }),
150
- modelVersion: Type.Optional(Type.String({ minLength: 1 })),
151
- estimatedPrice: strictObject({
152
- currency: Type.String({ minLength: 1 }),
153
- inputPerMillionTokens: Type.Number({ minimum: 0 }),
154
- outputPerMillionTokens: Type.Number({ minimum: 0 }),
155
- sourceUri: Type.String({ minLength: 1 }),
156
- checkedAt: Type.String({ minLength: 1 }),
157
- }),
158
- reputation: strictObject({
159
- summary: Type.String({ minLength: 1 }),
160
- sourceUri: Type.String({ minLength: 1 }),
161
- checkedAt: Type.String({ minLength: 1 }),
162
- }),
163
- });
164
- export const CandidateAssessmentSchema = strictObject({
165
- id: Type.String({ minLength: 1 }),
166
- targetId: Type.String({ minLength: 1 }),
167
- taskProfileId: Type.String({ minLength: 1 }),
168
- taskProfileRevision: Type.Integer({ minimum: 1 }),
169
- candidateId: Type.String({ minLength: 1 }),
170
- modelId: Type.String({ minLength: 1 }),
171
- modelVersion: Type.Optional(Type.String({ minLength: 1 })),
172
- productRevision: Type.String({ minLength: 1 }),
173
- harnessId: Type.String({ minLength: 1 }),
174
- startedAt: Type.String({ minLength: 1 }),
175
- completedAt: Type.String({ minLength: 1 }),
176
- metrics: Type.Array(MetricRecordSchema),
177
- });
178
- export const FrontierSnapshotSchema = strictObject({
179
- id: Type.String({ minLength: 1 }),
180
- targetId: Type.String({ minLength: 1 }),
181
- taskProfileId: Type.String({ minLength: 1 }),
182
- taskProfileRevision: Type.Integer({ minimum: 1 }),
183
- productRevision: Type.String({ minLength: 1 }),
184
- createdAt: Type.String({ minLength: 1 }),
185
- frontierCandidateIds: Type.Array(Type.String()),
186
- dominatedCandidateIds: Type.Array(Type.String()),
187
- ineligibleCandidateIds: Type.Array(Type.String()),
188
- unresolvedCandidateIds: Type.Array(Type.String()),
189
- comparisons: Type.Array(strictObject({
190
- candidateId: Type.String({ minLength: 1 }),
191
- otherCandidateId: Type.String({ minLength: 1 }),
192
- state: stringEnum(["dominates", "does_not_dominate", "unresolved"]),
193
- reasons: Type.Array(Type.String()),
194
- })),
195
- assessmentIds: Type.Array(Type.String()),
196
- calculationEvidence: Type.Array(EvidenceReferenceSchema, { minItems: 1 }),
197
- });
198
- export const FrontierRecommendationSchema = strictObject({
199
- targetId: Type.String({ minLength: 1 }),
200
- frontierSnapshotId: Type.String({ minLength: 1 }),
201
- selectedCandidateId: Type.String({ minLength: 1 }),
202
- currentCandidateId: Type.String({ minLength: 1 }),
203
- reasons: Type.Array(Type.String()),
204
- preferenceEvidence: Type.Array(EvidenceReferenceSchema),
205
- });
206
- export const INTENT_OUTPUT_SCHEMAS = {
207
- establish_evals: strictObject({
208
- taskProfile: ConfirmedTaskProfileSchema,
209
- incumbent: CandidateDescriptorSchema,
210
- policy: SupervisedGraduationPolicySchema,
211
- observability: ObservabilityCoverageSchema,
212
- preliminaryModelLeads: Type.Optional(Type.Array(PreliminaryModelLeadSchema)),
213
- }),
214
- instrument_observability: strictObject({
215
- targetId: Type.String({ minLength: 1 }),
216
- coveredMetricIds: Type.Array(stringEnum(metricIds)),
217
- missingMetricIds: Type.Array(stringEnum(metricIds)),
218
- }),
219
- run_assessment: strictObject({
220
- targetId: Type.String({ minLength: 1 }),
221
- baselineEvidenceSufficient: Type.Boolean(),
222
- metrics: Type.Array(MetricRecordSchema),
223
- }),
224
- discover_candidates: strictObject({
225
- targetId: Type.String({ minLength: 1 }),
226
- candidates: Type.Array(CandidateDescriptorSchema),
227
- }),
228
- run_challenger_trials: strictObject({
229
- targetId: Type.String({ minLength: 1 }),
230
- assessments: Type.Array(CandidateAssessmentSchema),
231
- experimentManifest: EvidenceReferenceSchema,
232
- }),
233
- calculate_frontier: strictObject({
234
- targetId: Type.String({ minLength: 1 }),
235
- assessments: Type.Array(CandidateAssessmentSchema),
236
- frontierSnapshot: FrontierSnapshotSchema,
237
- recommendation: Type.Optional(FrontierRecommendationSchema),
238
- }),
239
- investigate_regression: strictObject({
240
- targetId: Type.String({ minLength: 1 }),
241
- regressionDetected: Type.Boolean(),
242
- affectedMetricIds: Type.Array(stringEnum(metricIds)),
243
- likelyCause: Type.Optional(Type.String()),
244
- }),
245
- apply_model_swap: strictObject({
246
- targetId: Type.String({ minLength: 1 }),
247
- appliedCandidateId: Type.String({ minLength: 1 }),
248
- previousCandidateId: Type.Optional(Type.String({ minLength: 1 })),
249
- }),
250
- verify_model_swap: strictObject({
251
- targetId: Type.String({ minLength: 1 }),
252
- verified: Type.Boolean(),
253
- regressionDetected: Type.Boolean(),
254
- }),
255
- rollback_model_swap: strictObject({
256
- targetId: Type.String({ minLength: 1 }),
257
- restoredCandidateId: Type.String({ minLength: 1 }),
258
- }),
259
- };
260
- export function intentOutputSchemaFor(kind) {
261
- return INTENT_OUTPUT_SCHEMAS[kind];
262
- }
263
- export function validateIntentOutputSchema(kind, output) {
264
- const schema = intentOutputSchemaFor(kind);
265
- if (Check(schema, output))
266
- return [];
267
- return [...Errors(schema, output)].map((error) => `${error.instancePath || "/"} ${error.message}`);
268
- }
269
- export function completionToolSchemaFor(kind) {
270
- return strictObject({
271
- intentId: Type.String({ minLength: 1 }),
272
- status: stringEnum(["succeeded", "failed", "cancelled"]),
273
- summary: Type.String({ minLength: 1 }),
274
- evidence: Type.Array(EvidenceReferenceSchema),
275
- outputs: Type.Optional(intentOutputSchemaFor(kind)),
276
- errorCode: Type.Optional(Type.String({ minLength: 1 })),
277
- errorMessage: Type.Optional(Type.String({ minLength: 1 })),
278
- retryable: Type.Optional(Type.Boolean()),
279
- });
280
- }