@shapeshift-labs/frontier-swarm 0.5.20 → 0.5.21

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 (354) hide show
  1. package/README.md +119 -132
  2. package/benchmarks/package-bench.mjs +294 -20
  3. package/dist/index.d.ts +4087 -41
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +8189 -40
  6. package/dist/index.js.map +1 -1
  7. package/package.json +4 -6
  8. package/benchmarks/package-bench-fixtures.mjs +0 -95
  9. package/benchmarks/package-bench-rows.mjs +0 -211
  10. package/benchmarks/package-bench-runtime.mjs +0 -94
  11. package/dist/adaptive-load-decisions.d.ts +0 -8
  12. package/dist/adaptive-load-decisions.d.ts.map +0 -1
  13. package/dist/adaptive-load-decisions.js +0 -133
  14. package/dist/adaptive-load-decisions.js.map +0 -1
  15. package/dist/adaptive-load-limits.d.ts +0 -8
  16. package/dist/adaptive-load-limits.d.ts.map +0 -1
  17. package/dist/adaptive-load-limits.js +0 -105
  18. package/dist/adaptive-load-limits.js.map +0 -1
  19. package/dist/adaptive-load-observations.d.ts +0 -17
  20. package/dist/adaptive-load-observations.d.ts.map +0 -1
  21. package/dist/adaptive-load-observations.js +0 -296
  22. package/dist/adaptive-load-observations.js.map +0 -1
  23. package/dist/adaptive-load-types.d.ts +0 -117
  24. package/dist/adaptive-load-types.d.ts.map +0 -1
  25. package/dist/adaptive-load-types.js +0 -3
  26. package/dist/adaptive-load-types.js.map +0 -1
  27. package/dist/adaptive-load.d.ts +0 -10
  28. package/dist/adaptive-load.d.ts.map +0 -1
  29. package/dist/adaptive-load.js +0 -98
  30. package/dist/adaptive-load.js.map +0 -1
  31. package/dist/adaptive-types.d.ts +0 -127
  32. package/dist/adaptive-types.d.ts.map +0 -1
  33. package/dist/adaptive-types.js +0 -2
  34. package/dist/adaptive-types.js.map +0 -1
  35. package/dist/artifact-routing-runtime.d.ts +0 -3
  36. package/dist/artifact-routing-runtime.d.ts.map +0 -1
  37. package/dist/artifact-routing-runtime.js +0 -72
  38. package/dist/artifact-routing-runtime.js.map +0 -1
  39. package/dist/auto-review.d.ts +0 -47
  40. package/dist/auto-review.d.ts.map +0 -1
  41. package/dist/auto-review.js +0 -69
  42. package/dist/auto-review.js.map +0 -1
  43. package/dist/blackboard.d.ts +0 -81
  44. package/dist/blackboard.d.ts.map +0 -1
  45. package/dist/blackboard.js +0 -60
  46. package/dist/blackboard.js.map +0 -1
  47. package/dist/coercion.d.ts +0 -12
  48. package/dist/coercion.d.ts.map +0 -1
  49. package/dist/coercion.js +0 -48
  50. package/dist/coercion.js.map +0 -1
  51. package/dist/constants.d.ts +0 -106
  52. package/dist/constants.d.ts.map +0 -1
  53. package/dist/constants.js +0 -106
  54. package/dist/constants.js.map +0 -1
  55. package/dist/context-pack-runtime.d.ts +0 -3
  56. package/dist/context-pack-runtime.d.ts.map +0 -1
  57. package/dist/context-pack-runtime.js +0 -77
  58. package/dist/context-pack-runtime.js.map +0 -1
  59. package/dist/context-types.d.ts +0 -188
  60. package/dist/context-types.d.ts.map +0 -1
  61. package/dist/context-types.js +0 -2
  62. package/dist/context-types.js.map +0 -1
  63. package/dist/coordinator-dashboard-helpers.d.ts +0 -14
  64. package/dist/coordinator-dashboard-helpers.d.ts.map +0 -1
  65. package/dist/coordinator-dashboard-helpers.js +0 -106
  66. package/dist/coordinator-dashboard-helpers.js.map +0 -1
  67. package/dist/coordinator-dashboard-types.d.ts +0 -163
  68. package/dist/coordinator-dashboard-types.d.ts.map +0 -1
  69. package/dist/coordinator-dashboard-types.js +0 -3
  70. package/dist/coordinator-dashboard-types.js.map +0 -1
  71. package/dist/coordinator-dashboard.d.ts +0 -4
  72. package/dist/coordinator-dashboard.d.ts.map +0 -1
  73. package/dist/coordinator-dashboard.js +0 -163
  74. package/dist/coordinator-dashboard.js.map +0 -1
  75. package/dist/coordinator-scoring.d.ts +0 -8
  76. package/dist/coordinator-scoring.d.ts.map +0 -1
  77. package/dist/coordinator-scoring.js +0 -167
  78. package/dist/coordinator-scoring.js.map +0 -1
  79. package/dist/coordinator-types.d.ts +0 -166
  80. package/dist/coordinator-types.d.ts.map +0 -1
  81. package/dist/coordinator-types.js +0 -2
  82. package/dist/coordinator-types.js.map +0 -1
  83. package/dist/debug-runtime.d.ts +0 -4
  84. package/dist/debug-runtime.d.ts.map +0 -1
  85. package/dist/debug-runtime.js +0 -93
  86. package/dist/debug-runtime.js.map +0 -1
  87. package/dist/debug-types.d.ts +0 -194
  88. package/dist/debug-types.d.ts.map +0 -1
  89. package/dist/debug-types.js +0 -2
  90. package/dist/debug-types.js.map +0 -1
  91. package/dist/diagnostic-helpers.d.ts +0 -5
  92. package/dist/diagnostic-helpers.d.ts.map +0 -1
  93. package/dist/diagnostic-helpers.js +0 -54
  94. package/dist/diagnostic-helpers.js.map +0 -1
  95. package/dist/evidence-index-helpers.d.ts +0 -10
  96. package/dist/evidence-index-helpers.d.ts.map +0 -1
  97. package/dist/evidence-index-helpers.js +0 -78
  98. package/dist/evidence-index-helpers.js.map +0 -1
  99. package/dist/evidence-index.d.ts +0 -4
  100. package/dist/evidence-index.d.ts.map +0 -1
  101. package/dist/evidence-index.js +0 -59
  102. package/dist/evidence-index.js.map +0 -1
  103. package/dist/evidence-types.d.ts +0 -151
  104. package/dist/evidence-types.d.ts.map +0 -1
  105. package/dist/evidence-types.js +0 -2
  106. package/dist/evidence-types.js.map +0 -1
  107. package/dist/fixtures.d.ts +0 -45
  108. package/dist/fixtures.d.ts.map +0 -1
  109. package/dist/fixtures.js +0 -39
  110. package/dist/fixtures.js.map +0 -1
  111. package/dist/governance-types.d.ts +0 -172
  112. package/dist/governance-types.d.ts.map +0 -1
  113. package/dist/governance-types.js +0 -2
  114. package/dist/governance-types.js.map +0 -1
  115. package/dist/instrumentation-runtime.d.ts +0 -6
  116. package/dist/instrumentation-runtime.d.ts.map +0 -1
  117. package/dist/instrumentation-runtime.js +0 -111
  118. package/dist/instrumentation-runtime.js.map +0 -1
  119. package/dist/internal.d.ts +0 -11
  120. package/dist/internal.d.ts.map +0 -1
  121. package/dist/internal.js +0 -49
  122. package/dist/internal.js.map +0 -1
  123. package/dist/leases.d.ts +0 -32
  124. package/dist/leases.d.ts.map +0 -1
  125. package/dist/leases.js +0 -36
  126. package/dist/leases.js.map +0 -1
  127. package/dist/manifest-normalization.d.ts +0 -8
  128. package/dist/manifest-normalization.d.ts.map +0 -1
  129. package/dist/manifest-normalization.js +0 -191
  130. package/dist/manifest-normalization.js.map +0 -1
  131. package/dist/manifest-types.d.ts +0 -227
  132. package/dist/manifest-types.d.ts.map +0 -1
  133. package/dist/manifest-types.js +0 -2
  134. package/dist/manifest-types.js.map +0 -1
  135. package/dist/manifest.d.ts +0 -7
  136. package/dist/manifest.d.ts.map +0 -1
  137. package/dist/manifest.js +0 -126
  138. package/dist/manifest.js.map +0 -1
  139. package/dist/merge-admission.d.ts +0 -3
  140. package/dist/merge-admission.d.ts.map +0 -1
  141. package/dist/merge-admission.js +0 -71
  142. package/dist/merge-admission.js.map +0 -1
  143. package/dist/merge-bundles.d.ts +0 -13
  144. package/dist/merge-bundles.d.ts.map +0 -1
  145. package/dist/merge-bundles.js +0 -144
  146. package/dist/merge-bundles.js.map +0 -1
  147. package/dist/merge-classification.d.ts +0 -6
  148. package/dist/merge-classification.d.ts.map +0 -1
  149. package/dist/merge-classification.js +0 -36
  150. package/dist/merge-classification.js.map +0 -1
  151. package/dist/merge-index.d.ts +0 -3
  152. package/dist/merge-index.d.ts.map +0 -1
  153. package/dist/merge-index.js +0 -130
  154. package/dist/merge-index.js.map +0 -1
  155. package/dist/merge-plan-helpers.d.ts +0 -11
  156. package/dist/merge-plan-helpers.d.ts.map +0 -1
  157. package/dist/merge-plan-helpers.js +0 -97
  158. package/dist/merge-plan-helpers.js.map +0 -1
  159. package/dist/merge-plans-runtime.d.ts +0 -8
  160. package/dist/merge-plans-runtime.d.ts.map +0 -1
  161. package/dist/merge-plans-runtime.js +0 -106
  162. package/dist/merge-plans-runtime.js.map +0 -1
  163. package/dist/merge-review-types.d.ts +0 -76
  164. package/dist/merge-review-types.d.ts.map +0 -1
  165. package/dist/merge-review-types.js +0 -2
  166. package/dist/merge-review-types.js.map +0 -1
  167. package/dist/merge-review.d.ts +0 -7
  168. package/dist/merge-review.d.ts.map +0 -1
  169. package/dist/merge-review.js +0 -142
  170. package/dist/merge-review.js.map +0 -1
  171. package/dist/merge-types.d.ts +0 -196
  172. package/dist/merge-types.d.ts.map +0 -1
  173. package/dist/merge-types.js +0 -2
  174. package/dist/merge-types.js.map +0 -1
  175. package/dist/merge-wrappers.d.ts +0 -5
  176. package/dist/merge-wrappers.d.ts.map +0 -1
  177. package/dist/merge-wrappers.js +0 -231
  178. package/dist/merge-wrappers.js.map +0 -1
  179. package/dist/observability-types.d.ts +0 -164
  180. package/dist/observability-types.d.ts.map +0 -1
  181. package/dist/observability-types.js +0 -2
  182. package/dist/observability-types.js.map +0 -1
  183. package/dist/oracle-helpers.d.ts +0 -6
  184. package/dist/oracle-helpers.d.ts.map +0 -1
  185. package/dist/oracle-helpers.js +0 -73
  186. package/dist/oracle-helpers.js.map +0 -1
  187. package/dist/oracle-runtime.d.ts +0 -5
  188. package/dist/oracle-runtime.d.ts.map +0 -1
  189. package/dist/oracle-runtime.js +0 -154
  190. package/dist/oracle-runtime.js.map +0 -1
  191. package/dist/ownership-runtime.d.ts +0 -6
  192. package/dist/ownership-runtime.d.ts.map +0 -1
  193. package/dist/ownership-runtime.js +0 -49
  194. package/dist/ownership-runtime.js.map +0 -1
  195. package/dist/patch-stack-runtime.d.ts +0 -4
  196. package/dist/patch-stack-runtime.d.ts.map +0 -1
  197. package/dist/patch-stack-runtime.js +0 -97
  198. package/dist/patch-stack-runtime.js.map +0 -1
  199. package/dist/plan-helpers.d.ts +0 -13
  200. package/dist/plan-helpers.d.ts.map +0 -1
  201. package/dist/plan-helpers.js +0 -236
  202. package/dist/plan-helpers.js.map +0 -1
  203. package/dist/plan-selection.d.ts +0 -7
  204. package/dist/plan-selection.d.ts.map +0 -1
  205. package/dist/plan-selection.js +0 -86
  206. package/dist/plan-selection.js.map +0 -1
  207. package/dist/plan.d.ts +0 -126
  208. package/dist/plan.d.ts.map +0 -1
  209. package/dist/plan.js +0 -67
  210. package/dist/plan.js.map +0 -1
  211. package/dist/progress.d.ts +0 -42
  212. package/dist/progress.d.ts.map +0 -1
  213. package/dist/progress.js +0 -31
  214. package/dist/progress.js.map +0 -1
  215. package/dist/proof-runtime.d.ts +0 -16
  216. package/dist/proof-runtime.d.ts.map +0 -1
  217. package/dist/proof-runtime.js +0 -143
  218. package/dist/proof-runtime.js.map +0 -1
  219. package/dist/queue-overlays.d.ts +0 -7
  220. package/dist/queue-overlays.d.ts.map +0 -1
  221. package/dist/queue-overlays.js +0 -184
  222. package/dist/queue-overlays.js.map +0 -1
  223. package/dist/queue-types.d.ts +0 -194
  224. package/dist/queue-types.d.ts.map +0 -1
  225. package/dist/queue-types.js +0 -2
  226. package/dist/queue-types.js.map +0 -1
  227. package/dist/rebase-report.d.ts +0 -3
  228. package/dist/rebase-report.d.ts.map +0 -1
  229. package/dist/rebase-report.js +0 -52
  230. package/dist/rebase-report.js.map +0 -1
  231. package/dist/record-helpers.d.ts +0 -15
  232. package/dist/record-helpers.d.ts.map +0 -1
  233. package/dist/record-helpers.js +0 -78
  234. package/dist/record-helpers.js.map +0 -1
  235. package/dist/reference-oracle-runtime.d.ts +0 -4
  236. package/dist/reference-oracle-runtime.d.ts.map +0 -1
  237. package/dist/reference-oracle-runtime.js +0 -89
  238. package/dist/reference-oracle-runtime.js.map +0 -1
  239. package/dist/reference-types.d.ts +0 -204
  240. package/dist/reference-types.d.ts.map +0 -1
  241. package/dist/reference-types.js +0 -2
  242. package/dist/reference-types.js.map +0 -1
  243. package/dist/result-types.d.ts +0 -75
  244. package/dist/result-types.d.ts.map +0 -1
  245. package/dist/result-types.js +0 -2
  246. package/dist/result-types.js.map +0 -1
  247. package/dist/run-normalization.d.ts +0 -9
  248. package/dist/run-normalization.d.ts.map +0 -1
  249. package/dist/run-normalization.js +0 -126
  250. package/dist/run-normalization.js.map +0 -1
  251. package/dist/run-records.d.ts +0 -8
  252. package/dist/run-records.d.ts.map +0 -1
  253. package/dist/run-records.js +0 -145
  254. package/dist/run-records.js.map +0 -1
  255. package/dist/run-store-shards-runtime.d.ts +0 -3
  256. package/dist/run-store-shards-runtime.d.ts.map +0 -1
  257. package/dist/run-store-shards-runtime.js +0 -54
  258. package/dist/run-store-shards-runtime.js.map +0 -1
  259. package/dist/run-types.d.ts +0 -112
  260. package/dist/run-types.d.ts.map +0 -1
  261. package/dist/run-types.js +0 -2
  262. package/dist/run-types.js.map +0 -1
  263. package/dist/scheduler.d.ts +0 -94
  264. package/dist/scheduler.d.ts.map +0 -1
  265. package/dist/scheduler.js +0 -213
  266. package/dist/scheduler.js.map +0 -1
  267. package/dist/semantic-normalization.d.ts +0 -3
  268. package/dist/semantic-normalization.d.ts.map +0 -1
  269. package/dist/semantic-normalization.js +0 -195
  270. package/dist/semantic-normalization.js.map +0 -1
  271. package/dist/semantic-types.d.ts +0 -265
  272. package/dist/semantic-types.d.ts.map +0 -1
  273. package/dist/semantic-types.js +0 -2
  274. package/dist/semantic-types.js.map +0 -1
  275. package/dist/status-types.d.ts +0 -28
  276. package/dist/status-types.d.ts.map +0 -1
  277. package/dist/status-types.js +0 -2
  278. package/dist/status-types.js.map +0 -1
  279. package/dist/task-types.d.ts +0 -165
  280. package/dist/task-types.d.ts.map +0 -1
  281. package/dist/task-types.js +0 -2
  282. package/dist/task-types.js.map +0 -1
  283. package/dist/tournament-adaptive-feedback.d.ts +0 -22
  284. package/dist/tournament-adaptive-feedback.d.ts.map +0 -1
  285. package/dist/tournament-adaptive-feedback.js +0 -241
  286. package/dist/tournament-adaptive-feedback.js.map +0 -1
  287. package/dist/tournament-bandit-types.d.ts +0 -91
  288. package/dist/tournament-bandit-types.d.ts.map +0 -1
  289. package/dist/tournament-bandit-types.js +0 -2
  290. package/dist/tournament-bandit-types.js.map +0 -1
  291. package/dist/tournament-bandit.d.ts +0 -4
  292. package/dist/tournament-bandit.d.ts.map +0 -1
  293. package/dist/tournament-bandit.js +0 -212
  294. package/dist/tournament-bandit.js.map +0 -1
  295. package/dist/tournament-history-types.d.ts +0 -138
  296. package/dist/tournament-history-types.d.ts.map +0 -1
  297. package/dist/tournament-history-types.js +0 -2
  298. package/dist/tournament-history-types.js.map +0 -1
  299. package/dist/tournament-history.d.ts +0 -5
  300. package/dist/tournament-history.d.ts.map +0 -1
  301. package/dist/tournament-history.js +0 -210
  302. package/dist/tournament-history.js.map +0 -1
  303. package/dist/tournament-merge.d.ts +0 -7
  304. package/dist/tournament-merge.d.ts.map +0 -1
  305. package/dist/tournament-merge.js +0 -172
  306. package/dist/tournament-merge.js.map +0 -1
  307. package/dist/tournament-runtime-helpers.d.ts +0 -9
  308. package/dist/tournament-runtime-helpers.d.ts.map +0 -1
  309. package/dist/tournament-runtime-helpers.js +0 -114
  310. package/dist/tournament-runtime-helpers.js.map +0 -1
  311. package/dist/tournament-runtime.d.ts +0 -6
  312. package/dist/tournament-runtime.d.ts.map +0 -1
  313. package/dist/tournament-runtime.js +0 -202
  314. package/dist/tournament-runtime.js.map +0 -1
  315. package/dist/tournament-sample-observations.d.ts +0 -4
  316. package/dist/tournament-sample-observations.d.ts.map +0 -1
  317. package/dist/tournament-sample-observations.js +0 -19
  318. package/dist/tournament-sample-observations.js.map +0 -1
  319. package/dist/tournament-sample-quality-types.d.ts +0 -17
  320. package/dist/tournament-sample-quality-types.d.ts.map +0 -1
  321. package/dist/tournament-sample-quality-types.js +0 -2
  322. package/dist/tournament-sample-quality-types.js.map +0 -1
  323. package/dist/tournament-sample-quality.d.ts +0 -8
  324. package/dist/tournament-sample-quality.d.ts.map +0 -1
  325. package/dist/tournament-sample-quality.js +0 -66
  326. package/dist/tournament-sample-quality.js.map +0 -1
  327. package/dist/tournament-scoring.d.ts +0 -18
  328. package/dist/tournament-scoring.d.ts.map +0 -1
  329. package/dist/tournament-scoring.js +0 -136
  330. package/dist/tournament-scoring.js.map +0 -1
  331. package/dist/tournament-types.d.ts +0 -269
  332. package/dist/tournament-types.d.ts.map +0 -1
  333. package/dist/tournament-types.js +0 -2
  334. package/dist/tournament-types.js.map +0 -1
  335. package/dist/trace-helpers.d.ts +0 -22
  336. package/dist/trace-helpers.d.ts.map +0 -1
  337. package/dist/trace-helpers.js +0 -181
  338. package/dist/trace-helpers.js.map +0 -1
  339. package/dist/trace-runtime.d.ts +0 -7
  340. package/dist/trace-runtime.d.ts.map +0 -1
  341. package/dist/trace-runtime.js +0 -196
  342. package/dist/trace-runtime.js.map +0 -1
  343. package/dist/trace-types.d.ts +0 -168
  344. package/dist/trace-types.d.ts.map +0 -1
  345. package/dist/trace-types.js +0 -2
  346. package/dist/trace-types.js.map +0 -1
  347. package/dist/types.d.ts +0 -23
  348. package/dist/types.d.ts.map +0 -1
  349. package/dist/types.js +0 -2
  350. package/dist/types.js.map +0 -1
  351. package/dist/usage-governor.d.ts +0 -41
  352. package/dist/usage-governor.d.ts.map +0 -1
  353. package/dist/usage-governor.js +0 -43
  354. package/dist/usage-governor.js.map +0 -1
