lorenz 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (630) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +13 -0
  3. package/README.md +774 -0
  4. package/RELEASE-MANIFEST.json +211 -0
  5. package/apps/cli/bin/lorenz.js +25 -0
  6. package/apps/cli/dist/bin/cli.d.ts +3 -0
  7. package/apps/cli/dist/bin/cli.d.ts.map +1 -0
  8. package/apps/cli/dist/bin/cli.js +4 -0
  9. package/apps/cli/dist/bin/cli.js.map +1 -0
  10. package/apps/cli/dist/daemon.d.ts +76 -0
  11. package/apps/cli/dist/daemon.d.ts.map +1 -0
  12. package/apps/cli/dist/daemon.js +189 -0
  13. package/apps/cli/dist/daemon.js.map +1 -0
  14. package/apps/cli/dist/doctor.d.ts +40 -0
  15. package/apps/cli/dist/doctor.d.ts.map +1 -0
  16. package/apps/cli/dist/doctor.js +590 -0
  17. package/apps/cli/dist/doctor.js.map +1 -0
  18. package/apps/cli/dist/index.d.ts +32 -0
  19. package/apps/cli/dist/index.d.ts.map +1 -0
  20. package/apps/cli/dist/index.js +26 -0
  21. package/apps/cli/dist/index.js.map +1 -0
  22. package/apps/cli/dist/main.d.ts +40 -0
  23. package/apps/cli/dist/main.d.ts.map +1 -0
  24. package/apps/cli/dist/main.js +259 -0
  25. package/apps/cli/dist/main.js.map +1 -0
  26. package/apps/cli/dist/runs.d.ts +31 -0
  27. package/apps/cli/dist/runs.d.ts.map +1 -0
  28. package/apps/cli/dist/runs.js +281 -0
  29. package/apps/cli/dist/runs.js.map +1 -0
  30. package/apps/cli/dist/workerDriverLoader.d.ts +64 -0
  31. package/apps/cli/dist/workerDriverLoader.d.ts.map +1 -0
  32. package/apps/cli/dist/workerDriverLoader.js +211 -0
  33. package/apps/cli/dist/workerDriverLoader.js.map +1 -0
  34. package/apps/cli/package.json +57 -0
  35. package/apps/symphony-dashboard/dist/assets/index-B3owF3jd.css +1 -0
  36. package/apps/symphony-dashboard/dist/assets/index-DQ6XlL0d.js +227 -0
  37. package/apps/symphony-dashboard/dist/index.html +18 -0
  38. package/bin/lorenz +16 -0
  39. package/extensions/docker-worker/dist/index.d.ts +92 -0
  40. package/extensions/docker-worker/dist/index.d.ts.map +1 -0
  41. package/extensions/docker-worker/dist/index.js +283 -0
  42. package/extensions/docker-worker/dist/index.js.map +1 -0
  43. package/extensions/docker-worker/package.json +14 -0
  44. package/extensions/jira-tracker/dist/client.d.ts +50 -0
  45. package/extensions/jira-tracker/dist/client.d.ts.map +1 -0
  46. package/extensions/jira-tracker/dist/client.js +619 -0
  47. package/extensions/jira-tracker/dist/client.js.map +1 -0
  48. package/extensions/jira-tracker/dist/index.d.ts +5 -0
  49. package/extensions/jira-tracker/dist/index.d.ts.map +1 -0
  50. package/extensions/jira-tracker/dist/index.js +5 -0
  51. package/extensions/jira-tracker/dist/index.js.map +1 -0
  52. package/extensions/jira-tracker/dist/options.d.ts +38 -0
  53. package/extensions/jira-tracker/dist/options.d.ts.map +1 -0
  54. package/extensions/jira-tracker/dist/options.js +61 -0
  55. package/extensions/jira-tracker/dist/options.js.map +1 -0
  56. package/extensions/jira-tracker/dist/provider.d.ts +6 -0
  57. package/extensions/jira-tracker/dist/provider.d.ts.map +1 -0
  58. package/extensions/jira-tracker/dist/provider.js +178 -0
  59. package/extensions/jira-tracker/dist/provider.js.map +1 -0
  60. package/extensions/jira-tracker/dist/register.d.ts +10 -0
  61. package/extensions/jira-tracker/dist/register.d.ts.map +1 -0
  62. package/extensions/jira-tracker/dist/register.js +15 -0
  63. package/extensions/jira-tracker/dist/register.js.map +1 -0
  64. package/extensions/jira-tracker/package.json +16 -0
  65. package/extensions/linear-tracker/dist/client.d.ts +82 -0
  66. package/extensions/linear-tracker/dist/client.d.ts.map +1 -0
  67. package/extensions/linear-tracker/dist/client.js +622 -0
  68. package/extensions/linear-tracker/dist/client.js.map +1 -0
  69. package/extensions/linear-tracker/dist/index.d.ts +8 -0
  70. package/extensions/linear-tracker/dist/index.d.ts.map +1 -0
  71. package/extensions/linear-tracker/dist/index.js +7 -0
  72. package/extensions/linear-tracker/dist/index.js.map +1 -0
  73. package/extensions/linear-tracker/dist/options.d.ts +32 -0
  74. package/extensions/linear-tracker/dist/options.d.ts.map +1 -0
  75. package/extensions/linear-tracker/dist/options.js +59 -0
  76. package/extensions/linear-tracker/dist/options.js.map +1 -0
  77. package/extensions/linear-tracker/dist/provider.d.ts +4 -0
  78. package/extensions/linear-tracker/dist/provider.d.ts.map +1 -0
  79. package/extensions/linear-tracker/dist/provider.js +58 -0
  80. package/extensions/linear-tracker/dist/provider.js.map +1 -0
  81. package/extensions/linear-tracker/dist/register.d.ts +11 -0
  82. package/extensions/linear-tracker/dist/register.d.ts.map +1 -0
  83. package/extensions/linear-tracker/dist/register.js +19 -0
  84. package/extensions/linear-tracker/dist/register.js.map +1 -0
  85. package/extensions/linear-tracker/dist/toolOps.d.ts +8 -0
  86. package/extensions/linear-tracker/dist/toolOps.d.ts.map +1 -0
  87. package/extensions/linear-tracker/dist/toolOps.js +160 -0
  88. package/extensions/linear-tracker/dist/toolOps.js.map +1 -0
  89. package/extensions/linear-tracker/dist/tools.d.ts +7 -0
  90. package/extensions/linear-tracker/dist/tools.d.ts.map +1 -0
  91. package/extensions/linear-tracker/dist/tools.js +210 -0
  92. package/extensions/linear-tracker/dist/tools.js.map +1 -0
  93. package/extensions/linear-tracker/package.json +18 -0
  94. package/extensions/local-tracker/dist/boardStore.d.ts +116 -0
  95. package/extensions/local-tracker/dist/boardStore.d.ts.map +1 -0
  96. package/extensions/local-tracker/dist/boardStore.js +475 -0
  97. package/extensions/local-tracker/dist/boardStore.js.map +1 -0
  98. package/extensions/local-tracker/dist/client.d.ts +14 -0
  99. package/extensions/local-tracker/dist/client.d.ts.map +1 -0
  100. package/extensions/local-tracker/dist/client.js +27 -0
  101. package/extensions/local-tracker/dist/client.js.map +1 -0
  102. package/extensions/local-tracker/dist/index.d.ts +7 -0
  103. package/extensions/local-tracker/dist/index.d.ts.map +1 -0
  104. package/extensions/local-tracker/dist/index.js +7 -0
  105. package/extensions/local-tracker/dist/index.js.map +1 -0
  106. package/extensions/local-tracker/dist/options.d.ts +31 -0
  107. package/extensions/local-tracker/dist/options.d.ts.map +1 -0
  108. package/extensions/local-tracker/dist/options.js +69 -0
  109. package/extensions/local-tracker/dist/options.js.map +1 -0
  110. package/extensions/local-tracker/dist/provider.d.ts +9 -0
  111. package/extensions/local-tracker/dist/provider.d.ts.map +1 -0
  112. package/extensions/local-tracker/dist/provider.js +35 -0
  113. package/extensions/local-tracker/dist/provider.js.map +1 -0
  114. package/extensions/local-tracker/dist/register.d.ts +11 -0
  115. package/extensions/local-tracker/dist/register.d.ts.map +1 -0
  116. package/extensions/local-tracker/dist/register.js +19 -0
  117. package/extensions/local-tracker/dist/register.js.map +1 -0
  118. package/extensions/local-tracker/dist/resolveBoardDir.d.ts +24 -0
  119. package/extensions/local-tracker/dist/resolveBoardDir.d.ts.map +1 -0
  120. package/extensions/local-tracker/dist/resolveBoardDir.js +39 -0
  121. package/extensions/local-tracker/dist/resolveBoardDir.js.map +1 -0
  122. package/extensions/local-tracker/dist/toolOps.d.ts +9 -0
  123. package/extensions/local-tracker/dist/toolOps.d.ts.map +1 -0
  124. package/extensions/local-tracker/dist/toolOps.js +86 -0
  125. package/extensions/local-tracker/dist/toolOps.js.map +1 -0
  126. package/extensions/local-tracker/dist/tools.d.ts +7 -0
  127. package/extensions/local-tracker/dist/tools.d.ts.map +1 -0
  128. package/extensions/local-tracker/dist/tools.js +170 -0
  129. package/extensions/local-tracker/dist/tools.js.map +1 -0
  130. package/extensions/local-tracker/package.json +18 -0
  131. package/extensions/memory-tracker/dist/index.d.ts +24 -0
  132. package/extensions/memory-tracker/dist/index.d.ts.map +1 -0
  133. package/extensions/memory-tracker/dist/index.js +110 -0
  134. package/extensions/memory-tracker/dist/index.js.map +1 -0
  135. package/extensions/memory-tracker/package.json +16 -0
  136. package/extensions/slack-tracker/dist/client.d.ts +88 -0
  137. package/extensions/slack-tracker/dist/client.d.ts.map +1 -0
  138. package/extensions/slack-tracker/dist/client.js +246 -0
  139. package/extensions/slack-tracker/dist/client.js.map +1 -0
  140. package/extensions/slack-tracker/dist/inMemoryTransport.d.ts +42 -0
  141. package/extensions/slack-tracker/dist/inMemoryTransport.d.ts.map +1 -0
  142. package/extensions/slack-tracker/dist/inMemoryTransport.js +104 -0
  143. package/extensions/slack-tracker/dist/inMemoryTransport.js.map +1 -0
  144. package/extensions/slack-tracker/dist/index.d.ts +15 -0
  145. package/extensions/slack-tracker/dist/index.d.ts.map +1 -0
  146. package/extensions/slack-tracker/dist/index.js +11 -0
  147. package/extensions/slack-tracker/dist/index.js.map +1 -0
  148. package/extensions/slack-tracker/dist/mapping.d.ts +27 -0
  149. package/extensions/slack-tracker/dist/mapping.d.ts.map +1 -0
  150. package/extensions/slack-tracker/dist/mapping.js +109 -0
  151. package/extensions/slack-tracker/dist/mapping.js.map +1 -0
  152. package/extensions/slack-tracker/dist/operations.d.ts +41 -0
  153. package/extensions/slack-tracker/dist/operations.d.ts.map +1 -0
  154. package/extensions/slack-tracker/dist/operations.js +97 -0
  155. package/extensions/slack-tracker/dist/operations.js.map +1 -0
  156. package/extensions/slack-tracker/dist/options.d.ts +30 -0
  157. package/extensions/slack-tracker/dist/options.d.ts.map +1 -0
  158. package/extensions/slack-tracker/dist/options.js +49 -0
  159. package/extensions/slack-tracker/dist/options.js.map +1 -0
  160. package/extensions/slack-tracker/dist/provider.d.ts +9 -0
  161. package/extensions/slack-tracker/dist/provider.d.ts.map +1 -0
  162. package/extensions/slack-tracker/dist/provider.js +74 -0
  163. package/extensions/slack-tracker/dist/provider.js.map +1 -0
  164. package/extensions/slack-tracker/dist/register.d.ts +11 -0
  165. package/extensions/slack-tracker/dist/register.d.ts.map +1 -0
  166. package/extensions/slack-tracker/dist/register.js +19 -0
  167. package/extensions/slack-tracker/dist/register.js.map +1 -0
  168. package/extensions/slack-tracker/dist/threadState.d.ts +52 -0
  169. package/extensions/slack-tracker/dist/threadState.d.ts.map +1 -0
  170. package/extensions/slack-tracker/dist/threadState.js +192 -0
  171. package/extensions/slack-tracker/dist/threadState.js.map +1 -0
  172. package/extensions/slack-tracker/dist/toolOps.d.ts +13 -0
  173. package/extensions/slack-tracker/dist/toolOps.d.ts.map +1 -0
  174. package/extensions/slack-tracker/dist/toolOps.js +76 -0
  175. package/extensions/slack-tracker/dist/toolOps.js.map +1 -0
  176. package/extensions/slack-tracker/dist/tools.d.ts +8 -0
  177. package/extensions/slack-tracker/dist/tools.d.ts.map +1 -0
  178. package/extensions/slack-tracker/dist/tools.js +266 -0
  179. package/extensions/slack-tracker/dist/tools.js.map +1 -0
  180. package/extensions/slack-tracker/dist/transport.d.ts +63 -0
  181. package/extensions/slack-tracker/dist/transport.d.ts.map +1 -0
  182. package/extensions/slack-tracker/dist/transport.js +2 -0
  183. package/extensions/slack-tracker/dist/transport.js.map +1 -0
  184. package/extensions/slack-tracker/dist/webTransport.d.ts +44 -0
  185. package/extensions/slack-tracker/dist/webTransport.d.ts.map +1 -0
  186. package/extensions/slack-tracker/dist/webTransport.js +402 -0
  187. package/extensions/slack-tracker/dist/webTransport.js.map +1 -0
  188. package/extensions/slack-tracker/package.json +17 -0
  189. package/package.json +89 -0
  190. package/packages/acp/dist/childProcess.d.ts +4 -0
  191. package/packages/acp/dist/childProcess.d.ts.map +1 -0
  192. package/packages/acp/dist/childProcess.js +33 -0
  193. package/packages/acp/dist/childProcess.js.map +1 -0
  194. package/packages/acp/dist/index.d.ts +70 -0
  195. package/packages/acp/dist/index.d.ts.map +1 -0
  196. package/packages/acp/dist/index.js +701 -0
  197. package/packages/acp/dist/index.js.map +1 -0
  198. package/packages/acp/dist/options.d.ts +24 -0
  199. package/packages/acp/dist/options.d.ts.map +1 -0
  200. package/packages/acp/dist/options.js +92 -0
  201. package/packages/acp/dist/options.js.map +1 -0
  202. package/packages/acp/dist/toml.d.ts +2 -0
  203. package/packages/acp/dist/toml.d.ts.map +1 -0
  204. package/packages/acp/dist/toml.js +51 -0
  205. package/packages/acp/dist/toml.js.map +1 -0
  206. package/packages/acp/package.json +24 -0
  207. package/packages/agent-runner/dist/index.d.ts +58 -0
  208. package/packages/agent-runner/dist/index.d.ts.map +1 -0
  209. package/packages/agent-runner/dist/index.js +288 -0
  210. package/packages/agent-runner/dist/index.js.map +1 -0
  211. package/packages/agent-runner/package.json +19 -0
  212. package/packages/agent-sdk/dist/index.d.ts +2 -0
  213. package/packages/agent-sdk/dist/index.d.ts.map +1 -0
  214. package/packages/agent-sdk/dist/index.js +2 -0
  215. package/packages/agent-sdk/dist/index.js.map +1 -0
  216. package/packages/agent-sdk/dist/provider.d.ts +66 -0
  217. package/packages/agent-sdk/dist/provider.d.ts.map +1 -0
  218. package/packages/agent-sdk/dist/provider.js +38 -0
  219. package/packages/agent-sdk/dist/provider.js.map +1 -0
  220. package/packages/agent-sdk/package.json +14 -0
  221. package/packages/cli-kit/dist/index.d.ts +20 -0
  222. package/packages/cli-kit/dist/index.d.ts.map +1 -0
  223. package/packages/cli-kit/dist/index.js +72 -0
  224. package/packages/cli-kit/dist/index.js.map +1 -0
  225. package/packages/cli-kit/package.json +14 -0
  226. package/packages/config/dist/aliases.d.ts +10 -0
  227. package/packages/config/dist/aliases.d.ts.map +1 -0
  228. package/packages/config/dist/aliases.js +153 -0
  229. package/packages/config/dist/aliases.js.map +1 -0
  230. package/packages/config/dist/defaults.d.ts +12 -0
  231. package/packages/config/dist/defaults.d.ts.map +1 -0
  232. package/packages/config/dist/defaults.js +78 -0
  233. package/packages/config/dist/defaults.js.map +1 -0
  234. package/packages/config/dist/errors.d.ts +3 -0
  235. package/packages/config/dist/errors.d.ts.map +1 -0
  236. package/packages/config/dist/errors.js +56 -0
  237. package/packages/config/dist/errors.js.map +1 -0
  238. package/packages/config/dist/index.d.ts +5 -0
  239. package/packages/config/dist/index.d.ts.map +1 -0
  240. package/packages/config/dist/index.js +4 -0
  241. package/packages/config/dist/index.js.map +1 -0
  242. package/packages/config/dist/leaf-utils.d.ts +3 -0
  243. package/packages/config/dist/leaf-utils.d.ts.map +1 -0
  244. package/packages/config/dist/leaf-utils.js +9 -0
  245. package/packages/config/dist/leaf-utils.js.map +1 -0
  246. package/packages/config/dist/parse.d.ts +11 -0
  247. package/packages/config/dist/parse.d.ts.map +1 -0
  248. package/packages/config/dist/parse.js +821 -0
  249. package/packages/config/dist/parse.js.map +1 -0
  250. package/packages/config/dist/schemas.d.ts +214 -0
  251. package/packages/config/dist/schemas.d.ts.map +1 -0
  252. package/packages/config/dist/schemas.js +248 -0
  253. package/packages/config/dist/schemas.js.map +1 -0
  254. package/packages/config/package.json +19 -0
  255. package/packages/dispatch/dist/index.d.ts +22 -0
  256. package/packages/dispatch/dist/index.d.ts.map +1 -0
  257. package/packages/dispatch/dist/index.js +117 -0
  258. package/packages/dispatch/dist/index.js.map +1 -0
  259. package/packages/dispatch/package.json +16 -0
  260. package/packages/dispatch-coordinator/dist/coordinator.d.ts +158 -0
  261. package/packages/dispatch-coordinator/dist/coordinator.d.ts.map +1 -0
  262. package/packages/dispatch-coordinator/dist/coordinator.js +529 -0
  263. package/packages/dispatch-coordinator/dist/coordinator.js.map +1 -0
  264. package/packages/dispatch-coordinator/dist/gate.d.ts +24 -0
  265. package/packages/dispatch-coordinator/dist/gate.d.ts.map +1 -0
  266. package/packages/dispatch-coordinator/dist/gate.js +47 -0
  267. package/packages/dispatch-coordinator/dist/gate.js.map +1 -0
  268. package/packages/dispatch-coordinator/dist/index.d.ts +6 -0
  269. package/packages/dispatch-coordinator/dist/index.d.ts.map +1 -0
  270. package/packages/dispatch-coordinator/dist/index.js +16 -0
  271. package/packages/dispatch-coordinator/dist/index.js.map +1 -0
  272. package/packages/dispatch-coordinator/dist/mcpEndpointManager.d.ts +28 -0
  273. package/packages/dispatch-coordinator/dist/mcpEndpointManager.d.ts.map +1 -0
  274. package/packages/dispatch-coordinator/dist/mcpEndpointManager.js +54 -0
  275. package/packages/dispatch-coordinator/dist/mcpEndpointManager.js.map +1 -0
  276. package/packages/dispatch-coordinator/dist/nullEndpointManager.d.ts +18 -0
  277. package/packages/dispatch-coordinator/dist/nullEndpointManager.d.ts.map +1 -0
  278. package/packages/dispatch-coordinator/dist/nullEndpointManager.js +40 -0
  279. package/packages/dispatch-coordinator/dist/nullEndpointManager.js.map +1 -0
  280. package/packages/dispatch-coordinator/dist/types.d.ts +119 -0
  281. package/packages/dispatch-coordinator/dist/types.d.ts.map +1 -0
  282. package/packages/dispatch-coordinator/dist/types.js +17 -0
  283. package/packages/dispatch-coordinator/dist/types.js.map +1 -0
  284. package/packages/dispatch-coordinator/package.json +16 -0
  285. package/packages/domain/dist/index.d.ts +775 -0
  286. package/packages/domain/dist/index.d.ts.map +1 -0
  287. package/packages/domain/dist/index.js +124 -0
  288. package/packages/domain/dist/index.js.map +1 -0
  289. package/packages/domain/package.json +14 -0
  290. package/packages/humanize/dist/index.d.ts +4 -0
  291. package/packages/humanize/dist/index.d.ts.map +1 -0
  292. package/packages/humanize/dist/index.js +347 -0
  293. package/packages/humanize/dist/index.js.map +1 -0
  294. package/packages/humanize/package.json +11 -0
  295. package/packages/issue/dist/index.d.ts +7 -0
  296. package/packages/issue/dist/index.d.ts.map +1 -0
  297. package/packages/issue/dist/index.js +147 -0
  298. package/packages/issue/dist/index.js.map +1 -0
  299. package/packages/issue/package.json +14 -0
  300. package/packages/log-file/dist/index.d.ts +10 -0
  301. package/packages/log-file/dist/index.d.ts.map +1 -0
  302. package/packages/log-file/dist/index.js +200 -0
  303. package/packages/log-file/dist/index.js.map +1 -0
  304. package/packages/log-file/package.json +15 -0
  305. package/packages/mcp/dist/agentEndpoint.d.ts +31 -0
  306. package/packages/mcp/dist/agentEndpoint.d.ts.map +1 -0
  307. package/packages/mcp/dist/agentEndpoint.js +270 -0
  308. package/packages/mcp/dist/agentEndpoint.js.map +1 -0
  309. package/packages/mcp/dist/auth.d.ts +7 -0
  310. package/packages/mcp/dist/auth.d.ts.map +1 -0
  311. package/packages/mcp/dist/auth.js +48 -0
  312. package/packages/mcp/dist/auth.js.map +1 -0
  313. package/packages/mcp/dist/filter.d.ts +70 -0
  314. package/packages/mcp/dist/filter.d.ts.map +1 -0
  315. package/packages/mcp/dist/filter.js +231 -0
  316. package/packages/mcp/dist/filter.js.map +1 -0
  317. package/packages/mcp/dist/index.d.ts +7 -0
  318. package/packages/mcp/dist/index.d.ts.map +1 -0
  319. package/packages/mcp/dist/index.js +5 -0
  320. package/packages/mcp/dist/index.js.map +1 -0
  321. package/packages/mcp/dist/server.d.ts +31 -0
  322. package/packages/mcp/dist/server.d.ts.map +1 -0
  323. package/packages/mcp/dist/server.js +176 -0
  324. package/packages/mcp/dist/server.js.map +1 -0
  325. package/packages/mcp/dist/tools/linear.d.ts +5 -0
  326. package/packages/mcp/dist/tools/linear.d.ts.map +1 -0
  327. package/packages/mcp/dist/tools/linear.js +192 -0
  328. package/packages/mcp/dist/tools/linear.js.map +1 -0
  329. package/packages/mcp/dist/tools/local.d.ts +5 -0
  330. package/packages/mcp/dist/tools/local.d.ts.map +1 -0
  331. package/packages/mcp/dist/tools/local.js +161 -0
  332. package/packages/mcp/dist/tools/local.js.map +1 -0
  333. package/packages/mcp/dist/tools/result.d.ts +5 -0
  334. package/packages/mcp/dist/tools/result.d.ts.map +1 -0
  335. package/packages/mcp/dist/tools/result.js +15 -0
  336. package/packages/mcp/dist/tools/result.js.map +1 -0
  337. package/packages/mcp/dist/tools.d.ts +14 -0
  338. package/packages/mcp/dist/tools.d.ts.map +1 -0
  339. package/packages/mcp/dist/tools.js +58 -0
  340. package/packages/mcp/dist/tools.js.map +1 -0
  341. package/packages/mcp/package.json +20 -0
  342. package/packages/orchestrator/dist/index.d.ts +171 -0
  343. package/packages/orchestrator/dist/index.d.ts.map +1 -0
  344. package/packages/orchestrator/dist/index.js +524 -0
  345. package/packages/orchestrator/dist/index.js.map +1 -0
  346. package/packages/orchestrator/package.json +18 -0
  347. package/packages/policies/dist/index.d.ts +11 -0
  348. package/packages/policies/dist/index.d.ts.map +1 -0
  349. package/packages/policies/dist/index.js +6 -0
  350. package/packages/policies/dist/index.js.map +1 -0
  351. package/packages/policies/dist/reconciliation.d.ts +5 -0
  352. package/packages/policies/dist/reconciliation.d.ts.map +1 -0
  353. package/packages/policies/dist/reconciliation.js +17 -0
  354. package/packages/policies/dist/reconciliation.js.map +1 -0
  355. package/packages/policies/dist/resume.d.ts +14 -0
  356. package/packages/policies/dist/resume.d.ts.map +1 -0
  357. package/packages/policies/dist/resume.js +7 -0
  358. package/packages/policies/dist/resume.js.map +1 -0
  359. package/packages/policies/dist/retry.d.ts +4 -0
  360. package/packages/policies/dist/retry.d.ts.map +1 -0
  361. package/packages/policies/dist/retry.js +7 -0
  362. package/packages/policies/dist/retry.js.map +1 -0
  363. package/packages/policies/dist/stopReason.d.ts +4 -0
  364. package/packages/policies/dist/stopReason.d.ts.map +1 -0
  365. package/packages/policies/dist/stopReason.js +11 -0
  366. package/packages/policies/dist/stopReason.js.map +1 -0
  367. package/packages/policies/dist/usage.d.ts +14 -0
  368. package/packages/policies/dist/usage.d.ts.map +1 -0
  369. package/packages/policies/dist/usage.js +38 -0
  370. package/packages/policies/dist/usage.js.map +1 -0
  371. package/packages/policies/dist/workerHost.d.ts +8 -0
  372. package/packages/policies/dist/workerHost.d.ts.map +1 -0
  373. package/packages/policies/dist/workerHost.js +20 -0
  374. package/packages/policies/dist/workerHost.js.map +1 -0
  375. package/packages/policies/package.json +21 -0
  376. package/packages/presenter/dist/index.d.ts +81 -0
  377. package/packages/presenter/dist/index.d.ts.map +1 -0
  378. package/packages/presenter/dist/index.js +421 -0
  379. package/packages/presenter/dist/index.js.map +1 -0
  380. package/packages/presenter/package.json +16 -0
  381. package/packages/projections/dist/index.d.ts +10 -0
  382. package/packages/projections/dist/index.d.ts.map +1 -0
  383. package/packages/projections/dist/index.js +30 -0
  384. package/packages/projections/dist/index.js.map +1 -0
  385. package/packages/projections/package.json +15 -0
  386. package/packages/prompt/dist/index.d.ts +9 -0
  387. package/packages/prompt/dist/index.d.ts.map +1 -0
  388. package/packages/prompt/dist/index.js +71 -0
  389. package/packages/prompt/dist/index.js.map +1 -0
  390. package/packages/prompt/package.json +16 -0
  391. package/packages/retry-scheduler/dist/index.d.ts +12 -0
  392. package/packages/retry-scheduler/dist/index.d.ts.map +1 -0
  393. package/packages/retry-scheduler/dist/index.js +39 -0
  394. package/packages/retry-scheduler/dist/index.js.map +1 -0
  395. package/packages/retry-scheduler/package.json +15 -0
  396. package/packages/runtime/dist/index.d.ts +157 -0
  397. package/packages/runtime/dist/index.d.ts.map +1 -0
  398. package/packages/runtime/dist/index.js +1074 -0
  399. package/packages/runtime/dist/index.js.map +1 -0
  400. package/packages/runtime/package.json +26 -0
  401. package/packages/runtime-events/dist/index.d.ts +110 -0
  402. package/packages/runtime-events/dist/index.d.ts.map +1 -0
  403. package/packages/runtime-events/dist/index.js +25 -0
  404. package/packages/runtime-events/dist/index.js.map +1 -0
  405. package/packages/runtime-events/package.json +14 -0
  406. package/packages/server/dist/index.d.ts +25 -0
  407. package/packages/server/dist/index.d.ts.map +1 -0
  408. package/packages/server/dist/index.js +213 -0
  409. package/packages/server/dist/index.js.map +1 -0
  410. package/packages/server/dist/issue-store.d.ts +26 -0
  411. package/packages/server/dist/issue-store.d.ts.map +1 -0
  412. package/packages/server/dist/issue-store.js +88 -0
  413. package/packages/server/dist/issue-store.js.map +1 -0
  414. package/packages/server/dist/path-params.d.ts +6 -0
  415. package/packages/server/dist/path-params.d.ts.map +1 -0
  416. package/packages/server/dist/path-params.js +15 -0
  417. package/packages/server/dist/path-params.js.map +1 -0
  418. package/packages/server/dist/source.d.ts +12 -0
  419. package/packages/server/dist/source.d.ts.map +1 -0
  420. package/packages/server/dist/source.js +2 -0
  421. package/packages/server/dist/source.js.map +1 -0
  422. package/packages/server/dist/trace-routes.d.ts +21 -0
  423. package/packages/server/dist/trace-routes.d.ts.map +1 -0
  424. package/packages/server/dist/trace-routes.js +66 -0
  425. package/packages/server/dist/trace-routes.js.map +1 -0
  426. package/packages/server/dist/ws.d.ts +18 -0
  427. package/packages/server/dist/ws.d.ts.map +1 -0
  428. package/packages/server/dist/ws.js +168 -0
  429. package/packages/server/dist/ws.js.map +1 -0
  430. package/packages/server/package.json +22 -0
  431. package/packages/ssh/dist/index.d.ts +33 -0
  432. package/packages/ssh/dist/index.d.ts.map +1 -0
  433. package/packages/ssh/dist/index.js +281 -0
  434. package/packages/ssh/dist/index.js.map +1 -0
  435. package/packages/ssh/package.json +15 -0
  436. package/packages/static-worker/dist/index.d.ts +73 -0
  437. package/packages/static-worker/dist/index.d.ts.map +1 -0
  438. package/packages/static-worker/dist/index.js +150 -0
  439. package/packages/static-worker/dist/index.js.map +1 -0
  440. package/packages/static-worker/package.json +14 -0
  441. package/packages/tool-sdk/dist/filter.d.ts +70 -0
  442. package/packages/tool-sdk/dist/filter.d.ts.map +1 -0
  443. package/packages/tool-sdk/dist/filter.js +231 -0
  444. package/packages/tool-sdk/dist/filter.js.map +1 -0
  445. package/packages/tool-sdk/dist/index.d.ts +6 -0
  446. package/packages/tool-sdk/dist/index.d.ts.map +1 -0
  447. package/packages/tool-sdk/dist/index.js +4 -0
  448. package/packages/tool-sdk/dist/index.js.map +1 -0
  449. package/packages/tool-sdk/dist/provider.d.ts +51 -0
  450. package/packages/tool-sdk/dist/provider.d.ts.map +1 -0
  451. package/packages/tool-sdk/dist/provider.js +2 -0
  452. package/packages/tool-sdk/dist/provider.js.map +1 -0
  453. package/packages/tool-sdk/dist/registry.d.ts +35 -0
  454. package/packages/tool-sdk/dist/registry.d.ts.map +1 -0
  455. package/packages/tool-sdk/dist/registry.js +85 -0
  456. package/packages/tool-sdk/dist/registry.js.map +1 -0
  457. package/packages/tool-sdk/dist/result.d.ts +5 -0
  458. package/packages/tool-sdk/dist/result.d.ts.map +1 -0
  459. package/packages/tool-sdk/dist/result.js +15 -0
  460. package/packages/tool-sdk/dist/result.js.map +1 -0
  461. package/packages/tool-sdk/package.json +14 -0
  462. package/packages/traceviz-emitter/dist/index.d.ts +19 -0
  463. package/packages/traceviz-emitter/dist/index.d.ts.map +1 -0
  464. package/packages/traceviz-emitter/dist/index.js +97 -0
  465. package/packages/traceviz-emitter/dist/index.js.map +1 -0
  466. package/packages/traceviz-emitter/package.json +17 -0
  467. package/packages/traceviz-server/dist/index.d.ts +14 -0
  468. package/packages/traceviz-server/dist/index.d.ts.map +1 -0
  469. package/packages/traceviz-server/dist/index.js +10 -0
  470. package/packages/traceviz-server/dist/index.js.map +1 -0
  471. package/packages/traceviz-server/dist/models/api.d.ts +51 -0
  472. package/packages/traceviz-server/dist/models/api.d.ts.map +1 -0
  473. package/packages/traceviz-server/dist/models/api.js +5 -0
  474. package/packages/traceviz-server/dist/models/api.js.map +1 -0
  475. package/packages/traceviz-server/dist/models/display-events.d.ts +58 -0
  476. package/packages/traceviz-server/dist/models/display-events.d.ts.map +1 -0
  477. package/packages/traceviz-server/dist/models/display-events.js +6 -0
  478. package/packages/traceviz-server/dist/models/display-events.js.map +1 -0
  479. package/packages/traceviz-server/dist/parser.d.ts +14 -0
  480. package/packages/traceviz-server/dist/parser.d.ts.map +1 -0
  481. package/packages/traceviz-server/dist/parser.js +363 -0
  482. package/packages/traceviz-server/dist/parser.js.map +1 -0
  483. package/packages/traceviz-server/dist/stats.d.ts +7 -0
  484. package/packages/traceviz-server/dist/stats.d.ts.map +1 -0
  485. package/packages/traceviz-server/dist/stats.js +81 -0
  486. package/packages/traceviz-server/dist/stats.js.map +1 -0
  487. package/packages/traceviz-server/dist/watcher.d.ts +54 -0
  488. package/packages/traceviz-server/dist/watcher.d.ts.map +1 -0
  489. package/packages/traceviz-server/dist/watcher.js +368 -0
  490. package/packages/traceviz-server/dist/watcher.js.map +1 -0
  491. package/packages/traceviz-server/package.json +16 -0
  492. package/packages/tracker-sdk/dist/index.d.ts +5 -0
  493. package/packages/tracker-sdk/dist/index.d.ts.map +1 -0
  494. package/packages/tracker-sdk/dist/index.js +4 -0
  495. package/packages/tracker-sdk/dist/index.js.map +1 -0
  496. package/packages/tracker-sdk/dist/options.d.ts +20 -0
  497. package/packages/tracker-sdk/dist/options.d.ts.map +1 -0
  498. package/packages/tracker-sdk/dist/options.js +46 -0
  499. package/packages/tracker-sdk/dist/options.js.map +1 -0
  500. package/packages/tracker-sdk/dist/provider.d.ts +104 -0
  501. package/packages/tracker-sdk/dist/provider.d.ts.map +1 -0
  502. package/packages/tracker-sdk/dist/provider.js +2 -0
  503. package/packages/tracker-sdk/dist/provider.js.map +1 -0
  504. package/packages/tracker-sdk/dist/registry.d.ts +26 -0
  505. package/packages/tracker-sdk/dist/registry.d.ts.map +1 -0
  506. package/packages/tracker-sdk/dist/registry.js +52 -0
  507. package/packages/tracker-sdk/dist/registry.js.map +1 -0
  508. package/packages/tracker-sdk/dist/toolPack.d.ts +10 -0
  509. package/packages/tracker-sdk/dist/toolPack.d.ts.map +1 -0
  510. package/packages/tracker-sdk/dist/toolPack.js +185 -0
  511. package/packages/tracker-sdk/dist/toolPack.js.map +1 -0
  512. package/packages/tracker-sdk/package.json +15 -0
  513. package/packages/tui/dist/index.d.ts +35 -0
  514. package/packages/tui/dist/index.d.ts.map +1 -0
  515. package/packages/tui/dist/index.js +354 -0
  516. package/packages/tui/dist/index.js.map +1 -0
  517. package/packages/tui/package.json +18 -0
  518. package/packages/worker-host-pool/dist/index.d.ts +33 -0
  519. package/packages/worker-host-pool/dist/index.d.ts.map +1 -0
  520. package/packages/worker-host-pool/dist/index.js +311 -0
  521. package/packages/worker-host-pool/dist/index.js.map +1 -0
  522. package/packages/worker-host-pool/package.json +14 -0
  523. package/packages/worker-pool/dist/index.d.ts +6 -0
  524. package/packages/worker-pool/dist/index.d.ts.map +1 -0
  525. package/packages/worker-pool/dist/index.js +15 -0
  526. package/packages/worker-pool/dist/index.js.map +1 -0
  527. package/packages/worker-pool/dist/lease.d.ts +36 -0
  528. package/packages/worker-pool/dist/lease.d.ts.map +1 -0
  529. package/packages/worker-pool/dist/lease.js +53 -0
  530. package/packages/worker-pool/dist/lease.js.map +1 -0
  531. package/packages/worker-pool/dist/ledger.d.ts +51 -0
  532. package/packages/worker-pool/dist/ledger.d.ts.map +1 -0
  533. package/packages/worker-pool/dist/ledger.js +165 -0
  534. package/packages/worker-pool/dist/ledger.js.map +1 -0
  535. package/packages/worker-pool/dist/mutex.d.ts +10 -0
  536. package/packages/worker-pool/dist/mutex.d.ts.map +1 -0
  537. package/packages/worker-pool/dist/mutex.js +22 -0
  538. package/packages/worker-pool/dist/mutex.js.map +1 -0
  539. package/packages/worker-pool/dist/pool.d.ts +33 -0
  540. package/packages/worker-pool/dist/pool.d.ts.map +1 -0
  541. package/packages/worker-pool/dist/pool.js +1727 -0
  542. package/packages/worker-pool/dist/pool.js.map +1 -0
  543. package/packages/worker-pool/dist/reaper.d.ts +94 -0
  544. package/packages/worker-pool/dist/reaper.d.ts.map +1 -0
  545. package/packages/worker-pool/dist/reaper.js +295 -0
  546. package/packages/worker-pool/dist/reaper.js.map +1 -0
  547. package/packages/worker-pool/dist/types.d.ts +249 -0
  548. package/packages/worker-pool/dist/types.d.ts.map +1 -0
  549. package/packages/worker-pool/dist/types.js +2 -0
  550. package/packages/worker-pool/dist/types.js.map +1 -0
  551. package/packages/worker-pool/package.json +16 -0
  552. package/packages/worker-sdk/dist/conformance.d.ts +64 -0
  553. package/packages/worker-sdk/dist/conformance.d.ts.map +1 -0
  554. package/packages/worker-sdk/dist/conformance.js +109 -0
  555. package/packages/worker-sdk/dist/conformance.js.map +1 -0
  556. package/packages/worker-sdk/dist/fake.d.ts +76 -0
  557. package/packages/worker-sdk/dist/fake.d.ts.map +1 -0
  558. package/packages/worker-sdk/dist/fake.js +142 -0
  559. package/packages/worker-sdk/dist/fake.js.map +1 -0
  560. package/packages/worker-sdk/dist/index.d.ts +5 -0
  561. package/packages/worker-sdk/dist/index.d.ts.map +1 -0
  562. package/packages/worker-sdk/dist/index.js +10 -0
  563. package/packages/worker-sdk/dist/index.js.map +1 -0
  564. package/packages/worker-sdk/dist/module.d.ts +46 -0
  565. package/packages/worker-sdk/dist/module.d.ts.map +1 -0
  566. package/packages/worker-sdk/dist/module.js +59 -0
  567. package/packages/worker-sdk/dist/module.js.map +1 -0
  568. package/packages/worker-sdk/dist/registry.d.ts +24 -0
  569. package/packages/worker-sdk/dist/registry.d.ts.map +1 -0
  570. package/packages/worker-sdk/dist/registry.js +49 -0
  571. package/packages/worker-sdk/dist/registry.js.map +1 -0
  572. package/packages/worker-sdk/dist/types.d.ts +138 -0
  573. package/packages/worker-sdk/dist/types.d.ts.map +1 -0
  574. package/packages/worker-sdk/dist/types.js +21 -0
  575. package/packages/worker-sdk/dist/types.js.map +1 -0
  576. package/packages/worker-sdk/package.json +15 -0
  577. package/packages/workflow/dist/index.d.ts +33 -0
  578. package/packages/workflow/dist/index.d.ts.map +1 -0
  579. package/packages/workflow/dist/index.js +125 -0
  580. package/packages/workflow/dist/index.js.map +1 -0
  581. package/packages/workflow/package.json +19 -0
  582. package/packages/workspace/dist/index.d.ts +70 -0
  583. package/packages/workspace/dist/index.d.ts.map +1 -0
  584. package/packages/workspace/dist/index.js +1016 -0
  585. package/packages/workspace/dist/index.js.map +1 -0
  586. package/packages/workspace/package.json +17 -0
  587. package/runtime-deps/anthropic-claude-agent-sdk/LICENSE.md +1 -0
  588. package/runtime-deps/anthropic-claude-agent-sdk/README.md +65 -0
  589. package/runtime-deps/anthropic-claude-agent-sdk/agentSdkTypes.d.ts +1 -0
  590. package/runtime-deps/anthropic-claude-agent-sdk/assistant.d.ts +135 -0
  591. package/runtime-deps/anthropic-claude-agent-sdk/assistant.mjs +190 -0
  592. package/runtime-deps/anthropic-claude-agent-sdk/bridge.d.ts +231 -0
  593. package/runtime-deps/anthropic-claude-agent-sdk/bridge.mjs +168 -0
  594. package/runtime-deps/anthropic-claude-agent-sdk/browser-sdk.d.ts +53 -0
  595. package/runtime-deps/anthropic-claude-agent-sdk/browser-sdk.js +93 -0
  596. package/runtime-deps/anthropic-claude-agent-sdk/extractFromBunfs.d.ts +1 -0
  597. package/runtime-deps/anthropic-claude-agent-sdk/extractFromBunfs.js +156 -0
  598. package/runtime-deps/anthropic-claude-agent-sdk/manifest.json +47 -0
  599. package/runtime-deps/anthropic-claude-agent-sdk/manifest.zst.json +55 -0
  600. package/runtime-deps/anthropic-claude-agent-sdk/node_modules/.bin/anthropic-ai-sdk +21 -0
  601. package/runtime-deps/anthropic-claude-agent-sdk/package.json +81 -0
  602. package/runtime-deps/anthropic-claude-agent-sdk/sdk-tools.d.ts +3170 -0
  603. package/runtime-deps/anthropic-claude-agent-sdk/sdk.d.ts +6000 -0
  604. package/runtime-deps/anthropic-claude-agent-sdk/sdk.mjs +119 -0
  605. package/runtime-deps/openai-codex/README.md +60 -0
  606. package/runtime-deps/openai-codex/bin/codex.js +229 -0
  607. package/runtime-deps/openai-codex/bin/rg +79 -0
  608. package/runtime-deps/openai-codex/package.json +22 -0
  609. package/vendor/claude-agent-acp/dist/acp-agent.d.ts +239 -0
  610. package/vendor/claude-agent-acp/dist/acp-agent.d.ts.map +1 -0
  611. package/vendor/claude-agent-acp/dist/acp-agent.js +2693 -0
  612. package/vendor/claude-agent-acp/dist/bundle.js +41230 -0
  613. package/vendor/claude-agent-acp/dist/index.d.ts +3 -0
  614. package/vendor/claude-agent-acp/dist/index.d.ts.map +1 -0
  615. package/vendor/claude-agent-acp/dist/index.js +67 -0
  616. package/vendor/claude-agent-acp/dist/lib.d.ts +6 -0
  617. package/vendor/claude-agent-acp/dist/lib.d.ts.map +1 -0
  618. package/vendor/claude-agent-acp/dist/lib.js +5 -0
  619. package/vendor/claude-agent-acp/dist/settings.d.ts +68 -0
  620. package/vendor/claude-agent-acp/dist/settings.d.ts.map +1 -0
  621. package/vendor/claude-agent-acp/dist/settings.js +182 -0
  622. package/vendor/claude-agent-acp/dist/tools.d.ts +103 -0
  623. package/vendor/claude-agent-acp/dist/tools.d.ts.map +1 -0
  624. package/vendor/claude-agent-acp/dist/tools.js +713 -0
  625. package/vendor/claude-agent-acp/dist/utils.d.ts +16 -0
  626. package/vendor/claude-agent-acp/dist/utils.d.ts.map +1 -0
  627. package/vendor/claude-agent-acp/dist/utils.js +83 -0
  628. package/vendor/claude-agent-acp/package.json +23 -0
  629. package/vendor/codex-acp/dist/index.js +21280 -0
  630. package/vendor/codex-acp/package.json +17 -0
