@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,811 @@
1
+ /**
2
+ * distribution.ts — binary, package, delivery and release-evidence contracts.
3
+ *
4
+ * This file is the v2.0.0 grand-merge consolidation of the former nested
5
+ * folders of the repository (binary, packager, release) 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 { sha256 } from "./foundation.js";
13
+ import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
14
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
15
+ import { createHash } from "node:crypto";
16
+ import { fileURLToPath } from "node:url";
17
+ /* ════════════════════════════════════════════════════════════════════ */
18
+ /* Section 1: binary/build.ts — binary builder plans portable artifacts without choosing a compiler vendor. */
19
+ /* ════════════════════════════════════════════════════════════════════ */
20
+ /**
21
+ * binary builder plans portable artifacts without choosing a compiler vendor.
22
+ */
23
+ export const binarytargets = Object.freeze(["node", "deno", "bun", "wasm", "singlefile", "sea", "appimage", "deb", "rpm", "snap", "flatpak", "dmg", "pkg", "exe", "msi", "msix", "apk", "aab", "ipa"]);
24
+ /** Creates a deterministic binary build plan from explicit options. */
25
+ export function portablebinaryplan(options = {}) {
26
+ const target = options.target ?? "node";
27
+ if (!binarytargets.includes(target))
28
+ throw new TypeError(`unsupported binary target: ${target}`);
29
+ return { name: options.name ?? "saddle", target, entry: options.entry ?? "dist/cli/main.js", output: options.output ?? "dist/artifacts", command: options.command ?? `build ${target}`, minify: options.minify ?? false, embedruntime: options.embedruntime ?? false, externaldependencies: options.externaldependencies ?? [], metadata: options.metadata ?? {} };
30
+ }
31
+ /** Returns an artifact manifest without writing files or running a compiler. */
32
+ export function binarymanifest(plan) { return { name: plan.name, target: plan.target, entry: plan.entry, output: plan.output, files: [plan.entry], reproducible: true, metadata: plan.metadata }; }
33
+ /** Resolves an injected builder and preserves the plan as the execution boundary. */
34
+ export async function buildbinary(plan, builder) { if (typeof builder !== "function")
35
+ throw new TypeError("binary builder is required"); return builder(binarymanifest(plan)); }
36
+ /* ════════════════════════════════════════════════════════════════════ */
37
+ /* Section 2: binary/archive.ts — archive inspection validates declared entry metadata before any caller-owned extraction adapter runs. */
38
+ /* ════════════════════════════════════════════════════════════════════ */
39
+ /**
40
+ * archive inspection validates declared entry metadata before any caller-owned extraction adapter runs.
41
+ */
42
+ /** Validates portable archive limits without opening an archive. */
43
+ export function archivelimits(input = {}) {
44
+ return Object.freeze({ maxentries: positive(input.maxentries ?? 1, "archive maxentries"), maxdepth: positive(input.maxdepth ?? 1, "archive maxdepth"), maxoutputbytes: positive(input.maxoutputbytes ?? 1, "archive maxoutputbytes"), maxratio: positive(input.maxratio ?? 1, "archive maxratio") });
45
+ }
46
+ /** Inspects declared archive entries and returns explicit acceptance or denial evidence. */
47
+ export function archiveinspection(input = {}) {
48
+ const limits = archivelimits(input.limits);
49
+ if (!Array.isArray(input.entries))
50
+ throw new TypeError("archive entries must be an array");
51
+ const entries = input.entries.map((entry) => normalizeentry(entry));
52
+ const reasons = [];
53
+ if (entries.length > limits.maxentries)
54
+ reasons.push("entrycount");
55
+ let outputbytes = 0;
56
+ for (const entry of entries) {
57
+ outputbytes += entry.sizebytes;
58
+ if (entry.depth > limits.maxdepth)
59
+ reasons.push(`depth:${entry.path}`);
60
+ if (entry.path.split("/").includes("..") || entry.path.startsWith("/"))
61
+ reasons.push(`path:${entry.path}`);
62
+ if (entry.sizebytes / Math.max(1, entry.compressedbytes) > limits.maxratio)
63
+ reasons.push(`ratio:${entry.path}`);
64
+ }
65
+ if (outputbytes > limits.maxoutputbytes)
66
+ reasons.push("outputbytes");
67
+ return Object.freeze({ version: 1, state: reasons.length === 0 ? "accepted" : "denied", limits, entries: Object.freeze(entries), outputbytes, reasons: Object.freeze([...new Set(reasons)]) });
68
+ }
69
+ /** Requires a caller-owned extraction adapter and denies an unsafe inspection result. */
70
+ export async function extractarchive(inspection, adapter) {
71
+ if (inspection?.state !== "accepted")
72
+ throw archiveerror("ARCHIVE_POLICY_DENIED", "archive inspection must be accepted before extraction");
73
+ if (typeof adapter?.extract !== "function")
74
+ throw archiveerror("ARCHIVE_EXTRACTION_UNAVAILABLE", "archive extraction adapter is required");
75
+ return adapter.extract(inspection);
76
+ }
77
+ function normalizeentry(input) { const path = String(input?.path ?? ""); if (!path)
78
+ throw new TypeError("archive entry path is required"); return Object.freeze({ path, sizebytes: nonnegative(input.sizebytes, "archive entry sizebytes"), compressedbytes: nonnegative(input.compressedbytes, "archive entry compressedbytes"), depth: path.split("/").filter(Boolean).length }); }
79
+ function nonnegative(value, name) { const output = Number(value); if (!Number.isSafeInteger(output) || output < 0)
80
+ throw new TypeError(`${name} must be a non-negative safe integer`); return output; }
81
+ function positive(value, name) { const output = nonnegative(value, name); if (output < 1)
82
+ throw new TypeError(`${name} must be positive`); return output; }
83
+ function archiveerror(code, message) { const error = new Error(message); error.code = code; return error; }
84
+ /* ════════════════════════════════════════════════════════════════════ */
85
+ /* Section 3: binary/transform.ts — binary transformation contracts classify inputs and delegate execution to isolated caller-owned adapters. */
86
+ /* ════════════════════════════════════════════════════════════════════ */
87
+ /**
88
+ * binary transformation contracts classify inputs and delegate execution to isolated caller-owned adapters.
89
+ */
90
+ /** Classifies a small binary prefix without trusting a filename extension. */
91
+ export function magicbytes(input) {
92
+ const bytes = tobytes(input);
93
+ const matches = (prefix) => prefix.every((value, index) => bytes[index] === value);
94
+ if (matches([0x00, 0x61, 0x73, 0x6d]))
95
+ return Object.freeze({ format: "wasm", executable: true });
96
+ if (matches([0x7f, 0x45, 0x4c, 0x46]))
97
+ return Object.freeze({ format: "elf", executable: true });
98
+ if (matches([0x4d, 0x5a]))
99
+ return Object.freeze({ format: "pe", executable: true });
100
+ if (matches([0x50, 0x4b, 0x03, 0x04]))
101
+ return Object.freeze({ format: "zip", executable: false });
102
+ return Object.freeze({ format: "unknown", executable: false });
103
+ }
104
+ /** Validates a bounded WASM transformation plan without compiling or instantiating a module. */
105
+ export function wasmplan(input = {}) {
106
+ const source = normalizedigest(input.source, "wasm source");
107
+ const imports = normalizeimports(input.imports);
108
+ const budget = resourcebudget(input.budget);
109
+ return Object.freeze({ version: 1, source, imports, budget, target: String(input.target ?? "wasm"), policyversion: positiveint(input.policyversion ?? 1, "wasm policyversion"), state: "caller-executes" });
110
+ }
111
+ /** Builds a reproducible transformation cache key from verified inputs and normalized policy. */
112
+ export function transformationkey(input = {}) {
113
+ const plan = wasmplan(input.plan ?? input);
114
+ const compiler = normalizedigest(input.compiler, "transformation compiler");
115
+ return sha256(JSON.stringify({ source: plan.source, imports: plan.imports, budget: plan.budget, target: plan.target, policyversion: plan.policyversion, compiler }));
116
+ }
117
+ /** Validates an immutable cache manifest that can be reused only by matching policy and toolchain identities. */
118
+ export function transformationcache(input = {}) {
119
+ const source = normalizedigest(input.source, "transformation cache source");
120
+ const compiler = normalizedigest(input.compiler, "transformation cache compiler");
121
+ const key = normalizedigest(input.key, "transformation cache key");
122
+ const outputs = Array.isArray(input.outputs) ? input.outputs.map((output) => Object.freeze({ name: nonempty(output?.name, "transformation cache output name"), sha256: normalizedigest(output?.sha256, "transformation cache output sha256"), sizebytes: positiveint(output?.sizebytes, "transformation cache output sizebytes") })) : [];
123
+ if (outputs.length === 0)
124
+ throw new TypeError("transformation cache outputs are required");
125
+ return Object.freeze({ version: 1, key, source, compiler, policyversion: positiveint(input.policyversion, "transformation cache policyversion"), outputs: Object.freeze(outputs), verified: input.verified === true });
126
+ }
127
+ /** Explains whether a verified cache manifest can serve a requested transformation. */
128
+ export function cachedecision(manifest, request) {
129
+ const cached = transformationcache(manifest);
130
+ const requested = transformationcache(request);
131
+ const reasons = [];
132
+ if (!cached.verified)
133
+ reasons.push("unverified");
134
+ if (cached.key !== requested.key)
135
+ reasons.push("key");
136
+ if (cached.source !== requested.source)
137
+ reasons.push("source");
138
+ if (cached.compiler !== requested.compiler)
139
+ reasons.push("compiler");
140
+ if (cached.policyversion !== requested.policyversion)
141
+ reasons.push("policyversion");
142
+ return Object.freeze({ reusable: reasons.length === 0, reasons: Object.freeze(reasons), manifest: cached });
143
+ }
144
+ /** Rejects cache reuse for outputs that are sensitive, environment-bound, partial, or unverified. */
145
+ export function cacheeligibility(input = {}) {
146
+ const reasons = [];
147
+ if (input.verified !== true)
148
+ reasons.push("unverified");
149
+ if (input.containssecrets === true)
150
+ reasons.push("secrets");
151
+ if (input.containsprivate === true)
152
+ reasons.push("private-data");
153
+ if (input.environmentbound === true)
154
+ reasons.push("environment-bound");
155
+ if (input.partial === true)
156
+ reasons.push("partial");
157
+ return Object.freeze({ eligible: reasons.length === 0, reasons: Object.freeze(reasons) });
158
+ }
159
+ /** Runs a transformation only through an injected isolated adapter and verifies declared output digests. */
160
+ export async function executeisolated(plan, adapter) {
161
+ if (typeof adapter?.execute !== "function")
162
+ throw transformerror("ISOLATED_EXECUTION_UNAVAILABLE", "isolated transformation adapter is required");
163
+ const result = await adapter.execute(wasmplan(plan));
164
+ const outputs = Array.isArray(result?.outputs) ? result.outputs : [];
165
+ if (outputs.length === 0)
166
+ throw transformerror("ISOLATED_EXECUTION_OUTPUT_INVALID", "isolated transformation returned no outputs");
167
+ const verified = outputs.map((output) => {
168
+ const data = tobytes(output?.data);
169
+ const expected = normalizedigest(output?.sha256, "isolated transformation output sha256");
170
+ const actual = sha256(data);
171
+ if (actual !== expected)
172
+ throw transformerror("ISOLATED_EXECUTION_DIGEST_MISMATCH", "isolated transformation output digest did not match");
173
+ return Object.freeze({ name: nonempty(output?.name, "isolated transformation output name"), data, sha256: actual, sizebytes: data.byteLength });
174
+ });
175
+ return Object.freeze({ version: 1, state: "completed", outputs: Object.freeze(verified) });
176
+ }
177
+ function resourcebudget(input = {}) { return Object.freeze({ maxbytes: positiveint(input.maxbytes ?? 1, "wasm budget maxbytes"), maxoutputbytes: positiveint(input.maxoutputbytes ?? input.maxbytes ?? 1, "wasm budget maxoutputbytes"), maxmilliseconds: positiveint(input.maxmilliseconds ?? 1, "wasm budget maxmilliseconds"), network: input.network === true }); }
178
+ function normalizeimports(input) { if (!Array.isArray(input ?? []))
179
+ throw new TypeError("wasm imports must be an array"); return Object.freeze([...new Set(input.map((value) => nonempty(value, "wasm import")))].sort()); }
180
+ function normalizedigest(value, name) { const digest = String(value ?? "").toLowerCase(); if (!/^[a-f0-9]{64}$/.test(digest))
181
+ throw new TypeError(`${name} sha256 is invalid`); return digest; }
182
+ function nonempty(value, name) { const output = String(value ?? ""); if (!output)
183
+ throw new TypeError(`${name} is required`); return output; }
184
+ function positiveint(value, name) { const numeric = Number(value); if (!Number.isSafeInteger(numeric) || numeric < 1)
185
+ throw new TypeError(`${name} must be a positive safe integer`); return numeric; }
186
+ function tobytes(value) { if (value instanceof Uint8Array)
187
+ return new Uint8Array(value); if (value instanceof ArrayBuffer)
188
+ return new Uint8Array(value); throw new TypeError("binary input must be Uint8Array or ArrayBuffer"); }
189
+ function transformerror(code, message) { const error = new Error(message); error.code = code; return error; }
190
+ /* ════════════════════════════════════════════════════════════════════ */
191
+ /* Section 4: packager/manifest.ts — packager manifest context describes publication and platform artifacts without */
192
+ /* ════════════════════════════════════════════════════════════════════ */
193
+ /**
194
+ * packager manifest context describes publication and platform artifacts without
195
+ * executing a platform command or selecting a vendor toolchain.
196
+ */
197
+ export const artifactformats = Object.freeze({
198
+ desktop: Object.freeze(["appimage", "deb", "rpm", "snap", "flatpak", "dmg", "pkg", "exe", "msi", "msix"]),
199
+ mobile: Object.freeze(["apk", "aab", "ipa"]),
200
+ browser: Object.freeze(["crx", "xpi", "safariextz"]),
201
+ web: Object.freeze(["html", "pwa", "ssg", "ssr", "wasm"]),
202
+ package: Object.freeze(["npm", "github", "maven", "nuget", "rubygems", "oci", "vsix", "oxt"])
203
+ });
204
+ const publicsurfaces = Object.freeze({ desktopapp: "browser", mobileapp: "mobile" });
205
+ /** Creates the public dotted artifact stem for a target and version. */
206
+ export function artifactname(target, version, format) {
207
+ const surface = publicsurfaces[target] ?? target;
208
+ const normalized = `${surface}.${version}.${format}`.toLowerCase();
209
+ if (!/^[a-z0-9]+(?:\.[a-z0-9]+)+$/.test(normalized))
210
+ throw new TypeError("artifact name contains unsupported characters");
211
+ return normalized;
212
+ }
213
+ /** Creates the supported cross-platform release matrix for a version. */
214
+ export function releaseartifactmatrix(version, options = {}) {
215
+ const normalizedversion = normalizeversion(version);
216
+ const signing = String(options.signing ?? "caller-owned");
217
+ const entries = [
218
+ entry("desktop", "linux", "x64", ["deb", "rpm", "appimage"], normalizedversion, signing),
219
+ entry("desktop", "linux", "arm64", ["deb", "rpm", "appimage"], normalizedversion, signing),
220
+ entry("desktop", "windows", "x86", ["exe", "msi"], normalizedversion, signing),
221
+ entry("desktop", "windows", "x64", ["exe", "msi"], normalizedversion, signing),
222
+ entry("desktop", "windows", "arm64", ["exe", "msi"], normalizedversion, signing),
223
+ entry("desktop", "macos", "x64", ["dmg", "app.zip"], normalizedversion, signing),
224
+ entry("desktop", "macos", "arm64", ["dmg", "app.zip"], normalizedversion, signing),
225
+ entry("android", "android", "caller", ["apk", "aab"], normalizedversion, signing),
226
+ entry("ios", "ios", "caller", ["ipa", "app.zip"], normalizedversion, signing),
227
+ entry("container", "oci", "caller", ["tar.gz"], normalizedversion, signing),
228
+ entry("extension", "browser", "caller", ["zip"], normalizedversion, signing),
229
+ ];
230
+ return { version: normalizedversion, signing, entries };
231
+ }
232
+ /** Creates a distribution manifest for caller-owned build and publication steps. */
233
+ export function distributionmanifest(options = {}) {
234
+ if (!options.name || !options.version || !options.entry)
235
+ throw new TypeError("distribution manifest requires name version and entry");
236
+ return {
237
+ name: options.name,
238
+ version: options.version,
239
+ entry: options.entry,
240
+ modes: options.modes ?? ["library", "application", "computer", "desktop", "mobile", "browser", "cli", "binary", "web", "extension"],
241
+ targets: options.targets ?? ["node", "container", "linux", "windows", "macos", "android", "ios"],
242
+ files: options.files ?? [],
243
+ metadata: options.metadata ?? {}
244
+ };
245
+ }
246
+ /** Creates a caller-owned artifact plan without invoking a platform toolchain. */
247
+ export function targetplan(manifest, target, options = {}) {
248
+ if (!manifest?.name || !manifest?.version)
249
+ throw new TypeError("target plan requires a distribution manifest");
250
+ if (!target)
251
+ throw new TypeError("target plan requires a target");
252
+ const format = options.format ?? target;
253
+ return { name: manifest.name, version: manifest.version, target, format, entry: manifest.entry, output: options.output ?? `build/artifacts/${artifactname(target, manifest.version, format)}`, command: options.command ?? `caller-build ${target} ${format}`, generated: true, credentials: "caller-managed", metadata: options.metadata ?? {} };
254
+ }
255
+ /** Creates a declarative Node SEA or caller-selected binary build plan. */
256
+ export function binaryplan(manifest, options = {}) {
257
+ return { tool: options.tool ?? "node", command: options.command ?? `node --experimental-sea-config ${options.config ?? "sea.config.json"}`, entry: manifest.entry, targets: options.targets ?? ["linux", "windows", "macos", "android", "ios"] };
258
+ }
259
+ /** Creates an OCI container plan with caller-controlled base, workdir and command. */
260
+ export function containerplan(manifest, options = {}) {
261
+ const base = options.base ?? "node:26.7.0-alpine";
262
+ const workdir = options.workdir ?? "/app";
263
+ const command = options.command ?? ["node", manifest.entry];
264
+ const lines = [`from ${base}`, `workdir ${workdir}`, "copy package.json package-lock.json ./", "run npm ci --omit=dev", "copy dist ./dist", `cmd ${JSON.stringify(command)}`];
265
+ if (options.port)
266
+ lines.splice(3, 0, `expose ${options.port}`);
267
+ return { base, workdir, command, dockerfile: `${lines.join("\n")}\n` };
268
+ }
269
+ function normalizeversion(value) { const normalized = String(value).trim(); if (!/^\d+\.\d+\.\d+$/.test(normalized))
270
+ throw new TypeError(`invalid release version: ${value}`); return normalized; }
271
+ function entry(surface, platform, architecture, formats, version, signing) {
272
+ const files = formats.map((format) => {
273
+ if (surface === "android")
274
+ return `saddle.${format}.${version}.${format}`;
275
+ if (surface === "ios")
276
+ return `saddle.${format}.${version}.${format === "app.zip" ? "app.zip" : format}`;
277
+ if (surface === "container")
278
+ return `saddle.container.${version}.tar.gz`;
279
+ if (surface === "extension")
280
+ return `saddle.extension.${version}.zip`;
281
+ return `saddle.browser.${version}.${architecture}.${format}`;
282
+ });
283
+ const metadata = surface === "desktop" ? `desktop.${platform}.${architecture}` : surface;
284
+ return { surface, platform, architecture, formats, files, signing, checksums: `sha256.${metadata}.${version}`, manifest: `manifest.${metadata}.${version}.json` };
285
+ }
286
+ /* ════════════════════════════════════════════════════════════════════ */
287
+ /* Section 5: packager/publish.ts — publish plans describe registry targets without executing a publish or requiring credentials. */
288
+ /* ════════════════════════════════════════════════════════════════════ */
289
+ /**
290
+ * publish plans describe registry targets without executing a publish or requiring credentials.
291
+ */
292
+ export function publishplan(manifest, options = {}) {
293
+ const version = manifest.version;
294
+ const packageName = manifest.name;
295
+ return {
296
+ package: { registry: options.npm ?? "npm", name: packageName, version, command: "npm publish --access public" },
297
+ github: { repository: options.repository ?? "", packages: true, command: "git push --follow-tags" },
298
+ container: { registry: options.ghcr ?? "ghcr.io", image: options.image ?? packageName, version, command: "docker push" },
299
+ maven: { registry: options.maven ?? "github-packages", name: packageName, version, command: "mvn deploy" },
300
+ nuget: { registry: options.nuget ?? "github-packages", name: packageName, version, command: "dotnet nuget push" },
301
+ rubygems: { registry: options.rubygems ?? "rubygems", name: packageName, version, command: "gem push" },
302
+ cdn: [{ name: "jsdelivr", url: `https://cdn.jsdelivr.net/npm/${packageName}@${version}/index.js` }, { name: "unpkg", url: `https://unpkg.com/${packageName}@${version}/index.js` }, { name: "esm", url: `https://esm.sh/${packageName}@${version}` }]
303
+ };
304
+ }
305
+ export function registrymanifest(manifest, options = {}) { return { name: manifest.name, version: manifest.version, surfaces: ["library", "application", "computer", "desktop", "mobile", "browser", "cli", "binary", "web", "extension", "container", ...(options.surfaces ?? [])], registries: ["npm", "github", "ghcr", "maven", "nuget", "rubygems", "jsdelivr", "unpkg", "esm.sh"] }; }
306
+ /* ════════════════════════════════════════════════════════════════════ */
307
+ /* Section 6: packager/delivery.ts — delivery manifests verify immutable chunks and keep PWA registration caller-owned. */
308
+ /* ════════════════════════════════════════════════════════════════════ */
309
+ /**
310
+ * delivery manifests verify immutable chunks and keep PWA registration caller-owned.
311
+ */
312
+ /** Creates an ordered immutable delivery manifest from verified chunk metadata. */
313
+ export function deliverymanifest(input = {}) {
314
+ const chunks = Array.isArray(input.chunks) ? input.chunks.map(normalizechunk) : [];
315
+ if (chunks.length === 0)
316
+ throw new TypeError("delivery manifest chunks are required");
317
+ const seen = new Set();
318
+ for (const chunk of chunks) {
319
+ if (seen.has(chunk.id))
320
+ throw new TypeError(`delivery manifest chunk id is duplicated: ${chunk.id}`);
321
+ seen.add(chunk.id);
322
+ }
323
+ const ordered = chunks.sort((left, right) => left.index - right.index || left.id.localeCompare(right.id));
324
+ for (let index = 0; index < ordered.length; index += 1)
325
+ if (ordered[index].index !== index)
326
+ throw new TypeError("delivery manifest chunk indexes must be contiguous");
327
+ return Object.freeze({ version: 1, id: deliverynonempty(input.id, "delivery manifest id"), chunks: Object.freeze(ordered), totalbytes: ordered.reduce((total, chunk) => total + chunk.sizebytes, 0), visibility: input.visibility === "private" ? "private" : "public" });
328
+ }
329
+ /** Verifies supplied chunk bytes against a manifest without executing, importing, or caching them. */
330
+ export function verifydelivery(manifest, supplied = []) {
331
+ const expected = deliverymanifest(manifest);
332
+ if (!Array.isArray(supplied))
333
+ throw new TypeError("delivery chunks must be an array");
334
+ const values = new Map(supplied.map((value) => [String(value?.id ?? ""), value]));
335
+ const results = expected.chunks.map((chunk) => {
336
+ const suppliedchunk = values.get(chunk.id);
337
+ if (!suppliedchunk)
338
+ return Object.freeze({ id: chunk.id, state: "missing" });
339
+ const data = deliverytobytes(suppliedchunk.data);
340
+ const digest = sha256(data);
341
+ if (data.byteLength !== chunk.sizebytes || digest !== chunk.sha256)
342
+ return Object.freeze({ id: chunk.id, state: "mismatch", sizebytes: data.byteLength, sha256: digest });
343
+ return Object.freeze({ id: chunk.id, state: "verified", sizebytes: data.byteLength, sha256: digest });
344
+ });
345
+ return Object.freeze({ version: 1, valid: results.every((result) => result.state === "verified"), results: Object.freeze(results) });
346
+ }
347
+ /** Produces a host PWA plan that never registers a service worker or mutates browser state. */
348
+ export function pwaplan(input = {}) {
349
+ const scope = String(input.scope ?? "");
350
+ if (!scope.startsWith("/"))
351
+ throw new TypeError("PWA scope must start with a slash");
352
+ const serviceworker = input.capabilities?.serviceworker === true;
353
+ const offline = input.offline === true;
354
+ return Object.freeze({ version: 1, scope, offline, state: serviceworker ? "caller-registers" : "unsupported", update: input.update === "manual" ? "manual" : "prompt", cache: offline ? "caller-configures" : "disabled" });
355
+ }
356
+ /** Validates a caller-reported CDN capability set without contacting a CDN provider. */
357
+ export function cdncapabilities(input = {}) {
358
+ const visibility = input.visibility === "private" ? "private" : "public";
359
+ return Object.freeze({ version: 1, immutable: input.immutable === true, purge: input.purge === true, range: input.range === true, integrityheaders: input.integrityheaders === true, cors: input.cors === true, visibility, state: "caller-reports" });
360
+ }
361
+ const contenttypes = new Set(["application/javascript", "application/wasm", "application/octet-stream", "application/json", "text/plain"]);
362
+ function normalizechunk(input, index) { const contenttype = String(input?.contenttype ?? "application/octet-stream"); if (!contenttypes.has(contenttype))
363
+ throw new TypeError(`delivery manifest content type is unsupported: ${contenttype}`); return Object.freeze({ id: deliverynonempty(input?.id, "delivery manifest chunk id"), index: safeindex(input?.index ?? index), sha256: digest(input?.sha256, "delivery manifest chunk sha256"), sizebytes: deliverypositive(input?.sizebytes, "delivery manifest chunk sizebytes"), contenttype }); }
364
+ function deliverynonempty(value, name) { const output = String(value ?? ""); if (!output)
365
+ throw new TypeError(`${name} is required`); return output; }
366
+ function digest(value, name) { const output = String(value ?? "").toLowerCase(); if (!/^[a-f0-9]{64}$/.test(output))
367
+ throw new TypeError(`${name} is invalid`); return output; }
368
+ function safeindex(value) { const output = Number(value); if (!Number.isSafeInteger(output) || output < 0)
369
+ throw new TypeError("delivery manifest chunk index is invalid"); return output; }
370
+ function deliverypositive(value, name) { const output = Number(value); if (!Number.isSafeInteger(output) || output < 1)
371
+ throw new TypeError(`${name} must be a deliverypositive safe integer`); return output; }
372
+ function deliverytobytes(value) { if (value instanceof Uint8Array)
373
+ return value; if (value instanceof ArrayBuffer)
374
+ return new Uint8Array(value); throw new TypeError("delivery chunk data must be Uint8Array or ArrayBuffer"); }
375
+ /* ════════════════════════════════════════════════════════════════════ */
376
+ /* Section 7: packager/targetcli.ts — target manifest CLI writes declarative target plans for CI artifact jobs. */
377
+ /* ════════════════════════════════════════════════════════════════════ */
378
+ /**
379
+ * target manifest CLI writes declarative target plans for CI artifact jobs.
380
+ * It never invokes a desktop, mobile, store or signing toolchain.
381
+ */
382
+ /** Reads the distribution manifest and writes one target plan. */
383
+ export async function writeTargetPlan(target, format = target, output = "build/targets") {
384
+ const packagejson = JSON.parse(await readFile(resolve("package.json"), "utf8"));
385
+ const manifest = { name: packagejson.name, version: packagejson.version, entry: "dist/index.js" };
386
+ const plan = targetplan(manifest, target, { format });
387
+ await mkdir(resolve(output), { recursive: true });
388
+ const filename = resolve(output, `manifest.${artifactname(target, manifest.version, format)}.json`);
389
+ await writeFile(filename, `${JSON.stringify(plan, null, 2)}\n`);
390
+ return filename;
391
+ }
392
+ if (process.argv[1]?.endsWith("targetcli.js") || process.argv[1]?.endsWith("targetcli.ts")) {
393
+ const [, , target = "library", format = target, output = "build/targets"] = process.argv;
394
+ writeTargetPlan(target, format, output).then((filename) => console.log(`target plan: ${filename}`)).catch((error) => { console.error(error.message); process.exitCode = 1; });
395
+ }
396
+ /* ════════════════════════════════════════════════════════════════════ */
397
+ /* Section 8: release/assets.ts — release assets create deterministic checksums, SBOM data and provenance statements. */
398
+ /* ════════════════════════════════════════════════════════════════════ */
399
+ /**
400
+ * release assets create deterministic checksums, SBOM data and provenance statements.
401
+ * The adapter reads caller-selected artifacts and never publishes or handles credentials.
402
+ */
403
+ const modulepath = dirname(fileURLToPath(import.meta.url));
404
+ const moduleparts = modulepath.split(sep);
405
+ const rootpath = moduleparts.at(-1) === "release" && moduleparts.at(-2) === "dist" ? resolve(modulepath, "..", "..") : resolve(modulepath, "..");
406
+ /** Builds deterministic release metadata files for caller-selected artifacts. */
407
+ export async function createassets(options = {}) {
408
+ const packagefile = resolve(options.packagefile ?? join(rootpath, "package.json"));
409
+ const lockfile = resolve(options.lockfile ?? join(rootpath, "package-lock.json"));
410
+ const output = resolve(options.output ?? join(rootpath, "build", "release"));
411
+ const artifactroot = resolve(options.artifactroot ?? rootpath);
412
+ const packagejson = JSON.parse(await readFile(packagefile, "utf8"));
413
+ const lockjson = JSON.parse(await readFile(lockfile, "utf8"));
414
+ const artifacts = [...new Set((options.artifacts ?? []).map((artifact) => resolve(String(artifact))))].sort();
415
+ const version = String(options.version ?? packagejson.version);
416
+ const surface = normalizeSurface(options.surface ?? "library");
417
+ const subjects = await Promise.all(artifacts.map(async (artifact) => {
418
+ const name = relative(artifactroot, artifact).replaceAll("\\", "/");
419
+ validateArtifactName(basename(name));
420
+ const details = await stat(artifact);
421
+ return { name, digest: await assetsha256(artifact), bytes: details.size, updatedat: Math.trunc(details.mtimeMs) };
422
+ }));
423
+ await mkdir(output, { recursive: true });
424
+ const checksums = `${subjects.map((subject) => `${subject.digest} ${subject.name}`).join("\n")}${subjects.length ? "\n" : ""}`;
425
+ const sbom = createsbom(packagejson, lockjson);
426
+ const provenance = createprovenance(packagejson, subjects, { ...options, version });
427
+ const retention = options.retention ? retentionplan(subjects, options.retention) : undefined;
428
+ const manifest = { name: String(packagejson.name), version, surface, files: subjects.map((subject) => basename(subject.name)), signing: String(options.signing ?? "caller-owned"), ...(retention ? { retention: retention.policy, retentionplan: retention.decisions, retentionevaluatedat: retention.evaluatedat } : {}) };
429
+ const files = {
430
+ checksums: join(output, `sha256.${surface}.${version}`),
431
+ manifest: join(output, `manifest.${surface}.${version}.json`),
432
+ sbom: join(output, `sbom.${surface}.${version}.cdx.json`),
433
+ provenance: join(output, `provenance.${surface}.${version}.intoto.jsonl`)
434
+ };
435
+ await writeFile(files.checksums, checksums);
436
+ await writeFile(files.manifest, `${JSON.stringify(manifest, null, 2)}\n`);
437
+ await writeFile(files.sbom, `${JSON.stringify(sbom, null, 2)}\n`);
438
+ await writeFile(files.provenance, `${JSON.stringify(provenance)}\n`);
439
+ return { output, files, subjects, sbom, provenance, retention };
440
+ }
441
+ /** Computes deterministic keep or prune decisions without deleting caller files. */
442
+ export function retentionplan(artifacts = [], options = {}) {
443
+ const policy = normalizeretention(options);
444
+ const evaluatedat = Number(options.evaluatedat ?? options.now ?? 0);
445
+ if (!Number.isSafeInteger(evaluatedat) || evaluatedat < 0)
446
+ throw new RangeError("retention evaluatedat must be a non-negative safe integer");
447
+ const entries = [...new Map(artifacts.map((artifact) => {
448
+ const name = String(artifact.name ?? "");
449
+ if (!name)
450
+ throw new TypeError("retention artifact requires name");
451
+ return [name, { name, bytes: normalizebytes(artifact.bytes), updatedat: normalizeupdatedat(artifact.updatedat) }];
452
+ })).values()].sort(comparefreshness);
453
+ const decisions = entries.map((entry) => ({ ...entry, action: "keep", reasons: [] }));
454
+ for (const decision of decisions) {
455
+ if (policy.maxagedays !== undefined && evaluatedat > 0 && decision.updatedat + policy.maxagedays * 86400000 < evaluatedat) {
456
+ decision.action = "prune";
457
+ decision.reasons.push("max-age");
458
+ }
459
+ }
460
+ if (policy.maxcount !== undefined)
461
+ decisions.slice(policy.maxcount).forEach((decision) => { if (decision.action === "keep") {
462
+ decision.action = "prune";
463
+ decision.reasons.push("max-count");
464
+ } });
465
+ if (policy.maxbytes !== undefined) {
466
+ let total = decisions.filter((decision) => decision.action === "keep").reduce((sum, decision) => sum + decision.bytes, 0);
467
+ for (const decision of [...decisions].reverse()) {
468
+ if (total <= policy.maxbytes || decision.action !== "keep")
469
+ continue;
470
+ decision.action = "prune";
471
+ decision.reasons.push("max-bytes");
472
+ total -= decision.bytes;
473
+ }
474
+ }
475
+ return { policy, evaluatedat, decisions: decisions.sort((left, right) => left.name.localeCompare(right.name)) };
476
+ }
477
+ /** Creates a compact CycloneDX component list from the root lockfile dependencies. */
478
+ export function createsbom(packagejson, lockjson = {}) {
479
+ const root = lockjson.packages?.[""] ?? {};
480
+ const dependencies = { ...(root.dependencies ?? {}), ...(root.devDependencies ?? {}) };
481
+ const components = Object.keys(dependencies).map((name) => {
482
+ const entry = lockjson.packages?.[`node_modules/${name}`] ?? {};
483
+ const version = String(entry.version ?? dependencies[name]).replace(/^[^0-9]*/, "");
484
+ return { "bom-ref": `pkg:npm/${name}@${version}`, name, version, purl: `pkg:npm/${name}@${version}`, scope: root.devDependencies?.[name] ? "optional" : "required", type: "library" };
485
+ }).sort((left, right) => left.name.localeCompare(right.name));
486
+ return { bomFormat: "CycloneDX", specVersion: "1.5", serialNumber: `urn:uuid:${stableuuid(`${packagejson.name}@${packagejson.version}`)}`, version: 1, metadata: { component: { type: "application", name: String(packagejson.name), version: String(packagejson.version) } }, components };
487
+ }
488
+ /** Creates an in-toto statement whose subjects are the caller-selected release artifacts. */
489
+ export function createprovenance(packagejson, subjects = [], options = {}) {
490
+ const normalized = subjects.map((subject) => ({ name: String(subject.name), digest: { sha256: String(subject.digest) } })).sort((left, right) => left.name.localeCompare(right.name));
491
+ return { _type: "https://in-toto.io/Statement/v1", subject: normalized, predicateType: "https://slsa.dev/provenance/v1", predicate: { buildDefinition: { buildType: String(options.buildtype ?? "caller-defined"), externalParameters: { package: String(packagejson.name), version: String(options.version ?? packagejson.version) }, internalParameters: {} }, runDetails: { builder: { id: String(options.builder ?? "caller-defined") }, metadata: { invocationId: stableuuid(`${packagejson.name}@${options.version ?? packagejson.version}:${normalized.map((subject) => subject.name).join(",")}`) } } } };
492
+ }
493
+ async function assetsha256(path) { const hash = createHash("sha256"); hash.update(await readFile(path)); return hash.digest("hex"); }
494
+ function stableuuid(value) { const hex = createHash("sha256").update(String(value)).digest("hex").slice(0, 32); return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-4${hex.slice(13, 16)}-${(8 + (Number.parseInt(hex.slice(16, 17), 16) % 4).toString(16))}${hex.slice(17, 20)}-${hex.slice(20)}`; }
495
+ /** Normalizes the public release surface used in metadata filenames. */
496
+ function normalizeSurface(value) { const normalized = String(value).trim().toLowerCase(); if (!/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/.test(normalized))
497
+ throw new TypeError(`invalid release surface: ${value}`); return normalized; }
498
+ /** Rejects helper binaries and ambiguous public filenames before metadata generation. */
499
+ function validateArtifactName(value) { if (value.includes("_") || /build[-_]script[-_]build|saddle[-_]desktop/i.test(value))
500
+ throw new TypeError(`forbidden release artifact filename: ${value}`); }
501
+ function parsearguments(argumentslist) {
502
+ const options = { artifacts: [] };
503
+ for (let index = 0; index < argumentslist.length; index += 1) {
504
+ const argument = argumentslist[index];
505
+ if (argument === "--output")
506
+ options.output = argumentslist[++index];
507
+ else if (argument === "--version")
508
+ options.version = argumentslist[++index];
509
+ else if (argument === "--surface")
510
+ options.surface = argumentslist[++index];
511
+ else if (argument === "--signing")
512
+ options.signing = argumentslist[++index];
513
+ else if (argument === "--artifact")
514
+ options.artifacts.push(argumentslist[++index]);
515
+ else if (argument === "--build-type")
516
+ options.buildtype = argumentslist[++index];
517
+ else if (argument === "--builder")
518
+ options.builder = argumentslist[++index];
519
+ else if (argument === "--max-age-days")
520
+ (options.retention ??= {}).maxagedays = Number(argumentslist[++index]);
521
+ else if (argument === "--max-count")
522
+ (options.retention ??= {}).maxcount = Number(argumentslist[++index]);
523
+ else if (argument === "--max-bytes")
524
+ (options.retention ??= {}).maxbytes = Number(argumentslist[++index]);
525
+ else if (argument === "--evaluated-at")
526
+ (options.retention ??= {}).evaluatedat = Number(argumentslist[++index]);
527
+ else
528
+ throw new TypeError(`unsupported release asset argument: ${argument}`);
529
+ }
530
+ return options;
531
+ }
532
+ function normalizeretention(options) {
533
+ const result = {};
534
+ if (options.maxagedays !== undefined)
535
+ result.maxagedays = normalizepolicyinteger(options.maxagedays, "maxagedays");
536
+ if (options.maxcount !== undefined)
537
+ result.maxcount = normalizepolicyinteger(options.maxcount, "maxcount");
538
+ if (options.maxbytes !== undefined)
539
+ result.maxbytes = normalizepolicyinteger(options.maxbytes, "maxbytes");
540
+ return result;
541
+ }
542
+ function normalizepolicyinteger(value, name) { const normalized = Number(value); if (!Number.isSafeInteger(normalized) || normalized <= 0)
543
+ throw new RangeError(`${name} must be a positive safe integer`); return normalized; }
544
+ function normalizebytes(value) { const normalized = Number(value ?? 0); if (!Number.isSafeInteger(normalized) || normalized < 0)
545
+ throw new RangeError("retention artifact bytes must be a non-negative safe integer"); return normalized; }
546
+ function normalizeupdatedat(value) { const normalized = Number(value ?? 0); if (!Number.isSafeInteger(normalized) || normalized < 0)
547
+ throw new RangeError("retention artifact updatedat must be a non-negative safe integer"); return normalized; }
548
+ function comparefreshness(left, right) { return right.updatedat - left.updatedat || right.bytes - left.bytes || left.name.localeCompare(right.name); }
549
+ if (process.argv[1] === fileURLToPath(import.meta.url))
550
+ createassets(parsearguments(process.argv.slice(2))).then(({ output }) => { console.log(`release assets: ${output}`); }).catch((error) => { console.error(error.message); process.exitCode = 1; });
551
+ /* ════════════════════════════════════════════════════════════════════ */
552
+ /* Section 9: release/verify.ts — Release verification checks artifact digests, manifest consistency and */
553
+ /* ════════════════════════════════════════════════════════════════════ */
554
+ /**
555
+ * Release verification checks artifact digests, manifest consistency and
556
+ * explicit signing state without contacting a registry or a provider.
557
+ */
558
+ const verifymodulepath = dirname(fileURLToPath(import.meta.url));
559
+ const verifyrootpath = resolve(verifymodulepath, "..");
560
+ const signingstatuses = new Set([
561
+ "unsigned",
562
+ "ci-test-key",
563
+ "caller-owned",
564
+ "caller-configured",
565
+ "notarized",
566
+ "signpath-foundation",
567
+ "provider-verified",
568
+ ]);
569
+ /** Verifies a release checksum file and its correlated public manifest. */
570
+ export async function verifyassets(options = {}) {
571
+ const checksumsfile = resolve(String(options.checksums ?? ""));
572
+ const manifestfile = resolve(String(options.manifest ?? ""));
573
+ if (!options.checksums || !options.manifest)
574
+ throw new TypeError("checksums and manifest are required");
575
+ const artifactroot = resolve(String(options.artifactroot ?? dirname(checksumsfile)));
576
+ const manifest = JSON.parse(await readFile(manifestfile, "utf8"));
577
+ const expectedversion = options.version === undefined ? undefined : String(options.version);
578
+ const version = String(manifest.version ?? "");
579
+ if (!version)
580
+ throw new TypeError("release manifest version is required");
581
+ if (expectedversion && expectedversion !== version)
582
+ throw new Error(`release version mismatch: expected ${expectedversion}, received ${version}`);
583
+ const signing = String(manifest.signing ?? "");
584
+ if (!signingstatuses.has(signing))
585
+ throw new Error(`unknown release signing status: ${signing || "empty"}`);
586
+ const checksums = parsechecksums(await readFile(checksumsfile, "utf8"));
587
+ const manifestfiles = normalizefiles(manifest.files);
588
+ const checksumfiles = [...checksums.keys()].sort();
589
+ if (manifestfiles.length !== checksumfiles.length || manifestfiles.some((name, index) => name !== checksumfiles[index]))
590
+ throw new Error("release manifest files do not match checksum entries");
591
+ const verified = [];
592
+ for (const name of checksumfiles) {
593
+ const artifact = safepath(artifactroot, name);
594
+ const digest = await verifysha256(artifact);
595
+ const expected = checksums.get(name);
596
+ if (digest !== expected)
597
+ throw new Error(`checksum mismatch: ${name}`);
598
+ verified.push({ name, digest });
599
+ }
600
+ return { valid: true, version, signing, files: verified };
601
+ }
602
+ /** Parses sha256sum output while accepting binary filenames with spaces. */
603
+ function parsechecksums(value) {
604
+ const entries = new Map();
605
+ for (const line of String(value).split(/\r?\n/)) {
606
+ if (!line.trim())
607
+ continue;
608
+ const match = line.match(/^([a-f0-9]{64})\s+[ *](.+)$/i);
609
+ if (!match)
610
+ throw new TypeError(`invalid checksum line: ${line}`);
611
+ const name = basename(match[2]);
612
+ if (entries.has(name))
613
+ throw new Error(`duplicate checksum entry: ${name}`);
614
+ entries.set(name, match[1].toLowerCase());
615
+ }
616
+ return entries;
617
+ }
618
+ /** Normalizes and validates the manifest file list. */
619
+ function normalizefiles(value) {
620
+ if (!Array.isArray(value) || value.some((item) => typeof item !== "string"))
621
+ throw new TypeError("release manifest files must be a string array");
622
+ const names = value.map((item) => basename(item));
623
+ if (new Set(names).size !== names.length)
624
+ throw new Error("duplicate release manifest file");
625
+ return names.sort();
626
+ }
627
+ /** Rejects absolute paths and path traversal outside the selected artifact root. */
628
+ function safepath(root, name) {
629
+ const artifact = resolve(root, name);
630
+ const boundary = relative(root, artifact);
631
+ if (isAbsolute(boundary) || boundary === ".." || boundary.startsWith(`..${sep}`))
632
+ throw new Error(`release artifact escapes root: ${name}`);
633
+ return artifact;
634
+ }
635
+ /** Computes a SHA-256 digest with the Node.js standard library. */
636
+ async function verifysha256(path) {
637
+ const hash = createHash("sha256");
638
+ hash.update(await readFile(path));
639
+ return hash.digest("hex");
640
+ }
641
+ /** Parses the standalone verification command used by release automation. */
642
+ function verifyparsearguments(argumentslist) {
643
+ const options = { artifactroot: verifyrootpath };
644
+ for (let index = 0; index < argumentslist.length; index += 1) {
645
+ const argument = argumentslist[index];
646
+ if (argument === "--checksums")
647
+ options.checksums = argumentslist[++index];
648
+ else if (argument === "--manifest")
649
+ options.manifest = argumentslist[++index];
650
+ else if (argument === "--root")
651
+ options.artifactroot = argumentslist[++index];
652
+ else if (argument === "--version")
653
+ options.version = argumentslist[++index];
654
+ else
655
+ throw new TypeError(`unsupported release verification argument: ${argument}`);
656
+ }
657
+ return options;
658
+ }
659
+ if (process.argv[1] === fileURLToPath(import.meta.url))
660
+ verifyassets(verifyparsearguments(process.argv.slice(2))).then((result) => { console.log(JSON.stringify(result)); }).catch((error) => { console.error(error.message); process.exitCode = 1; });
661
+ /* ════════════════════════════════════════════════════════════════════ */
662
+ /* Section 10: release/evidence.ts — Release evidence evaluates caller-supplied metadata without fetching, signing, */
663
+ /* ════════════════════════════════════════════════════════════════════ */
664
+ /**
665
+ * Release evidence evaluates caller-supplied metadata without fetching, signing,
666
+ * scanning, publishing or claiming an artifact has more assurance than proven.
667
+ */
668
+ const evidencestatuses = new Set(["notProvided", "declared", "parsed", "checked", "verified", "rejected", "unknown"]);
669
+ const verifiedstatuses = new Set(["checked", "verified"]);
670
+ /** Normalizes an immutable, caller-supplied artifact evidence record. */
671
+ export function releaseevidence(input = {}) {
672
+ const status = normalizestatus(input.status ?? "notProvided");
673
+ const kind = requiredtext(input.kind, "evidence kind");
674
+ const subjectdigest = optionaldigest(input.subjectdigest, "subject digest");
675
+ const producer = optionaltext(input.producer);
676
+ const workflow = optionaltext(input.workflow);
677
+ const method = optionaltext(input.verificationmethod);
678
+ const verifiedat = optionaltime(input.verifiedat, "verification time");
679
+ if (verifiedstatuses.has(status) && !subjectdigest)
680
+ throw new TypeError("checked evidence requires a subject digest");
681
+ if (verifiedstatuses.has(status) && !method)
682
+ throw new TypeError("checked evidence requires a verification method");
683
+ if (status === "verified" && !producer)
684
+ throw new TypeError("verified evidence requires a producer");
685
+ if (status === "verified" && !verifiedat)
686
+ throw new TypeError("verified evidence requires a verification time");
687
+ return { version: 1, kind, status, subjectdigest, producer, workflow, verificationmethod: method, verifiedat, metadata: objectcopy(input.metadata) };
688
+ }
689
+ /** Evaluates evidence against a caller-owned policy and returns reason codes, never a trust claim. */
690
+ export function evaluateevidence(input = {}) {
691
+ const evidence = Array.isArray(input.evidence) ? input.evidence.map((entry) => releaseevidence(objectvalue(entry, "evidence entry"))) : [];
692
+ const policy = objectcopy(input.policy);
693
+ const requiredkinds = stringlist(policy.requiredkinds, "required kinds");
694
+ const allowedstatuses = new Set(stringlist(policy.allowedstatuses ?? ["verified"], "allowed statuses"));
695
+ const expectedproducer = textmap(policy.expectedproducer, "expected producer");
696
+ const expectedworkflow = textmap(policy.expectedworkflow, "expected workflow");
697
+ const subjectdigest = optionaldigest(input.subjectdigest, "subject digest");
698
+ const reasons = new Set();
699
+ for (const kind of requiredkinds) {
700
+ const matches = evidence.filter((entry) => entry.kind === kind);
701
+ if (matches.length === 0) {
702
+ reasons.add(`required-evidence-missing:${kind}`);
703
+ continue;
704
+ }
705
+ const accepted = matches.some((entry) => evidenceaccepted(entry, { allowedstatuses, expectedproducer, expectedworkflow, subjectdigest }, reasons));
706
+ if (!accepted)
707
+ reasons.add(`required-evidence-unsatisfied:${kind}`);
708
+ }
709
+ const evaluated = requiredkinds.length === 0 ? evidence : evidence.filter((entry) => requiredkinds.includes(entry.kind));
710
+ for (const entry of evaluated)
711
+ evidenceaccepted(entry, { allowedstatuses, expectedproducer, expectedworkflow, subjectdigest }, reasons);
712
+ const ordered = [...reasons].sort();
713
+ const rejected = ordered.some((reason) => reason.startsWith("evidence-rejected:") || reason.startsWith("producer-mismatch:") || reason.startsWith("workflow-mismatch:") || reason.startsWith("subject-mismatch:"));
714
+ const decision = rejected ? "rejected" : ordered.length > 0 ? "insufficient" : "accepted";
715
+ return { version: 1, decision, reasons: ordered, subjectdigest, requiredkinds, evidence };
716
+ }
717
+ /** Builds a data-only readiness receipt for a release that a caller may later execute. */
718
+ export function releasereadiness(input = {}) {
719
+ const sourcetag = requiredtext(input.sourcetag, "source tag");
720
+ const manifestversions = textmap(input.manifestversions, "manifest versions");
721
+ const requiredgates = textmap(input.requiredgates, "required gates");
722
+ const artifactplandigest = optionaldigest(input.artifactplandigest, "artifact plan digest");
723
+ const targets = stringlist(input.targets, "publication targets");
724
+ const signingstatus = optionaltext(input.signingstatus) ?? "unknown";
725
+ const evaluation = evaluateevidence(objectvalue(input.evaluation, "evidence evaluation"));
726
+ const reasons = new Set(evaluation.reasons);
727
+ if (Object.values(manifestversions).some((value) => value !== sourcetag.replace(/^v/, "")))
728
+ reasons.add("manifest-version-mismatch");
729
+ for (const [gate, status] of Object.entries(requiredgates))
730
+ if (status !== "passed")
731
+ reasons.add(`required-gate-not-passed:${gate}`);
732
+ if (!artifactplandigest)
733
+ reasons.add("artifact-plan-digest-missing");
734
+ if (targets.length === 0)
735
+ reasons.add("publication-targets-missing");
736
+ if (signingstatus === "unknown")
737
+ reasons.add("signing-status-unknown");
738
+ const ordered = [...reasons].sort();
739
+ const decision = evaluation.decision === "rejected" ? "rejected" : ordered.length > 0 ? "insufficient" : "accepted";
740
+ return { version: 1, sourcetag, manifestversions, requiredgates, artifactplandigest, targets, signingstatus, evaluation, decision, ready: decision === "accepted", reasons: ordered };
741
+ }
742
+ /** Maps an already-completed local checksum verification result to evidence records. */
743
+ export function evidencefromverification(input = {}) {
744
+ const verification = objectvalue(input.verification, "verification result");
745
+ if (verification.valid !== true)
746
+ throw new TypeError("verification result must be valid");
747
+ const releaseversion = requiredtext(verification.version, "release version");
748
+ const signingstatus = requiredtext(verification.signing, "signing status");
749
+ const files = requiredarray(verification.files, "verification files");
750
+ if (files.length === 0)
751
+ throw new TypeError("verification files must not be empty");
752
+ const names = new Set();
753
+ const producer = optionaltext(input.producer);
754
+ const workflow = optionaltext(input.workflow);
755
+ const verificationmethod = optionaltext(input.verificationmethod) ?? "checksum-manifest";
756
+ const verifiedat = optionaltime(input.verifiedat, "verification time");
757
+ const evidence = files.map((file) => {
758
+ const entry = objectvalue(file, "verification file");
759
+ const name = requiredtext(entry.name, "artifact name");
760
+ if (names.has(name))
761
+ throw new TypeError(`duplicate verification artifact: ${name}`);
762
+ names.add(name);
763
+ return releaseevidence({ kind: "checksum", status: "checked", subjectdigest: entry.digest, producer, workflow, verificationmethod, verifiedat, metadata: { artifact: name, releaseversion, signingstatus } });
764
+ });
765
+ return { version: 1, releaseversion, signingstatus, evidence };
766
+ }
767
+ function evidenceaccepted(entry, policy, reasons) {
768
+ let accepted = true;
769
+ if (entry.status === "rejected") {
770
+ reasons.add(`evidence-rejected:${entry.kind}`);
771
+ accepted = false;
772
+ }
773
+ if (!policy.allowedstatuses.has(entry.status)) {
774
+ reasons.add(`evidence-status-not-allowed:${entry.kind}:${entry.status}`);
775
+ accepted = false;
776
+ }
777
+ if (policy.subjectdigest && entry.subjectdigest !== policy.subjectdigest) {
778
+ reasons.add(`subject-mismatch:${entry.kind}`);
779
+ accepted = false;
780
+ }
781
+ if (policy.expectedproducer[entry.kind] && entry.producer !== policy.expectedproducer[entry.kind]) {
782
+ reasons.add(`producer-mismatch:${entry.kind}`);
783
+ accepted = false;
784
+ }
785
+ if (policy.expectedworkflow[entry.kind] && entry.workflow !== policy.expectedworkflow[entry.kind]) {
786
+ reasons.add(`workflow-mismatch:${entry.kind}`);
787
+ accepted = false;
788
+ }
789
+ return accepted;
790
+ }
791
+ function normalizestatus(value) { const status = requiredtext(value, "evidence status"); if (!evidencestatuses.has(status))
792
+ throw new TypeError(`unknown evidence status: ${status}`); return status; }
793
+ function requiredtext(value, label) { const text = optionaltext(value); if (!text)
794
+ throw new TypeError(`${label} is required`); return text; }
795
+ function optionaltext(value) { const text = value === undefined || value === null ? undefined : String(value).trim(); return text || undefined; }
796
+ function optionaldigest(value, label) { const digest = optionaltext(value)?.toLowerCase(); if (digest && !/^[a-f0-9]{64}$/.test(digest))
797
+ throw new TypeError(`${label} must be a sha256 hex digest`); return digest; }
798
+ function optionaltime(value, label) { if (value === undefined || value === null)
799
+ return undefined; const time = Number(value); if (!Number.isFinite(time) || time < 0)
800
+ throw new TypeError(`${label} must be a non-negative finite number`); return time; }
801
+ function requiredarray(value, label) { if (!Array.isArray(value))
802
+ throw new TypeError(`${label} must be an array`); return value; }
803
+ function stringlist(value, label) { if (value === undefined || value === null)
804
+ return []; if (!Array.isArray(value))
805
+ throw new TypeError(`${label} must be an array`); return [...new Set(value.map((item) => requiredtext(item, label)))].sort(); }
806
+ function textmap(value, label) { if (value === undefined || value === null)
807
+ return {}; const source = objectvalue(value, label); return Object.fromEntries(Object.entries(source).map(([key, item]) => [requiredtext(key, label), requiredtext(item, label)])); }
808
+ function objectcopy(value) { return value && typeof value === "object" && !Array.isArray(value) ? { ...value } : {}; }
809
+ function objectvalue(value, label) { if (!value || typeof value !== "object" || Array.isArray(value))
810
+ throw new TypeError(`${label} must be an object`); return value; }
811
+ //# sourceMappingURL=distribution.js.map