@@ -1,28 +1,182 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { performance } from 'node:perf_hooks';
4
+ import { fileURLToPath } from 'node:url';
1
5
  import {
2
- createMeasure,
3
- createPackageBenchPaths,
4
- parseArgs,
5
- printBenchReport,
6
- readPackageVersion,
7
- readPositiveInt,
8
- resolveOutPath,
9
- writeBenchReport
10
- } from './package-bench-runtime.mjs';
11
- import { createPackageBenchRows } from './package-bench-rows.mjs';
12
-
13
- const { packageDir, repoRoot } = createPackageBenchPaths(import.meta.url);
6
+ checkSwarmOwnership,
7
+ createSwarmContextPack,
8
+ createSwarmHotspotReport,
9
+ createSwarmLanePlaybook,
10
+ createSwarmMergeAdmission,
11
+ createSwarmManifest,
12
+ createSwarmEventStream,
13
+ createSwarmLeases,
14
+ createSwarmMergeBundle,
15
+ createSwarmMergeIndex,
16
+ createSwarmOracleCorpus,
17
+ createSwarmPatchStackPlan,
18
+ createSwarmReplayBundle,
19
+ createSwarmParityOracle,
20
+ createSwarmDivergenceReport,
21
+ createSwarmWatchpointPlan,
22
+ createSwarmDebugHandoff,
23
+ createSwarmEvidenceIndex,
24
+ createSwarmBlackboard,
25
+ createSwarmBottleneckReport,
26
+ createSwarmFixtureCatalog,
27
+ createSwarmProgressModel,
28
+ createSwarmPlan,
29
+ createSwarmProof,
30
+ createSwarmQueueOverlay,
31
+ createSwarmQueueSnapshot,
32
+ createSwarmRun,
33
+ createSwarmRunCheckpoint,
34
+ createSwarmSchedule,
35
+ decodeSwarmJsonl,
36
+ defineSwarmTasks,
37
+ encodeSwarmJsonl,
38
+ routeSwarmEventToMailboxes,
39
+ resolveSwarmCompute,
40
+ validateSwarmManifest
41
+ } from '../dist/index.js';
42
+
43
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
44
+ const packageDir = path.resolve(__dirname, '..');
45
+ const repoRoot = path.basename(path.dirname(packageDir)) === 'packages'
46
+ ? path.resolve(packageDir, '..', '..')
47
+ : packageDir;
14
48
  const args = parseArgs(process.argv.slice(2));
