@wenathlan/saddle 1.8.17 → 2.0.2

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 (1005) hide show
  1. package/Dockerfile +1339 -0
  2. package/README.md +68 -22
  3. package/alternatives.ts +1218 -0
  4. package/biome.json +153 -0
  5. package/boards.json +1517 -0
  6. package/compute.ts +3144 -0
  7. package/cores.json +1801 -0
  8. package/dist/acquisition.d.ts +359 -0
  9. package/dist/acquisition.d.ts.map +1 -0
  10. package/dist/acquisition.js +629 -0
  11. package/dist/acquisition.js.map +1 -0
  12. package/dist/alternatives.d.ts +509 -0
  13. package/dist/alternatives.d.ts.map +1 -0
  14. package/dist/alternatives.js +951 -0
  15. package/dist/alternatives.js.map +1 -0
  16. package/dist/automation.d.ts +426 -0
  17. package/dist/automation.d.ts.map +1 -0
  18. package/dist/automation.js +561 -0
  19. package/dist/automation.js.map +1 -0
  20. package/dist/browser.d.ts +562 -0
  21. package/dist/browser.d.ts.map +1 -0
  22. package/dist/browser.js +1057 -0
  23. package/dist/browser.js.map +1 -0
  24. package/dist/capacitor.config.d.ts +13 -0
  25. package/dist/capacitor.config.d.ts.map +1 -0
  26. package/dist/capacitor.config.js +26 -0
  27. package/dist/capacitor.config.js.map +1 -0
  28. package/dist/cli.d.ts +17 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/cli.js +111 -0
  31. package/dist/cli.js.map +1 -0
  32. package/dist/communication.d.ts +192 -0
  33. package/dist/communication.d.ts.map +1 -0
  34. package/dist/communication.js +418 -0
  35. package/dist/communication.js.map +1 -0
  36. package/dist/compute.d.ts +1161 -0
  37. package/dist/compute.d.ts.map +1 -0
  38. package/dist/compute.js +2273 -0
  39. package/dist/compute.js.map +1 -0
  40. package/dist/distribution.d.ts +529 -0
  41. package/dist/distribution.d.ts.map +1 -0
  42. package/dist/distribution.js +811 -0
  43. package/dist/distribution.js.map +1 -0
  44. package/dist/execution.d.ts +530 -0
  45. package/dist/execution.d.ts.map +1 -0
  46. package/dist/execution.js +761 -0
  47. package/dist/execution.js.map +1 -0
  48. package/dist/format.d.ts +19 -0
  49. package/dist/format.d.ts.map +1 -0
  50. package/dist/format.js +60 -0
  51. package/dist/format.js.map +1 -0
  52. package/dist/foundation.d.ts +176 -0
  53. package/dist/foundation.d.ts.map +1 -0
  54. package/dist/foundation.js +309 -0
  55. package/dist/foundation.js.map +1 -0
  56. package/dist/index.d.ts +733 -122
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +1018 -122
  59. package/dist/index.js.map +1 -1
  60. package/dist/integration.d.ts +236 -0
  61. package/dist/integration.d.ts.map +1 -0
  62. package/dist/integration.js +236 -0
  63. package/dist/integration.js.map +1 -0
  64. package/dist/intelligence.d.ts +94 -0
  65. package/dist/intelligence.d.ts.map +1 -0
  66. package/dist/intelligence.js +145 -0
  67. package/dist/intelligence.js.map +1 -0
  68. package/dist/isolation.d.ts +129 -0
  69. package/dist/isolation.d.ts.map +1 -0
  70. package/dist/isolation.js +96 -0
  71. package/dist/isolation.js.map +1 -0
  72. package/dist/media.d.ts +344 -0
  73. package/dist/media.d.ts.map +1 -0
  74. package/dist/media.js +986 -0
  75. package/dist/media.js.map +1 -0
  76. package/dist/modes.d.ts +359 -0
  77. package/dist/modes.d.ts.map +1 -0
  78. package/dist/modes.js +134 -0
  79. package/dist/modes.js.map +1 -0
  80. package/dist/{library/public.d.ts → operations.d.ts} +15 -1
  81. package/dist/operations.d.ts.map +1 -0
  82. package/dist/{library/public.js → operations.js} +18 -7
  83. package/dist/operations.js.map +1 -0
  84. package/dist/orchestrator.d.ts +1339 -0
  85. package/dist/orchestrator.d.ts.map +1 -0
  86. package/dist/orchestrator.js +4308 -0
  87. package/dist/orchestrator.js.map +1 -0
  88. package/dist/performance.d.ts +416 -0
  89. package/dist/performance.d.ts.map +1 -0
  90. package/dist/performance.js +827 -0
  91. package/dist/performance.js.map +1 -0
  92. package/dist/quantum.d.ts +810 -0
  93. package/dist/quantum.d.ts.map +1 -0
  94. package/dist/quantum.js +2073 -0
  95. package/dist/quantum.js.map +1 -0
  96. package/dist/render.d.ts +381 -0
  97. package/dist/render.d.ts.map +1 -0
  98. package/dist/render.js +1073 -0
  99. package/dist/render.js.map +1 -0
  100. package/dist/scheduler.d.ts +596 -0
  101. package/dist/scheduler.d.ts.map +1 -0
  102. package/dist/scheduler.js +1259 -0
  103. package/dist/scheduler.js.map +1 -0
  104. package/dist/security.d.ts +501 -0
  105. package/dist/security.d.ts.map +1 -0
  106. package/dist/security.js +1170 -0
  107. package/dist/security.js.map +1 -0
  108. package/dist/server.d.ts +21 -0
  109. package/dist/server.d.ts.map +1 -0
  110. package/dist/{server/node.js → server.js} +16 -2
  111. package/dist/server.js.map +1 -0
  112. package/dist/tiers.d.ts +1002 -0
  113. package/dist/tiers.d.ts.map +1 -0
  114. package/dist/tiers.js +2165 -0
  115. package/dist/tiers.js.map +1 -0
  116. package/dist/virtual.d.ts +641 -0
  117. package/dist/virtual.d.ts.map +1 -0
  118. package/dist/virtual.js +1285 -0
  119. package/dist/virtual.js.map +1 -0
  120. package/dist/virtualcpu.d.ts +316 -0
  121. package/dist/virtualcpu.d.ts.map +1 -0
  122. package/dist/virtualcpu.js +1180 -0
  123. package/dist/virtualcpu.js.map +1 -0
  124. package/dist/virtualgpu.d.ts +345 -0
  125. package/dist/virtualgpu.d.ts.map +1 -0
  126. package/dist/virtualgpu.js +1000 -0
  127. package/dist/virtualgpu.js.map +1 -0
  128. package/dist/virtualization.d.ts +607 -0
  129. package/dist/virtualization.d.ts.map +1 -0
  130. package/dist/virtualization.js +1187 -0
  131. package/dist/virtualization.js.map +1 -0
  132. package/dist/virtualmemory.d.ts +818 -0
  133. package/dist/virtualmemory.d.ts.map +1 -0
  134. package/dist/virtualmemory.js +1796 -0
  135. package/dist/virtualmemory.js.map +1 -0
  136. package/dist/webscrape.d.ts +720 -0
  137. package/dist/webscrape.d.ts.map +1 -0
  138. package/dist/webscrape.js +2697 -0
  139. package/dist/webscrape.js.map +1 -0
  140. package/docker.config +769 -0
  141. package/docs/CONVERSA.txt +1523 -0
  142. package/docs/alternatives.md +499 -0
  143. package/docs/architecture-1.8.19.md +76 -0
  144. package/docs/architecture-1.8.19.mmd +33 -0
  145. package/docs/architecture-1.8.19.png +0 -0
  146. package/docs/architecture.md +355 -0
  147. package/docs/artifactavailability.md +6 -0
  148. package/docs/brancharchive-2026-08-18.md +18 -0
  149. package/docs/browser.md +7 -0
  150. package/docs/consolidation.md +70 -0
  151. package/docs/e2ugh-engine.md +528 -0
  152. package/{dist/examples/localjob.js → docs/example-localjob.ts} +3 -3
  153. package/{dist/examples/publicapi.js → docs/example-publicapi.ts} +2 -2
  154. package/docs/hardware.md +342 -0
  155. package/docs/optimization.md +126 -0
  156. package/docs/performance.md +499 -0
  157. package/docs/planning.1.8.18.md +94 -0
  158. package/docs/planning.1.8.19.md +49 -0
  159. package/docs/releasenotes-1.8.17.md +6 -0
  160. package/docs/releasenotes-1.8.18.md +32 -0
  161. package/docs/releasenotes-1.8.19.md +35 -0
  162. package/docs/research-1.8.18-isolation.md +43 -0
  163. package/docs/research-1.8.19-virtual-browser.md +27 -0
  164. package/docs/saddle.archive.1.8.17.tar.gz.gpg +0 -0
  165. package/docs/security.md +454 -0
  166. package/docs/todo-1.8.16.md +56 -1
  167. package/docs/todo-1.8.18.md +164 -0
  168. package/docs/todo-1.8.19.md +241 -0
  169. package/docs/viability.md +777 -0
  170. package/docs/virtualization.md +335 -0
  171. package/docs/web-duplicatecleanup.md +9 -0
  172. package/docs/web-ideas.md +106 -0
  173. package/docs/workflowimprovements-2026-08-19.md +70 -0
  174. package/gpumonitor.cpp +1543 -0
  175. package/gpus.json +2408 -0
  176. package/index.ts +1478 -0
  177. package/media.ts +1337 -0
  178. package/mttg.config +1549 -0
  179. package/orchestrator.ts +5462 -0
  180. package/package.json +304 -55
  181. package/passage.config +1331 -0
  182. package/performance.ts +1049 -0
  183. package/processors.json +2217 -0
  184. package/qemu.config +1062 -0
  185. package/qemubridge.py +1340 -0
  186. package/quantum.ts +2393 -0
  187. package/render.ts +1325 -0
  188. package/scheduler.ts +1600 -0
  189. package/security.ts +1449 -0
  190. package/tiers.ts +2871 -0
  191. package/tsconfig.json +29 -0
  192. package/virtualcpu.ts +1273 -0
  193. package/virtualgpu.ts +1181 -0
  194. package/virtualhardware.c +1011 -0
  195. package/virtualhardware.json +739 -0
  196. package/virtualization.ts +1628 -0
  197. package/virtualizationcore.cpp +4635 -0
  198. package/virtualmemory.ts +2303 -0
  199. package/vm.config.json +1910 -0
  200. package/{extension → web/extension}/manifest.json +1 -1
  201. package/web/readme.md +382 -0
  202. package/web/tsconfig.json +25 -0
  203. package/dist/adapters/forge.d.ts +0 -17
  204. package/dist/adapters/forge.d.ts.map +0 -1
  205. package/dist/adapters/forge.js +0 -19
  206. package/dist/adapters/forge.js.map +0 -1
  207. package/dist/adapters/forgejo.d.ts +0 -49
  208. package/dist/adapters/forgejo.d.ts.map +0 -1
  209. package/dist/adapters/forgejo.js +0 -8
  210. package/dist/adapters/forgejo.js.map +0 -1
  211. package/dist/adapters/github.d.ts +0 -12
  212. package/dist/adapters/github.d.ts.map +0 -1
  213. package/dist/adapters/github.js +0 -20
  214. package/dist/adapters/github.js.map +0 -1
  215. package/dist/adapters/gitlab.d.ts +0 -17
  216. package/dist/adapters/gitlab.d.ts.map +0 -1
  217. package/dist/adapters/gitlab.js +0 -10
  218. package/dist/adapters/gitlab.js.map +0 -1
  219. package/dist/adapters/huggingface.d.ts +0 -17
  220. package/dist/adapters/huggingface.d.ts.map +0 -1
  221. package/dist/adapters/huggingface.js +0 -6
  222. package/dist/adapters/huggingface.js.map +0 -1
  223. package/dist/adapters/socket.d.ts +0 -11
  224. package/dist/adapters/socket.d.ts.map +0 -1
  225. package/dist/adapters/socket.js +0 -17
  226. package/dist/adapters/socket.js.map +0 -1
  227. package/dist/adapters/transport.d.ts +0 -7
  228. package/dist/adapters/transport.d.ts.map +0 -1
  229. package/dist/adapters/transport.js +0 -36
  230. package/dist/adapters/transport.js.map +0 -1
  231. package/dist/ai/chunk.d.ts +0 -2
  232. package/dist/ai/chunk.d.ts.map +0 -1
  233. package/dist/ai/chunk.js +0 -36
  234. package/dist/ai/chunk.js.map +0 -1
  235. package/dist/ai/llmstxt.d.ts +0 -6
  236. package/dist/ai/llmstxt.d.ts.map +0 -1
  237. package/dist/ai/llmstxt.js +0 -12
  238. package/dist/ai/llmstxt.js.map +0 -1
  239. package/dist/ai/provenance.d.ts +0 -22
  240. package/dist/ai/provenance.d.ts.map +0 -1
  241. package/dist/ai/provenance.js +0 -25
  242. package/dist/ai/provenance.js.map +0 -1
  243. package/dist/ai/rag.d.ts +0 -26
  244. package/dist/ai/rag.d.ts.map +0 -1
  245. package/dist/ai/rag.js +0 -22
  246. package/dist/ai/rag.js.map +0 -1
  247. package/dist/ai/tokens.d.ts +0 -15
  248. package/dist/ai/tokens.d.ts.map +0 -1
  249. package/dist/ai/tokens.js +0 -9
  250. package/dist/ai/tokens.js.map +0 -1
  251. package/dist/api/auth.d.ts +0 -16
  252. package/dist/api/auth.d.ts.map +0 -1
  253. package/dist/api/auth.js +0 -19
  254. package/dist/api/auth.js.map +0 -1
  255. package/dist/api/contracts.d.ts +0 -28
  256. package/dist/api/contracts.d.ts.map +0 -1
  257. package/dist/api/contracts.js +0 -14
  258. package/dist/api/contracts.js.map +0 -1
  259. package/dist/api/control.d.ts +0 -10
  260. package/dist/api/control.d.ts.map +0 -1
  261. package/dist/api/control.js +0 -35
  262. package/dist/api/control.js.map +0 -1
  263. package/dist/api/http.d.ts +0 -7
  264. package/dist/api/http.d.ts.map +0 -1
  265. package/dist/api/http.js +0 -12
  266. package/dist/api/http.js.map +0 -1
  267. package/dist/api/rate.d.ts +0 -28
  268. package/dist/api/rate.d.ts.map +0 -1
  269. package/dist/api/rate.js +0 -36
  270. package/dist/api/rate.js.map +0 -1
  271. package/dist/api/security.d.ts +0 -12
  272. package/dist/api/security.d.ts.map +0 -1
  273. package/dist/api/security.js +0 -56
  274. package/dist/api/security.js.map +0 -1
  275. package/dist/api/service.d.ts +0 -5
  276. package/dist/api/service.d.ts.map +0 -1
  277. package/dist/api/service.js +0 -70
  278. package/dist/api/service.js.map +0 -1
  279. package/dist/apps/registry.d.ts +0 -33
  280. package/dist/apps/registry.d.ts.map +0 -1
  281. package/dist/apps/registry.js +0 -24
  282. package/dist/apps/registry.js.map +0 -1
  283. package/dist/binary/archive.d.ts +0 -27
  284. package/dist/binary/archive.d.ts.map +0 -1
  285. package/dist/binary/archive.js +0 -46
  286. package/dist/binary/archive.js.map +0 -1
  287. package/dist/binary/build.d.ts +0 -29
  288. package/dist/binary/build.d.ts.map +0 -1
  289. package/dist/binary/build.js +0 -17
  290. package/dist/binary/build.js.map +0 -1
  291. package/dist/binary/transform.d.ts +0 -70
  292. package/dist/binary/transform.d.ts.map +0 -1
  293. package/dist/binary/transform.js +0 -105
  294. package/dist/binary/transform.js.map +0 -1
  295. package/dist/bot/adapter.d.ts +0 -5
  296. package/dist/bot/adapter.d.ts.map +0 -1
  297. package/dist/bot/adapter.js +0 -11
  298. package/dist/bot/adapter.js.map +0 -1
  299. package/dist/bot/bot.d.ts +0 -28
  300. package/dist/bot/bot.d.ts.map +0 -1
  301. package/dist/bot/bot.js +0 -52
  302. package/dist/bot/bot.js.map +0 -1
  303. package/dist/bot/commands.d.ts +0 -8
  304. package/dist/bot/commands.d.ts.map +0 -1
  305. package/dist/bot/commands.js +0 -19
  306. package/dist/bot/commands.js.map +0 -1
  307. package/dist/bot/permissions.d.ts +0 -13
  308. package/dist/bot/permissions.d.ts.map +0 -1
  309. package/dist/bot/permissions.js +0 -16
  310. package/dist/bot/permissions.js.map +0 -1
  311. package/dist/browser/actions.d.ts +0 -33
  312. package/dist/browser/actions.d.ts.map +0 -1
  313. package/dist/browser/actions.js +0 -44
  314. package/dist/browser/actions.js.map +0 -1
  315. package/dist/browser/agent.d.ts +0 -21
  316. package/dist/browser/agent.d.ts.map +0 -1
  317. package/dist/browser/agent.js +0 -13
  318. package/dist/browser/agent.js.map +0 -1
  319. package/dist/browser/context.d.ts +0 -43
  320. package/dist/browser/context.d.ts.map +0 -1
  321. package/dist/browser/context.js +0 -54
  322. package/dist/browser/context.js.map +0 -1
  323. package/dist/browser/fingerprint.d.ts +0 -4
  324. package/dist/browser/fingerprint.d.ts.map +0 -1
  325. package/dist/browser/fingerprint.js +0 -12
  326. package/dist/browser/fingerprint.js.map +0 -1
  327. package/dist/browser/index.d.ts +0 -11
  328. package/dist/browser/index.d.ts.map +0 -1
  329. package/dist/browser/index.js +0 -11
  330. package/dist/browser/index.js.map +0 -1
  331. package/dist/browser/playwright.d.ts +0 -11
  332. package/dist/browser/playwright.d.ts.map +0 -1
  333. package/dist/browser/playwright.js +0 -24
  334. package/dist/browser/playwright.js.map +0 -1
  335. package/dist/browser/recorder.d.ts +0 -21
  336. package/dist/browser/recorder.d.ts.map +0 -1
  337. package/dist/browser/recorder.js +0 -58
  338. package/dist/browser/recorder.js.map +0 -1
  339. package/dist/browser/session.d.ts +0 -14
  340. package/dist/browser/session.d.ts.map +0 -1
  341. package/dist/browser/session.js +0 -21
  342. package/dist/browser/session.js.map +0 -1
  343. package/dist/browser/snapshot.d.ts +0 -69
  344. package/dist/browser/snapshot.d.ts.map +0 -1
  345. package/dist/browser/snapshot.js +0 -133
  346. package/dist/browser/snapshot.js.map +0 -1
  347. package/dist/captcha/contract.d.ts +0 -35
  348. package/dist/captcha/contract.d.ts.map +0 -1
  349. package/dist/captcha/contract.js +0 -17
  350. package/dist/captcha/contract.js.map +0 -1
  351. package/dist/captcha/evidence.d.ts +0 -10
  352. package/dist/captcha/evidence.d.ts.map +0 -1
  353. package/dist/captcha/evidence.js +0 -9
  354. package/dist/captcha/evidence.js.map +0 -1
  355. package/dist/captcha/guard.d.ts +0 -23
  356. package/dist/captcha/guard.d.ts.map +0 -1
  357. package/dist/captcha/guard.js +0 -12
  358. package/dist/captcha/guard.js.map +0 -1
  359. package/dist/cli/main.d.ts +0 -4
  360. package/dist/cli/main.d.ts.map +0 -1
  361. package/dist/cli/main.js +0 -46
  362. package/dist/cli/main.js.map +0 -1
  363. package/dist/core/errors.d.ts +0 -84
  364. package/dist/core/errors.d.ts.map +0 -1
  365. package/dist/core/errors.js +0 -54
  366. package/dist/core/errors.js.map +0 -1
  367. package/dist/core/events.d.ts +0 -9
  368. package/dist/core/events.d.ts.map +0 -1
  369. package/dist/core/events.js +0 -21
  370. package/dist/core/events.js.map +0 -1
  371. package/dist/core/hash.d.ts +0 -10
  372. package/dist/core/hash.d.ts.map +0 -1
  373. package/dist/core/hash.js +0 -82
  374. package/dist/core/hash.js.map +0 -1
  375. package/dist/core/ids.d.ts +0 -10
  376. package/dist/core/ids.d.ts.map +0 -1
  377. package/dist/core/ids.js +0 -15
  378. package/dist/core/ids.js.map +0 -1
  379. package/dist/delivery/manifest.d.ts +0 -35
  380. package/dist/delivery/manifest.d.ts.map +0 -1
  381. package/dist/delivery/manifest.js +0 -68
  382. package/dist/delivery/manifest.js.map +0 -1
  383. package/dist/deploy/index.d.ts +0 -6
  384. package/dist/deploy/index.d.ts.map +0 -1
  385. package/dist/deploy/index.js +0 -6
  386. package/dist/deploy/index.js.map +0 -1
  387. package/dist/dispatch/resumable.d.ts +0 -102
  388. package/dist/dispatch/resumable.d.ts.map +0 -1
  389. package/dist/dispatch/resumable.js +0 -64
  390. package/dist/dispatch/resumable.js.map +0 -1
  391. package/dist/dispatch/workflow.d.ts +0 -6
  392. package/dist/dispatch/workflow.d.ts.map +0 -1
  393. package/dist/dispatch/workflow.js +0 -37
  394. package/dist/dispatch/workflow.js.map +0 -1
  395. package/dist/domain/artifacts.d.ts +0 -12
  396. package/dist/domain/artifacts.d.ts.map +0 -1
  397. package/dist/domain/artifacts.js +0 -14
  398. package/dist/domain/artifacts.js.map +0 -1
  399. package/dist/domain/jobs.d.ts +0 -12
  400. package/dist/domain/jobs.d.ts.map +0 -1
  401. package/dist/domain/jobs.js +0 -20
  402. package/dist/domain/jobs.js.map +0 -1
  403. package/dist/domain/providers.d.ts +0 -10
  404. package/dist/domain/providers.d.ts.map +0 -1
  405. package/dist/domain/providers.js +0 -8
  406. package/dist/domain/providers.js.map +0 -1
  407. package/dist/domain/runtime.d.ts +0 -14
  408. package/dist/domain/runtime.d.ts.map +0 -1
  409. package/dist/domain/runtime.js +0 -10
  410. package/dist/domain/runtime.js.map +0 -1
  411. package/dist/domain/sessions.d.ts +0 -12
  412. package/dist/domain/sessions.d.ts.map +0 -1
  413. package/dist/domain/sessions.js +0 -57
  414. package/dist/domain/sessions.js.map +0 -1
  415. package/dist/examples/localjob.d.ts +0 -2
  416. package/dist/examples/localjob.d.ts.map +0 -1
  417. package/dist/examples/localjob.js.map +0 -1
  418. package/dist/examples/publicapi.d.ts +0 -2
  419. package/dist/examples/publicapi.d.ts.map +0 -1
  420. package/dist/examples/publicapi.js.map +0 -1
  421. package/dist/extension/build.d.ts +0 -9
  422. package/dist/extension/build.d.ts.map +0 -1
  423. package/dist/extension/build.js +0 -85
  424. package/dist/extension/build.js.map +0 -1
  425. package/dist/extension/content.d.ts +0 -6
  426. package/dist/extension/content.d.ts.map +0 -1
  427. package/dist/extension/content.js +0 -135
  428. package/dist/extension/content.js.map +0 -1
  429. package/dist/extension/index.d.ts +0 -7
  430. package/dist/extension/index.d.ts.map +0 -1
  431. package/dist/extension/index.js +0 -7
  432. package/dist/extension/index.js.map +0 -1
  433. package/dist/extension/pagebridge.d.ts +0 -6
  434. package/dist/extension/pagebridge.d.ts.map +0 -1
  435. package/dist/extension/pagebridge.js +0 -42
  436. package/dist/extension/pagebridge.js.map +0 -1
  437. package/dist/extension/permissions.d.ts +0 -26
  438. package/dist/extension/permissions.d.ts.map +0 -1
  439. package/dist/extension/permissions.js +0 -28
  440. package/dist/extension/permissions.js.map +0 -1
  441. package/dist/extension/popup.d.ts +0 -5
  442. package/dist/extension/popup.d.ts.map +0 -1
  443. package/dist/extension/popup.js +0 -26
  444. package/dist/extension/popup.js.map +0 -1
  445. package/dist/extension/protocol.d.ts +0 -58
  446. package/dist/extension/protocol.d.ts.map +0 -1
  447. package/dist/extension/protocol.js +0 -101
  448. package/dist/extension/protocol.js.map +0 -1
  449. package/dist/extension/serviceworker.d.ts +0 -25
  450. package/dist/extension/serviceworker.d.ts.map +0 -1
  451. package/dist/extension/serviceworker.js +0 -102
  452. package/dist/extension/serviceworker.js.map +0 -1
  453. package/dist/extension/worker.d.ts +0 -28
  454. package/dist/extension/worker.d.ts.map +0 -1
  455. package/dist/extension/worker.js +0 -22
  456. package/dist/extension/worker.js.map +0 -1
  457. package/dist/format/check.d.ts +0 -8
  458. package/dist/format/check.d.ts.map +0 -1
  459. package/dist/format/check.js +0 -38
  460. package/dist/format/check.js.map +0 -1
  461. package/dist/library/public.d.ts.map +0 -1
  462. package/dist/library/public.js.map +0 -1
  463. package/dist/mcp/browser.d.ts +0 -9
  464. package/dist/mcp/browser.d.ts.map +0 -1
  465. package/dist/mcp/browser.js +0 -13
  466. package/dist/mcp/browser.js.map +0 -1
  467. package/dist/mcp/server.d.ts +0 -35
  468. package/dist/mcp/server.d.ts.map +0 -1
  469. package/dist/mcp/server.js +0 -40
  470. package/dist/mcp/server.js.map +0 -1
  471. package/dist/mcp/transport.d.ts +0 -7
  472. package/dist/mcp/transport.d.ts.map +0 -1
  473. package/dist/mcp/transport.js +0 -17
  474. package/dist/mcp/transport.js.map +0 -1
  475. package/dist/memory/bridge.d.ts +0 -14
  476. package/dist/memory/bridge.d.ts.map +0 -1
  477. package/dist/memory/bridge.js +0 -16
  478. package/dist/memory/bridge.js.map +0 -1
  479. package/dist/memory/engine.d.ts +0 -38
  480. package/dist/memory/engine.d.ts.map +0 -1
  481. package/dist/memory/engine.js +0 -109
  482. package/dist/memory/engine.js.map +0 -1
  483. package/dist/memory/modes.d.ts +0 -43
  484. package/dist/memory/modes.d.ts.map +0 -1
  485. package/dist/memory/modes.js +0 -66
  486. package/dist/memory/modes.js.map +0 -1
  487. package/dist/memory/objects.d.ts +0 -21
  488. package/dist/memory/objects.d.ts.map +0 -1
  489. package/dist/memory/objects.js +0 -20
  490. package/dist/memory/objects.js.map +0 -1
  491. package/dist/memory/planner.d.ts +0 -66
  492. package/dist/memory/planner.d.ts.map +0 -1
  493. package/dist/memory/planner.js +0 -108
  494. package/dist/memory/planner.js.map +0 -1
  495. package/dist/memory/targets.d.ts +0 -78
  496. package/dist/memory/targets.d.ts.map +0 -1
  497. package/dist/memory/targets.js +0 -29
  498. package/dist/memory/targets.js.map +0 -1
  499. package/dist/memory/transforms.d.ts +0 -19
  500. package/dist/memory/transforms.d.ts.map +0 -1
  501. package/dist/memory/transforms.js +0 -14
  502. package/dist/memory/transforms.js.map +0 -1
  503. package/dist/modes/matrix.d.ts +0 -23
  504. package/dist/modes/matrix.d.ts.map +0 -1
  505. package/dist/modes/matrix.js +0 -18
  506. package/dist/modes/matrix.js.map +0 -1
  507. package/dist/modes/modes.d.ts +0 -33
  508. package/dist/modes/modes.d.ts.map +0 -1
  509. package/dist/modes/modes.js +0 -15
  510. package/dist/modes/modes.js.map +0 -1
  511. package/dist/modes/resolve.d.ts +0 -96
  512. package/dist/modes/resolve.d.ts.map +0 -1
  513. package/dist/modes/resolve.js +0 -48
  514. package/dist/modes/resolve.js.map +0 -1
  515. package/dist/observability/metrics.d.ts +0 -14
  516. package/dist/observability/metrics.d.ts.map +0 -1
  517. package/dist/observability/metrics.js +0 -18
  518. package/dist/observability/metrics.js.map +0 -1
  519. package/dist/packager/manifest.d.ts +0 -66
  520. package/dist/packager/manifest.d.ts.map +0 -1
  521. package/dist/packager/manifest.js +0 -94
  522. package/dist/packager/manifest.js.map +0 -1
  523. package/dist/packager/publish.d.ts +0 -51
  524. package/dist/packager/publish.d.ts.map +0 -1
  525. package/dist/packager/publish.js +0 -18
  526. package/dist/packager/publish.js.map +0 -1
  527. package/dist/packager/targetcli.d.ts +0 -7
  528. package/dist/packager/targetcli.d.ts.map +0 -1
  529. package/dist/packager/targetcli.js +0 -22
  530. package/dist/packager/targetcli.js.map +0 -1
  531. package/dist/persistence/adapter.d.ts +0 -5
  532. package/dist/persistence/adapter.d.ts.map +0 -1
  533. package/dist/persistence/adapter.js +0 -11
  534. package/dist/persistence/adapter.js.map +0 -1
  535. package/dist/persistence/drizzle.d.ts +0 -2
  536. package/dist/persistence/drizzle.d.ts.map +0 -1
  537. package/dist/persistence/drizzle.js +0 -12
  538. package/dist/persistence/drizzle.js.map +0 -1
  539. package/dist/persistence/memory.d.ts +0 -2
  540. package/dist/persistence/memory.d.ts.map +0 -1
  541. package/dist/persistence/memory.js +0 -27
  542. package/dist/persistence/memory.js.map +0 -1
  543. package/dist/persistence/migrations.d.ts +0 -19
  544. package/dist/persistence/migrations.d.ts.map +0 -1
  545. package/dist/persistence/migrations.js +0 -13
  546. package/dist/persistence/migrations.js.map +0 -1
  547. package/dist/persistence/prisma.d.ts +0 -2
  548. package/dist/persistence/prisma.d.ts.map +0 -1
  549. package/dist/persistence/prisma.js +0 -25
  550. package/dist/persistence/prisma.js.map +0 -1
  551. package/dist/persistence/schema.d.ts +0 -63
  552. package/dist/persistence/schema.d.ts.map +0 -1
  553. package/dist/persistence/schema.js +0 -28
  554. package/dist/persistence/schema.js.map +0 -1
  555. package/dist/persistence/sql.d.ts +0 -3
  556. package/dist/persistence/sql.d.ts.map +0 -1
  557. package/dist/persistence/sql.js +0 -37
  558. package/dist/persistence/sql.js.map +0 -1
  559. package/dist/protocol/blocks.d.ts +0 -10
  560. package/dist/protocol/blocks.d.ts.map +0 -1
  561. package/dist/protocol/blocks.js +0 -26
  562. package/dist/protocol/blocks.js.map +0 -1
  563. package/dist/protocol/json.d.ts +0 -6
  564. package/dist/protocol/json.d.ts.map +0 -1
  565. package/dist/protocol/json.js +0 -6
  566. package/dist/protocol/json.js.map +0 -1
  567. package/dist/protocol/ndjson.d.ts +0 -3
  568. package/dist/protocol/ndjson.d.ts.map +0 -1
  569. package/dist/protocol/ndjson.js +0 -20
  570. package/dist/protocol/ndjson.js.map +0 -1
  571. package/dist/protocol/sse.d.ts +0 -7
  572. package/dist/protocol/sse.d.ts.map +0 -1
  573. package/dist/protocol/sse.js +0 -25
  574. package/dist/protocol/sse.js.map +0 -1
  575. package/dist/proxy/pool.d.ts +0 -9
  576. package/dist/proxy/pool.d.ts.map +0 -1
  577. package/dist/proxy/pool.js +0 -27
  578. package/dist/proxy/pool.js.map +0 -1
  579. package/dist/queue/idempotency.d.ts +0 -10
  580. package/dist/queue/idempotency.d.ts.map +0 -1
  581. package/dist/queue/idempotency.js +0 -13
  582. package/dist/queue/idempotency.js.map +0 -1
  583. package/dist/queue/persistent.d.ts +0 -14
  584. package/dist/queue/persistent.d.ts.map +0 -1
  585. package/dist/queue/persistent.js +0 -66
  586. package/dist/queue/persistent.js.map +0 -1
  587. package/dist/queue/queue.d.ts +0 -7
  588. package/dist/queue/queue.d.ts.map +0 -1
  589. package/dist/queue/queue.js +0 -55
  590. package/dist/queue/queue.js.map +0 -1
  591. package/dist/queue/saga.d.ts +0 -5
  592. package/dist/queue/saga.d.ts.map +0 -1
  593. package/dist/queue/saga.js +0 -20
  594. package/dist/queue/saga.js.map +0 -1
  595. package/dist/release/assets.d.ts +0 -144
  596. package/dist/release/assets.d.ts.map +0 -1
  597. package/dist/release/assets.js +0 -157
  598. package/dist/release/assets.js.map +0 -1
  599. package/dist/release/evidence.d.ts +0 -92
  600. package/dist/release/evidence.d.ts.map +0 -1
  601. package/dist/release/evidence.js +0 -148
  602. package/dist/release/evidence.js.map +0 -1
  603. package/dist/release/verify.d.ts +0 -12
  604. package/dist/release/verify.d.ts.map +0 -1
  605. package/dist/release/verify.js +0 -112
  606. package/dist/release/verify.js.map +0 -1
  607. package/dist/runners/chain.d.ts +0 -125
  608. package/dist/runners/chain.d.ts.map +0 -1
  609. package/dist/runners/chain.js +0 -95
  610. package/dist/runners/chain.js.map +0 -1
  611. package/dist/runners/health.d.ts +0 -36
  612. package/dist/runners/health.d.ts.map +0 -1
  613. package/dist/runners/health.js +0 -26
  614. package/dist/runners/health.js.map +0 -1
  615. package/dist/runners/heartbeat.d.ts +0 -23
  616. package/dist/runners/heartbeat.d.ts.map +0 -1
  617. package/dist/runners/heartbeat.js +0 -29
  618. package/dist/runners/heartbeat.js.map +0 -1
  619. package/dist/runners/inprocess.d.ts +0 -17
  620. package/dist/runners/inprocess.d.ts.map +0 -1
  621. package/dist/runners/inprocess.js +0 -20
  622. package/dist/runners/inprocess.js.map +0 -1
  623. package/dist/runners/scheduler.d.ts +0 -5
  624. package/dist/runners/scheduler.d.ts.map +0 -1
  625. package/dist/runners/scheduler.js +0 -19
  626. package/dist/runners/scheduler.js.map +0 -1
  627. package/dist/runtime/abort.d.ts +0 -8
  628. package/dist/runtime/abort.d.ts.map +0 -1
  629. package/dist/runtime/abort.js +0 -13
  630. package/dist/runtime/abort.js.map +0 -1
  631. package/dist/runtime/compatibility.d.ts +0 -37
  632. package/dist/runtime/compatibility.d.ts.map +0 -1
  633. package/dist/runtime/compatibility.js +0 -10
  634. package/dist/runtime/compatibility.js.map +0 -1
  635. package/dist/runtime/detect.d.ts +0 -13
  636. package/dist/runtime/detect.d.ts.map +0 -1
  637. package/dist/runtime/detect.js +0 -18
  638. package/dist/runtime/detect.js.map +0 -1
  639. package/dist/runtime/engine.d.ts +0 -20
  640. package/dist/runtime/engine.d.ts.map +0 -1
  641. package/dist/runtime/engine.js +0 -61
  642. package/dist/runtime/engine.js.map +0 -1
  643. package/dist/runtime/retry.d.ts +0 -19
  644. package/dist/runtime/retry.d.ts.map +0 -1
  645. package/dist/runtime/retry.js +0 -54
  646. package/dist/runtime/retry.js.map +0 -1
  647. package/dist/runtime/worker.d.ts +0 -10
  648. package/dist/runtime/worker.d.ts.map +0 -1
  649. package/dist/runtime/worker.js +0 -25
  650. package/dist/runtime/worker.js.map +0 -1
  651. package/dist/scrape/cache.d.ts +0 -45
  652. package/dist/scrape/cache.d.ts.map +0 -1
  653. package/dist/scrape/cache.js +0 -45
  654. package/dist/scrape/cache.js.map +0 -1
  655. package/dist/scrape/crawl.d.ts +0 -47
  656. package/dist/scrape/crawl.d.ts.map +0 -1
  657. package/dist/scrape/crawl.js +0 -114
  658. package/dist/scrape/crawl.js.map +0 -1
  659. package/dist/scrape/extract.d.ts +0 -63
  660. package/dist/scrape/extract.d.ts.map +0 -1
  661. package/dist/scrape/extract.js +0 -47
  662. package/dist/scrape/extract.js.map +0 -1
  663. package/dist/scrape/normalize.d.ts +0 -52
  664. package/dist/scrape/normalize.d.ts.map +0 -1
  665. package/dist/scrape/normalize.js +0 -102
  666. package/dist/scrape/normalize.js.map +0 -1
  667. package/dist/scrape/robots.d.ts +0 -37
  668. package/dist/scrape/robots.d.ts.map +0 -1
  669. package/dist/scrape/robots.js +0 -71
  670. package/dist/scrape/robots.js.map +0 -1
  671. package/dist/scrape/schema.d.ts +0 -23
  672. package/dist/scrape/schema.d.ts.map +0 -1
  673. package/dist/scrape/schema.js +0 -92
  674. package/dist/scrape/schema.js.map +0 -1
  675. package/dist/scrape/scraper.d.ts +0 -6
  676. package/dist/scrape/scraper.d.ts.map +0 -1
  677. package/dist/scrape/scraper.js +0 -46
  678. package/dist/scrape/scraper.js.map +0 -1
  679. package/dist/scrape/semantic.d.ts +0 -25
  680. package/dist/scrape/semantic.d.ts.map +0 -1
  681. package/dist/scrape/semantic.js +0 -27
  682. package/dist/scrape/semantic.js.map +0 -1
  683. package/dist/server/node.d.ts +0 -7
  684. package/dist/server/node.d.ts.map +0 -1
  685. package/dist/server/node.js.map +0 -1
  686. package/dist/sessions/file.d.ts +0 -25
  687. package/dist/sessions/file.d.ts.map +0 -1
  688. package/dist/sessions/file.js +0 -13
  689. package/dist/sessions/file.js.map +0 -1
  690. package/dist/sessions/replay.d.ts +0 -9
  691. package/dist/sessions/replay.d.ts.map +0 -1
  692. package/dist/sessions/replay.js +0 -70
  693. package/dist/sessions/replay.js.map +0 -1
  694. package/dist/sessions/store.d.ts +0 -25
  695. package/dist/sessions/store.d.ts.map +0 -1
  696. package/dist/sessions/store.js +0 -13
  697. package/dist/sessions/store.js.map +0 -1
  698. package/dist/storage/adapter.d.ts +0 -5
  699. package/dist/storage/adapter.d.ts.map +0 -1
  700. package/dist/storage/adapter.js +0 -11
  701. package/dist/storage/adapter.js.map +0 -1
  702. package/dist/storage/cache.d.ts +0 -23
  703. package/dist/storage/cache.d.ts.map +0 -1
  704. package/dist/storage/cache.js +0 -79
  705. package/dist/storage/cache.js.map +0 -1
  706. package/dist/storage/checksum.d.ts +0 -3
  707. package/dist/storage/checksum.d.ts.map +0 -1
  708. package/dist/storage/checksum.js +0 -19
  709. package/dist/storage/checksum.js.map +0 -1
  710. package/dist/storage/chunked.d.ts +0 -21
  711. package/dist/storage/chunked.d.ts.map +0 -1
  712. package/dist/storage/chunked.js +0 -67
  713. package/dist/storage/chunked.js.map +0 -1
  714. package/dist/storage/content.d.ts +0 -24
  715. package/dist/storage/content.d.ts.map +0 -1
  716. package/dist/storage/content.js +0 -44
  717. package/dist/storage/content.js.map +0 -1
  718. package/dist/storage/filehosting.d.ts +0 -2
  719. package/dist/storage/filehosting.d.ts.map +0 -1
  720. package/dist/storage/filehosting.js +0 -24
  721. package/dist/storage/filehosting.js.map +0 -1
  722. package/dist/storage/githubcontents.d.ts +0 -2
  723. package/dist/storage/githubcontents.d.ts.map +0 -1
  724. package/dist/storage/githubcontents.js +0 -29
  725. package/dist/storage/githubcontents.js.map +0 -1
  726. package/dist/storage/index.d.ts +0 -12
  727. package/dist/storage/index.d.ts.map +0 -1
  728. package/dist/storage/index.js +0 -12
  729. package/dist/storage/index.js.map +0 -1
  730. package/dist/storage/local.d.ts +0 -2
  731. package/dist/storage/local.d.ts.map +0 -1
  732. package/dist/storage/local.js +0 -72
  733. package/dist/storage/local.js.map +0 -1
  734. package/dist/storage/memory.d.ts +0 -6
  735. package/dist/storage/memory.d.ts.map +0 -1
  736. package/dist/storage/memory.js +0 -36
  737. package/dist/storage/memory.js.map +0 -1
  738. package/dist/storage/pool.d.ts +0 -95
  739. package/dist/storage/pool.d.ts.map +0 -1
  740. package/dist/storage/pool.js +0 -202
  741. package/dist/storage/pool.js.map +0 -1
  742. package/dist/storage/s3compatible.d.ts +0 -3
  743. package/dist/storage/s3compatible.d.ts.map +0 -1
  744. package/dist/storage/s3compatible.js +0 -70
  745. package/dist/storage/s3compatible.js.map +0 -1
  746. package/dist/storage/sync.d.ts +0 -47
  747. package/dist/storage/sync.d.ts.map +0 -1
  748. package/dist/storage/sync.js +0 -75
  749. package/dist/storage/sync.js.map +0 -1
  750. package/dist/surfaces/adapters.d.ts +0 -97
  751. package/dist/surfaces/adapters.d.ts.map +0 -1
  752. package/dist/surfaces/adapters.js +0 -50
  753. package/dist/surfaces/adapters.js.map +0 -1
  754. package/dist/surfaces/controls.d.ts +0 -18
  755. package/dist/surfaces/controls.d.ts.map +0 -1
  756. package/dist/surfaces/controls.js +0 -45
  757. package/dist/surfaces/controls.js.map +0 -1
  758. package/dist/surfaces/manifest.d.ts +0 -68
  759. package/dist/surfaces/manifest.d.ts.map +0 -1
  760. package/dist/surfaces/manifest.js +0 -42
  761. package/dist/surfaces/manifest.js.map +0 -1
  762. package/dist/surfaces/n8n.d.ts +0 -25
  763. package/dist/surfaces/n8n.d.ts.map +0 -1
  764. package/dist/surfaces/n8n.js +0 -31
  765. package/dist/surfaces/n8n.js.map +0 -1
  766. package/dist/surfaces/operations.d.ts +0 -32
  767. package/dist/surfaces/operations.d.ts.map +0 -1
  768. package/dist/surfaces/operations.js +0 -53
  769. package/dist/surfaces/operations.js.map +0 -1
  770. package/dist/surfaces/requirements.d.ts +0 -29
  771. package/dist/surfaces/requirements.d.ts.map +0 -1
  772. package/dist/surfaces/requirements.js +0 -50
  773. package/dist/surfaces/requirements.js.map +0 -1
  774. package/dist/surfaces/targets.d.ts +0 -196
  775. package/dist/surfaces/targets.d.ts.map +0 -1
  776. package/dist/surfaces/targets.js +0 -27
  777. package/dist/surfaces/targets.js.map +0 -1
  778. package/dist/webhook/delivery.d.ts +0 -18
  779. package/dist/webhook/delivery.d.ts.map +0 -1
  780. package/dist/webhook/delivery.js +0 -36
  781. package/dist/webhook/delivery.js.map +0 -1
  782. package/dist/webhook/receiver.d.ts +0 -26
  783. package/dist/webhook/receiver.d.ts.map +0 -1
  784. package/dist/webhook/receiver.js +0 -24
  785. package/dist/webhook/receiver.js.map +0 -1
  786. package/dist/webhook/signature.d.ts +0 -3
  787. package/dist/webhook/signature.d.ts.map +0 -1
  788. package/dist/webhook/signature.js +0 -7
  789. package/dist/webhook/signature.js.map +0 -1
  790. package/dist/workflow/manifest.d.ts +0 -22
  791. package/dist/workflow/manifest.d.ts.map +0 -1
  792. package/dist/workflow/manifest.js +0 -21
  793. package/dist/workflow/manifest.js.map +0 -1
  794. package/dist/workflow/registry.d.ts +0 -7
  795. package/dist/workflow/registry.d.ts.map +0 -1
  796. package/dist/workflow/registry.js +0 -18
  797. package/dist/workflow/registry.js.map +0 -1
  798. package/dist/workflow/templates.d.ts +0 -6
  799. package/dist/workflow/templates.d.ts.map +0 -1
  800. package/dist/workflow/templates.js +0 -18
  801. package/dist/workflow/templates.js.map +0 -1
  802. package/dist/workflow/triggers.d.ts +0 -64
  803. package/dist/workflow/triggers.d.ts.map +0 -1
  804. package/dist/workflow/triggers.js +0 -99
  805. package/dist/workflow/triggers.js.map +0 -1
  806. package/docs/logs/.gitkeep +0 -0
  807. package/docs/plans/00.index.md +0 -50
  808. package/docs/plans/01.architecture.md +0 -86
  809. package/docs/plans/02.research.computer.use.md +0 -58
  810. package/docs/plans/03.research.captcha.bypass.md +0 -68
  811. package/docs/plans/04.research.sandbox.ai.md +0 -52
  812. package/docs/plans/05.capture.platform.md +0 -57
  813. package/docs/plans/06.dependencies.md +0 -97
  814. package/docs/plans/07.captcha.test.page.md +0 -41
  815. package/docs/plans/08.production.infra.md +0 -70
  816. package/docs/plans/09.database.schema.md +0 -121
  817. package/docs/plans/10.cloudinary.storage.md +0 -57
  818. package/docs/plans/11.movement.logs.json.md +0 -72
  819. package/docs/plans/12.research.atlas.agent.browser.md +0 -79
  820. package/docs/plans/13.research.anti.detection.md +0 -898
  821. package/docs/plans/14.research.proxy.md +0 -1495
  822. package/docs/plans/15.research.retry.rate.limit.md +0 -1958
  823. package/docs/plans/16.research.crawling.md +0 -1417
  824. package/docs/plans/17.research.caching.md +0 -1610
  825. package/docs/plans/18.research.content.extraction.md +0 -1952
  826. package/docs/plans/19.research.errors.events.md +0 -1523
  827. package/docs/plans/20.research.zod.validation.md +0 -1350
  828. package/docs/plans/21.research.batch.concurrency.md +0 -1888
  829. package/docs/plans/22.research.universal.runtime.md +0 -944
  830. package/docs/plans/23.research.ai.integration.md +0 -1465
  831. package/docs/plans/24.research.memory.persistence.md +0 -1979
  832. package/docs/plans/25.research.server.api.md +0 -342
  833. package/docs/plans/26.research.compilation.md +0 -249
  834. package/docs/plans/27.research.html.parsing.md +0 -251
  835. package/docs/plans/28.action.plan.md +0 -50
  836. package/docs/plans/29.api.reference.md +0 -174
  837. package/docs/plans/30.architecture.plan.md +0 -94
  838. package/docs/plans/31.auditoria.dados.md +0 -163
  839. package/docs/plans/32.bots.automacao.computacional.md +0 -214
  840. package/docs/plans/33.bots.codigo.revisao.md +0 -220
  841. package/docs/plans/34.bots.seguranca.cicd.md +0 -366
  842. package/docs/plans/35.comparativo.concorrencia.md +0 -464
  843. package/docs/plans/36.computational.memory.md +0 -340
  844. package/docs/plans/37.deploystrategy.md +0 -394
  845. package/docs/plans/38.flow.md +0 -155
  846. package/docs/plans/39.multi.platform.bot.md +0 -252
  847. package/docs/plans/40.npm.publish.md +0 -250
  848. package/docs/plans/41.o.que.falta.md +0 -407
  849. package/docs/plans/42.pesquisa.concorrencia.md +0 -721
  850. package/docs/plans/43.plan.universal.architecture.md +0 -496
  851. package/docs/plans/44.reference.md +0 -100
  852. package/docs/plans/45.robotarchitecture.md +0 -237
  853. package/docs/plans/46.scdnintegration.md +0 -284
  854. package/docs/plans/47.multiforge.readme.md +0 -129
  855. package/docs/plans/48.theory.v4.repo.os.md +0 -152
  856. package/docs/plans/49.third.party.infra.md +0 -12
  857. package/docs/plans/50.file.as.compute.md +0 -39
  858. package/docs/plans/51.architecture.virtual.processor.md +0 -80
  859. package/docs/plans/52.manifesto.v8.md +0 -11
  860. package/docs/plans/58.cdn.list.md +0 -23
  861. package/docs/plans/59.sql.frameworks.md +0 -33
  862. package/docs/plans/60.sql.thirdparty.md +0 -26
  863. package/docs/plans/61.objective.multiforge.md +0 -63
  864. package/docs/plans/62.huggingface.upload.md +0 -26
  865. package/docs/plans/63.kaggle.upload.md +0 -24
  866. package/docs/plans/64.npm.storage.md +0 -30
  867. package/docs/plans/65.rclone.terabox.md +0 -32
  868. package/docs/plans/66.buckets.and.models.todo.md +0 -14
  869. package/docs/plans/67.database.todo.md +0 -13
  870. package/docs/plans/68.deploy.packages.todo.md +0 -12
  871. package/docs/plans/69.report.human.operator.md +0 -133
  872. package/docs/plans/70.report.brain2qwerty.ems.md +0 -135
  873. package/docs/plans/71.report.hd.infinito.vram.md +0 -155
  874. package/docs/plans/72.plan.hd.infinito.node.md +0 -146
  875. package/docs/plans/73.plan.scifi.repos.md +0 -125
  876. package/docs/plans/74.000.manifesto.v8.flat.2..md +0 -11
  877. package/docs/plans/README.md +0 -489
  878. package/docs/plans/aggregate_platforms.mjs +0 -146
  879. package/docs/plans/examplesession.json +0 -36
  880. package/docs/plans/missing-facts.md +0 -192
  881. package/docs/plans/models.md +0 -64
  882. package/docs/plans/organize.cjs +0 -270
  883. package/docs/plans/platforms.md +0 -2887
  884. package/docs/plans/sites.md +0 -31322
  885. package/docs/sources/farm.py +0 -117
  886. package/docs/sources/html/saddle1.html +0 -132
  887. package/docs/sources/html/saddle2.html +0 -157
  888. package/docs/sources/html/saddle3.html +0 -119
  889. package/docs/sources/html/saddle4.html +0 -144
  890. package/docs/sources/html/saddle5.html +0 -72
  891. package/docs/sources/html/saddle6.html +0 -171
  892. package/docs/sources/html/saddle7.html +0 -236
  893. package/docs/sources/saddle.ts +0 -74
  894. package/docs/sources/schema.prisma +0 -88
  895. package/docs/sources/script.sh +0 -64
  896. package/docs/sources/workflows.yml +0 -458
  897. package/docs/talks1/_body.txt +0 -14
  898. package/docs/talks1/_index.md +0 -15
  899. package/docs/talks1/_screenshot.png +0 -0
  900. package/docs/talks1/assistant-01.md +0 -5
  901. package/docs/talks1/assistant-02.md +0 -5
  902. package/docs/talks1/assistant-03.md +0 -531
  903. package/docs/talks1/assistant-04.md +0 -26
  904. package/docs/talks1/assistant-05.md +0 -774
  905. package/docs/talks1/assistant-06.md +0 -1718
  906. package/docs/talks1/scrape-share.cjs +0 -185
  907. package/docs/talks1/scrape-share.ts +0 -183
  908. package/docs/talks1/user-01.md +0 -3
  909. package/docs/talks1/user-02.md +0 -3
  910. package/docs/talks1/user-03.md +0 -88
  911. package/docs/talks1/user-04.md +0 -3
  912. package/docs/talks1/user-05.md +0 -3
  913. package/docs/talks1/user-06.md +0 -88
  914. package/docs/talks1/user-07.md +0 -88
  915. package/docs/talks2/_body.txt +0 -14
  916. package/docs/talks2/_index.md +0 -16
  917. package/docs/talks2/_screenshot.png +0 -0
  918. package/docs/talks2/assistant-01.md +0 -5
  919. package/docs/talks2/assistant-02.md +0 -5
  920. package/docs/talks2/assistant-03.md +0 -424
  921. package/docs/talks2/assistant-04.md +0 -598
  922. package/docs/talks2/assistant-05.md +0 -1280
  923. package/docs/talks2/assistant-06.md +0 -1227
  924. package/docs/talks2/assistant-07.md +0 -1252
  925. package/docs/talks2/user-01.md +0 -3
  926. package/docs/talks2/user-02.md +0 -3
  927. package/docs/talks2/user-03.md +0 -88
  928. package/docs/talks2/user-04.md +0 -88
  929. package/docs/talks2/user-05.md +0 -88
  930. package/docs/talks2/user-06.md +0 -88
  931. package/docs/talks2/user-07.md +0 -3
  932. package/docs/talks3/_body.txt +0 -467
  933. package/docs/talks3/_index.md +0 -10
  934. package/docs/talks3/_screenshot.png +0 -0
  935. package/docs/talks3/assistant-01.md +0 -417
  936. package/docs/talks3/assistant-02.md +0 -417
  937. package/docs/talks3/assistant-03.md +0 -29
  938. package/docs/talks3/assistant-04.md +0 -727
  939. package/docs/talks3/user-01.md +0 -88
  940. package/docs/talks3/user-02.md +0 -88
  941. package/docs/talks3/user-03.md +0 -3
  942. package/docs/talks3/user-04.md +0 -3
  943. package/docs/talks4/_body.txt +0 -14
  944. package/docs/talks4/_index.md +0 -12
  945. package/docs/talks4/_screenshot.png +0 -0
  946. package/docs/talks4/assistant-01.md +0 -5
  947. package/docs/talks4/assistant-02.md +0 -5
  948. package/docs/talks4/assistant-03.md +0 -35
  949. package/docs/talks4/assistant-04.md +0 -512
  950. package/docs/talks4/assistant-05.md +0 -599
  951. package/docs/talks4/user-01.md +0 -3
  952. package/docs/talks4/user-02.md +0 -3
  953. package/docs/talks4/user-03.md +0 -88
  954. package/docs/talks4/user-04.md +0 -88
  955. package/docs/talks4/user-05.md +0 -7
  956. package/docs/talks5/_body.txt +0 -14
  957. package/docs/talks5/_index.md +0 -13
  958. package/docs/talks5/_screenshot.png +0 -0
  959. package/docs/talks5/assistant-01.md +0 -5
  960. package/docs/talks5/assistant-02.md +0 -5
  961. package/docs/talks5/assistant-03.md +0 -690
  962. package/docs/talks5/assistant-04.md +0 -758
  963. package/docs/talks5/assistant-05.md +0 -974
  964. package/docs/talks5/user-01.md +0 -3
  965. package/docs/talks5/user-02.md +0 -3
  966. package/docs/talks5/user-03.md +0 -105
  967. package/docs/talks5/user-04.md +0 -105
  968. package/docs/talks5/user-05.md +0 -63
  969. package/docs/talks5/user-06.md +0 -105
  970. package/docs/talks6/_body.txt +0 -14
  971. package/docs/talks6/_index.md +0 -9
  972. package/docs/talks6/_screenshot.png +0 -0
  973. package/docs/talks6/assistant-01.md +0 -5
  974. package/docs/talks6/assistant-02.md +0 -5
  975. package/docs/talks6/assistant-03.md +0 -1499
  976. package/docs/talks6/user-01.md +0 -3
  977. package/docs/talks6/user-02.md +0 -3
  978. package/docs/talks6/user-03.md +0 -88
  979. package/docs/talks6/user-04.md +0 -88
  980. package/docs/talks7/_body.txt +0 -14
  981. package/docs/talks7/_index.md +0 -10
  982. package/docs/talks7/_screenshot.png +0 -0
  983. package/docs/talks7/assistant-01.md +0 -5
  984. package/docs/talks7/assistant-02.md +0 -5
  985. package/docs/talks7/assistant-03.md +0 -523
  986. package/docs/talks7/assistant-04.md +0 -617
  987. package/docs/talks7/user-01.md +0 -3
  988. package/docs/talks7/user-02.md +0 -3
  989. package/docs/talks7/user-03.md +0 -105
  990. package/docs/talks7/user-04.md +0 -67
  991. package/docs/talks8/conversa1.txt +0 -1322
  992. package/docs/talks8/conversa2.txt +0 -237
  993. package/docs/talks9/Beyond the Obvious_ 50 Plataformas Auto-Hospedadas de Forja de C/303/263digo para Al/303/251m de Gitea e GitLab.md" +0 -174
  994. package/docs/talks9/De NPM a Multi-Linguagem_ Uma Arquitetura T/303/251cnica para a Execu/303/247/303/243o Integrada de C/303/263digo no Ecossistema Node.js.md" +0 -59
  995. package/docs/talks9/De NPM a VMs Virtuais_ Uma An/303/241lise Arquitet/303/264nica para a Realiza/303/247/303/243o do Ciclo de Vida do Projeto SADDLE.md" +0 -91
  996. package/docs/talks9/Mapeamento da Engrenagem Computacional_ Uma Arquitetura para Execu/303/247/303/243o Isolada e Persist/303/252ncia em Ambientes Distribu/303/255dos.md" +0 -116
  997. package/docs/talks9/O Cen/303/241rio Pr/303/241tico do SADDLE_ Uma An/303/241lise de Viabilidade e Modelo de Ciclo de Vida Integrado.md" +0 -128
  998. package/docs/talks9/README (2).md +0 -489
  999. package/docs/talks9/README.md +0 -198
  1000. package/docs/talks9/Viabilidade do Saddle_ Uma An/303/241lise T/303/251cnica da Transforma/303/247/303/243o de Armazenamento Remoto em Mem/303/263ria Computacional.md" +0 -80
  1001. package/docs/talks9/conversa.txt +0 -544
  1002. package/docs/talks9/other (2).md +0 -39
  1003. package/docs/talks9/other.md +0 -57
  1004. package/docs/talks9/outro.txt +0 -24
  1005. /package/{extension/README.md → docs/extension.md} +0 -0
