@shapeshift-labs/frontier-swarm 0.5.11 → 0.5.13

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 (51) hide show
  1. package/README.md +38 -3
  2. package/benchmarks/package-bench-rows.mjs +21 -0
  3. package/dist/constants.d.ts +4 -0
  4. package/dist/constants.d.ts.map +1 -1
  5. package/dist/constants.js +4 -0
  6. package/dist/constants.js.map +1 -1
  7. package/dist/coordinator-dashboard-types.d.ts +2 -0
  8. package/dist/coordinator-dashboard-types.d.ts.map +1 -1
  9. package/dist/coordinator-dashboard.d.ts.map +1 -1
  10. package/dist/coordinator-dashboard.js +2 -0
  11. package/dist/coordinator-dashboard.js.map +1 -1
  12. package/dist/coordinator-scoring.d.ts.map +1 -1
  13. package/dist/coordinator-scoring.js +9 -0
  14. package/dist/coordinator-scoring.js.map +1 -1
  15. package/dist/coordinator-types.d.ts +2 -0
  16. package/dist/coordinator-types.d.ts.map +1 -1
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/merge-wrappers.d.ts.map +1 -1
  22. package/dist/merge-wrappers.js +33 -0
  23. package/dist/merge-wrappers.js.map +1 -1
  24. package/dist/semantic-normalization.d.ts.map +1 -1
  25. package/dist/semantic-normalization.js +33 -0
  26. package/dist/semantic-normalization.js.map +1 -1
  27. package/dist/semantic-types.d.ts +36 -0
  28. package/dist/semantic-types.d.ts.map +1 -1
  29. package/dist/tournament-merge.d.ts +5 -0
  30. package/dist/tournament-merge.d.ts.map +1 -0
  31. package/dist/tournament-merge.js +100 -0
  32. package/dist/tournament-merge.js.map +1 -0
  33. package/dist/tournament-runtime-helpers.d.ts +9 -0
  34. package/dist/tournament-runtime-helpers.d.ts.map +1 -0
  35. package/dist/tournament-runtime-helpers.js +114 -0
  36. package/dist/tournament-runtime-helpers.js.map +1 -0
  37. package/dist/tournament-runtime.d.ts +6 -0
  38. package/dist/tournament-runtime.d.ts.map +1 -0
  39. package/dist/tournament-runtime.js +197 -0
  40. package/dist/tournament-runtime.js.map +1 -0
  41. package/dist/tournament-scoring.d.ts +18 -0
  42. package/dist/tournament-scoring.d.ts.map +1 -0
  43. package/dist/tournament-scoring.js +129 -0
  44. package/dist/tournament-scoring.js.map +1 -0
  45. package/dist/tournament-types.d.ts +264 -0
  46. package/dist/tournament-types.d.ts.map +1 -0
  47. package/dist/tournament-types.js +2 -0
  48. package/dist/tournament-types.js.map +1 -0
  49. package/dist/types.d.ts +1 -0
  50. package/dist/types.d.ts.map +1 -1
  51. package/package.json +1 -1