15
49
  const taskCount = readPositiveInt(args.tasks, 1000);
16
50
  const rounds = readPositiveInt(args.rounds, 30);
17
- const outPath = resolveOutPath(repoRoot, args.out);
18
- const rows = createPackageBenchRows({
19
- taskCount,
20
- measure: createMeasure(rounds)
21
- });
51
+ const outPath = args.out ? path.resolve(repoRoot, args.out) : null;
52
+
53
+ const manifest = createSwarmManifest(makeManifest());
54
+ const tasks = defineSwarmTasks(makeTasks(taskCount));
55
+ let plan = createSwarmPlan(manifest, tasks, { limit: 64 });
56
+ let run = createSwarmRun({ plan });
57
+ let jsonl = encodeSwarmJsonl([plan, run]);
58
+ let cursor = 0;
59
+ let schedule = createSwarmSchedule({ plan, maxReadyJobs: 128 });
60
+ let leases = createSwarmLeases({ schedule, workerId: 'bench-worker', now: 1000, leaseMs: 60000, count: 16 });
61
+ let eventStream = createSwarmEventStream({ runId: 'bench', root: 'agent-runs/bench/streams', lanes: manifest.lanes });
62
+ let bundles = makeBundles(plan, 32);
63
+ let mergeIndex = createSwarmMergeIndex({ bundles });
64
+
65
+ const rows = [
66
+ measure('create-plan-' + taskCount, 8, () => {
67
+ plan = createSwarmPlan(manifest, tasks, { limit: 64, selectors: ['task'] });
68
+ return plan.jobs.length;
69
+ }),
70
+ measure('validate-manifest', 32, () => validateSwarmManifest(manifest).issues.length),
71
+ measure('resolve-compute-' + taskCount, 64, () => resolveSwarmCompute(manifest, tasks[cursor++ % tasks.length]).id.length),
72
+ measure('ownership-check-' + taskCount, 64, () => checkSwarmOwnership(plan.jobs[cursor++ % plan.jobs.length], ['src/runtime/file.ts']).violations.length),
73
+ measure('create-run-' + taskCount, 16, () => {
74
+ run = createSwarmRun({ plan });
75
+ return run.jobs.length;
76
+ }),
77
+ measure('jsonl-encode', 16, () => {
78
+ jsonl = encodeSwarmJsonl([plan, run]);
79
+ return jsonl.length;
80
+ }),
81
+ measure('jsonl-decode', 16, () => decodeSwarmJsonl(jsonl).length),
82
+ measure('proof', 16, () => createSwarmProof(plan).hash.length),
83
+ measure('schedule-lease-' + taskCount, 8, () => {
84
+ schedule = createSwarmSchedule({ plan, maxReadyJobs: 128, maxComputeConcurrency: { fast: 64, deep: 32 } });
85
+ leases = createSwarmLeases({ schedule, workerId: 'bench-worker', now: 1000 + cursor++, leaseMs: 60000, count: 16 });
86
+ return schedule.ready.length + leases.length;
87
+ }),
88
+ measure('queue-snapshot-' + taskCount, 8, () => {
89
+ const snapshot = createSwarmQueueSnapshot({ plan, run, leases, generatedAt: 2000 + cursor++ });
90
+ return snapshot.summary.jobCount + snapshot.summary.leaseCount;
91
+ }),
92
+ measure('run-checkpoint-' + taskCount, 16, () => createSwarmRunCheckpoint({ run, sequence: cursor++ }).hash.length),
93
+ measure('merge-bundle-' + taskCount, 32, () => createSwarmMergeBundle({
94
+ job: plan.jobs[cursor % plan.jobs.length],
95
+ result: {
96
+ jobId: plan.jobs[cursor++ % plan.jobs.length].id,
97
+ status: 'completed',
98
+ changedPaths: ['src/runtime/file.ts'],
99
+ verification: [{ status: 0 }]
100
+ },
101
+ patchPath: 'agent-runs/bench/changes.patch'
102
+ }).id.length),
103
+ measure('queue-overlay-' + taskCount, 16, () => createSwarmQueueOverlay({ bundles, generatedAt: 3000 + cursor++ }).summary.entryCount),
104
+ measure('merge-index-' + taskCount, 8, () => {
105
+ bundles = makeBundles(plan, 32);
106
+ mergeIndex = createSwarmMergeIndex({ bundles, generatedAt: 4000 + cursor++ });
107
+ return mergeIndex.summary.entryCount + mergeIndex.summary.conflictCount;
108
+ }),
109
+ measure('merge-admission-' + taskCount, 16, () => createSwarmMergeAdmission({ index: mergeIndex, maxReady: 8, maxChangedPaths: 16 }).summary.admittedCount),
110
+ measure('hotspot-report-' + taskCount, 16, () => createSwarmHotspotReport({ bundles, threshold: 3 }).summary.recommendationCount),
111
+ measure('context-pack-' + taskCount, 32, () => createSwarmContextPack({
112
+ job: plan.jobs[cursor % plan.jobs.length],
113
+ files: ['src/runtime/file.ts', 'test/runtime-smoke.mjs'],
114
+ apiMap: {
115
+ runtime: ['createRuntime', 'stepRuntime'],
116
+ tests: ['runtime smoke gate']
117
+ },
118
+ knownFailures: ['shared renderer gate is noisy on old snapshots'],
119
+ oracleCommands: [{ name: 'focused-gate', command: 'npm', args: ['test'], required: true }],
120
+ evidenceSchema: { type: 'object', required: ['ok', 'commands'] },
121
+ avoidInvestigating: ['unrelated route snapshots'],
122
+ playbookIds: ['runtime-playbook']
123
+ }).files.length),
124
+ measure('oracle-corpus-' + taskCount, 32, () => createSwarmOracleCorpus({
125
+ artifacts: [
126
+ { id: 'trace-runtime', path: 'oracles/runtime-trace.jsonl', kind: 'trace', tags: ['runtime', 'reference'], hash: 'fnv1a32:trace' },
127
+ { id: 'snapshot-routing', path: 'oracles/routing-snapshot.json', kind: 'snapshot', tags: ['routing', 'reference'] }
128
+ ]
129
+ }).summary.artifactCount),
130
+ measure('replay-debug-evidence-' + taskCount, 16, () => {
131
+ const replay = createSwarmReplayBundle({
132
+ commands: ['node replay.mjs'],
133
+ artifacts: [{ path: 'agent-runs/bench/trace.jsonl', kind: 'trace' }],
134
+ expectedEvidence: ['trace.jsonl']
135
+ });
136
+ const parity = createSwarmParityOracle({
137
+ comparators: [{ status: 'failed', expected: 1, actual: 2, operationIndex: cursor++ }]
138
+ });
139
+ const divergence = createSwarmDivergenceReport({
140
+ replayBundleIds: [replay.id],
141
+ observabilityPoints: [{ operationIndex: cursor, path: '/value' }],
142
+ expected: 1,
143
+ actual: 2
144
+ });
145
+ const watch = createSwarmWatchpointPlan({ watchpoints: [{ path: '/value', operator: 'changes' }] });
146
+ const handoff = createSwarmDebugHandoff({
147
+ replayBundleIds: [replay.id],
148
+ divergenceReportIds: [divergence.id],
149
+ watchpointPlanIds: [watch.id],
150
+ comparisons: parity.comparators
151
+ });
152
+ const evidence = createSwarmEvidenceIndex({ entries: [{ topic: 'bench', path: 'agent-runs/bench/evidence.json' }] });
153
+ const blackboard = createSwarmBlackboard({ entries: [{ topic: 'bench', text: 'divergence found', sourceIds: [divergence.id] }] });
154
+ const bottleneck = createSwarmBottleneckReport({ sources: [{ text: 'merge review bottleneck', changedPaths: ['src/runtime.ts'] }] });
155
+ const fixtures = createSwarmFixtureCatalog({ fixtures: [{ id: 'logged-in', tags: ['auth'] }] });
156
+ const progress = createSwarmProgressModel({ items: [{ id: 'bench', status: 'accepted' }] });
157
+ return handoff.commands.length + evidence.summary.entryCount + blackboard.summary.entryCount + bottleneck.summary.kindCount + fixtures.summary.fixtureCount + progress.summary.acceptedCount;
158
+ }),
159
+ measure('lane-playbook-' + taskCount, 16, () => createSwarmLanePlaybook({
160
+ lane: 'runtime',
161
+ successfulBundles: bundles,
162
+ notes: ['prefer narrow patches with focused evidence'],
163
+ commands: [{ name: 'runtime-smoke', command: 'npm', args: ['test'], required: true }],
164
+ avoidInvestigating: ['generated fixtures unless task owns them'],
165
+ evidencePatterns: ['evidence.json', 'commands.md']
166
+ }).successfulJobIds.length),
167
+ measure('patch-stack-plan-' + taskCount, 16, () => createSwarmPatchStackPlan({
168
+ index: mergeIndex,
169
+ maxStackSize: 8
170
+ }).summary.stackCount),
171
+ measure('event-route-' + taskCount, 64, () => {
172
+ eventStream = createSwarmEventStream({ runId: 'bench', root: 'agent-runs/bench/streams', lanes: manifest.lanes });
173
+ return routeSwarmEventToMailboxes(eventStream, { type: 'agent.evidence', jobId: plan.jobs[cursor++ % plan.jobs.length].id, lane: 'runtime' }).length;
174
+ })
175
+ ];
22
176
 
