@shapeshift-labs/frontier-swarm 0.5.19 → 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 +118 -131
  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 -295
  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 -240
  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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshift-labs/frontier-swarm",
3
- "version": "0.5.19",
3
+ "version": "0.5.21",
4
4
  "description": "Hierarchical swarm plans, lanes, compute profiles, ownership policy, events, and proofs for Frontier agent work.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -27,8 +27,7 @@
27
27
  "dist",
28
28
  "README.md",
29
29
  "LICENSE",
30
- "benchmarks/package-bench.mjs",
31
- "benchmarks/package-bench-*.mjs"
30
+ "benchmarks/package-bench.mjs"
32
31
  ],
33
32
  "engines": {
34
33
  "node": ">=18"
@@ -36,14 +35,13 @@
36
35
  "scripts": {
37
36
  "build": "node build.mjs",
38
37
  "test": "npm run build && npm run typecheck && node test/smoke.mjs && node test/fuzz.mjs --cases 700",
39
- "prepack": "npm run lint && npm run readme:packages:check && npm run test",
38
+ "prepack": "npm run readme:packages:check && npm run test",
40
39
  "typecheck": "node build.mjs --typecheck",
41
40
  "fuzz": "npm run build && node test/fuzz.mjs",
42
41
  "bench": "npm run build && node --expose-gc benchmarks/package-bench.mjs --out benchmarks/results/frontier-swarm-package-bench-latest.json",
43
42
  "pack:dry": "npm pack --dry-run",
44
43
  "readme:packages": "node benchmarks/package-readme-sections.mjs",
45
- "readme:packages:check": "node benchmarks/package-readme-sections.mjs --check",
46
- "lint": "node scripts/strict-source-policy.mjs"
44
+ "readme:packages:check": "node benchmarks/package-readme-sections.mjs --check"
47
45
  },
48
46
  "keywords": [
49
47
  "frontier",
@@ -1,95 +0,0 @@
1
- import {
2
- createSwarmMergeBundle,
3
- createSwarmTraceShard
4
- } from '../dist/index.js';
5
-
6
- export function makeBenchManifest() {
7
- return {
8
- compute: [
9
- { id: 'deep', kind: 'codex', model: 'gpt-5.5', reasoningEffort: 'xhigh' },
10
- { id: 'fast', kind: 'codex', model: 'gpt-5.4-mini', reasoningEffort: 'medium' }
11
- ],
12
- layers: [
13
- { id: 'parent', childCompute: { implementation: 'deep', evidence: 'fast' } },
14
- { id: 'implementation', parentId: 'parent' },
15
- { id: 'evidence', parentId: 'parent' }
16
- ],
17
- lanes: [
18
- { id: 'runtime', layer: 'implementation', allowedWrites: ['src/runtime/**'], evidencePrefix: 'evidence/runtime/' },
19
- { id: 'tests', layer: 'evidence', allowedWrites: ['test/**'], evidencePrefix: 'evidence/tests/' }
20
- ],
21
- policy: { defaultCompute: 'fast' }
22
- };
23
- }
24
-
25
- export function makeBenchTasks(count) {
26
- const tasks = [];
27
- for (let i = 0; i < count; i += 1) {
28
- const lane = i % 3 === 0 ? 'tests' : 'runtime';
29
- tasks.push({
30
- id: 'task-' + i,
31
- lane,
32
- priority: i % 100,
33
- targetRefs: [lane === 'tests' ? `test/file-${i}.mjs` : `src/runtime/file-${i}.ts`],
34
- acceptance: ['task ' + i + ' passes']
35
- });
36
- }
37
- return tasks;
38
- }
39
-
40
- export function makeBenchBundles(plan, count) {
41
- const bundles = [];
42
- for (let i = 0; i < Math.min(count, plan.jobs.length); i += 1) {
43
- const job = plan.jobs[i];
44
- bundles.push(createSwarmMergeBundle({
45
- job,
46
- result: {
47
- jobId: job.id,
48
- status: 'verified',
49
- changedPaths: [job.task.targetRefs[0] ?? `src/runtime/file-${i}.ts`],
50
- changedRegions: i % 2 === 0 ? [`region.${i}`] : [],
51
- verification: [{ status: 0 }]
52
- },
53
- patchPath: `agent-runs/bench/${job.id}/changes.patch`
54
- }));
55
- }
56
- return bundles;
57
- }
58
-
59
- export function makeBenchTraceBundles(plan, count, offset = 0) {
60
- const bundles = [];
61
- for (let i = 0; i < Math.min(count, plan.jobs.length); i += 1) {
62
- const job = plan.jobs[(i + offset) % plan.jobs.length];
63
- const region = `region.${i % 8}`;
64
- const traceShard = createSwarmTraceShard({
65
- jobId: job.id,
66
- lane: job.lane,
67
- subject: 'bench-trace',
68
- rowWindows: [{ start: i * 10, end: i * 10 + 4, rowCount: 5, firstDivergenceAt: i % 5 === 0 ? i * 10 + 2 : undefined, deltaFields: ['state.value'] }],
69
- hypotheses: [{ sourcePath: job.task.targetRefs[0], symbol: `benchSymbol${i}`, region, confidence: i % 5 === 0 ? 'high' : 'medium' }],
70
- executableOwnershipRegions: [{
71
- id: region,
72
- sourcePath: job.task.targetRefs[0],
73
- symbol: `benchSymbol${i}`,
74
- selectors: [`${region}.*`],
75
- affectedTests: ['node trace-gate.mjs'],
76
- riskLevel: i % 5 === 0 ? 'medium' : 'low'
77
- }],
78
- focusedTests: ['node trace-gate.mjs'],
79
- referenceEvidence: [{ path: `agent-runs/bench/${job.id}/reference-trace.jsonl`, kind: 'trace' }]
80
- });
81
- bundles.push(createSwarmMergeBundle({
82
- job,
83
- result: {
84
- jobId: job.id,
85
- status: 'verified',
86
- changedPaths: [job.task.targetRefs[0] ?? `src/runtime/file-${i}.ts`],
87
- changedRegions: [region],
88
- verification: [{ status: 0 }]
89
- },
90
- patchPath: `agent-runs/bench/${job.id}/changes.patch`,
91
- traceShards: [traceShard]
92
- }));
93
- }
94
- return bundles;
95
- }
@@ -1,211 +0,0 @@
1
- import {
2
- checkSwarmOwnership,
3
- createSwarmAdaptiveLoadPlan,
4
- createSwarmContextPack,
5
- createSwarmHotspotReport,
6
- createSwarmLanePlaybook,
7
- createSwarmMergeAdmission,
8
- createSwarmManifest,
9
- createSwarmEventStream,
10
- createSwarmLeases,
11
- createSwarmMergeBundle,
12
- createSwarmMergeIndex,
13
- createSwarmOracleCorpus,
14
- createSwarmPatchStackPlan,
15
- createSwarmPayoffVector,
16
- createSwarmReplayBundle,
17
- createSwarmParityOracle,
18
- createSwarmDivergenceReport,
19
- createSwarmWatchpointPlan,
20
- createSwarmDebugHandoff,
21
- createSwarmEvidenceIndex,
22
- createSwarmBlackboard,
23
- createSwarmBottleneckReport,
24
- createSwarmFixtureCatalog,
25
- createSwarmProgressModel,
26
- createSwarmPlan,
27
- createSwarmProof,
28
- createSwarmQueueOverlay,
29
- createSwarmQueueSnapshot,
30
- createSwarmRun,
31
- createSwarmRunCheckpoint,
32
- createSwarmSchedule,
33
- createSwarmStrategyTournament,
34
- createSwarmTraceIndex,
35
- decodeSwarmJsonl,
36
- defineSwarmTasks,
37
- encodeSwarmJsonl,
38
- querySwarmTraceIndex,
39
- routeSwarmEventToMailboxes,
40
- resolveSwarmCompute,
41
- validateSwarmManifest
42
- } from '../dist/index.js';
43
- import {
44
- makeBenchBundles,
45
- makeBenchManifest,
46
- makeBenchTasks,
47
- makeBenchTraceBundles
48
- } from './package-bench-fixtures.mjs';
49
-
50
- export function createPackageBenchRows({ taskCount, measure }) {
51
- const manifest = createSwarmManifest(makeBenchManifest());
52
- const tasks = defineSwarmTasks(makeBenchTasks(taskCount));
53
- let plan = createSwarmPlan(manifest, tasks, { limit: 64 });
54
- let run = createSwarmRun({ plan });
55
- let jsonl = encodeSwarmJsonl([plan, run]);
56
- let cursor = 0;
57
- let schedule = createSwarmSchedule({ plan, maxReadyJobs: 128 });
58
- let leases = createSwarmLeases({ schedule, workerId: 'bench-worker', now: 1000, leaseMs: 60000, count: 16 });
59
- let eventStream = createSwarmEventStream({ runId: 'bench', root: 'agent-runs/bench/streams', lanes: manifest.lanes });
60
- let bundles = makeBenchBundles(plan, 32);
61
- let mergeIndex = createSwarmMergeIndex({ bundles });
62
-
63
- return [
64
- measure('create-plan-' + taskCount, 8, () => {
65
- plan = createSwarmPlan(manifest, tasks, { limit: 64, selectors: ['task'] });
66
- return plan.jobs.length;
67
- }),
68
- measure('validate-manifest', 32, () => validateSwarmManifest(manifest).issues.length),
69
- measure('resolve-compute-' + taskCount, 64, () => resolveSwarmCompute(manifest, tasks[cursor++ % tasks.length]).id.length),
70
- measure('ownership-check-' + taskCount, 64, () => checkSwarmOwnership(plan.jobs[cursor++ % plan.jobs.length], ['src/runtime/file.ts']).violations.length),
71
- measure('create-run-' + taskCount, 16, () => {
72
- run = createSwarmRun({ plan });
73
- return run.jobs.length;
74
- }),
75
- measure('jsonl-encode', 16, () => {
76
- jsonl = encodeSwarmJsonl([plan, run]);
77
- return jsonl.length;
78
- }),
79
- measure('jsonl-decode', 16, () => decodeSwarmJsonl(jsonl).length),
80
- measure('proof', 16, () => createSwarmProof(plan).hash.length),
81
- measure('schedule-lease-' + taskCount, 8, () => {
82
- schedule = createSwarmSchedule({ plan, maxReadyJobs: 128, maxComputeConcurrency: { fast: 64, deep: 32 } });
83
- leases = createSwarmLeases({ schedule, workerId: 'bench-worker', now: 1000 + cursor++, leaseMs: 60000, count: 16 });
84
- return schedule.ready.length + leases.length;
85
- }),
86
- measure('adaptive-load-' + taskCount, 8, () => createSwarmAdaptiveLoadPlan({
87
- plan,
88
- schedule,
89
- mode: 'balanced',
90
- maxLimits: { maxReadyJobs: 128 },
91
- currentLimits: { maxReadyJobs: 64 },
92
- observations: [
93
- { kind: 'semantic-empty', jobId: plan.jobs[cursor % plan.jobs.length].id, lane: plan.jobs[cursor % plan.jobs.length].lane },
94
- { kind: 'log-noise', lane: 'runtime', value: 200000 }
95
- ],
96
- generatedAt: 1500 + cursor++
97
- }).summary.decisionCount),
98
- measure('queue-snapshot-' + taskCount, 8, () => {
99
- const snapshot = createSwarmQueueSnapshot({ plan, run, leases, generatedAt: 2000 + cursor++ });
100
- return snapshot.summary.jobCount + snapshot.summary.leaseCount;
101
- }),
102
- measure('run-checkpoint-' + taskCount, 16, () => createSwarmRunCheckpoint({ run, sequence: cursor++ }).hash.length),
103
- measure('merge-bundle-' + taskCount, 32, () => createSwarmMergeBundle({
104
- job: plan.jobs[cursor % plan.jobs.length],
105
- result: {
106
- jobId: plan.jobs[cursor++ % plan.jobs.length].id,
107
- status: 'completed',
108
- changedPaths: ['src/runtime/file.ts'],
109
- verification: [{ status: 0 }]
110
- },
111
- patchPath: 'agent-runs/bench/changes.patch'
112
- }).id.length),
113
- measure('queue-overlay-' + taskCount, 16, () => createSwarmQueueOverlay({ bundles, generatedAt: 3000 + cursor++ }).summary.entryCount),
114
- measure('merge-index-' + taskCount, 8, () => {
115
- bundles = makeBenchBundles(plan, 32);
116
- mergeIndex = createSwarmMergeIndex({ bundles, generatedAt: 4000 + cursor++ });
117
- return mergeIndex.summary.entryCount + mergeIndex.summary.conflictCount;
118
- }),
119
- measure('merge-admission-' + taskCount, 16, () => createSwarmMergeAdmission({ index: mergeIndex, maxReady: 8, maxChangedPaths: 16 }).summary.admittedCount),
120
- measure('hotspot-report-' + taskCount, 16, () => createSwarmHotspotReport({ bundles, threshold: 3 }).summary.recommendationCount),
121
- measure('context-pack-' + taskCount, 32, () => createSwarmContextPack({
122
- job: plan.jobs[cursor % plan.jobs.length],
123
- files: ['src/runtime/file.ts', 'test/runtime-smoke.mjs'],
124
- apiMap: {
125
- runtime: ['createRuntime', 'stepRuntime'],
126
- tests: ['runtime smoke gate']
127
- },
128
- knownFailures: ['shared renderer gate is noisy on old snapshots'],
129
- oracleCommands: [{ name: 'focused-gate', command: 'npm', args: ['test'], required: true }],
130
- evidenceSchema: { type: 'object', required: ['ok', 'commands'] },
131
- avoidInvestigating: ['unrelated route snapshots'],
132
- playbookIds: ['runtime-playbook']
133
- }).files.length),
134
- measure('oracle-corpus-' + taskCount, 32, () => createSwarmOracleCorpus({
135
- artifacts: [
136
- { id: 'trace-runtime', path: 'oracles/runtime-trace.jsonl', kind: 'trace', tags: ['runtime', 'reference'], hash: 'fnv1a32:trace' },
137
- { id: 'snapshot-routing', path: 'oracles/routing-snapshot.json', kind: 'snapshot', tags: ['routing', 'reference'] }
138
- ]
139
- }).summary.artifactCount),
140
- measure('replay-debug-evidence-' + taskCount, 16, () => {
141
- const replay = createSwarmReplayBundle({
142
- commands: ['node replay.mjs'],
143
- artifacts: [{ path: 'agent-runs/bench/trace.jsonl', kind: 'trace' }],
144
- expectedEvidence: ['trace.jsonl']
145
- });
146
- const parity = createSwarmParityOracle({
147
- comparators: [{ status: 'failed', expected: 1, actual: 2, operationIndex: cursor++ }]
148
- });
149
- const divergence = createSwarmDivergenceReport({
150
- replayBundleIds: [replay.id],
151
- observabilityPoints: [{ operationIndex: cursor, path: '/value' }],
152
- expected: 1,
153
- actual: 2
154
- });
155
- const watch = createSwarmWatchpointPlan({ watchpoints: [{ path: '/value', operator: 'changes' }] });
156
- const handoff = createSwarmDebugHandoff({
157
- replayBundleIds: [replay.id],
158
- divergenceReportIds: [divergence.id],
159
- watchpointPlanIds: [watch.id],
160
- comparisons: parity.comparators
161
- });
162
- const evidence = createSwarmEvidenceIndex({ entries: [{ topic: 'bench', path: 'agent-runs/bench/evidence.json' }] });
163
- const blackboard = createSwarmBlackboard({ entries: [{ topic: 'bench', text: 'divergence found', sourceIds: [divergence.id] }] });
164
- const bottleneck = createSwarmBottleneckReport({ sources: [{ text: 'merge review bottleneck', changedPaths: ['src/runtime.ts'] }] });
165
- const fixtures = createSwarmFixtureCatalog({ fixtures: [{ id: 'logged-in', tags: ['auth'] }] });
166
- const progress = createSwarmProgressModel({ items: [{ id: 'bench', status: 'accepted' }] });
167
- return handoff.commands.length + evidence.summary.entryCount + blackboard.summary.entryCount + bottleneck.summary.kindCount + fixtures.summary.fixtureCount + progress.summary.acceptedCount;
168
- }),
169
- measure('trace-index-' + taskCount, 16, () => {
170
- const traceBundles = makeBenchTraceBundles(plan, 24, cursor++);
171
- const traceIndex = createSwarmTraceIndex({ bundles: traceBundles, generatedAt: 7000 + cursor++ });
172
- const query = querySwarmTraceIndex(traceIndex, { region: 'region.2', textIncludes: 'benchSymbol' });
173
- return traceIndex.summary.shardCount + traceIndex.summary.executableOwnershipRegionCount + query.summary.shardCount;
174
- }),
175
- measure('lane-playbook-' + taskCount, 16, () => createSwarmLanePlaybook({
176
- lane: 'runtime',
177
- successfulBundles: bundles,
178
- notes: ['prefer narrow patches with focused evidence'],
179
- commands: [{ name: 'runtime-smoke', command: 'npm', args: ['test'], required: true }],
180
- avoidInvestigating: ['generated fixtures unless task owns them'],
181
- evidencePatterns: ['evidence.json', 'commands.md']
182
- }).successfulJobIds.length),
183
- measure('patch-stack-plan-' + taskCount, 16, () => createSwarmPatchStackPlan({
184
- index: mergeIndex,
185
- maxStackSize: 8
186
- }).summary.stackCount),
187
- measure('strategy-tournament-' + taskCount, 16, () => createSwarmStrategyTournament({
188
- strategies: [{ id: 'search' }, { id: 'verify' }, { id: 'review' }],
189
- games: [{ id: 'merge-admission' }, { id: 'projection-route' }],
190
- matches: Array.from({ length: 24 }, (_, index) => ({
191
- payoff: createSwarmPayoffVector({
192
- strategyId: ['search', 'verify', 'review'][index % 3],
193
- gameId: index % 2 === 0 ? 'merge-admission' : 'projection-route',
194
- outcome: index % 5 === 0 ? 'undefined' : index % 3 === 0 ? 'candidate' : 'verified',
195
- components: {
196
- correctness: (index % 10) / 10,
197
- evidence: ((index + 3) % 10) / 10,
198
- reviewCost: { value: ((index + 5) % 10) / 10, direction: 'minimize', weight: 0.5 }
199
- },
200
- search: { attempts: index + 1, durationMs: 1000 + index * 10, tokens: 2000 + index * 100 },
201
- certificate: { commands: ['npm test'], durationMs: 500 + index }
202
- })
203
- })),
204
- generatedAt: 9000 + cursor++
205
- }).standings.length),
206
- measure('event-route-' + taskCount, 64, () => {
207
- eventStream = createSwarmEventStream({ runId: 'bench', root: 'agent-runs/bench/streams', lanes: manifest.lanes });
208
- return routeSwarmEventToMailboxes(eventStream, { type: 'agent.evidence', jobId: plan.jobs[cursor++ % plan.jobs.length].id, lane: 'runtime' }).length;
209
- })
210
- ];
211
- }
@@ -1,94 +0,0 @@
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';
5
-
6
- export function createPackageBenchPaths(metaUrl) {
7
- const dirname = path.dirname(fileURLToPath(metaUrl));
8
- const packageDir = path.resolve(dirname, '..');
9
- return {
10
- packageDir,
11
- repoRoot: path.basename(path.dirname(packageDir)) === 'packages'
12
- ? path.resolve(packageDir, '..', '..')
13
- : packageDir
14
- };
15
- }
16
-
17
- export function createMeasure(rounds) {
18
- return function measure(fixture, operationsPerRound, fn) {
19
- const samples = [];
20
- let checksum = 0;
21
- for (let round = 0; round < rounds; round += 1) {
22
- const start = performance.now();
23
- for (let op = 0; op < operationsPerRound; op += 1) checksum += Number(fn()) || 0;
24
- const elapsed = performance.now() - start;
25
- samples.push((elapsed * 1000) / operationsPerRound);
26
- }
27
- samples.sort((a, b) => a - b);
28
- return {
29
- fixture,
30
- operationsPerRound,
31
- medianUs: percentile(samples, 0.5),
32
- p95Us: percentile(samples, 0.95),
33
- checksum
34
- };
35
- };
36
- }
37
-
38
- export function parseArgs(argv) {
39
- const out = {};
40
- for (let i = 0; i < argv.length; i += 1) {
41
- if (argv[i] === '--out') out.out = argv[++i];
42
- else if (argv[i] === '--tasks') out.tasks = argv[++i];
43
- else if (argv[i] === '--rounds') out.rounds = argv[++i];
44
- }
45
- return out;
46
- }
47
-
48
- export function readPositiveInt(value, fallback) {
49
- const parsed = Number(value);
50
- return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : fallback;
51
- }
52
-
53
- export function resolveOutPath(repoRoot, out) {
54
- return out ? path.resolve(repoRoot, out) : null;
55
- }
56
-
57
- export function readPackageVersion(packageDir) {
58
- return JSON.parse(fs.readFileSync(path.join(packageDir, 'package.json'), 'utf8')).version;
59
- }
60
-
61
- export function writeBenchReport(report, outPath) {
62
- if (!outPath) return;
63
- fs.mkdirSync(path.dirname(outPath), { recursive: true });
64
- fs.writeFileSync(outPath, JSON.stringify(report, null, 2) + '\n');
65
- }
66
-
67
- export function printBenchReport(report, { outPath, repoRoot }) {
68
- console.log(report.package + ' package benchmark');
69
- console.log('Node ' + report.node + ' on ' + report.platform + ', tasks=' + report.taskCount + ', rounds=' + report.rounds);
70
- console.log('These are Frontier-only package measurements, not competitor comparisons.');
71
- console.log('');
72
- console.log(padRight('Fixture', 30) + padLeft('Median', 12) + padLeft('p95', 12));
73
- for (const row of report.rows) {
74
- console.log(padRight(row.fixture, 30) + padLeft(formatUs(row.medianUs), 12) + padLeft(formatUs(row.p95Us), 12));
75
- }
76
- if (outPath) console.log('\nwrote ' + path.relative(repoRoot, outPath));
77
- }
78
-
79
- export function formatUs(value) {
80
- if (value >= 1000) return (value / 1000).toFixed(2) + 'ms';
81
- return value.toFixed(2) + 'us';
82
- }
83
-
84
- function padRight(value, size) {
85
- return String(value).padEnd(size);
86
- }
87
-
88
- function padLeft(value, size) {
89
- return String(value).padStart(size);
90
- }
91
-
92
- function percentile(sorted, pct) {
93
- return sorted[Math.min(sorted.length - 1, Math.floor(sorted.length * pct))];
94
- }
@@ -1,8 +0,0 @@
1
- import type { FrontierSwarmScheduleLimits } from './plan.js';
2
- import type { FrontierSwarmAdaptiveLoadDecision, FrontierSwarmAdaptiveMode, FrontierSwarmAdaptiveObservation } from './adaptive-load-types.js';
3
- export declare function applyAdaptiveObservation(limits: FrontierSwarmScheduleLimits, minLimits: FrontierSwarmScheduleLimits, maxLimits: FrontierSwarmScheduleLimits, mode: FrontierSwarmAdaptiveMode, observation: FrontierSwarmAdaptiveObservation, decisions: FrontierSwarmAdaptiveLoadDecision[]): void;
4
- export declare function applyAdaptiveRecovery(limits: FrontierSwarmScheduleLimits, maxLimits: FrontierSwarmScheduleLimits, observation: FrontierSwarmAdaptiveObservation, decisions: FrontierSwarmAdaptiveLoadDecision[], options?: {
5
- increaseReadyWindow?: boolean;
6
- }): void;
7
- export declare function createAdaptiveDecision(input: Omit<FrontierSwarmAdaptiveLoadDecision, 'id'>): FrontierSwarmAdaptiveLoadDecision;
8
- //# sourceMappingURL=adaptive-load-decisions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adaptive-load-decisions.d.ts","sourceRoot":"","sources":["../src/adaptive-load-decisions.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,KAAK,EAEV,iCAAiC,EACjC,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,2BAA2B,EACnC,SAAS,EAAE,2BAA2B,EACtC,SAAS,EAAE,2BAA2B,EACtC,IAAI,EAAE,yBAAyB,EAC/B,WAAW,EAAE,gCAAgC,EAC7C,SAAS,EAAE,iCAAiC,EAAE,GAC7C,IAAI,CAmDN;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,2BAA2B,EACnC,SAAS,EAAE,2BAA2B,EACtC,WAAW,EAAE,gCAAgC,EAC7C,SAAS,EAAE,iCAAiC,EAAE,EAC9C,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9C,IAAI,CAuBN;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,GAAG,iCAAiC,CAK9H"}
@@ -1,133 +0,0 @@
1
- import { positiveNumber, stableHash } from './internal.js';
2
- import { clampAdaptiveLimit } from './adaptive-load-limits.js';
3
- import { adaptiveDecisionKeyForObservation, adaptiveDecisionTargetForObservation, adaptiveObservationIsCapacityBackpressure, adaptiveObservationShouldReduceReadyWindow } from './adaptive-load-observations.js';
4
- export function applyAdaptiveObservation(limits, minLimits, maxLimits, mode, observation, decisions) {
5
- if (observation.kind === 'ready-capacity') {
6
- decisions.push(createAdaptiveDecision({
7
- action: 'hold',
8
- target: 'max-ready-jobs',
9
- previous: limits.maxReadyJobs,
10
- next: limits.maxReadyJobs,
11
- max: maxLimits.maxReadyJobs,
12
- min: minLimits.maxReadyJobs,
13
- reason: observation.reasons[0] ?? 'ready-capacity',
14
- observationIds: [observation.id]
15
- }));
16
- return;
17
- }
18
- const target = adaptiveDecisionTargetForObservation(observation);
19
- const key = adaptiveDecisionKeyForObservation(observation);
20
- if (adaptiveObservationIsCapacityBackpressure(observation)) {
21
- decisions.push(createAdaptiveDecision({
22
- action: 'hold',
23
- target,
24
- ...(key ? { key } : {}),
25
- reason: observation.reasons[0] ?? observation.kind,
26
- observationIds: [observation.id]
27
- }));
28
- return;
29
- }
30
- if (target === 'lane' && key) {
31
- decreaseAdaptiveRecordLimit(limits.maxLaneConcurrency, minLimits.maxLaneConcurrency, maxLimits.maxLaneConcurrency, key, mode, observation, decisions, target);
32
- }
33
- else if (target === 'concurrency-key' && key) {
34
- decreaseAdaptiveRecordLimit(limits.maxConcurrencyKeyConcurrency, minLimits.maxConcurrencyKeyConcurrency, maxLimits.maxConcurrencyKeyConcurrency, key, mode, observation, decisions, target);
35
- }
36
- else if (target === 'compute' && key) {
37
- decreaseAdaptiveRecordLimit(limits.maxComputeConcurrency, minLimits.maxComputeConcurrency, maxLimits.maxComputeConcurrency, key, mode, observation, decisions, target);
38
- }
39
- else if (target === 'resource' && key) {
40
- decreaseAdaptiveRecordLimit(limits.resourceQuotas, minLimits.resourceQuotas, maxLimits.resourceQuotas, key, mode, observation, decisions, target);
41
- }
42
- if (adaptiveObservationShouldReduceReadyWindow(observation)) {
43
- const previous = limits.maxReadyJobs ?? maxLimits.maxReadyJobs ?? 1;
44
- const min = minLimits.maxReadyJobs ?? 1;
45
- const max = maxLimits.maxReadyJobs ?? previous;
46
- limits.maxReadyJobs = clampAdaptiveLimit(adaptiveReducedValue(previous, min, mode, observation), min, max);
47
- decisions.push(createAdaptiveDecision({
48
- action: limits.maxReadyJobs < previous ? 'decrease' : 'hold',
49
- target: 'max-ready-jobs',
50
- previous,
51
- next: limits.maxReadyJobs,
52
- max,
53
- min,
54
- reason: observation.reasons[0] ?? observation.kind,
55
- observationIds: [observation.id]
56
- }));
57
- }
58
- }
59
- export function applyAdaptiveRecovery(limits, maxLimits, observation, decisions, options = {}) {
60
- if (options.increaseReadyWindow !== false && limits.maxReadyJobs !== undefined && maxLimits.maxReadyJobs !== undefined && limits.maxReadyJobs < maxLimits.maxReadyJobs) {
61
- const previous = limits.maxReadyJobs;
62
- limits.maxReadyJobs = Math.min(maxLimits.maxReadyJobs, previous + 1);
63
- decisions.push(createAdaptiveDecision({
64
- action: 'increase',
65
- target: 'max-ready-jobs',
66
- previous,
67
- next: limits.maxReadyJobs,
68
- max: maxLimits.maxReadyJobs,
69
- reason: observation.reasons[0] ?? observation.kind,
70
- observationIds: [observation.id]
71
- }));
72
- }
73
- if (observation.lane) {
74
- increaseAdaptiveRecordLimit(limits.maxLaneConcurrency, maxLimits.maxLaneConcurrency, observation.lane, observation, decisions, 'lane');
75
- }
76
- if (observation.compute) {
77
- increaseAdaptiveRecordLimit(limits.maxComputeConcurrency, maxLimits.maxComputeConcurrency, observation.compute, observation, decisions, 'compute');
78
- }
79
- if (observation.concurrencyKey) {
80
- increaseAdaptiveRecordLimit(limits.maxConcurrencyKeyConcurrency, maxLimits.maxConcurrencyKeyConcurrency, observation.concurrencyKey, observation, decisions, 'concurrency-key');
81
- }
82
- }
83
- export function createAdaptiveDecision(input) {
84
- return {
85
- id: 'swarm-adaptive-decision:' + stableHash([input.action, input.target, input.key, input.previous, input.next, input.reason, input.observationIds]),
86
- ...input
87
- };
88
- }
89
- function decreaseAdaptiveRecordLimit(record, minRecord, maxRecord, key, mode, observation, decisions, target) {
90
- const previous = record[key] ?? maxRecord[key];
91
- if (!positiveNumber(previous))
92
- return;
93
- const min = minRecord[key] ?? 1;
94
- const max = maxRecord[key] ?? previous;
95
- const next = clampAdaptiveLimit(adaptiveReducedValue(previous, min, mode, observation), min, max);
96
- record[key] = next;
97
- decisions.push(createAdaptiveDecision({
98
- action: next < previous ? 'decrease' : 'hold',
99
- target,
100
- key,
101
- previous,
102
- next,
103
- max,
104
- min,
105
- reason: observation.reasons[0] ?? observation.kind,
106
- observationIds: [observation.id]
107
- }));
108
- }
109
- function increaseAdaptiveRecordLimit(record, maxRecord, key, observation, decisions, target) {
110
- const previous = record[key];
111
- const max = maxRecord[key];
112
- if (!positiveNumber(previous) || !positiveNumber(max) || previous >= max)
113
- return;
114
- record[key] = Math.min(max, previous + 1);
115
- decisions.push(createAdaptiveDecision({
116
- action: 'increase',
117
- target,
118
- key,
119
- previous,
120
- next: record[key],
121
- max,
122
- reason: observation.reasons[0] ?? observation.kind,
123
- observationIds: [observation.id]
124
- }));
125
- }
126
- function adaptiveReducedValue(previous, min, mode, observation) {
127
- if (observation.kind === 'merge-conflict' || observation.kind === 'duplicate-output' || observation.kind === 'concurrency-key-capacity')
128
- return min;
129
- const severityFactor = observation.severity === 'critical' ? 0.45 : observation.severity === 'error' ? 0.55 : observation.severity === 'warning' ? 0.7 : 0.85;
130
- const modeFactor = mode === 'conservative' ? 0.6 : mode === 'aggressive' ? 0.85 : 0.75;
131
- return Math.max(min, Math.floor(previous * Math.min(severityFactor, modeFactor)));
132
- }
133
- //# sourceMappingURL=adaptive-load-decisions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adaptive-load-decisions.js","sourceRoot":"","sources":["../src/adaptive-load-decisions.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { FrontierSwarmScheduleLimits } from './plan.js';
2
- import type { FrontierSwarmAdaptiveLoadPlanInput, FrontierSwarmAdaptiveScheduleLimitsInput } from './adaptive-load-types.js';
3
- export declare function createAdaptiveMaxLimits(input: FrontierSwarmAdaptiveLoadPlanInput): FrontierSwarmScheduleLimits;
4
- export declare function createAdaptiveCurrentLimits(input: FrontierSwarmAdaptiveScheduleLimitsInput | undefined, maxLimits: FrontierSwarmScheduleLimits): FrontierSwarmScheduleLimits;
5
- export declare function createAdaptiveMinLimits(input: FrontierSwarmAdaptiveScheduleLimitsInput | undefined, maxLimits: FrontierSwarmScheduleLimits): FrontierSwarmScheduleLimits;
6
- export declare function clampAdaptiveLimits(value: FrontierSwarmScheduleLimits, minLimits: FrontierSwarmScheduleLimits, maxLimits: FrontierSwarmScheduleLimits): FrontierSwarmScheduleLimits;
7
- export declare function clampAdaptiveLimit(value: number, min: number, max: number): number;
8
- //# sourceMappingURL=adaptive-load-limits.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adaptive-load-limits.d.ts","sourceRoot":"","sources":["../src/adaptive-load-limits.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,KAAK,EAAE,kCAAkC,EAAE,wCAAwC,EAAE,MAAM,0BAA0B,CAAC;AAE7H,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,kCAAkC,GAAG,2BAA2B,CA4B9G;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,wCAAwC,GAAG,SAAS,EAC3D,SAAS,EAAE,2BAA2B,GACrC,2BAA2B,CAU7B;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,wCAAwC,GAAG,SAAS,EAC3D,SAAS,EAAE,2BAA2B,GACrC,2BAA2B,CAa7B;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,2BAA2B,EAClC,SAAS,EAAE,2BAA2B,EACtC,SAAS,EAAE,2BAA2B,GACrC,2BAA2B,CAU7B;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIlF"}