@@ -0,0 +1,197 @@
1
+ import { FRONTIER_SWARM_STRATEGY_CERTIFICATE_KIND, FRONTIER_SWARM_STRATEGY_CERTIFICATE_VERSION, FRONTIER_SWARM_STRATEGY_TOURNAMENT_KIND, FRONTIER_SWARM_STRATEGY_TOURNAMENT_VERSION } from './constants.js';
2
+ import { stableHash, toJsonObject, uniqueStrings } from './internal.js';
3
+ import { normalizeId, titleFromId } from './record-helpers.js';
4
+ import { finite, isRejectedOutcome, isUndefinedOutcome, isVerifiedOutcome, normalizeScoringPolicy, nonNegative, normalizeComponentValue, normalizeNumberRecord, normalizeStringRecord, positive, scoreSwarmPayoffVector } from './tournament-scoring.js';
5
+ import { assertCompatibleId, countSwarmTournamentOutcomes, groupSwarmTournamentMatchIds, isSwarmPayoffVector, matchSwarmTournamentQuery, rankSwarmStrategyStandings, validateSwarmExistingPayoff } from './tournament-runtime-helpers.js';
6
+ export function createSwarmStrategyCertificate(input = {}) {
7
+ const commands = uniqueStrings(input.commands ?? []);
8
+ const proofRefs = uniqueStrings(input.proofRefs ?? []);
9
+ const traceRefs = uniqueStrings(input.traceRefs ?? []);
10
+ const evidencePaths = uniqueStrings(input.evidencePaths ?? []);
11
+ const hashes = normalizeStringRecord(input.hashes);
12
+ const durationMs = nonNegative(input.durationMs);
13
+ return {
14
+ kind: FRONTIER_SWARM_STRATEGY_CERTIFICATE_KIND,
15
+ version: FRONTIER_SWARM_STRATEGY_CERTIFICATE_VERSION,
16
+ id: input.id ?? 'swarm-strategy-certificate:' + stableHash([input.strategyId, input.gameId, commands, proofRefs, traceRefs, hashes, durationMs]),
17
+ ...(input.strategyId ? { strategyId: input.strategyId } : {}),
18
+ ...(input.gameId ? { gameId: input.gameId } : {}),
19
+ replayable: input.replayable ?? (commands.length > 0 || proofRefs.length > 0 || traceRefs.length > 0),
20
+ commands,
21
+ proofRefs,
22
+ traceRefs,
23
+ hashes,
24
+ durationMs,
25
+ evidencePaths,
26
+ ...(toJsonObject(input.metadata) ? { metadata: toJsonObject(input.metadata) } : {})
27
+ };
28
+ }
29
+ export function createSwarmPayoffVector(input) {
30
+ const strategyId = normalizeId(input.strategyId, 'payoff strategy id');
31
+ const gameId = input.gameId ?? input.certificate?.gameId;
32
+ const outcome = input.outcome ?? 'candidate';
33
+ assertCompatibleId('certificate.strategyId', strategyId, input.certificate?.strategyId);
34
+ assertCompatibleId('certificate.gameId', gameId, input.certificate?.gameId);
35
+ const scoringPolicy = input.scoringPolicy ? normalizeScoringPolicy(input.scoringPolicy) : undefined;
36
+ const components = normalizeComponents(input.components, scoringPolicy?.components);
37
+ const penalties = normalizeNumberRecord(input.penalties);
38
+ const costs = normalizeNumberRecord(input.costs);
39
+ const search = normalizeSearch(input.search);
40
+ const certificate = input.certificate ? createSwarmStrategyCertificate({
41
+ ...input.certificate,
42
+ strategyId,
43
+ gameId
44
+ }) : undefined;
45
+ const evidencePaths = uniqueStrings([
46
+ ...(input.evidencePaths ?? []),
47
+ ...(search.evidencePaths ?? []),
48
+ ...(certificate?.evidencePaths ?? [])
49
+ ]);
50
+ const score = scoreSwarmPayoffVector({ components, penalties, outcome, costs, search, certificate }, scoringPolicy);
51
+ return {
52
+ id: input.id ?? 'swarm-payoff:' + stableHash([strategyId, gameId, input.matchId, outcome, components, penalties, costs, search, certificate, scoringPolicy]),
53
+ strategyId,
54
+ ...(gameId ? { gameId } : {}),
55
+ ...(input.matchId ? { matchId: input.matchId } : {}),
56
+ outcome,
57
+ components,
58
+ penalties,
59
+ costs,
60
+ search,
61
+ ...(certificate ? { certificate } : {}),
62
+ ...(scoringPolicy ? { scoringPolicy } : {}),
63
+ evidencePaths,
64
+ tags: uniqueStrings(input.tags ?? []),
65
+ score,
66
+ ...(toJsonObject(input.metadata) ? { metadata: toJsonObject(input.metadata) } : {})
67
+ };
68
+ }
69
+ export function createSwarmStrategyTournament(input = {}) {
70
+ const generatedAt = input.generatedAt ?? Date.now();
71
+ const strategies = (input.strategies ?? []).map(normalizeStrategy);
72
+ const games = (input.games ?? []).map(normalizeGame);
73
+ const scoringPolicy = normalizeScoringPolicy(input.scoringPolicy);
74
+ const matches = (input.matches ?? []).map((match) => normalizeMatch(match, scoringPolicy));
75
+ const strategyIds = uniqueStrings([...strategies.map((strategy) => strategy.id), ...matches.map((match) => match.strategyId)]);
76
+ const gameIds = uniqueStrings([...games.map((game) => game.id), ...matches.map((match) => match.gameId).filter((id) => !!id)]);
77
+ const standings = rankSwarmStrategyStandings(matches, strategyIds);
78
+ const byStrategy = groupSwarmTournamentMatchIds(matches, (match) => match.strategyId, strategyIds);
79
+ const byGame = groupSwarmTournamentMatchIds(matches, (match) => match.gameId ?? 'unscoped', uniqueStrings([...gameIds, 'unscoped']));
80
+ const outcomeCounts = countSwarmTournamentOutcomes(matches);
81
+ const top = standings[0];
82
+ return {
83
+ kind: FRONTIER_SWARM_STRATEGY_TOURNAMENT_KIND,
84
+ version: FRONTIER_SWARM_STRATEGY_TOURNAMENT_VERSION,
85
+ id: input.id ?? 'swarm-strategy-tournament:' + stableHash([strategies, games, matches, scoringPolicy, generatedAt]),
86
+ title: input.title ?? 'Swarm Strategy Tournament',
87
+ generatedAt,
88
+ strategies,
89
+ games,
90
+ matches,
91
+ standings,
92
+ byStrategy,
93
+ byGame,
94
+ scoringPolicy,
95
+ summary: {
96
+ strategyCount: strategies.length,
97
+ gameCount: games.length,
98
+ matchCount: matches.length,
99
+ verifiedCount: matches.filter((match) => isVerifiedOutcome(match.payoff.outcome)).length,
100
+ rejectedCount: matches.filter((match) => isRejectedOutcome(match.payoff.outcome)).length,
101
+ undefinedCount: matches.filter((match) => isUndefinedOutcome(match.payoff.outcome)).length,
102
+ outcomeCounts,
103
+ ...(top ? { topStrategyId: top.strategyId, topScore: top.score } : {})
104
+ },
105
+ ...(toJsonObject(input.metadata) ? { metadata: toJsonObject(input.metadata) } : {})
106
+ };
107
+ }
108
+ export function querySwarmStrategyTournament(tournament, query = {}) {
109
+ const strategyById = new Map(tournament.strategies.map((strategy) => [strategy.id, strategy]));
110
+ const gameById = new Map(tournament.games.map((game) => [game.id, game]));
111
+ const matches = tournament.matches.filter((match) => matchSwarmTournamentQuery(match, query, strategyById, gameById));
112
+ const strategyIds = new Set(matches.map((match) => match.strategyId));
113
+ const gameIds = new Set(matches.map((match) => match.gameId).filter((id) => !!id));
114
+ return createSwarmStrategyTournament({
115
+ id: tournament.id + ':query:' + stableHash(query),
116
+ title: tournament.title + ' Query',
117
+ strategies: tournament.strategies.filter((strategy) => strategyIds.has(strategy.id)),
118
+ games: tournament.games.filter((game) => gameIds.has(game.id)),
119
+ matches,
120
+ scoringPolicy: tournament.scoringPolicy,
121
+ generatedAt: tournament.generatedAt,
122
+ metadata: tournament.metadata
123
+ });
124
+ }
125
+ function normalizeStrategy(input) {
126
+ return {
127
+ id: normalizeId(input.id, 'strategy id'),
128
+ title: input.title ?? titleFromId(input.id),
129
+ ...(input.family ? { family: input.family } : {}),
130
+ ...(input.lane ? { lane: input.lane } : {}),
131
+ ...(input.description ? { description: input.description } : {}),
132
+ tags: uniqueStrings(input.tags ?? []),
133
+ ...(toJsonObject(input.metadata) ? { metadata: toJsonObject(input.metadata) } : {})
134
+ };
135
+ }
136
+ function normalizeGame(input) {
137
+ return {
138
+ id: normalizeId(input.id, 'game id'),
139
+ title: input.title ?? titleFromId(input.id),
140
+ ...(input.objective ? { objective: input.objective } : {}),
141
+ fixtures: uniqueStrings(input.fixtures ?? []),
142
+ ownershipRegions: uniqueStrings(input.ownershipRegions ?? []),
143
+ resources: normalizeNumberRecord(input.resources),
144
+ tags: uniqueStrings(input.tags ?? []),
145
+ ...(toJsonObject(input.metadata) ? { metadata: toJsonObject(input.metadata) } : {})
146
+ };
147
+ }
148
+ function normalizeMatch(input, scoringPolicy) {
149
+ const payoff = isSwarmPayoffVector(input.payoff)
150
+ ? validateSwarmExistingPayoff(input.payoff, input.strategyId, input.gameId)
151
+ : createSwarmPayoffVector({
152
+ ...input.payoff,
153
+ strategyId: input.strategyId ?? input.payoff.strategyId,
154
+ gameId: input.gameId ?? input.payoff.gameId,
155
+ scoringPolicy: input.payoff.scoringPolicy ?? scoringPolicy
156
+ });
157
+ const id = input.id ?? payoff.matchId ?? 'swarm-strategy-match:' + stableHash([payoff.strategyId, payoff.gameId, payoff.id]);
158
+ return {
159
+ id,
160
+ strategyId: input.strategyId ?? payoff.strategyId,
161
+ ...(input.gameId ?? payoff.gameId ? { gameId: input.gameId ?? payoff.gameId } : {}),
162
+ opponentStrategyIds: uniqueStrings(input.opponentStrategyIds ?? []),
163
+ payoff,
164
+ evidencePaths: uniqueStrings([...(input.evidencePaths ?? []), ...payoff.evidencePaths]),
165
+ ...(toJsonObject(input.metadata) ? { metadata: toJsonObject(input.metadata) } : {})
166
+ };
167
+ }
168
+ function normalizeComponents(input = {}, policies = {}) {
169
+ const out = {};
170
+ for (const [name, value] of Object.entries(input).sort(([left], [right]) => left.localeCompare(right))) {
171
+ const component = typeof value === 'number' ? { value } : value;
172
+ const policy = policies[name];
173
+ const direction = component.direction ?? policy?.direction ?? 'maximize';
174
+ out[name] = {
175
+ value: finite(component.value),
176
+ normalized: normalizeComponentValue(component.value, direction, policy?.min, policy?.max),
177
+ weight: positive(component.weight, policy?.weight ?? 1),
178
+ direction,
179
+ ...(component.reason ? { reason: component.reason } : {}),
180
+ ...(toJsonObject(component.metadata) ? { metadata: toJsonObject(component.metadata) } : {})
181
+ };
182
+ }
183
+ return out;
184
+ }
185
+ function normalizeSearch(input = {}) {
186
+ return {
187
+ attempts: Math.floor(nonNegative(input.attempts)),
188
+ durationMs: nonNegative(input.durationMs),
189
+ tokens: Math.floor(nonNegative(input.tokens)),
190
+ costUsd: nonNegative(input.costUsd),
191
+ exploredStates: Math.floor(nonNegative(input.exploredStates)),
192
+ strategyPath: uniqueStrings(input.strategyPath ?? []),
193
+ evidencePaths: uniqueStrings(input.evidencePaths ?? []),
194
+ ...(toJsonObject(input.metadata) ? { metadata: toJsonObject(input.metadata) } : {})
195
+ };
196
+ }
197
+ //# sourceMappingURL=tournament-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tournament-runtime.js","sourceRoot":"","sources":["../src/tournament-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { FrontierSwarmPayoffComponent, FrontierSwarmPayoffDirection, FrontierSwarmPayoffScoringPolicy, FrontierSwarmPayoffScoringPolicyInput, FrontierSwarmPayoffVector } from './tournament-types.js';
2
+ export declare const DEFAULT_OUTCOME_MULTIPLIER: Record<string, number>;
3
+ export declare function normalizeScoringPolicy(input?: FrontierSwarmPayoffScoringPolicyInput): FrontierSwarmPayoffScoringPolicy;
4
+ export declare function scoreSwarmPayoffVector(input: Pick<FrontierSwarmPayoffVector, 'components' | 'penalties' | 'outcome'> & Partial<Pick<FrontierSwarmPayoffVector, 'costs' | 'search' | 'certificate'>>, policy?: FrontierSwarmPayoffScoringPolicyInput | FrontierSwarmPayoffScoringPolicy): number;
5
+ export declare function normalizeComponentValue(value: number, direction: FrontierSwarmPayoffDirection, min?: number, max?: number): number;
6
+ export declare function costFromPayoff(payoff: FrontierSwarmPayoffVector, kind: string): number;
7
+ export declare function normalizeNumberRecord(input: Record<string, number> | undefined): Record<string, number>;
8
+ export declare function isVerifiedOutcome(outcome: string): boolean;
9
+ export declare function isRejectedOutcome(outcome: string): boolean;
10
+ export declare function isUndefinedOutcome(outcome: string): boolean;
11
+ export declare function normalizeStringRecord(input: Record<string, string> | undefined): Record<string, string>;
12
+ export declare function meanComponentValues(components: readonly FrontierSwarmPayoffComponent[]): number;
13
+ export declare function clamp01(value: number | undefined): number;
14
+ export declare function positive(value: number | undefined, fallback: number): number;
15
+ export declare function nonNegative(value: number | undefined): number;
16
+ export declare function finite(value: number | undefined, fallback?: number): number;
17
+ export declare function round2(value: number): number;
18
+ //# sourceMappingURL=tournament-scoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tournament-scoring.d.ts","sourceRoot":"","sources":["../src/tournament-scoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,4BAA4B,EAC5B,gCAAgC,EAChC,qCAAqC,EACrC,yBAAyB,EAC1B,MAAM,uBAAuB,CAAC;AAG/B,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAU7D,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,KAAK,GAAE,qCAA0C,GAAG,gCAAgC,CA2B1H;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAC,CAAC,EAC7J,MAAM,GAAE,qCAAqC,GAAG,gCAAqC,GACpF,MAAM,CAaR;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,4BAA4B,EAAE,GAAG,SAAI,EAAE,GAAG,SAAI,GAAG,MAAM,CAIxH;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAItF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGvG;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGvG;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,SAAS,4BAA4B,EAAE,GAAG,MAAM,CAG/F;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEzD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG5E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE7D;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,SAAI,GAAG,MAAM,CAEtE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5C"}
@@ -0,0 +1,129 @@
1
+ import { stableHash, toJsonObject } from './internal.js';
2
+ export const DEFAULT_OUTCOME_MULTIPLIER = {
3
+ verified: 1,
4
+ accepted: 0.98,
5
+ candidate: 0.82,
6
+ discovery: 0.55,
7
+ blocked: 0.35,
8
+ timeout: 0.25,
9
+ error: 0.2,
10
+ rejected: 0.1,
11
+ undefined: 0
12
+ };
13
+ export function normalizeScoringPolicy(input = {}) {
14
+ const components = Object.fromEntries(Object.entries(input.components ?? {}).sort(([left], [right]) => left.localeCompare(right)).map(([name, value]) => {
15
+ const min = finite(value.min);
16
+ const max = finite(value.max, 1);
17
+ return [name, {
18
+ weight: positive(value.weight, 1),
19
+ direction: value.direction ?? 'maximize',
20
+ min,
21
+ max: max === min ? min + 1 : max,
22
+ ...(value.unit ? { unit: value.unit } : {}),
23
+ ...(value.description ? { description: value.description } : {}),
24
+ ...(toJsonObject(value.metadata) ? { metadata: toJsonObject(value.metadata) } : {})
25
+ }];
26
+ }));
27
+ const outcomeMultipliers = normalizeMultiplierRecord({
28
+ ...DEFAULT_OUTCOME_MULTIPLIER,
29
+ ...(input.outcomeMultipliers ?? {})
30
+ });
31
+ const costWeights = normalizeNumberRecord(input.costWeights);
32
+ return {
33
+ id: input.id ?? 'swarm-payoff-policy:' + stableHash([components, outcomeMultipliers, costWeights]),
34
+ title: input.title ?? 'Swarm Payoff Scoring Policy',
35
+ components,
36
+ outcomeMultipliers,
37
+ costWeights,
38
+ ...(toJsonObject(input.metadata) ? { metadata: toJsonObject(input.metadata) } : {})
39
+ };
40
+ }
41
+ export function scoreSwarmPayoffVector(input, policy = {}) {
42
+ const scoringPolicy = normalizeScoringPolicy(policy);
43
+ const weighted = Object.values(input.components).reduce((acc, component) => {
44
+ return {
45
+ value: acc.value + component.normalized * component.weight,
46
+ weight: acc.weight + component.weight
47
+ };
48
+ }, { value: 0, weight: 0 });
49
+ const base = weighted.weight > 0 ? weighted.value / weighted.weight : 0;
50
+ const penalty = Object.values(input.penalties).reduce((sum, value) => sum + clamp01(value), 0);
51
+ const costPenalty = policyCostPenalty(input, scoringPolicy);
52
+ const multiplier = scoringPolicy.outcomeMultipliers[input.outcome] ?? scoringPolicy.outcomeMultipliers.candidate ?? DEFAULT_OUTCOME_MULTIPLIER.candidate;
53
+ return Math.round(clamp01((base - Math.min(0.9, penalty + costPenalty)) * multiplier) * 10000) / 100;
54
+ }
55
+ export function normalizeComponentValue(value, direction, min = 0, max = 1) {
56
+ const span = max === min ? 1 : max - min;
57
+ const normalized = clamp01((value - min) / span);
58
+ return direction === 'minimize' ? 1 - normalized : normalized;
59
+ }
60
+ export function costFromPayoff(payoff, kind) {
61
+ if (kind === 'search')
62
+ return (payoff.search.attempts / 100) + (payoff.search.durationMs / 60000) + (payoff.search.tokens / 100000) + payoff.search.costUsd;
63
+ if (kind === 'certificate')
64
+ return (payoff.certificate?.durationMs ?? 0) / 60000;
65
+ return payoff.costs[kind] ?? 0;
66
+ }
67
+ export function normalizeNumberRecord(input) {
68
+ const entries = Object.entries(input ?? {}).map(([key, value]) => [key, nonNegative(value)]);
69
+ return Object.fromEntries(entries.sort(([left], [right]) => left.localeCompare(right)));
70
+ }
71
+ export function isVerifiedOutcome(outcome) {
72
+ return outcome === 'verified' || outcome === 'accepted';
73
+ }
74
+ export function isRejectedOutcome(outcome) {
75
+ return outcome === 'rejected' || outcome === 'error';
76
+ }
77
+ export function isUndefinedOutcome(outcome) {
78
+ return outcome === 'undefined' || outcome === 'timeout';
79
+ }
80
+ export function normalizeStringRecord(input) {
81
+ const entries = Object.entries(input ?? {}).map(([key, value]) => [key, String(value)]);
82
+ return Object.fromEntries(entries.sort(([left], [right]) => left.localeCompare(right)));
83
+ }
84
+ export function meanComponentValues(components) {
85
+ if (components.length === 0)
86
+ return 0;
87
+ return round2(components.reduce((sum, component) => sum + component.normalized, 0) / components.length);
88
+ }
89
+ export function clamp01(value) {
90
+ return Math.min(1, Math.max(0, finite(value)));
91
+ }
92
+ export function positive(value, fallback) {
93
+ const number = finite(value);
94
+ return number > 0 ? number : fallback;
95
+ }
96
+ export function nonNegative(value) {
97
+ return Math.max(0, finite(value));
98
+ }
99
+ export function finite(value, fallback = 0) {
100
+ return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
101
+ }
102
+ export function round2(value) {
103
+ return Math.round(value * 100) / 100;
104
+ }
105
+ function normalizeMultiplierRecord(input) {
106
+ const entries = Object.entries(input).map(([key, value]) => [key, clamp01(value)]);
107
+ return Object.fromEntries(entries.sort(([left], [right]) => left.localeCompare(right)));
108
+ }
109
+ function policyCostPenalty(input, policy) {
110
+ return Object.entries(policy.costWeights).reduce((sum, [kind, weight]) => {
111
+ if (kind === 'search')
112
+ return sum + costFromPartialPayoff(input, 'search') * weight;
113
+ if (kind === 'certificate')
114
+ return sum + costFromPartialPayoff(input, 'certificate') * weight;
115
+ return sum + (input.costs?.[kind] ?? 0) * weight;
116
+ }, 0);
117
+ }
118
+ function costFromPartialPayoff(payoff, kind) {
119
+ if (kind === 'search') {
120
+ const search = payoff.search;
121
+ if (!search)
122
+ return 0;
123
+ return (search.attempts / 100) + (search.durationMs / 60000) + (search.tokens / 100000) + search.costUsd;
124
+ }
125
+ if (kind === 'certificate')
126
+ return (payoff.certificate?.durationMs ?? 0) / 60000;
127
+ return payoff.costs?.[kind] ?? 0;
128
+ }
129
+ //# sourceMappingURL=tournament-scoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tournament-scoring.js","sourceRoot":"","sources":["../src/tournament-scoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,264 @@
1
+ import type { JsonObject } from '@shapeshift-labs/frontier';
2
+ import type { FRONTIER_SWARM_STRATEGY_CERTIFICATE_KIND, FRONTIER_SWARM_STRATEGY_CERTIFICATE_VERSION, FRONTIER_SWARM_STRATEGY_TOURNAMENT_KIND, FRONTIER_SWARM_STRATEGY_TOURNAMENT_VERSION } from './constants.js';
3
+ import type { FrontierSwarmMergeBundle, FrontierSwarmMergeIndex } from './merge-types.js';
4
+ export type FrontierSwarmPayoffDirection = 'maximize' | 'minimize' | string;
5
+ export type FrontierSwarmTournamentOutcome = 'verified' | 'accepted' | 'candidate' | 'discovery' | 'rejected' | 'blocked' | 'undefined' | 'timeout' | 'error' | string;
6
+ export interface FrontierSwarmPayoffComponentInput {
7
+ value: number;
8
+ weight?: number;
9
+ direction?: FrontierSwarmPayoffDirection;
10
+ reason?: string;
11
+ metadata?: unknown;
12
+ }
13
+ export interface FrontierSwarmPayoffComponentPolicyInput {
14
+ weight?: number;
15
+ direction?: FrontierSwarmPayoffDirection;
16
+ min?: number;
17
+ max?: number;
18
+ unit?: string;
19
+ description?: string;
20
+ metadata?: unknown;
21
+ }
22
+ export interface FrontierSwarmPayoffComponentPolicy {
23
+ weight: number;
24
+ direction: FrontierSwarmPayoffDirection;
25
+ min: number;
26
+ max: number;
27
+ unit?: string;
28
+ description?: string;
29
+ metadata?: JsonObject;
30
+ }
31
+ export interface FrontierSwarmPayoffComponent {
32
+ value: number;
33
+ normalized: number;
34
+ weight: number;
35
+ direction: FrontierSwarmPayoffDirection;
36
+ reason?: string;
37
+ metadata?: JsonObject;
38
+ }
39
+ export interface FrontierSwarmPayoffScoringPolicyInput {
40
+ id?: string;
41
+ title?: string;
42
+ components?: Record<string, FrontierSwarmPayoffComponentPolicyInput>;
43
+ outcomeMultipliers?: Record<string, number>;
44
+ costWeights?: Record<string, number>;
45
+ metadata?: unknown;
46
+ }
47
+ export interface FrontierSwarmPayoffScoringPolicy {
48
+ id: string;
49
+ title: string;
50
+ components: Record<string, FrontierSwarmPayoffComponentPolicy>;
51
+ outcomeMultipliers: Record<string, number>;
52
+ costWeights: Record<string, number>;
53
+ metadata?: JsonObject;
54
+ }
55
+ export interface FrontierSwarmStrategySearchInput {
56
+ attempts?: number;
57
+ durationMs?: number;
58
+ tokens?: number;
59
+ costUsd?: number;
60
+ exploredStates?: number;
61
+ strategyPath?: readonly string[];
62
+ evidencePaths?: readonly string[];
63
+ metadata?: unknown;
64
+ }
65
+ export interface FrontierSwarmStrategySearch {
66
+ attempts: number;
67
+ durationMs: number;
68
+ tokens: number;
69
+ costUsd: number;
70
+ exploredStates: number;
71
+ strategyPath: string[];
72
+ evidencePaths: string[];
73
+ metadata?: JsonObject;
74
+ }
75
+ export interface FrontierSwarmStrategyCertificateInput {
76
+ id?: string;
77
+ strategyId?: string;
78
+ gameId?: string;
79
+ replayable?: boolean;
80
+ commands?: readonly string[];
81
+ proofRefs?: readonly string[];
82
+ traceRefs?: readonly string[];
83
+ hashes?: Record<string, string>;
84
+ durationMs?: number;
85
+ evidencePaths?: readonly string[];
86
+ metadata?: unknown;
87
+ }
88
+ export interface FrontierSwarmStrategyCertificate {
89
+ kind: typeof FRONTIER_SWARM_STRATEGY_CERTIFICATE_KIND;
90
+ version: typeof FRONTIER_SWARM_STRATEGY_CERTIFICATE_VERSION;
91
+ id: string;
92
+ strategyId?: string;
93
+ gameId?: string;
94
+ replayable: boolean;
95
+ commands: string[];
96
+ proofRefs: string[];
97
+ traceRefs: string[];
98
+ hashes: Record<string, string>;
99
+ durationMs: number;
100
+ evidencePaths: string[];
101
+ metadata?: JsonObject;
102
+ }
103
+ export interface FrontierSwarmPayoffVectorInput {
104
+ id?: string;
105
+ strategyId: string;
106
+ gameId?: string;
107
+ matchId?: string;
108
+ outcome?: FrontierSwarmTournamentOutcome;
109
+ components?: Record<string, number | FrontierSwarmPayoffComponentInput>;
110
+ penalties?: Record<string, number>;
111
+ costs?: Record<string, number>;
112
+ search?: FrontierSwarmStrategySearchInput;
113
+ certificate?: FrontierSwarmStrategyCertificateInput;
114
+ scoringPolicy?: FrontierSwarmPayoffScoringPolicyInput;
115
+ evidencePaths?: readonly string[];
116
+ tags?: readonly string[];
117
+ metadata?: unknown;
118
+ }
119
+ export interface FrontierSwarmPayoffVector {
120
+ id: string;
121
+ strategyId: string;
122
+ gameId?: string;
123
+ matchId?: string;
124
+ outcome: FrontierSwarmTournamentOutcome;
125
+ components: Record<string, FrontierSwarmPayoffComponent>;
126
+ penalties: Record<string, number>;
127
+ costs: Record<string, number>;
128
+ search: FrontierSwarmStrategySearch;
129
+ certificate?: FrontierSwarmStrategyCertificate;
130
+ scoringPolicy?: FrontierSwarmPayoffScoringPolicy;
131
+ evidencePaths: string[];
132
+ tags: string[];
133
+ score: number;
134
+ metadata?: JsonObject;
135
+ }
136
+ export interface FrontierSwarmStrategyInput {
137
+ id: string;
138
+ title?: string;
139
+ family?: string;
140
+ lane?: string;
141
+ description?: string;
142
+ tags?: readonly string[];
143
+ metadata?: unknown;
144
+ }
145
+ export interface FrontierSwarmStrategy {
146
+ id: string;
147
+ title: string;
148
+ family?: string;
149
+ lane?: string;
150
+ description?: string;
151
+ tags: string[];
152
+ metadata?: JsonObject;
153
+ }
154
+ export interface FrontierSwarmStrategyGameInput {
155
+ id: string;
156
+ title?: string;
157
+ objective?: string;
158
+ fixtures?: readonly string[];
159
+ ownershipRegions?: readonly string[];
160
+ resources?: Record<string, number>;
161
+ tags?: readonly string[];
162
+ metadata?: unknown;
163
+ }
164
+ export interface FrontierSwarmStrategyGame {
165
+ id: string;
166
+ title: string;
167
+ objective?: string;
168
+ fixtures: string[];
169
+ ownershipRegions: string[];
170
+ resources: Record<string, number>;
171
+ tags: string[];
172
+ metadata?: JsonObject;
173
+ }
174
+ export interface FrontierSwarmStrategyMatchInput {
175
+ id?: string;
176
+ strategyId?: string;
177
+ gameId?: string;
178
+ opponentStrategyIds?: readonly string[];
179
+ payoff: FrontierSwarmPayoffVector | FrontierSwarmPayoffVectorInput;
180
+ evidencePaths?: readonly string[];
181
+ metadata?: unknown;
182
+ }
183
+ export interface FrontierSwarmStrategyMatch {
184
+ id: string;
185
+ strategyId: string;
186
+ gameId?: string;
187
+ opponentStrategyIds: string[];
188
+ payoff: FrontierSwarmPayoffVector;
189
+ evidencePaths: string[];
190
+ metadata?: JsonObject;
191
+ }
192
+ export interface FrontierSwarmStrategyStanding {
193
+ strategyId: string;
194
+ rank: number;
195
+ score: number;
196
+ matchCount: number;
197
+ verifiedCount: number;
198
+ rejectedCount: number;
199
+ undefinedCount: number;
200
+ searchCost: number;
201
+ certificateCost: number;
202
+ reviewCost: number;
203
+ resourceCost: number;
204
+ costBreakdown: Record<string, number>;
205
+ componentMeans: Record<string, number>;
206
+ evidencePaths: string[];
207
+ }
208
+ export interface FrontierSwarmStrategyTournamentInput {
209
+ id?: string;
210
+ title?: string;
211
+ strategies?: readonly FrontierSwarmStrategyInput[];
212
+ games?: readonly FrontierSwarmStrategyGameInput[];
213
+ matches?: readonly FrontierSwarmStrategyMatchInput[];
214
+ scoringPolicy?: FrontierSwarmPayoffScoringPolicyInput;
215
+ generatedAt?: number;
216
+ metadata?: unknown;
217
+ }
218
+ export interface FrontierSwarmStrategyTournament {
219
+ kind: typeof FRONTIER_SWARM_STRATEGY_TOURNAMENT_KIND;
220
+ version: typeof FRONTIER_SWARM_STRATEGY_TOURNAMENT_VERSION;
221
+ id: string;
222
+ title: string;
223
+ generatedAt: number;
224
+ strategies: FrontierSwarmStrategy[];
225
+ games: FrontierSwarmStrategyGame[];
226
+ matches: FrontierSwarmStrategyMatch[];
227
+ standings: FrontierSwarmStrategyStanding[];
228
+ byStrategy: Record<string, string[]>;
229
+ byGame: Record<string, string[]>;
230
+ scoringPolicy: FrontierSwarmPayoffScoringPolicy;
231
+ summary: {
232
+ strategyCount: number;
233
+ gameCount: number;
234
+ matchCount: number;
235
+ verifiedCount: number;
236
+ rejectedCount: number;
237
+ undefinedCount: number;
238
+ outcomeCounts: Record<string, number>;
239
+ topStrategyId?: string;
240
+ topScore?: number;
241
+ };
242
+ metadata?: JsonObject;
243
+ }
244
+ export interface FrontierSwarmStrategyTournamentQuery {
245
+ strategyId?: string;
246
+ gameId?: string;
247
+ outcome?: FrontierSwarmTournamentOutcome;
248
+ tag?: string;
249
+ payoffTag?: string;
250
+ strategyTag?: string;
251
+ gameTag?: string;
252
+ minScore?: number;
253
+ maxScore?: number;
254
+ }
255
+ export interface FrontierSwarmMergeTournamentInput {
256
+ id?: string;
257
+ title?: string;
258
+ gameId?: string;
259
+ bundles: readonly FrontierSwarmMergeBundle[];
260
+ mergeIndex?: FrontierSwarmMergeIndex;
261
+ generatedAt?: number;
262
+ metadata?: unknown;
263
+ }
264
+ //# sourceMappingURL=tournament-types.d.ts.map