23
177
  const report = {
24
178
  package: '@shapeshift-labs/frontier-swarm',
25
- version: readPackageVersion(packageDir),
179
+ version: readPackageVersion(),
26
180
  generatedAt: new Date().toISOString(),
27
181
  node: process.version,
28
182
  platform: process.platform + ' ' + process.arch,
@@ -31,5 +185,125 @@ const report = {
31
185
  rows
32
186
  };
33
187
 
34
- writeBenchReport(report, outPath);
35
- printBenchReport(report, { outPath, repoRoot });
188
+ if (outPath) {
189
+ fs.mkdirSync(path.dirname(outPath), { recursive: true });
190
+ fs.writeFileSync(outPath, JSON.stringify(report, null, 2) + '\n');
191
+ }
192
+
193
+ console.log(report.package + ' package benchmark');
194
+ console.log('Node ' + report.node + ' on ' + report.platform + ', tasks=' + taskCount + ', rounds=' + rounds);
195
+ console.log('These are Frontier-only package measurements, not competitor comparisons.');
196
+ console.log('');
197
+ console.log(padRight('Fixture', 30) + padLeft('Median', 12) + padLeft('p95', 12));
198
+ for (const row of rows) {
199
+ console.log(padRight(row.fixture, 30) + padLeft(formatUs(row.medianUs), 12) + padLeft(formatUs(row.p95Us), 12));
200
+ }
201
+ if (outPath) console.log('\nwrote ' + path.relative(repoRoot, outPath));
202
+
203
+ function makeManifest() {
204
+ return {
205
+ compute: [
206
+ { id: 'deep', kind: 'codex', model: 'gpt-5.5', reasoningEffort: 'xhigh' },
207
+ { id: 'fast', kind: 'codex', model: 'gpt-5.4-mini', reasoningEffort: 'medium' }
208
+ ],
209
+ layers: [
210
+ { id: 'parent', childCompute: { implementation: 'deep', evidence: 'fast' } },
211
+ { id: 'implementation', parentId: 'parent' },
212
+ { id: 'evidence', parentId: 'parent' }
213
+ ],
214
+ lanes: [
215
+ { id: 'runtime', layer: 'implementation', allowedWrites: ['src/runtime/**'], evidencePrefix: 'evidence/runtime/' },
216
+ { id: 'tests', layer: 'evidence', allowedWrites: ['test/**'], evidencePrefix: 'evidence/tests/' }
217
+ ],
218
+ policy: { defaultCompute: 'fast' }
219
+ };
220
+ }
221
+
222
+ function makeTasks(count) {
223
+ const tasks = [];
224
+ for (let i = 0; i < count; i += 1) {
225
+ const lane = i % 3 === 0 ? 'tests' : 'runtime';
226
+ tasks.push({
227
+ id: 'task-' + i,
228
+ lane,
229
+ priority: i % 100,
230
+ targetRefs: [lane === 'tests' ? `test/file-${i}.mjs` : `src/runtime/file-${i}.ts`],
231
+ acceptance: ['task ' + i + ' passes']
232
+ });
233
+ }
234
+ return tasks;
235
+ }
236
+
237
+ function makeBundles(plan, count) {
238
+ const bundles = [];
239
+ for (let i = 0; i < Math.min(count, plan.jobs.length); i += 1) {
240
+ const job = plan.jobs[i];
241
+ bundles.push(createSwarmMergeBundle({
242
+ job,
243
+ result: {
244
+ jobId: job.id,
245
+ status: 'verified',
246
+ changedPaths: [job.task.targetRefs[0] ?? `src/runtime/file-${i}.ts`],
247
+ changedRegions: i % 2 === 0 ? [`region.${i}`] : [],
248
+ verification: [{ status: 0 }]
249
+ },
250
+ patchPath: `agent-runs/bench/${job.id}/changes.patch`
251
+ }));
252
+ }
253
+ return bundles;
254
+ }
255
+
256
+ function measure(fixture, operationsPerRound, fn) {
257
+ const samples = [];
258
+ let checksum = 0;
259
+ for (let round = 0; round < rounds; round += 1) {
260
+ const start = performance.now();
261
+ for (let op = 0; op < operationsPerRound; op += 1) checksum += Number(fn()) || 0;
262
+ const elapsed = performance.now() - start;
263
+ samples.push((elapsed * 1000) / operationsPerRound);
264
+ }
265
+ samples.sort((a, b) => a - b);
266
+ return {
267
+ fixture,
268
+ operationsPerRound,
269
+ medianUs: percentile(samples, 0.5),
270
+ p95Us: percentile(samples, 0.95),
271
+ checksum
272
+ };
273
+ }
274
+
275
+ function percentile(sorted, pct) {
276
+ return sorted[Math.min(sorted.length - 1, Math.floor(sorted.length * pct))];
277
+ }
278
+
279
+ function formatUs(value) {
280
+ if (value >= 1000) return (value / 1000).toFixed(2) + 'ms';
281
+ return value.toFixed(2) + 'us';
282
+ }
283
+
284
+ function padRight(value, size) {
285
+ return String(value).padEnd(size);
286
+ }
287
+
288
+ function padLeft(value, size) {
289
+ return String(value).padStart(size);
290
+ }
291
+
292
+ function parseArgs(argv) {
293
+ const out = {};
294
+ for (let i = 0; i < argv.length; i += 1) {
295
+ if (argv[i] === '--out') out.out = argv[++i];
296
+ else if (argv[i] === '--tasks') out.tasks = argv[++i];
297
+ else if (argv[i] === '--rounds') out.rounds = argv[++i];
298
+ }
299
+ return out;
300
+ }
301
+
302
+ function readPositiveInt(value, fallback) {
303
+ const parsed = Number(value);
304
+ return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : fallback;
305
+ }
306
+
307
+ function readPackageVersion() {
308
+ return JSON.parse(fs.readFileSync(path.join(packageDir, 'package.json'), 'utf8')).version;
309
+ }