@@ -0,0 +1,761 @@
1
+ /**
2
+ * execution.ts — runtime, runner, queue, dispatch and session execution planning.
3
+ *
4
+ * This file is the v2.0.0 grand-merge consolidation of the former nested
5
+ * folders of the repository (runners, runtime) into the single
6
+ * root-level domain file of the saddle family standard: one optimized
7
+ * TypeScript file per correlated domain, ordinal sections, JSDoc on every
8
+ * block, intra-domain imports dissolved, cross-domain imports rewritten to
9
+ * ./<domain>.js. Every capability of every source file is preserved here;
10
+ * the pure re-export barrels (none in this domain) folded their surface into this file directly.
11
+ */
12
+ import { aserror, createjob, eventbus, idfactory, runnerunavailable, systemclock, validatesession } from "./foundation.js";
13
+ import { appendFile, mkdir, readFile, writeFile } from "node:fs/promises";
14
+ import { dirname, join } from "node:path";
15
+ /* ════════════════════════════════════════════════════════════════════ */
16
+ /* Section 1: runners/inprocess.ts — the in process runner is the deterministic baseline for local execution. */
17
+ /* ════════════════════════════════════════════════════════════════════ */
18
+ /**
19
+ * the in process runner is the deterministic baseline for local execution.
20
+ */
21
+ export function inprocess(options = {}) {
22
+ let available = options.status !== "offline";
23
+ const runner = {
24
+ id: options.id ?? "runnerlocal",
25
+ name: options.name ?? "local in process runner",
26
+ priority: options.priority ?? 0,
27
+ maxconcurrent: options.maxconcurrent ?? 1,
28
+ capabilities: options.capabilities ?? ["node", "local"]
29
+ };
30
+ return {
31
+ descriptor() { return { ...runner, status: available ? "available" : "offline" }; },
32
+ setavailable(value) { available = Boolean(value); },
33
+ async canrun() { return available; },
34
+ async execute(context, handler) { return handler(context); }
35
+ };
36
+ }
37
+ /* ════════════════════════════════════════════════════════════════════ */
38
+ /* Section 2: runners/health.ts — runner health checks describe provider capacity without selecting infrastructure. */
39
+ /* ════════════════════════════════════════════════════════════════════ */
40
+ /**
41
+ * runner health checks describe provider capacity without selecting infrastructure.
42
+ */
43
+ /** Checks provider readiness and returns a serializable health report. */
44
+ export async function runnerhealth(provider, job = {}) {
45
+ if (typeof provider?.descriptor !== "function" || typeof provider?.canrun !== "function")
46
+ throw new TypeError("runner health requires a provider");
47
+ const descriptor = provider.descriptor();
48
+ try {
49
+ const available = await provider.canrun(job);
50
+ return { id: String(descriptor.id), status: available ? descriptor.status ?? "available" : "busy", healthy: Boolean(available), checkedat: Date.now(), capacity: { maxconcurrent: descriptor.maxconcurrent, capabilities: [...(descriptor.capabilities ?? [])] } };
51
+ }
52
+ catch (error) {
53
+ return { id: String(descriptor.id), status: "offline", healthy: false, checkedat: Date.now(), capacity: { maxconcurrent: descriptor.maxconcurrent, capabilities: [...(descriptor.capabilities ?? [])] }, error: { code: String(error.code ?? "RUNNER_HEALTH_FAILED"), message: String(error.message ?? error) } };
54
+ }
55
+ }
56
+ /** Checks a provider list in stable order and summarizes available capacity. */
57
+ export async function runnerhealthall(providers = [], job = {}) {
58
+ if (!Array.isArray(providers))
59
+ throw new TypeError("runner health providers must be an array");
60
+ const reports = [];
61
+ for (const provider of providers)
62
+ reports.push(await runnerhealth(provider, job));
63
+ return { checkedat: Date.now(), reports, available: reports.filter((report) => report.healthy).length, total: reports.length };
64
+ }
65
+ /* ════════════════════════════════════════════════════════════════════ */
66
+ /* Section 3: runners/heartbeat.ts — heartbeat manages cooperative liveness signals for long-running local or remote jobs. */
67
+ /* ════════════════════════════════════════════════════════════════════ */
68
+ /**
69
+ * heartbeat manages cooperative liveness signals for long-running local or remote jobs.
70
+ */
71
+ /** Creates a heartbeat controller with manual ticks and optional interval execution. */
72
+ export function heartbeat(options = {}) {
73
+ const interval = Number(options.interval ?? 30000);
74
+ if (!Number.isFinite(interval) || interval < 1)
75
+ throw new TypeError("heartbeat interval must be positive");
76
+ let timer;
77
+ let sequence = 0;
78
+ let last;
79
+ const listeners = new Set();
80
+ async function tick(input = {}) {
81
+ const signal = { id: String(input.id ?? options.id ?? "job"), sequence: ++sequence, at: Date.now(), status: String(input.status ?? "running"), metadata: { ...(input.metadata ?? {}) } };
82
+ last = signal;
83
+ for (const listener of listeners)
84
+ await listener({ ...signal, metadata: { ...signal.metadata } });
85
+ return signal;
86
+ }
87
+ function on(listener) { if (typeof listener !== "function")
88
+ throw new TypeError("heartbeat listener must be a function"); listeners.add(listener); return () => listeners.delete(listener); }
89
+ function start(input = {}) { if (timer)
90
+ return false; const run = () => tick(input).catch(() => undefined); timer = setInterval(run, interval); return true; }
91
+ function stop() { if (!timer)
92
+ return false; clearInterval(timer); timer = undefined; return true; }
93
+ function status() { return { running: Boolean(timer), interval, sequence, last: last ? { ...last, metadata: { ...last.metadata } } : undefined }; }
94
+ return { tick, on, start, stop, status };
95
+ }
96
+ /* ════════════════════════════════════════════════════════════════════ */
97
+ /* Section 4: runners/chain.ts — provider chains rank caller-authorized execution candidates without dispatching remote work. */
98
+ /* ════════════════════════════════════════════════════════════════════ */
99
+ /**
100
+ * provider chains rank caller-authorized execution candidates without dispatching remote work.
101
+ */
102
+ /** Creates a stable provider chain over declarative capability reports. */
103
+ export function providerchain(input = {}) {
104
+ const providers = normalizeproviders(input.providers);
105
+ return Object.freeze({ select(request = {}) { return selectprovider(providers, request); }, dispatchplan(request = {}) { const selection = selectprovider(providers, request); return Object.freeze({ version: 1, state: "caller-dispatches", provider: selection.selected, request: normalizerequest(request), rejected: selection.rejected }); }, providers: () => providers.map((provider) => ({ ...provider, capabilities: [...provider.capabilities] })) });
106
+ }
107
+ /** Selects the first eligible provider under stable priority and returns every exclusion reason. */
108
+ export function selectprovider(providers, request = {}) {
109
+ const normalized = normalizeproviders(providers);
110
+ const required = normalizerequest(request);
111
+ const rejected = [];
112
+ const accepted = [];
113
+ for (const provider of normalized) {
114
+ const reasons = eligibility(provider, required);
115
+ if (reasons.length)
116
+ rejected.push(Object.freeze({ id: provider.id, reasons: Object.freeze(reasons) }));
117
+ else
118
+ accepted.push(provider);
119
+ }
120
+ if (accepted.length === 0)
121
+ throw chainerror("PROVIDER_CHAIN_UNAVAILABLE", "provider chain has no eligible providers", { request: required, rejected });
122
+ accepted.sort((left, right) => preferenceindex(required.preferredids, left.id) - preferenceindex(required.preferredids, right.id) || left.priority - right.priority || left.id.localeCompare(right.id));
123
+ const selected = accepted[0];
124
+ return Object.freeze({ version: 1, selected: describe(selected), rejected: Object.freeze(rejected), request: required });
125
+ }
126
+ /** Produces a verified runner-to-storage handoff record without writing an artifact. */
127
+ export function artifacthandoff(input = {}) {
128
+ const key = nonempty(input.key, "artifact handoff key");
129
+ const sha256 = digest(input.sha256, "artifact handoff sha256");
130
+ const providerid = nonempty(input.providerid, "artifact handoff providerid");
131
+ const retention = nonempty(input.retention, "artifact handoff retention");
132
+ return Object.freeze({ version: 1, key, sha256, sizebytes: positive(input.sizebytes, "artifact handoff sizebytes"), providerid, retention, state: "caller-transfers" });
133
+ }
134
+ /** Creates a cancellation intent without claiming that a remote runner has stopped or cleaned up. */
135
+ export function cancellationplan(input = {}) {
136
+ const runid = nonempty(input.runid, "provider cancellation runid");
137
+ const providerid = nonempty(input.providerid, "provider cancellation providerid");
138
+ const reason = nonempty(input.reason ?? "caller-requested", "provider cancellation reason");
139
+ return Object.freeze({ version: 1, runid, providerid, reason, state: "caller-cancels", remotestate: "unknown", compensation: input.compensation === true ? "caller-evaluates" : "not-requested" });
140
+ }
141
+ /** Renders a caller-dispatches plan through an injected forge adapter without sending it. */
142
+ export async function renderdispatch(plan, adapter) {
143
+ if (plan?.state !== "caller-dispatches")
144
+ throw new TypeError("provider dispatch plan is invalid");
145
+ if (typeof adapter?.render !== "function")
146
+ throw chainerror("PROVIDER_DISPATCH_RENDER_UNAVAILABLE", "provider dispatch render adapter is required");
147
+ return adapter.render(Object.freeze({ ...plan }));
148
+ }
149
+ function normalizeproviders(input) {
150
+ if (!Array.isArray(input) || input.length === 0)
151
+ throw new TypeError("provider chain providers must be a non-empty array");
152
+ const ids = new Set();
153
+ return Object.freeze(input.map((value, index) => {
154
+ const id = nonempty(value?.id, "provider chain provider id");
155
+ if (ids.has(id))
156
+ throw new TypeError(`provider chain provider id is duplicated: ${id}`);
157
+ ids.add(id);
158
+ const status = String(value.status ?? "available");
159
+ if (!new Set(["available", "busy", "offline", "disabled"]).has(status))
160
+ throw new TypeError(`provider chain provider status is invalid: ${id}`);
161
+ return Object.freeze({ id, priority: nonnegative(value.priority ?? index, "provider chain provider priority"), status, capabilities: Object.freeze(unique(value.capabilities ?? [], "provider chain capability")), architecture: optionalword(value.architecture, "provider chain provider architecture"), operatingSystem: optionalword(value.operatingSystem, "provider chain provider operating system"), networkpolicy: policy(value.networkpolicy ?? "caller", "provider chain network policy"), storagepolicy: policy(value.storagepolicy ?? "caller", "provider chain storage policy"), cpu: nonnegative(value.cpu ?? 0, "provider chain provider cpu"), memorybytes: nonnegative(value.memorybytes ?? 0, "provider chain provider memorybytes"), maxmilliseconds: nonnegative(value.maxmilliseconds ?? 0, "provider chain provider maxmilliseconds") });
162
+ }).sort((left, right) => left.priority - right.priority || left.id.localeCompare(right.id)));
163
+ }
164
+ function normalizerequest(input) { return Object.freeze({ capabilities: Object.freeze(unique(input.capabilities ?? [], "provider chain requested capability")), preferredids: Object.freeze(unique(input.preferredids ?? [], "provider chain preferred id")), architecture: optionalword(input.architecture, "provider chain requested architecture"), operatingSystem: optionalword(input.operatingSystem, "provider chain requested operating system"), networkpolicy: input.networkpolicy === undefined ? null : policy(input.networkpolicy, "provider chain requested network policy"), storagepolicy: input.storagepolicy === undefined ? null : policy(input.storagepolicy, "provider chain requested storage policy"), mincpu: nonnegative(input.mincpu ?? 0, "provider chain minimum cpu"), minmemorybytes: nonnegative(input.minmemorybytes ?? 0, "provider chain minimum memorybytes"), minmilliseconds: nonnegative(input.minmilliseconds ?? 0, "provider chain minimum milliseconds") }); }
165
+ function eligibility(provider, request) { const reasons = []; if (provider.status !== "available")
166
+ reasons.push(`status:${provider.status}`); for (const capability of request.capabilities)
167
+ if (!provider.capabilities.includes(capability))
168
+ reasons.push(`capability:${capability}`); if (request.architecture && provider.architecture !== request.architecture)
169
+ reasons.push("architecture"); if (request.operatingSystem && provider.operatingSystem !== request.operatingSystem)
170
+ reasons.push("operatingSystem"); if (request.networkpolicy && provider.networkpolicy !== request.networkpolicy)
171
+ reasons.push("networkpolicy"); if (request.storagepolicy && provider.storagepolicy !== request.storagepolicy)
172
+ reasons.push("storagepolicy"); if (provider.cpu < request.mincpu)
173
+ reasons.push("cpu"); if (provider.memorybytes < request.minmemorybytes)
174
+ reasons.push("memorybytes"); if (provider.maxmilliseconds < request.minmilliseconds)
175
+ reasons.push("maxmilliseconds"); return reasons; }
176
+ function describe(provider) { return Object.freeze({ id: provider.id, priority: provider.priority, capabilities: Object.freeze([...provider.capabilities]), architecture: provider.architecture, operatingSystem: provider.operatingSystem, networkpolicy: provider.networkpolicy, storagepolicy: provider.storagepolicy, cpu: provider.cpu, memorybytes: provider.memorybytes, maxmilliseconds: provider.maxmilliseconds }); }
177
+ function unique(input, name) { if (!Array.isArray(input))
178
+ throw new TypeError(`${name} values must be an array`); return [...new Set(input.map((value) => nonempty(value, name)))].sort(); }
179
+ function nonempty(value, name) { const output = String(value ?? ""); if (!output)
180
+ throw new TypeError(`${name} is required`); return output; }
181
+ function optionalword(value, name) { if (value === undefined || value === null || value === "")
182
+ return null; return nonempty(value, name); }
183
+ function policy(value, name) { const output = String(value); if (!new Set(["caller", "restricted", "isolated", "none"]).has(output))
184
+ throw new TypeError(`${name} is invalid`); return output; }
185
+ function preferenceindex(preferredids, id) { const index = preferredids.indexOf(id); return index === -1 ? Number.MAX_SAFE_INTEGER : index; }
186
+ function nonnegative(value, name) { const numeric = Number(value); if (!Number.isSafeInteger(numeric) || numeric < 0)
187
+ throw new TypeError(`${name} must be a non-negative safe integer`); return numeric; }
188
+ function positive(value, name) { const numeric = nonnegative(value, name); if (numeric < 1)
189
+ throw new TypeError(`${name} must be positive`); return numeric; }
190
+ function digest(value, name) { const output = String(value ?? "").toLowerCase(); if (!/^[a-f0-9]{64}$/.test(output))
191
+ throw new TypeError(`${name} is invalid`); return output; }
192
+ function chainerror(code, message, detail) { const error = new Error(message); error.code = code; error.detail = detail; return error; }
193
+ /* ════════════════════════════════════════════════════════════════════ */
194
+ /* Section 5: runners/scheduler.ts — scheduling uses stable priority order and selects the first available runner. */
195
+ /* ════════════════════════════════════════════════════════════════════ */
196
+ /**
197
+ * scheduling uses stable priority order and selects the first available runner.
198
+ */
199
+ export function scheduler(providers) {
200
+ if (!Array.isArray(providers) || providers.length === 0)
201
+ throw new TypeError("scheduler requires providers");
202
+ const ordered = [...providers].sort((left, right) => left.descriptor().priority - right.descriptor().priority);
203
+ return {
204
+ async select(job) {
205
+ for (const provider of ordered)
206
+ if (provider.descriptor().status === "available" && await provider.canrun(job))
207
+ return provider;
208
+ throw runnerunavailable(job.id);
209
+ },
210
+ list() { return [...ordered]; }
211
+ };
212
+ }
213
+ /* ════════════════════════════════════════════════════════════════════ */
214
+ /* Section 6: runtime/detect.ts — runtime detection uses standard globals and keeps node specific modules outside the core. */
215
+ /* ════════════════════════════════════════════════════════════════════ */
216
+ /**
217
+ * runtime detection uses standard globals and keeps node specific modules outside the core.
218
+ */
219
+ export function runtimename(scope = globalThis) {
220
+ if (scope.Deno)
221
+ return "deno";
222
+ if (scope.Bun)
223
+ return "bun";
224
+ if (scope.process?.versions?.node)
225
+ return "node";
226
+ if (scope.window?.document)
227
+ return "browser";
228
+ return "unknown";
229
+ }
230
+ export function runtimefeatures(scope = globalThis) {
231
+ return { runtime: runtimename(scope), fetch: typeof scope.fetch === "function", streams: typeof scope.ReadableStream === "function" && typeof scope.WritableStream === "function", crypto: Boolean(scope.crypto), websocket: typeof scope.WebSocket === "function", filesystem: Boolean(scope.process?.versions?.node || scope.Deno) };
232
+ }
233
+ /* ════════════════════════════════════════════════════════════════════ */
234
+ /* Section 7: runtime/engine.ts — the engine coordinates job intent, working memory, runner execution, and commit. */
235
+ /* ════════════════════════════════════════════════════════════════════ */
236
+ /**
237
+ * the engine coordinates job intent, working memory, runner execution, and commit.
238
+ */
239
+ export function engine(options) {
240
+ if (!options?.storage || !options?.memory || !options?.scheduler)
241
+ throw new TypeError("engine requires storage memory and scheduler");
242
+ const events = options.events ?? eventbus();
243
+ const ids = options.ids ?? idfactory();
244
+ const clock = options.clock ?? systemclock();
245
+ async function emit(job, type, data) { events.emit({ id: ids.next("event"), type, jobid: job.id, at: clock.now(), data }); }
246
+ return {
247
+ events,
248
+ async run(spec, handler) {
249
+ const job = createjob(spec, ids, clock);
250
+ await emit(job, "jobqueued", { name: job.name });
251
+ let set;
252
+ let provider;
253
+ try {
254
+ job.status = "preparing";
255
+ await emit(job, "jobpreparing", { status: job.status });
256
+ provider = await options.scheduler.select(job);
257
+ await emit(job, "runnerselected", { runnerid: provider.descriptor().id });
258
+ set = await options.memory.prepare(job);
259
+ job.status = "running";
260
+ await emit(job, "jobrunning", { status: job.status, location: set.location });
261
+ const output = await provider.execute({ job, workingset: set, signal: new AbortController().signal }, handler);
262
+ const encoded = encodeoutput(output);
263
+ job.status = "syncing";
264
+ await emit(job, "jobsyncing", { status: job.status, bytes: encoded.bytes.byteLength });
265
+ const sync = await options.memory.sync(set, encoded.bytes);
266
+ const artifact = await options.storage.put({ key: spec.outputkey ?? `results/${job.id}${encoded.extension}`, data: encoded.bytes, contenttype: encoded.contenttype, metadata: { jobid: job.id, runnerid: provider.descriptor().id } });
267
+ await emit(job, "storagecommitted", { key: artifact.key, sha256: artifact.sha256 });
268
+ job.status = "completed";
269
+ await emit(job, "jobcompleted", { status: job.status, artifactkey: artifact.key });
270
+ return { job, output, runnerid: provider.descriptor().id, artifact, sync };
271
+ }
272
+ catch (error) {
273
+ job.status = "failed";
274
+ const failure = aserror(error, job.id);
275
+ await emit(job, "jobfailed", { code: failure.code, retryable: failure.retryable, message: failure.message });
276
+ throw failure;
277
+ }
278
+ finally {
279
+ if (set)
280
+ await options.memory.cleanup(set);
281
+ }
282
+ }
283
+ };
284
+ }
285
+ function encodeoutput(output) {
286
+ if (output instanceof Uint8Array)
287
+ return { bytes: output, contenttype: "application/octet-stream", extension: ".bin" };
288
+ if (typeof output === "string")
289
+ return { bytes: new TextEncoder().encode(output), contenttype: "text/plain;charset=utf-8", extension: ".txt" };
290
+ return { bytes: new TextEncoder().encode(JSON.stringify(output)), contenttype: "application/json", extension: ".json" };
291
+ }
292
+ /* ════════════════════════════════════════════════════════════════════ */
293
+ /* Section 8: runtime/abort.ts — abort helpers unify deadlines without depending on a server framework. */
294
+ /* ════════════════════════════════════════════════════════════════════ */
295
+ /**
296
+ * abort helpers unify deadlines without depending on a server framework.
297
+ */
298
+ export function deadline(milliseconds, parent) {
299
+ if (!Number.isFinite(milliseconds) || milliseconds < 1)
300
+ throw new TypeError("deadline must be positive");
301
+ const controller = new AbortController();
302
+ const timer = setTimeout(() => controller.abort(new Error("deadline exceeded")), milliseconds);
303
+ if (parent)
304
+ parent.addEventListener("abort", () => controller.abort(parent.reason), { once: true });
305
+ return { signal: controller.signal, cancel() { clearTimeout(timer); controller.abort(); } };
306
+ }
307
+ /* ════════════════════════════════════════════════════════════════════ */
308
+ /* Section 9: runtime/retry.ts — retry context groups transient retry policy and circuit protection for runners, */
309
+ /* ════════════════════════════════════════════════════════════════════ */
310
+ /**
311
+ * retry context groups transient retry policy and circuit protection for runners,
312
+ * storage adapters and network-facing surfaces.
313
+ */
314
+ /** Creates bounded exponential retry behavior for retryable failures. */
315
+ export function retrypolicy(options = {}) {
316
+ const maxattempts = options.maxattempts ?? 3;
317
+ const base = options.base ?? 1000;
318
+ const factor = options.factor ?? 2;
319
+ const cap = options.cap ?? 30000;
320
+ return { async run(handler) { let last; for (let attempt = 1; attempt <= maxattempts; attempt += 1) {
321
+ try {
322
+ return await handler(attempt);
323
+ }
324
+ catch (error) {
325
+ last = error;
326
+ if (error?.retryable !== true || attempt === maxattempts)
327
+ throw error;
328
+ const wait = Math.min(cap, base * factor ** (attempt - 1)) + Math.floor(Math.random() * (options.jitter ?? 0));
329
+ options.onretry?.({ attempt, wait, error });
330
+ await delay(wait);
331
+ }
332
+ } throw last; } };
333
+ }
334
+ /** Creates a circuit breaker that opens after repeated handler failures. */
335
+ export function circuitbreaker(options = {}) {
336
+ const threshold = options.failurethreshold ?? 5;
337
+ const resettimeout = options.resettimeout ?? 60000;
338
+ let failures = 0;
339
+ let openedat = 0;
340
+ let state = "closed";
341
+ async function execute(handler) { if (state === "open") {
342
+ if (Date.now() - openedat < resettimeout)
343
+ throw new Error("circuit breaker is open");
344
+ state = "halfopen";
345
+ } try {
346
+ const result = await handler();
347
+ failures = 0;
348
+ state = "closed";
349
+ return result;
350
+ }
351
+ catch (error) {
352
+ failures += 1;
353
+ if (failures >= threshold) {
354
+ state = "open";
355
+ openedat = Date.now();
356
+ }
357
+ throw error;
358
+ } }
359
+ return { execute, status() { return { state, failures, openedat }; }, reset() { failures = 0; openedat = 0; state = "closed"; } };
360
+ }
361
+ /** Waits between retry attempts without introducing an external timer dependency. */
362
+ function delay(milliseconds) { return milliseconds ? new Promise((resolve) => setTimeout(resolve, milliseconds)) : Promise.resolve(); }
363
+ /* ════════════════════════════════════════════════════════════════════ */
364
+ /* Section 10: runtime/queue.ts — job queue groups concurrency retry timeout and idempotency at one boundary. */
365
+ /* ════════════════════════════════════════════════════════════════════ */
366
+ /**
367
+ * job queue groups concurrency retry timeout and idempotency at one boundary.
368
+ */
369
+ export function jobqueue(options = {}) {
370
+ const limit = options.concurrency ?? 1;
371
+ const attempts = options.maxattempts ?? 3;
372
+ const retryall = options.retryall ?? false;
373
+ const keys = options.idempotency ?? idempotency();
374
+ const pending = [];
375
+ let active = 0;
376
+ let sequence = 0;
377
+ async function drain() {
378
+ while (active < limit && pending.length) {
379
+ const item = pending.shift();
380
+ active += 1;
381
+ execute(item).then(item.resolve, item.reject).finally(() => { active -= 1; void drain(); });
382
+ }
383
+ }
384
+ async function execute(item) {
385
+ if (item.key && keys.has(item.key))
386
+ return keys.get(item.key);
387
+ let last;
388
+ for (let attempt = 1; attempt <= attempts; attempt += 1) {
389
+ try {
390
+ const result = await item.handler({ id: item.id, payload: item.payload, attempt });
391
+ if (item.key)
392
+ keys.set(item.key, result);
393
+ return result;
394
+ }
395
+ catch (error) {
396
+ last = error;
397
+ const retryable = retryall || error?.retryable === true || error?.code === "RUNNER_UNAVAILABLE";
398
+ if (!retryable || attempt === attempts)
399
+ throw error;
400
+ await queuedelay((options.backoff ?? 250) * 2 ** (attempt - 1));
401
+ }
402
+ }
403
+ throw last;
404
+ }
405
+ return {
406
+ add(payload, handler, options = {}) {
407
+ if (typeof handler !== "function")
408
+ return Promise.reject(new TypeError("queue handler is required"));
409
+ const id = options.id ?? `queuejob${sequence++}`;
410
+ return new Promise((resolve, reject) => { pending.push({ id, payload, handler, key: options.key, resolve, reject }); void drain(); });
411
+ },
412
+ size() { return pending.length; },
413
+ active() { return active; },
414
+ async idle() { while (pending.length || active)
415
+ await queuedelay(10); }
416
+ };
417
+ }
418
+ function queuedelay(milliseconds) { return new Promise((resolve) => setTimeout(resolve, milliseconds)); }
419
+ /* ════════════════════════════════════════════════════════════════════ */
420
+ /* Section 11: runtime/idempotency.ts — idempotency keys prevent duplicate delivery from at least once transports. */
421
+ /* ════════════════════════════════════════════════════════════════════ */
422
+ /**
423
+ * idempotency keys prevent duplicate delivery from at least once transports.
424
+ */
425
+ export function idempotency() {
426
+ const results = new Map();
427
+ return {
428
+ has(key) { return results.has(key); },
429
+ get(key) { return results.get(key); },
430
+ set(key, value) { results.set(key, value); return value; },
431
+ delete(key) { results.delete(key); }
432
+ };
433
+ }
434
+ /* ════════════════════════════════════════════════════════════════════ */
435
+ /* Section 12: runtime/saga.ts — saga executes compensations in reverse order when a multi step operation fails. */
436
+ /* ════════════════════════════════════════════════════════════════════ */
437
+ /**
438
+ * saga executes compensations in reverse order when a multi step operation fails.
439
+ */
440
+ export async function saga(steps, context = {}) {
441
+ const completed = [];
442
+ try {
443
+ for (const step of steps) {
444
+ const value = await step.run(context);
445
+ completed.push({ step, value });
446
+ }
447
+ return completed.map((item) => item.value);
448
+ }
449
+ catch (error) {
450
+ for (const item of completed.reverse())
451
+ if (typeof item.step.compensate === "function")
452
+ await item.step.compensate(context, item.value);
453
+ throw error;
454
+ }
455
+ }
456
+ /* ════════════════════════════════════════════════════════════════════ */
457
+ /* Section 13: runtime/resumable.ts — resumable runs keep remote execution state explicit and recoverable across process restarts. */
458
+ /* ════════════════════════════════════════════════════════════════════ */
459
+ /**
460
+ * resumable runs keep remote execution state explicit and recoverable across process restarts.
461
+ */
462
+ export const runstatuses = Object.freeze(["created", "submitted", "running", "succeeded", "failed", "cancelled"]);
463
+ const transitions = { created: ["submitted", "cancelled"], submitted: ["running", "failed", "cancelled"], running: ["succeeded", "failed", "cancelled"], succeeded: [], failed: ["submitted", "cancelled"], cancelled: [] };
464
+ /** Creates a validated run record with explicit transition history. */
465
+ export function runrecord(input = {}) {
466
+ if (!input.requestid || !input.name)
467
+ throw new TypeError("run record requires requestid and name");
468
+ return { version: 1, requestid: String(input.requestid), name: String(input.name), status: input.status ?? "created", runid: input.runid, attempt: Number(input.attempt ?? 0), createdat: Number(input.createdat ?? Date.now()), updatedat: Number(input.updatedat ?? Date.now()), history: Array.isArray(input.history) ? input.history.map((event) => ({ ...event })) : [], metadata: { ...(input.metadata ?? {}) } };
469
+ }
470
+ /** Moves a run through a legal state transition and appends an auditable event. */
471
+ export function transitionrun(record, status, options = {}) {
472
+ const current = runrecord(record);
473
+ if (!runstatuses.includes(status) || !transitions[current.status]?.includes(status)) {
474
+ const error = new Error(`invalid run transition: ${current.status} to ${status}`);
475
+ error.code = "INVALID_RUN_TRANSITION";
476
+ throw error;
477
+ }
478
+ const event = { from: current.status, to: status, at: Number(options.at ?? Date.now()), reason: options.reason };
479
+ return { ...current, status, runid: options.runid ?? current.runid, attempt: status === "submitted" ? current.attempt + 1 : current.attempt, updatedat: event.at, history: [...current.history, event] };
480
+ }
481
+ /** Coordinates submit, status, resume and cancel operations through an injected remote adapter. */
482
+ export function resumablerun(adapter, input = {}) {
483
+ if (typeof adapter?.submit !== "function" || typeof adapter?.status !== "function")
484
+ throw new TypeError("resumable run adapter requires submit and status");
485
+ let record = runrecord(input);
486
+ let compensation = { status: typeof input.compensate === "function" ? "pending" : "not-configured" };
487
+ async function submit() { const response = await adapter.submit(input); record = transitionrun(record, "submitted", { runid: response?.runid, reason: "submitted" }); return { ...record, response }; }
488
+ async function resume() { if (record.status === "created")
489
+ await submit(); if (typeof adapter.resume === "function")
490
+ await adapter.resume(record); const response = await adapter.status(record.runid); if (response?.status && response.status !== record.status && transitions[record.status]?.includes(response.status))
491
+ record = transitionrun(record, response.status, { reason: "remote-status" }); return { ...record, response }; }
492
+ async function cancel(options = {}) {
493
+ if (record.status === "cancelled")
494
+ return { ...record, compensation };
495
+ if (!transitions[record.status]?.includes("cancelled"))
496
+ throw new Error(`invalid run transition: ${record.status} to cancelled`);
497
+ if (typeof adapter.cancel !== "function")
498
+ throw new TypeError("resumable run adapter does not support cancel");
499
+ const response = await adapter.cancel(record.runid, options);
500
+ record = transitionrun(record, "cancelled", { reason: options.reason ?? "cancelled" });
501
+ const handler = options.compensate ?? input.compensate;
502
+ if (typeof handler !== "function")
503
+ compensation = { status: "not-configured" };
504
+ else if (compensation.status === "pending") {
505
+ try {
506
+ compensation = { status: "succeeded", result: await handler({ run: runrecord(record), response, reason: options.reason ?? "cancelled" }) };
507
+ }
508
+ catch (error) {
509
+ compensation = { status: "failed", error: String(error?.message ?? error) };
510
+ record = { ...record, metadata: { ...record.metadata, compensation: compensation.status } };
511
+ const failure = new Error("resumable run compensation failed", { cause: error });
512
+ failure.code = "COMPENSATION_FAILED";
513
+ throw failure;
514
+ }
515
+ }
516
+ record = { ...record, metadata: { ...record.metadata, compensation: compensation.status } };
517
+ return { ...record, response, compensation };
518
+ }
519
+ function get() { return runrecord(record); }
520
+ return { submit, resume, cancel, get };
521
+ }
522
+ /* ════════════════════════════════════════════════════════════════════ */
523
+ /* Section 14: runtime/workflow.ts — workflow dispatch keeps remote execution explicit and records a stable request identity. */
524
+ /* ════════════════════════════════════════════════════════════════════ */
525
+ /**
526
+ * workflow dispatch keeps remote execution explicit and records a stable request identity.
527
+ */
528
+ export function workflowdispatch(adapter, options = {}) {
529
+ if (typeof adapter?.dispatch !== "function")
530
+ throw new TypeError("workflow adapter requires dispatch");
531
+ const records = options.records ?? idempotency();
532
+ return {
533
+ async submit(spec) {
534
+ if (!spec?.owner || !spec.repository || !spec.workflow || !spec.ref)
535
+ throw new TypeError("workflow owner repository workflow and ref are required");
536
+ const requestid = spec.requestid ?? `${spec.owner}/${spec.repository}/${spec.workflow}/${spec.ref}/${JSON.stringify(spec.inputs ?? {})}`;
537
+ if (records.has(requestid))
538
+ return records.get(requestid);
539
+ const response = await adapter.dispatch(spec.owner, spec.repository, spec.workflow, { ref: spec.ref, inputs: spec.inputs ?? {} });
540
+ const record = { requestid, ...spec, response, submittedat: Date.now() };
541
+ records.set(requestid, record);
542
+ return record;
543
+ },
544
+ get(requestid) { return records.get(requestid); }
545
+ };
546
+ }
547
+ export async function waitforrun(adapter, owner, repository, runid, options = {}) {
548
+ if (typeof adapter?.run !== "function")
549
+ throw new TypeError("workflow adapter requires run");
550
+ const attempts = options.attempts ?? 20;
551
+ const interval = options.interval ?? 3000;
552
+ for (let attempt = 0; attempt < attempts; attempt += 1) {
553
+ const run = await adapter.run(owner, repository, runid);
554
+ if (["completed", "failure", "cancelled", "success"].includes(run.status))
555
+ return run;
556
+ await new Promise((resolve) => setTimeout(resolve, interval));
557
+ }
558
+ throw new Error(`workflow run ${runid} did not finish within configured attempts`);
559
+ }
560
+ /* ════════════════════════════════════════════════════════════════════ */
561
+ /* Section 15: runtime/replay.ts — replay maps validated session events to an injected browser adapter. */
562
+ /* ════════════════════════════════════════════════════════════════════ */
563
+ /**
564
+ * replay maps validated session events to an injected browser adapter.
565
+ */
566
+ export async function replay(session, adapter, options = {}) {
567
+ if (!session?.events || typeof adapter?.move !== "function")
568
+ throw new TypeError("replay requires session events and browser adapter");
569
+ const speed = options.speed ?? 1;
570
+ let previous = 0;
571
+ let currentcontext = normalizecontext(options.initialcontext);
572
+ let contextswitches = 0;
573
+ for (const event of session.events) {
574
+ const wait = Math.max(0, (event.t - previous) / speed);
575
+ if (wait)
576
+ await replaydelay(wait);
577
+ previous = event.t;
578
+ const eventcontext = normalizecontext(event.context ?? event);
579
+ if (eventcontext && contextchanged(currentcontext, eventcontext)) {
580
+ await restorecontext(adapter, eventcontext, currentcontext);
581
+ currentcontext = eventcontext;
582
+ contextswitches += 1;
583
+ }
584
+ if (event.type === "move")
585
+ await adapter.move(event);
586
+ else if (event.type === "click")
587
+ await adapter.click(event);
588
+ else if (event.type === "drag")
589
+ await adapter.drag(event);
590
+ else if (event.type === "scroll")
591
+ await adapter.scroll(event);
592
+ else if (event.type === "key")
593
+ await adapter.key(event);
594
+ }
595
+ return { events: session.events.length, duration: previous / speed, contextswitches };
596
+ }
597
+ function normalizecontext(value) {
598
+ if (value === undefined || value === null)
599
+ return undefined;
600
+ if (typeof value !== "object" || Array.isArray(value))
601
+ throw new TypeError("replay context must be an object");
602
+ const context = {};
603
+ for (const name of ["windowid", "tabid", "frameid"])
604
+ if (value[name] !== undefined) {
605
+ if (typeof value[name] !== "string" || !value[name])
606
+ throw new TypeError(`replay ${name} must be a non-empty string`);
607
+ context[name] = value[name];
608
+ }
609
+ return Object.keys(context).length ? context : undefined;
610
+ }
611
+ function contextchanged(previous, next) {
612
+ return ["windowid", "tabid", "frameid"].some((name) => previous?.[name] !== next[name]);
613
+ }
614
+ async function restorecontext(adapter, next, previous) {
615
+ if (typeof adapter.restorecontext === "function") {
616
+ await adapter.restorecontext({ ...next }, previous ? { ...previous } : undefined);
617
+ return;
618
+ }
619
+ const methods = [["windowid", "selectwindow"], ["tabid", "selecttab"], ["frameid", "selectframe"]];
620
+ for (const [name, method] of methods)
621
+ if (next[name] !== undefined && previous?.[name] !== next[name]) {
622
+ if (typeof adapter[method] !== "function") {
623
+ const error = new Error(`replay adapter cannot restore ${name}`);
624
+ error.code = "REPLAY_CONTEXT_UNSUPPORTED";
625
+ error.context = name;
626
+ throw error;
627
+ }
628
+ await adapter[method](next[name], { ...next });
629
+ }
630
+ }
631
+ function replaydelay(milliseconds) { return new Promise((resolve) => setTimeout(resolve, milliseconds)); }
632
+ /* ════════════════════════════════════════════════════════════════════ */
633
+ /* Section 16: runtime/worker.ts — worker bridge translates message events through an injected dispatcher without owning a worker runtime. */
634
+ /* ════════════════════════════════════════════════════════════════════ */
635
+ /**
636
+ * worker bridge translates message events through an injected dispatcher without owning a worker runtime.
637
+ */
638
+ /** Attaches a bounded message bridge to a caller-owned worker scope. */
639
+ export function workerbridge(options = {}) {
640
+ const scope = options.scope ?? globalThis;
641
+ const dispatch = options.dispatch;
642
+ if (typeof scope.addEventListener !== "function")
643
+ throw new TypeError("worker scope requires addEventListener");
644
+ if (typeof dispatch !== "function")
645
+ throw new TypeError("worker bridge requires dispatch");
646
+ const event = String(options.event ?? "message");
647
+ async function listener(message) {
648
+ const input = message?.data ?? message;
649
+ try {
650
+ scope.postMessage?.({ ok: true, requestid: input?.requestid, data: await dispatch(input) });
651
+ }
652
+ catch (error) {
653
+ scope.postMessage?.({ ok: false, requestid: input?.requestid, error: { code: String(error?.code ?? "WORKER_DISPATCH_FAILED"), message: String(error?.message ?? error) } });
654
+ }
655
+ }
656
+ scope.addEventListener(event, listener);
657
+ return { event, listener, close() { scope.removeEventListener?.(event, listener); } };
658
+ }
659
+ /* ════════════════════════════════════════════════════════════════════ */
660
+ /* Section 17: runtime/persistentqueue.ts — persistent queue stores job state in a caller selected file. */
661
+ /* ════════════════════════════════════════════════════════════════════ */
662
+ /**
663
+ * persistent queue stores job state in a caller selected file.
664
+ * running items return to queued when a process restores after a crash.
665
+ */
666
+ /** Creates a crash recoverable queue with idempotent item identifiers. */
667
+ export function persistentqueue(options = {}) {
668
+ if (!options.path)
669
+ throw new TypeError("persistent queue requires path");
670
+ const maxattempts = options.maxattempts ?? 3;
671
+ const defaultleasems = options.leasems ?? 0;
672
+ const clock = typeof options.clock === "function" ? options.clock : () => Date.now();
673
+ let state = { version: 2, items: [] };
674
+ let loaded = false;
675
+ /** Reads the queue once and returns running jobs to the waiting state. */
676
+ async function restore() {
677
+ if (loaded)
678
+ return state;
679
+ try {
680
+ state = JSON.parse(await readFile(options.path, "utf8"));
681
+ }
682
+ catch (error) {
683
+ if (error.code !== "ENOENT")
684
+ throw error;
685
+ }
686
+ for (const item of state.items ?? [])
687
+ if (item.status === "running" && (!item.leaseexpiresat || item.leaseexpiresat <= clock())) {
688
+ item.status = "queued";
689
+ item.leaseexpiresat = undefined;
690
+ }
691
+ state.version = 2;
692
+ state.items ??= [];
693
+ loaded = true;
694
+ await persist();
695
+ return state;
696
+ }
697
+ /** Appends a queued job and persists the new state. */
698
+ async function enqueue(payload, metadata = {}) { await restore(); const idempotencykey = metadata.idempotencykey; const id = metadata.id ?? idempotencykey ?? `persistentjob${clock()}${state.items.length}`; const existing = state.items.find((item) => item.id === id || (idempotencykey && item.idempotencykey === idempotencykey)); if (existing)
699
+ return { ...existing }; const item = { id, idempotencykey, payload, status: "queued", attempts: 0, createdat: clock(), updatedat: clock(), metadata }; state.items.push(item); await persist(); return { ...item }; }
700
+ /** Claims the first queued job with stable ordering. */
701
+ async function claim(claimoptions = {}) { await restore(); reclaimexpired(); const item = state.items.find((entry) => entry.status === "queued"); if (!item)
702
+ return null; const leasems = claimoptions.leasems ?? defaultleasems; item.status = "running"; item.attempts += 1; item.claimedat = clock(); item.leaseexpiresat = leasems > 0 ? clock() + leasems : undefined; item.updatedat = clock(); await persist(); return { ...item }; }
703
+ /** Renews a running item lease without changing its attempt count. */
704
+ async function renew(id, leasems = defaultleasems) { await restore(); reclaimexpired(); const item = find(id); if (item.status !== "running")
705
+ throw new Error(`persistent queue item is not running: ${id}`); if (!(leasems > 0))
706
+ throw new TypeError("lease duration must be positive"); item.leaseexpiresat = clock() + leasems; item.updatedat = clock(); await persist(); return { ...item }; }
707
+ /** Commits a successful result. */
708
+ async function complete(id, result) { await restore(); const item = find(id); item.status = "completed"; item.result = result; item.leaseexpiresat = undefined; item.updatedat = clock(); await persist(); return { ...item }; }
709
+ /** Records an error and either retries or closes the item as failed. */
710
+ async function fail(id, error) { await restore(); const item = find(id); item.error = { message: error?.message ?? String(error), code: error?.code }; item.status = item.attempts < maxattempts && error?.retryable !== false ? "queued" : "failed"; item.leaseexpiresat = undefined; item.updatedat = clock(); await persist(); return { ...item }; }
711
+ /** Lists queue items for status and diagnostics. */
712
+ async function list(filter) { await restore(); if (reclaimexpired())
713
+ await persist(); return state.items.filter((item) => !filter || item.status === filter).map((item) => ({ ...item })); }
714
+ return { restore, enqueue, claim, renew, complete, fail, list };
715
+ function find(id) { const item = state.items.find((entry) => entry.id === id); if (!item)
716
+ throw new Error(`persistent queue item not found: ${id}`); return item; }
717
+ function reclaimexpired() { let changed = false; for (const item of state.items)
718
+ if (item.status === "running" && item.leaseexpiresat && item.leaseexpiresat <= clock()) {
719
+ item.status = "queued";
720
+ item.leaseexpiresat = undefined;
721
+ item.updatedat = clock();
722
+ changed = true;
723
+ } return changed; }
724
+ async function persist() { await writeFile(options.path, `${JSON.stringify(state, null, 2)}\n`, "utf8"); }
725
+ }
726
+ /* ════════════════════════════════════════════════════════════════════ */
727
+ /* Section 18: runtime/sessionfile.ts — file session persistence writes one validated JSON document per session. */
728
+ /* ════════════════════════════════════════════════════════════════════ */
729
+ /**
730
+ * file session persistence writes one validated JSON document per session.
731
+ */
732
+ export function filesessions(root) {
733
+ return {
734
+ async save(session) { const valid = validatesession(session); const path = join(root, `${valid.id}.json`); await mkdir(dirname(path), { recursive: true }); await writeFile(path, JSON.stringify(valid, null, 2)); return valid; },
735
+ async load(id) { const value = JSON.parse(await readFile(join(root, `${id}.json`), "utf8")); return validatesession(value); }
736
+ };
737
+ }
738
+ /* ════════════════════════════════════════════════════════════════════ */
739
+ /* Section 19: runtime/sessionstore.ts — jsonl session storage keeps append only traces independent from browser adapters. */
740
+ /* ════════════════════════════════════════════════════════════════════ */
741
+ /**
742
+ * jsonl session storage keeps append only traces independent from browser adapters.
743
+ */
744
+ export function sessionstore(root) {
745
+ return {
746
+ async append(session) { const valid = validatesession(session); await mkdir(root, { recursive: true }); await appendFile(join(root, `${valid.id}.jsonl`), `${JSON.stringify(valid)}\n`); return valid; },
747
+ async read(id) { const text = await readFile(join(root, `${id}.jsonl`), "utf8"); return text.trim().split("\n").filter(Boolean).map((line) => validatesession(JSON.parse(line))); }
748
+ };
749
+ }
750
+ /* ════════════════════════════════════════════════════════════════════ */
751
+ /* Section 20: runtime/compatibility.ts — compatibility contracts describe core capabilities without importing a runtime-specific adapter. */
752
+ /* ════════════════════════════════════════════════════════════════════ */
753
+ /**
754
+ * compatibility contracts describe core capabilities without importing a runtime-specific adapter.
755
+ */
756
+ export const corecapabilities = Object.freeze(["esm", "fetch", "streams", "textencoding", "webcrypto"]);
757
+ /** Reports the runtime capabilities expected by the transport-neutral root entry. */
758
+ export function runtimecontract(scope = globalThis) { const features = runtimefeatures(scope); return { runtime: runtimename(scope), core: true, capabilities: { esm: true, fetch: features.fetch, streams: features.streams, textencoding: typeof scope.TextEncoder === "function" && typeof scope.TextDecoder === "function", webcrypto: Boolean(scope.crypto?.subtle) }, nodeonly: { filesystem: features.filesystem, server: Boolean(scope.process?.versions?.node) } }; }
759
+ /** Returns a structured unsupported-mode error for a missing runtime capability. */
760
+ export function unsupportedruntime(feature, contract = runtimecontract()) { const error = new Error(`runtime capability is unavailable: ${feature}`); error.code = "UNSUPPORTED_RUNTIME"; error.feature = String(feature); error.runtime = contract.runtime; return error; }
761
+ //# sourceMappingURL=execution.js.map