@@ -0,0 +1,249 @@
1
+ import type { WorkerDriver } from "@lorenz/worker-sdk";
2
+ import type { WorkerDriverKind, WorkerPoolSettings } from "@lorenz/domain";
3
+ /**
4
+ * Pool-side types for the embedded warm worker pool. Every implementation file
5
+ * imports from this module so concrete files (pool, lease, reaper, ledger) never
6
+ * form import cycles. The DRIVER contract (WorkerDriver, WorkerDescriptor,
7
+ * ProvisionRequest, WorkerHealth, TeardownReason, POOL_OWNED_LABEL, the registry)
8
+ * lives in `@lorenz/worker-sdk`; this module owns only the engine vocabulary the
9
+ * pool itself adds on top: leases, inventory records, the ledger row shape, and
10
+ * the pool surface.
11
+ */
12
+ /**
13
+ * Outcome of a completed lease. `healthy` keeps the worker for reuse; `poison`
14
+ * recycles the worker (a typed worker-transport fault, not a local/agent failure).
15
+ * `release(outcome)` defaults to `healthy`; `fail(reason)` is equivalent to
16
+ * `release('poison')` with a recorded reason.
17
+ */
18
+ export type WorkerOutcome = "healthy" | "poison";
19
+ /**
20
+ * Lifecycle state of a worker inside the pool inventory. Internal to the pool;
21
+ * surfaced (read-only) via `WorkerPoolSnapshot` for tests/observability.
22
+ *
23
+ * `WARMING` and `DRAINING` are never assigned by the current pool (provisioning
24
+ * probes inline and drain is a pool-level flag); they stay in the vocabulary for
25
+ * a future async warmup strategy / per-worker drain marker, and the leasable/reap
26
+ * guards already treat them correctly.
27
+ */
28
+ export type WorkerState = "PROVISIONING" | "WARMING" | "WARM_IDLE" | "LEASED" | "DEGRADED" | "DESTROYING" | "DESTROYED" | "DRAINING";
29
+ /**
30
+ * In-memory record the pool keeps per worker. Mutated only inside the per-worker
31
+ * mutex so the reaper and a lease release can never both touch `inFlight`.
32
+ */
33
+ export interface WorkerRecord {
34
+ workerId: string;
35
+ workerHost: string;
36
+ driverRef: string;
37
+ state: WorkerState;
38
+ labels: ReadonlyArray<string>;
39
+ createdAtMs: number;
40
+ /** Identity of the current lease generation; a release with a stale id is a no-op. */
41
+ leaseId: string | null;
42
+ /** Concurrent leases currently held against this worker (>= 0 invariant). */
43
+ inFlight: number;
44
+ /** When the worker last went idle (used by idle reaping). */
45
+ lastIdleAtMs: number;
46
+ /** Last heartbeat from the active run (used by orphan detection). */
47
+ lastHeartbeatMs: number;
48
+ /** Cumulative wall-clock worker-seconds attributed to this worker (monotonic). */
49
+ workerSecondsUsed: number;
50
+ /** Set when the reaper wants the worker gone but a lease is still in flight. */
51
+ markedForDestroy: boolean;
52
+ /** The affinity key (prior workerHost) this worker is currently sticky to, if any. */
53
+ affinityKey: string | null;
54
+ /** Per-worker metadata mirrored from the descriptor. */
55
+ metadata: Record<string, unknown>;
56
+ /**
57
+ * Per-issue lease refcount against this worker: issue id -> number of leases that
58
+ * issue currently holds on this worker. Used to enforce the optional
59
+ * `maxWorkersPerIssue` fairness cap (so one ensemble cannot monopolize the pool).
60
+ * A plain set of issue ids is wrong under co-residence (`slotsPerMachine>1`):
61
+ * the SAME issue can hold two slots on one worker, so settling one must not forget
62
+ * the worker still belongs to that issue. The key is dropped only when its count
63
+ * reaches zero. Absent on records that predate the pool's per-issue accounting;
64
+ * treated as empty.
65
+ */
66
+ leaseIssues?: Map<string, number>;
67
+ /**
68
+ * Acquire timestamps (ms) of every lease currently in flight against this worker,
69
+ * one entry per outstanding lease (so `maxInFlight>1` overlapping leases each
70
+ * carry their own window). A normal settle removes its own entry as it accrues
71
+ * its window in `onLeaseSettle`; a drain that force-destroys a still-LEASED worker
72
+ * accrues every remaining entry's window so the in-flight worker-seconds are not
73
+ * dropped. Absent on records that predate this accounting; treated as empty.
74
+ */
75
+ liveLeaseAcquiredMs?: number[];
76
+ /**
77
+ * The driver that PROVISIONED this worker, captured by `swapDriver` on a driver
78
+ * hot-reload BEFORE the pool reassigns its live `this.driver`. A teardown
79
+ * (`recycle`/`destroyDescriptor`) routes `destroy` to
80
+ * `record.originDriver ?? this.driver`, so an in-flight lease that settles
81
+ * AFTER a driver swap destroys its worker on the ORIGINAL backend and a paid worker
82
+ * is never orphaned on the now-detached driver. Absent on workers provisioned
83
+ * under the live driver (no swap has happened); treated as `this.driver`.
84
+ */
85
+ originDriver?: WorkerDriver;
86
+ }
87
+ /**
88
+ * Forward-looking alias for {@link WorkerRecord}. `WorkerRecord` stays the canonical
89
+ * name and shape (every implementation file keeps importing it); `MachineLease`
90
+ * is a pure re-export so downstream dispatch-coordinator code can refer to a
91
+ * leased machine by its domain noun without a second, drift-prone type. The two
92
+ * are structurally identical (an alias, not a subtype), so swapping one for the
93
+ * other is byte-identical.
94
+ */
95
+ export type MachineLease = WorkerRecord;
96
+ /**
97
+ * A single write-ahead ledger row (cloud drivers only). Written provisionally
98
+ * BEFORE provision, then upserted with `driverRef`/`workerHost` after the
99
+ * driver returns, so a crash mid-provision is recoverable by labels or workerId.
100
+ */
101
+ export interface LedgerRow {
102
+ workerId: string;
103
+ driverRef: string | null;
104
+ workerHost: string | null;
105
+ labels: ReadonlyArray<string>;
106
+ /** `provisional` until the driver returns; then `active`; `destroying` while reaping. */
107
+ status: "provisional" | "active" | "destroying";
108
+ createdAtMs: number;
109
+ updatedAtMs: number;
110
+ }
111
+ /**
112
+ * A leased worker handed to the runtime. `release(outcome)` / `fail(reason)` settle
113
+ * the lease exactly once (guarded by `leaseId` + a `settled` flag + worker state);
114
+ * a stale generation or a DESTROYED worker is a no-op that never touches `inFlight`.
115
+ */
116
+ export interface WorkerLease {
117
+ readonly leaseId: string;
118
+ readonly workerId: string;
119
+ readonly workerHost: string;
120
+ readonly acquiredAtMs: number;
121
+ readonly expiresAtMs: number | null;
122
+ release(outcome?: WorkerOutcome): Promise<void>;
123
+ fail(reason: string): Promise<void>;
124
+ heartbeat(): void;
125
+ }
126
+ /**
127
+ * Request to lease a worker for one run. `affinityKey` is the prior `workerHost`
128
+ * (sticky re-acquire on retry), NOT the pending sentinel. `labels` describe the
129
+ * issue/ensemble slot so the pool can apply per-issue fairness caps.
130
+ */
131
+ export type AcquireRequest = {
132
+ issueId: string;
133
+ slotIndex: number;
134
+ labels: ReadonlyArray<string>;
135
+ affinityKey?: string | null;
136
+ timeoutMs: number;
137
+ signal?: AbortSignal;
138
+ };
139
+ /**
140
+ * Result of an acquire. `leased` carries a settled-once `WorkerLease`; `no_capacity`
141
+ * surfaces a typed reason mapped onto the existing `worker_host_capacity` dispatch
142
+ * signal so dispatch can recover (abandon-and-re-evaluate) without backoff churn.
143
+ */
144
+ export type AcquireResult = {
145
+ status: "leased";
146
+ lease: WorkerLease;
147
+ } | {
148
+ status: "no_capacity";
149
+ reason: "acquire_timeout" | "spend_cap" | "pool_disabled" | "driver_error";
150
+ };
151
+ /**
152
+ * Read-only view of pool state for tests/observability. Worker-seconds are
153
+ * cumulative wall-clock seconds; `dayKey` is the UTC day the daily cap rolls on.
154
+ */
155
+ export interface WorkerPoolSnapshot {
156
+ enabled: boolean;
157
+ driver: WorkerDriverKind;
158
+ total: number;
159
+ warmIdle: number;
160
+ leased: number;
161
+ provisioning: number;
162
+ degraded: number;
163
+ inFlight: number;
164
+ spend: {
165
+ concurrentWorkers: number;
166
+ workerSecondsUsed: number;
167
+ dailyWorkerSecondsUsed: number;
168
+ dayKey: string;
169
+ };
170
+ workers: ReadonlyArray<{
171
+ workerId: string;
172
+ workerHost: string;
173
+ state: WorkerState;
174
+ inFlight: number;
175
+ markedForDestroy: boolean;
176
+ }>;
177
+ }
178
+ /**
179
+ * The embedded pool: a long-lived, reload-surviving singleton that produces each
180
+ * run's `workerHost`. `reconcile` diffs prev-vs-next settings on config reload;
181
+ * `hydrate` re-adopts survivors on startup; `drain` is awaitable so paid cloud
182
+ * workers are destroyed before process exit.
183
+ */
184
+ export interface WorkerPool {
185
+ acquire(req: AcquireRequest): Promise<AcquireResult>;
186
+ canAcquire(): boolean;
187
+ /**
188
+ * Whether the pool currently GOVERNS worker-host capacity (i.e. `settings.enabled`).
189
+ * The pool survives config reloads, so a reload can DISABLE it (it drains to zero) while the
190
+ * orchestrator's lifetime capacity probe stays installed. The probe reads this to decide whether
191
+ * to delegate capacity to {@link WorkerPool.canAcquire} (governing) or fall through to static/local
192
+ * execution (not governing); a disabled pool that no longer governs must not block dispatch.
193
+ */
194
+ isEnabled(): boolean;
195
+ reconcile(next: WorkerPoolSettings): void;
196
+ /**
197
+ * Rebuilds the resolved driver IN PLACE (re-resolves `settings.driver` through
198
+ * the registry, re-threads the reaper driver, and rebuilds the ledger
199
+ * `usesLedger` gate) without reconstructing the singleton, capturing each
200
+ * existing worker's origin driver so an in-flight lease that settles AFTER the
201
+ * swap destroys its worker on the ORIGINAL backend. Called by `reconcile` when
202
+ * the driver construction changed (and by the dispatch coordinator before
203
+ * `reconcile` once it owns the reload path).
204
+ */
205
+ swapDriver(next: WorkerPoolSettings): void;
206
+ /**
207
+ * Registers a callback the pool invokes INSIDE the per-worker mutex immediately
208
+ * before it destroys a machine (every teardown path - a poison settle, a reaper
209
+ * reap, a driver-swap drain, and the drain force-destroy loop - routes through
210
+ * the single `recycle` chokepoint, so the callback fires exactly once per worker
211
+ * just before `driver.destroy`). The dispatch coordinator registers a callback
212
+ * here so a poisoned/recycled machine fails any still-open RunSlot bound to that
213
+ * worker CLEANLY (close its endpoint, settle, deregister) before the host dies,
214
+ * never leaving a hung endpoint to a dead host. The callback must be cheap and
215
+ * non-throwing; the pool swallows a callback error so a misbehaving listener can
216
+ * never block the teardown it precedes. Multiple callbacks may be registered.
217
+ */
218
+ onMachineRecycling(cb: (workerId: string) => void): void;
219
+ /**
220
+ * OPTIONAL additive hook: registers a callback the pool fires whenever it wakes
221
+ * its FIFO waiters AND capacity is actually leasable (`canAcquire()` is checked
222
+ * AFTER the waiters were woken, so a waiter that consumed the freed worker
223
+ * suppresses the notification). Fires on every capacity-freeing event - a lease
224
+ * settle returning a worker to warm, a reconcile/grow landing a warm worker, a reaper
225
+ * top-up. The runtime registers a poll nudge here so an issue skipped on
226
+ * `worker_host_capacity` re-dispatches within one scheduler turn of a worker
227
+ * landing warm instead of waiting out the poll interval. Callbacks must be
228
+ * cheap; the pool swallows callback errors so a misbehaving listener can never
229
+ * break the settle path that fired it. Optional so structural fakes/legacy
230
+ * pools without the hook stay valid (registration is then skipped).
231
+ */
232
+ onCapacityAvailable?(cb: () => void): void;
233
+ hydrate(): Promise<void>;
234
+ drain(opts: {
235
+ deadlineMs: number;
236
+ signal?: AbortSignal;
237
+ }): Promise<void>;
238
+ snapshot(): WorkerPoolSnapshot;
239
+ }
240
+ /**
241
+ * Tiny async mutex used to serialize per-worker state mutations and the
242
+ * reaper-vs-release interleave. `runExclusive` queues the body behind any
243
+ * in-flight body and resolves with its value (or rejects with its error),
244
+ * releasing the lock even when the body throws.
245
+ */
246
+ export interface Mutex {
247
+ runExclusive<T>(fn: () => Promise<T>): Promise<T>;
248
+ }
249
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@lorenz/worker-pool",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": "./dist/index.js"
10
+ },
11
+ "dependencies": {
12
+ "@lorenz/domain": "file:../domain",
13
+ "@lorenz/ssh": "file:../ssh",
14
+ "@lorenz/worker-sdk": "file:../worker-sdk"
15
+ }
16
+ }
@@ -0,0 +1,64 @@
1
+ import type { WorkerDriver, ProvisionRequest } from "./types.js";
2
+ /**
3
+ * Shared, parameterized test body that asserts the {@link WorkerDriver} contract.
4
+ *
5
+ * This module deliberately lives under `src/` (not `test/`) so it compiles to
6
+ * `dist/` and can be imported by every driver's own test file (fake,
7
+ * static-ssh, and each cloud driver behind its own gate). It registers its own
8
+ * `describe`/`test` blocks, so a caller simply invokes it at the top level of a
9
+ * test file:
10
+ *
11
+ * ```ts
12
+ * runDriverConformanceSuite(() => new FakeWorkerDriver(deps), {
13
+ * suiteName: "FakeWorkerDriver",
14
+ * workerIds: ["worker-a", "worker-b"],
15
+ * makeUnreachable: () => ({ driver, workerId: "worker-down" }),
16
+ * });
17
+ * ```
18
+ *
19
+ * The contract asserted here is intentionally minimal and driver-agnostic:
20
+ * 1. `provision` is idempotent on `workerId` (same id -> same worker).
21
+ * 2. `destroy` is idempotent and tolerant of an already-gone worker.
22
+ * 3. `list()` reflects provisioned-minus-destroyed.
23
+ * 4. `probe` gates a created-but-unreachable worker to `{ ok: false }`.
24
+ */
25
+ /** Options that tailor the shared suite to a specific driver backend. */
26
+ export interface ConformanceSuiteOptions {
27
+ /** Label for the `describe` block (e.g. the driver class name). */
28
+ suiteName?: string;
29
+ /**
30
+ * Two distinct, driver-acceptable worker ids. For fixed-inventory drivers
31
+ * (static-ssh, `min==max==len`) these must map onto real configured hosts.
32
+ */
33
+ workerIds: readonly [string, string];
34
+ /** Timeout passed to `provision` (defaults to 30s). */
35
+ provisionTimeoutMs?: number;
36
+ /** Timeout passed to `probe` (defaults to 30s). */
37
+ probeTimeoutMs?: number;
38
+ /** Timeout passed to `destroy` (defaults to 30s). */
39
+ destroyTimeoutMs?: number;
40
+ /**
41
+ * Builds a {@link ProvisionRequest} for a given worker id. Lets a driver supply
42
+ * its own `labels`/`driverOptions`. Defaults to a minimal request with a
43
+ * single `symphony.worker-pool` label and the configured `provisionTimeoutMs`.
44
+ */
45
+ makeProvisionRequest?: (workerId: string) => ProvisionRequest;
46
+ /**
47
+ * Yields a driver plus a worker id that is created-but-unreachable, so the
48
+ * suite can assert `probe` returns `{ ok: false }`. Optional: a driver that
49
+ * cannot represent an unreachable-but-created worker omits this and the probe
50
+ * gating case is skipped. Both built-in drivers supply it (fake via failure
51
+ * injection, static-ssh via an unroutable host).
52
+ */
53
+ makeUnreachable?: () => {
54
+ driver: WorkerDriver;
55
+ workerId: string;
56
+ };
57
+ }
58
+ /**
59
+ * Registers the shared {@link WorkerDriver} conformance tests. `makeDriver`
60
+ * must return a FRESH driver per call so each case starts from a clean
61
+ * inventory.
62
+ */
63
+ export declare function runDriverConformanceSuite(makeDriver: () => WorkerDriver, opts: ConformanceSuiteOptions): void;
64
+ //# sourceMappingURL=conformance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,yEAAyE;AACzE,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,uDAAuD;IACvD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,gBAAgB,CAAC;IAC9D;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACpE;AAYD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,YAAY,EAC9B,IAAI,EAAE,uBAAuB,GAC5B,IAAI,CAkHN"}
@@ -0,0 +1,109 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { POOL_OWNED_LABEL } from "./types.js";
3
+ const DEFAULT_TIMEOUT_MS = 30_000;
4
+ function descriptorOf(worker) {
5
+ return { workerId: worker.workerId, workerHost: worker.workerHost, driverRef: worker.driverRef };
6
+ }
7
+ /**
8
+ * Registers the shared {@link WorkerDriver} conformance tests. `makeDriver`
9
+ * must return a FRESH driver per call so each case starts from a clean
10
+ * inventory.
11
+ */
12
+ export function runDriverConformanceSuite(makeDriver, opts) {
13
+ const suiteName = opts.suiteName ?? "WorkerDriver conformance";
14
+ const provisionTimeoutMs = opts.provisionTimeoutMs ?? DEFAULT_TIMEOUT_MS;
15
+ const probeTimeoutMs = opts.probeTimeoutMs ?? DEFAULT_TIMEOUT_MS;
16
+ const destroyTimeoutMs = opts.destroyTimeoutMs ?? DEFAULT_TIMEOUT_MS;
17
+ const [workerIdA, workerIdB] = opts.workerIds;
18
+ const provisionRequest = (workerId) => opts.makeProvisionRequest?.(workerId) ?? {
19
+ workerId,
20
+ labels: ["symphony.worker-pool"],
21
+ timeoutMs: provisionTimeoutMs,
22
+ };
23
+ describe(suiteName, () => {
24
+ test("provision is idempotent on workerId", async () => {
25
+ const driver = makeDriver();
26
+ const first = await driver.provision(provisionRequest(workerIdA));
27
+ const second = await driver.provision(provisionRequest(workerIdA));
28
+ // Same idempotency key must yield the same worker identity (no duplicate).
29
+ expect(first.workerId).toBe(workerIdA);
30
+ expect(descriptorOf(second)).toEqual(descriptorOf(first));
31
+ // A second provision must NOT create a duplicate in the inventory.
32
+ const listed = await driver.list();
33
+ const matching = listed.filter((worker) => worker.workerId === workerIdA);
34
+ expect(matching).toHaveLength(1);
35
+ });
36
+ test("list() descriptors carry the pool-owned label", async () => {
37
+ // The pool's hydrate re-adoption and reaper reconcile gate ONLY re-adopt /
38
+ // destroy survivors whose list() descriptor carries POOL_OWNED_LABEL. A
39
+ // descriptor missing it is NEVER touched, so for a driver that creates
40
+ // disposable, pool-owned workers (ephemeral), a leaked survivor (e.g. a paid
41
+ // E2B/Modal/Fly/Docker worker left by a crashed daemon) would leak forever.
42
+ // Pinning the label on every ephemeral driver's list() descriptors
43
+ // catches that class of bug going forward.
44
+ //
45
+ // Non-ephemeral drivers (fixed-inventory static-ssh, in-memory fake) own
46
+ // no disposable resource the pool re-adopts/reaps via this gate, so the
47
+ // label is not load-bearing for them and the assertion does not apply.
48
+ const driver = makeDriver();
49
+ if (!driver.capabilities.ephemeral)
50
+ return;
51
+ await driver.provision(provisionRequest(workerIdA));
52
+ const listed = await driver.list();
53
+ expect(listed.length).toBeGreaterThan(0);
54
+ for (const worker of listed) {
55
+ expect(worker.labels).toContain(POOL_OWNED_LABEL);
56
+ }
57
+ });
58
+ test("list() reflects provisioned-minus-destroyed", async () => {
59
+ const driver = makeDriver();
60
+ const a = await driver.provision(provisionRequest(workerIdA));
61
+ const b = await driver.provision(provisionRequest(workerIdB));
62
+ const afterProvision = (await driver.list()).map((worker) => worker.workerId).sort();
63
+ expect(afterProvision).toContain(workerIdA);
64
+ expect(afterProvision).toContain(workerIdB);
65
+ await driver.destroy(b, { timeoutMs: destroyTimeoutMs, reason: "shrink" });
66
+ const afterDestroy = (await driver.list()).map((worker) => worker.workerId);
67
+ // The surviving worker is still listed; the destroyed one is gone.
68
+ expect(afterDestroy).toContain(a.workerId);
69
+ expect(afterDestroy).not.toContain(b.workerId);
70
+ });
71
+ test("destroy is idempotent (already-gone is ok)", async () => {
72
+ const driver = makeDriver();
73
+ const worker = await driver.provision(provisionRequest(workerIdA));
74
+ // Destroying twice must not throw; the worker is gone after the first call.
75
+ await driver.destroy(worker, { timeoutMs: destroyTimeoutMs, reason: "idle" });
76
+ await driver.destroy(worker, { timeoutMs: destroyTimeoutMs, reason: "idle" });
77
+ const listed = (await driver.list()).map((entry) => entry.workerId);
78
+ expect(listed).not.toContain(worker.workerId);
79
+ });
80
+ test("destroy of a never-provisioned worker is a no-op (does not throw)", async () => {
81
+ const driver = makeDriver();
82
+ const phantom = {
83
+ workerId: workerIdA,
84
+ workerHost: "unknown",
85
+ driverRef: "unknown",
86
+ createdAtMs: 0,
87
+ labels: ["symphony.worker-pool"],
88
+ metadata: {},
89
+ };
90
+ // Destroying a worker the driver has never seen must be tolerated.
91
+ await driver.destroy(phantom, { timeoutMs: destroyTimeoutMs, reason: "orphan" });
92
+ });
93
+ if (opts.makeUnreachable) {
94
+ const makeUnreachable = opts.makeUnreachable;
95
+ test("probe gates a created-but-unreachable worker to ok:false", async () => {
96
+ const { driver, workerId } = makeUnreachable();
97
+ const worker = await driver.provision(provisionRequest(workerId));
98
+ const health = await driver.probe(worker, { timeoutMs: probeTimeoutMs });
99
+ expect(health.ok).toBe(false);
100
+ if (!health.ok) {
101
+ // The failure must carry a non-empty reason for diagnostics.
102
+ expect(typeof health.reason).toBe("string");
103
+ expect(health.reason.length).toBeGreaterThan(0);
104
+ }
105
+ });
106
+ }
107
+ });
108
+ }
109
+ //# sourceMappingURL=conformance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformance.js","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import type { WorkerDriverRegistry } from "./registry.js";
2
+ import type { WorkerDescriptor, WorkerDriver, WorkerDriverFactory, DriverCapabilities, DriverDeps, WorkerHealth, ProvisionRequest, TeardownReason } from "./types.js";
3
+ /**
4
+ * An in-memory {@link WorkerDriver} used by the always-on test layer and the
5
+ * memory-tracker e2e demo, and the SDK's reference implementation of the
6
+ * driver contract. It owns no real machines and touches no disk: every
7
+ * operation mutates a `Map<workerId, WorkerDescriptor>` and the yielded `workerHost`
8
+ * is a synthetic `fake://worker-<workerId>` address. Determinism comes from the
9
+ * injected clock (so `createdAtMs` is reproducible), and failure can be
10
+ * injected per-worker so tests can exercise probe/provision/destroy faults and
11
+ * the conformance suite's unreachable-worker case.
12
+ */
13
+ export declare class FakeWorkerDriver implements WorkerDriver {
14
+ private readonly deps;
15
+ readonly kind = "fake";
16
+ readonly capabilities: DriverCapabilities;
17
+ private readonly workers;
18
+ private readonly probeFailures;
19
+ private readonly provisionFailures;
20
+ private readonly destroyFailures;
21
+ private writes;
22
+ constructor(deps: Pick<DriverDeps, "clock">);
23
+ /** Number of fs writes performed (always 0; the driver is purely in-memory). */
24
+ get fsWriteCount(): number;
25
+ /**
26
+ * Provisions (or re-adopts) a worker for `req.workerId`. Idempotent on `workerId`: a
27
+ * second call returns the SAME descriptor without creating a duplicate. The
28
+ * descriptor is stamped from the injected clock so its `createdAtMs` is
29
+ * deterministic.
30
+ */
31
+ provision(req: ProvisionRequest): Promise<WorkerDescriptor>;
32
+ /**
33
+ * Reports the worker healthy unless a probe failure was injected for its
34
+ * `workerId`. An unknown/already-destroyed worker is reported `ok: false` rather
35
+ * than throwing (mirroring a real probe against a gone machine).
36
+ */
37
+ probe(worker: WorkerDescriptor, _opts: {
38
+ timeoutMs: number;
39
+ signal?: AbortSignal;
40
+ }): Promise<WorkerHealth>;
41
+ /**
42
+ * Destroys a worker. Idempotent and tolerant of an already-gone (or
43
+ * never-provisioned) worker. Rejects only when a destroy failure was injected
44
+ * for the worker, leaving the worker in place so the caller can retry.
45
+ */
46
+ destroy(worker: WorkerDescriptor, _opts: {
47
+ timeoutMs: number;
48
+ reason: TeardownReason;
49
+ }): Promise<void>;
50
+ /** Returns the live inventory (provisioned-minus-destroyed). */
51
+ list(): Promise<WorkerDescriptor[]>;
52
+ /** Injects a probe failure so `probe` returns `{ ok: false, reason }`. */
53
+ injectProbeFailure(workerId: string, reason: string): void;
54
+ /** Clears a previously injected probe failure so the worker probes healthy again. */
55
+ clearProbeFailure(workerId: string): void;
56
+ /** Injects a provision failure so `provision` rejects with `reason`. */
57
+ injectProvisionFailure(workerId: string, reason: string): void;
58
+ /** Clears a previously injected provision failure. */
59
+ clearProvisionFailure(workerId: string): void;
60
+ /** Injects a destroy failure so `destroy` rejects with `reason`. */
61
+ injectDestroyFailure(workerId: string, reason: string): void;
62
+ /** Clears a previously injected destroy failure. */
63
+ clearDestroyFailure(workerId: string): void;
64
+ }
65
+ /** The registered `fake` factory: constructs a fresh in-memory driver per pool. */
66
+ export declare const fakeWorkerDriverFactory: WorkerDriverFactory;
67
+ /**
68
+ * Registers the `fake` driver. The SDK ships this reference driver (rather
69
+ * than an extension) so engine and extension test suites alike can exercise
70
+ * the pool without real machines; the composition root registers it next to
71
+ * the real driver extensions.
72
+ */
73
+ export declare function registerFakeWorkerDriver(registries?: {
74
+ workerDrivers?: WorkerDriverRegistry | undefined;
75
+ }): void;
76
+ //# sourceMappingURL=fake.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake.d.ts","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACf,MAAM,YAAY,CAAC;AAUpB;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IAmBvC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAlBjC,QAAQ,CAAC,IAAI,UAAQ;IACrB,QAAQ,CAAC,YAAY,qBAAgB;IAIrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAI/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6B;IAC/D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAK7D,OAAO,CAAC,MAAM,CAAK;gBAEU,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;IAE5D,gFAAgF;IAChF,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;;;;OAKG;IACG,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwBjE;;;;OAIG;IACG,KAAK,CACT,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjD,OAAO,CAAC,YAAY,CAAC;IAWxB;;;;OAIG;IACG,OAAO,CACX,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE,GACnD,OAAO,CAAC,IAAI,CAAC;IAShB,gEAAgE;IAC1D,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIzC,0EAA0E;IAC1E,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1D,qFAAqF;IACrF,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIzC,wEAAwE;IACxE,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI9D,sDAAsD;IACtD,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI7C,oEAAoE;IACpE,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5D,oDAAoD;IACpD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAG5C;AAED,mFAAmF;AACnF,eAAO,MAAM,uBAAuB,EAAE,mBAGrC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,GAAE;IAAE,aAAa,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAA;CAAO,GACpE,IAAI,CAKN"}