@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
@@ -1,128 +0,0 @@
1
- # O Cenário Prático do SADDLE: Uma Análise de Viabilidade e Modelo de Ciclo de Vida Integrado
2
-
3
- ## Arquitetura Fundamental e Limitações do Ambiente Serverless
4
-
5
- A concepção do framework SADDLE, projetado para operar em plataformas como Vercel e Netlify, estabelece uma arquitetura fundamental baseada em computação sem servidor. Esta escolha estratégica define não apenas a escalabilidade e a economia de custos do sistema, mas também seus principais pontos de tensão em termos de desempenho, segurança e funcionalidade. Compreender a natureza dessas plataformas é o primeiro passo para validar a viabilidade técnica do projeto. As plataformas serverless, como as oferecidas pelo Vercel e Netlify, operam sobre a premissa de que a infraestrutura subjacente é gerenciada automaticamente, permitindo que os desenvolvedores se concentrem exclusivamente na lógica do aplicativo [[26](https://docs.netlify.com/build/functions/overview/)]. No entanto, essa conveniência vem acompanhada de restrições inerentes que impactam diretamente o design do SADDLE. A distinção mais crítica reside entre as "funções" tradicionais e as "funções de borda". As funções padrão, tipicamente baseadas em Node.js, fornecem um ambiente de execução mais completo, incluindo acesso a módulos nativos do Node.js como `fs` (sistema de arquivos), `path` e `crypto`, além de tempos de execução mais longos, que podem chegar a 300 segundos em planos empresariais no Vercel [[47](https://focusreactive.com/what-is-vercel/)] ou ser elevados de 10 para 26 segundos no Netlify [[25](https://answers.netlify.com/t/netlify-functions-execution-limit/52167), [28](https://www.reddit.com/r/Netlify/comments/1l77xvw/what_is_the_actual_execution_limit_of_severless/)]. Em contrapartida, as funções de borda, embora projetadas para latências extremamente baixas — com inicializações frias de 12 a 25 milissegundos no Vercel [[45](https://navanathjadhav.medium.com/i-reverse-engineered-vercels-edge-functions-here-s-how-they-work-3a194616387c), [94](https://www.product-one.com/article/vercel-vs-netlify-2025)] — operam em um ambiente restrito, conhecido como Edge Runtime. Este runtime, que se baseia em um motor V8 otimizado, exclui muitas APIs nativas do Node.js por questões de segurança e performance, tornando recursos como o módulo `fs` e o `crypto` indisponíveis [[90](https://nextjs.org/docs/messages/node-module-in-edge-runtime), [95](https://github.com/vercel/next.js/discussions/62985), [97](https://nextjs.org/docs/pages/api-reference/edge)]. Para o SADDLE, que visa atuar como uma máquina virtual e sandbox, esta limitação é significativa. Ele precisará garantir que qualquer código executado nas funções de borda seja puramente de navegador ou Node.js, ou dependa de bibliotecas compatíveis com esse ambiente restrito.
6
-
7
- As limitações de tempo de execução são outra fronteira crucial. As funções de borda do Netlify, por exemplo, têm um limite rígido de 50 ms por invocação, enquanto as funções síncronas padrão do Netlify são limitadas a 10 segundos e os agendamentos a 30 segundos [[48](https://docs.netlify.com/build/functions/scheduled-functions/), [49](https://docs.netlify.com/build/edge-functions/limits/)]. O Vercel estende este limite para 26 segundos nas funções padrão, com opções de fundo para tarefas mais longas, mas ainda assim, o modelo de computação é intrinsecamente orientado para tarefas curtas e rápidas [[25](https://answers.netlify.com/t/netlify-functions-execution-limit/52167)]. Essa realidade força o SADDLE a ser projetado como um executor de tarefas de curta duração ou como um orquestrador que delega trabalhos de longa duração para outros serviços, como filas de mensagens ou funções background. A plataforma Render, por exemplo, explicitamente não suporta cargas de trabalho persistentes ou conexões de estado, exigindo a integração com schedulers externos para cron-like behavior [[107](https://northflank.com/blog/render-vs-vercel)]. Portanto, o SADDLE deve incorporar mecanismos para lidar com a saída de rede e a gestão de estados de longa duração, talvez através de chamadas de webhook para iniciar outros processos ou pela integração com serviços de fila.
8
-
9
- Um dos conceitos centrais propostos para o SADDLE é o uso do armazenamento como uma extensão da memória, transformando buckets de objeto e bancos de dados relacionais em um meio persistente de comunicação e estado. Esta abordagem é tecnicamente factível através da implementação de uma Virtual File System (VFS). Ferramentas como `lowstorage` demonstram como um bucket compatível com S3 pode ser tratado como um sistema de arquivos pseudo-diretório usando JSON ou Msgpack para serializar os dados [[37](https://github.com/good-lly/lowstorage)]. Complementarmente, bibliotecas como `storagesdk.dev` fornecem uma API unificada e independente do provedor para interagir com diversos sistemas de armazenamento, incluindo S3, R2, Azure e Tigris [[84](https://www.tigrisdata.com/blog/storagesdk/)]. Juntas, essas tecnologias permitem que o SADDLE leia e escreva dados de seus "recursos computacionais" diretamente em objetos de armazenamento. Por exemplo, um resultado intermediário de uma execução poderia ser salvo como um arquivo em um bucket Vercel Blob [[34](https://vercel.com/crawled-sitemap.xml)], servindo como um ponto de verificação ou como entrada para a próxima etapa do workflow. Supabase já implementa um serviço de armazenamento S3-compatível onde os metadados são armazenados em um banco Postgres, criando uma ponte entre armazenamento de objetos e relacional [[38](https://github.com/supabase/storage)]. O SADDLE poderia adotar um modelo semelhante, utilizando Drizzle ORM para gerenciar metadados de execução e referências aos resultados brutos armazenados nos buckets. Esta estratégia resolve o problema da natureza transitória das funções serverless, permitindo que os workflows do SADDLE mantenham estado de forma duradoura entre invocações. No entanto, é importante notar que o próprio Edge Runtime não permite o acesso ao sistema de arquivos local, o que significa que a VFS deve ser implementada como uma camada de software que usa APIs de rede para se comunicar com os serviços de armazenamento remotos, em vez de acessar o disco local da função [[89](https://www.reddit.com/r/nextjs/comments/1bvo8zb/questions_related_to_combining_nextjs_14_with/), [97](https://nextjs.org/docs/pages/api-reference/edge)].
10
-
11
- A escolha de plataformas como Vercel e Netlify também implica em decisões sobre o ecossistema de pacotes e a maneira como as dependências são gerenciadas. O modelo tradicional de `npm install` cria um diretório `node_modules` que é empacotado com a função, aumentando seu tamanho e, consequentemente, o tempo de inicialização (inicio frio). O objetivo do SADDLE de importar pacotes "inline" de CDNs como esm.sh e jsDelivr representa uma mudança paradigmática nesse paradigma [[67](https://github.com/esm-dev/esm.sh)]. Essa abordagem elimina a necessidade de empacotamento local, reduzindo o tamanho do artefato enviado para a nuvem e potencialmente acelerando o tempo de inicialização. No entanto, ela introduz novas considerações de segurança e confiabilidade. A dependência de um CDN externo significa que a disponibilidade e a integridade do código são controladas por terceiros. Embora isso ofereça benefícios de entrega global e otimização, exige medidas rigorosas de mitigação de riscos, como o uso de Subresource Integrity (SRI), que será explorado em detalhes mais adiante. Além disso, a compatibilidade do Edge Runtime com certos módulos nativos do Node.js permanece uma barreira. Muitas bibliotecas populares dependem de extensões nativas compiladas para um ambiente Node.js específico, e essas não serão compatíveis com o ambiente restrito das funções de borda [[91](https://humansfix.ai/guides/v0/vercel-edge-runtime-import-error)]. O SADDLE precisará, portanto, depender de bibliotecas puramente JavaScript ou de versões compatíveis com WebAssembly. A análise comparativa abaixo resume as principais características e limitações das plataformas serverless relevantes para o projeto SADDLE.
12
-
13
- | Característica | Vercel Functions | Netlify Functions | Funções de Borda (Vercel/Netlify) |
14
- | :--- | :--- | :--- | :--- |
15
- | **Tempo de Execução Máximo** | Padrão: 26-300s; Fundo: >3min [[25](https://answers.netlify.com/t/netlify-functions-execution-limit/52167), [47](https://focusreactive.com/what-is-vercel/)] | Síncrono: 10s; Assíncrono: 15min [[27](https://answers.netlify.com/t/netlify-functions-stops-running-after-return/74510)] | 50ms (Edge) [[49](https://docs.netlify.com/build/edge-functions/limits/)] |
16
- | **Suporte a Módulos Node.js (`fs`, `crypto`)** | Suportado em runtimes Node.js padrão [[51](https://blog.logrocket.com/serverless-deployments-vercel-node-js/)] | Suportado em funções padrão [[29](https://answers.netlify.com/t/deploy-non-js-binary-files-with-functions/5225)] | Não suportado no Edge Runtime [[95](https://github.com/vercel/next.js/discussions/62985), [97](https://nextjs.org/docs/pages/api-reference/edge)] |
17
- | **Inicialização Fria (Cold Start)** | ~50-300ms (Funções); 12-25ms (Borda) [[47](https://focusreactive.com/what-is-vercel/), [94](https://www.product-one.com/article/vercel-vs-netlify-2025)] | ~28ms (Borda) [[94](https://www.product-one.com/article/vercel-vs-netlify-2025)] | ~1-5ms (Wasm) [[22](https://dev.to/moksh/webassembly-in-2026-a-practical-guide-to-wasm-and-wasi-for-modern-developers-3ogm)] |
18
- | **Limite de Memória** | Informação não disponível nas fontes fornecidas | 1024MB (padrão) [[27](https://answers.netlify.com/t/netlify-functions-stops-running-after-return/74510)] | 512MB (total para todas as funções) [[49](https://docs.netlify.com/build/edge-functions/limits/)] |
19
- | **Suporte a Cron Jobs** | Sim, funcionalidade integrada [[34](https://vercel.com/crawled-sitemap.xml)] | Sim, chamado Scheduled Functions [[48](https://docs.netlify.com/build/functions/scheduled-functions/)] | Não diretamente, via funções padrão/agendadas |
20
- | **Armazenamento Integrado** | Vercel Blobs (objetos), PostgreSQL [[34](https://vercel.com/crawled-sitemap.xml)] | @netlify/blobs (objetos) [[26](https://docs.netlify.com/build/functions/overview/)] | Sem armazenamento local persistente |
21
- | **Execução de Binários/Nativas** | Suporta Wasm e runtimes customizados (via Docker) [[20](https://vercel.com/blog/introducing-support-for-webassembly-at-the-edge), [52](https://vercel.com/changelog/node-js-20-is-being-deprecated)] | Suporta Wasm; Binários estáticos empacotáveis [[29](https://answers.netlify.com/t/deploy-non-js-binary-files-with-functions/5225)] | Não aplicável |
22
-
23
- Em resumo, a arquitetura serverless oferece um excelente núcleo para o SADDLE, proporcionando escalabilidade e eficiência. Contudo, a construção bem-sucedida do framework exigirá uma navegação cuidadosa pelas suas restrições. A solução para o desafio da execução de código em um ambiente restrito e a implementação de um mecanismo robusto de persistência de estado através de sistemas de armazenamento remotos serão os dois pilares técnicos que determinarão a viabilidade e a utilidade pratical do SADDLE.
24
-
25
- ## Implementação de Sandbox e Execução Segura de Código
26
-
27
- A capacidade de funcionar como uma sandbox e uma máquina virtual é o componente central e mais desafiador do framework SADDLE. A segurança e o isolamento do ambiente de execução são primordiais, especialmente quando se pretende carregar e executar código de fontes externas, incluindo pacotes de terceiros e scripts de usuários finais. A escolha da tecnologia subyacente para o sandboxing não é trivial e deve ser guiada por uma análise rigorosa das ameaças e das vulnerabilidades históricas do ecossistema Node.js. O usuário mencionou `vm2`, uma biblioteca amplamente utilizada no passado para isolar a execução de código. No entanto, pesquisas recentes indicam que `vm2` está obsoleto e, mais preocupantemente, possui vulnerabilidades críticas de fuga de sandbox que podem levar a execução remota de código (Remote Code Execution - RCE) [[68](https://www.endorlabs.com/learn/cve-2026-22709-critical-sandbox-escape-in-vm2-enables-arbitrary-code-execution), [69](https://www.kodemsecurity.com/resources/vm2-sandbox-escape-vulnerabilities-the-2026-cve-wave-turning-ai-agents-into-host-rce-vectors)]. A evolução de ataques contra sandboxes, como demonstrado pela onda de divulgação de vulnerabilidades do `vm2` em 2026, mostra que essas falhas estão se tornando um vetor de ataque cada vez mais sofisticado, inclusive para agentes de IA [[69](https://www.kodemsecurity.com/resources/vm2-sandbox-escape-vulnerabilities-the-2026-cve-wave-turning-ai-agents-into-host-rce-vectors)]. Portanto, qualquer implementação moderna para o SADDLE deve evitar categoricamente o uso de `vm2` e buscar alternativas mais seguras e sustentáveis.
28
-
29
- As soluções de sandboxing modernas para Node.js podem ser agrupadas em várias categorias tecnológicas, cada uma com seus próprios trade-offs. A primeira e mais promissora abordagem é o uso de V8 Isolates. Um isolate é um contexto de execução totalmente independente dentro do motor V8, com seu próprio heap de memória, cache de compilação e conjunto de objetos globais [[33](https://code2life.top/blog/0081-sandbox-research-2)]. Isso garante um alto grau de isolamento, pois o código dentro de um isolate não pode acessar diretamente os objetos ou a memória de outro isolate ou do processo host principal. Plataformas de ponta como Vercel já aproveitam essa tecnologia em suas funções de borda, que são construídas sobre `@edge-runtime/vm`, um pacote que fornece as vinculações de nível inferior para criar contextos de máquina virtual padrão da Web [[43](https://edge-runtime.vercel.app/packages/vm), [82](https://npmx.dev/package/@edge-runtime/vm)]. Projetos como `isolated-vm` oferecem uma camada de abstração mais leve para trabalhar com isolados diretamente em aplicações Node.js, permitindo a execução segura de código JavaScript puro [[33](https://code2life.top/blog/0081-sandbox-research-2)]. A principal vantagem dessa abordagem é a performance, com tempos de inicialização inferiores a 5ms e overhead de memória baixo (<5MB), tornando-a ideal para ambientes serverless [[33](https://code2life.top/blog/0081-sandbox-research-2)]. Para o SADDLE, isso significa que ele poderia utilizar V8 Isolates para executar a maior parte de sua carga de trabalho, que provavelmente consistiria em scripts Node.js.
30
-
31
- Para executar código de outras linguagens ou binários nativos, que são requisitos explícitos para o SADDLE, a WebAssembly (Wasm) emerge como a tecnologia de escolha. Wasm foi projetada desde sua concepção para ser uma porta de entrega segura para código compilado de qualquer linguagem, executando-o em um ambiente estritamente controlado e com isolamento garantido [[22](https://dev.to/moksh/webassembly-in-2026-a-practical-guide-to-wasm-and-wasi-for-modern-developers-3ogm)]. O SADDLE pode compilar código-fonte de linguagens como Rust, Go ou C++ para o formato Wasm e executá-lo em um runtime de Wasm hospedado dentro de uma função serverless. Plataformas como Vercel e Netlify suportam nativamente o deployment de módulos Wasm [[20](https://vercel.com/blog/introducing-support-for-webassembly-at-the-edge), [24](https://wasmedge.org/book/en/use_cases/frameworks/serverless/vercel)]. A execução de binários nativos, como o `ffmpeg` para processamento de vídeo, já foi demonstrada com sucesso em funções do Netlify, onde pacotes binários estáticos são empacotados e executados durante a invocação da função [[29](https://answers.netlify.com/t/deploy-non-js-binary-files-with-functions/5225)]. Uma abordagem mais elegante, alinhada com a filosofia do SADDLE, seria compilar o binário para Wasm e executá-lo via um script de host Node.js que serve como um invólucro, passando dados através de STDIN/STDOUT [[24](https://wasmedge.org/book/en/use_cases/frameworks/serverless/vercel)]. Esta abordagem oferece um isolamento muito forte, pois o Wasm roda em sua própria máquina virtual, completamente separada do runtime de JavaScript.
32
-
33
- Uma terceira categoria de soluções envolve ambientes de execução alternativos, como o Deno. O Supabase Edge Runtime, por exemplo, é construído sobre o Deno e demonstra a viabilidade de um ambiente de execução de ponta com suporte nativo para Python através da biblioteca Pyodide [[33](https://code2life.top/blog/0081-sandbox-research-2), [35](https://supabase.com/docs/guides/functions)]. Embora o Vercel e Netlify não sejam nativamente Deno, isso prova que ambientes de execução de terceiros podem ser integrados à arquitetura serverless. Uma solução ainda mais avançada é o Edge.js, um projeto open-source que utiliza WebAssembly System Interface (WASI) para isolar aplicações Node.js inteiras em um contêiner Wasm [[21](https://www.reddit.com/r/node/comments/1tmq238/edgejs_running_node_apps_inside_a_webassembly/)]. Edge.js mantém alta compatibilidade com o Node.js (passando 3592 de 3626 testes da suite oficial) enquanto oferece um isolamento robusto, eliminando a necessidade de Docker containers e proporcionando tempos de inicialização muito rápidos (~40ms) [[21](https://www.reddit.com/r/node/comments/1tmq238/edgejs_running_node_apps_inside_a_webassembly/)]. Para o SADDLE, isso abriria a possibilidade de executar pacotes NPM complexos, incluindo aqueles com dependências nativas, em um ambiente altamente seguro.
34
-
35
- A seguir, uma tabela comparativa das principais tecnologias de sandboxing discutidas:
36
-
37
- | Tecnologia de Sandbox | Principais Linguagens | Nível de Isolamento | Desempenho (Inicialização) | Complexidade de Implantação |
38
- | :--- | :--- | :--- | :--- | :--- |
39
- | **V8 Isolates** (com `isolated-vm`) | JavaScript/TypeScript | Alto (contexto de motor V8) [[33](https://code2life.top/blog/0081-sandbox-research-2)] | < 5ms [[33](https://code2life.top/blog/0081-sandbox-research-2)] | Baixa (biblioteca NPM) |
40
- | **WebAssembly (Wasm)** | C/C++, Rust, Go, Python (via Pyodide), etc. [[100](https://harshal.sheth.io/2022/01/31/webassembly.html)] | Muito Alto (máquina virtual) [[22](https://dev.to/moksh/webassembly-in-2026-a-practical-guide-to-wasm-and-wasi-for-modern-developers-3ogm)] | 1-5ms [[22](https://dev.to/moksh/webassembly-in-2026-a-practical-guide-to-wasm-and-wasi-for-modern-developers-3ogm)] | Média (requer compilação) |
41
- | **Edge.js (Node.js em Wasm)** | Node.js (compatibilidade alta) [[21](https://www.reddit.com/r/node/comments/1tmq238/edgejs_running_node_apps_inside_a_webassembly/)] | Muito Alto (contêiner Wasm) [[21](https://www.reddit.com/r/node/comments/1tmq238/edgejs_running_node_apps_inside_a_webassembly/)] | ~40ms [[21](https://www.reddit.com/r/node/comments/1tmq238/edgejs_running_node_apps_inside_a_webassembly/)] | Alta (configuração de runtime) |
42
- | **Supabase Edge Runtime (Deno)** | JavaScript/TypeScript, Python (via Pyodide) [[35](https://supabase.com/docs/guides/functions)] | Alto (ambiente Deno) [[33](https://code2life.top/blog/0081-sandbox-research-2)] | < 5ms [[33](https://code2life.top/blog/0081-sandbox-research-2)] | Média (requer runtime externo) |
43
-
44
- Com base nesta análise, uma estratégia híbrida para o SADDLE parece ser a mais robusta. O framework poderia, por padrão, utilizar V8 Isolates para executar scripts JavaScript, beneficiando-se de sua performance e simplicidade. Para cargas de trabalho que exigem outras linguagens ou binários nativos, ele poderia então recorrer a executores Wasm, compilando o código necessário ou utilizando pacotes Wasm pré-compilados. A execução de Python, por exemplo, poderia ser habilitada através da inclusão do pacote `pyodide` no ambiente de execução, permitindo que os usuários escrevessem scripts Python que seriam interpretados dentro do Wasm sandbox [[55](https://pyodide.org/), [56](https://pyodide.org/en/stable/usage/index.html)]. Projetos como LangChain Sandbox já validaram essa abordagem para a execução segura de Python [[75](https://github.com/langchain-ai/langchain-sandbox), [76](https://www.linkedin.com/posts/sydney-runkle_langchain-sandbox-run-untrusted-python-safely-activity-7331029124641083395-ZkiW)]. Essa dupla abordagem forneceria ao SADDLE a flexibilidade necessária para atender a uma gama diversificada de casos de uso, desde scripts Node.js simples até processos computacionalmente intensivos escritos em outras linguagens, tudo dentro de um quadro de segurança e isolamento rigoroso.
45
-
46
- ## Orquestração de Recursos Computacionais e Execução de Pacotes Externos
47
-
48
- A capacidade do SADDLE de atuar como um orquestrador de recursos computacionais, similar a uma ferramenta como o n8n, e de executar pacotes de forma "inline" via CDNs como esm.sh e jsDelivr, define sua natureza como uma plataforma de computação dinâmica e modular. A execução de pacotes de forma "inline" é uma característica chave do SADDLE e é totalmente viável. Esses CDNs funcionam como servidores de módulos ECMAScript (ESM), permitindo que desenvolvedores importem bibliotecas diretamente de URLs HTTP sem a necessidade de instalação ou build steps locais [[67](https://github.com/esm-dev/esm.sh), [83](https://app-esm-devde-w.azurewebsites.net/)]. O mecanismo de funcionamento é simples: o runtime de Node.js (como o utilizado pelo Vercel ou Netlify) realiza uma requisição HTTP para o CDN, baixa o módulo ESM e o executa dinamicamente. Esse paradigma simplifica drasticamente o gerenciamento de dependências, pois o ciclo de vida do pacote se transforma em um processo de orquestração de URLs. No entanto, essa conveniência introduz um risco significativo: a cadeia de suprimentos de software. Um ataque de comprometimento de CDN poderia injectar código malicioso em pacotes populares, afetando toda a cadeia de produção. Para mitigar esse risco, é imperativo utilizar Subresource Integrity (SRI).
49
-
50
- O SRI é um recurso de segurança do navegador que permite aos desenvolvedores verificar a integridade de um recurso carregado de uma origem externa [[12](https://developer.mozilla.org/en-US/docs/Web/Security/Defenses/Subresource_Integrity)]. Ao especificar um hash (SHA256, SHA384 ou SHA512) esperado do conteúdo do recurso em uma tag `<script>` ou `<link>`, o navegador calcula o hash do conteúdo recebido e o compara com o esperado. Se houver uma discrepância, o recurso é bloqueado, impedindo a execução de código manipulado [[13](https://www.jsdelivr.com/using-sri-with-dynamic-files), [15](https://andrewlock.net/avoiding-cdn-supply-chain-attacks-with-subresource-integrity/)]. CDNs como `esm.sh` e `jsDelivr` oferecem suporte automático para SRI, gerando os hashes necessários para os pacotes que servem [[11](https://www.jsdelivr.com/package/npm/webpack-subresource-integrity), [14](https://www.jsdelivr.com/package/npm/sub-resource-integrity-4-all)]. O SADDLE deve incorporar essa prática como uma medida de segurança padrão. Durante a definição de um "recurso", o framework deveria, idealmente, resolver os hashes SRI para todas as dependências de CDN e injetá-los na configuração de execução. Isso garantiria que mesmo que a conexão com o CDN fosse interceptada ou o CDN comprometido, o código executado pelo SADDLE permaneceria autêntico e não alterado.
51
-
52
- Para funcionar como um orquestrador, o SADDLE precisa de um mecanismo para definir, gerenciar e executar fluxos de trabalho compostos por múltiplos passos. Um fluxo de trabalho típico seria iniciado por um gatilho (um webhook recebido ou um evento de cron job), que aciona uma função principal. Essa função atua como o executor do orquestrador, lendo a definição do workflow e coordenando as invocações das "tarefas". Essa definição poderia ser feita em um formato estruturado como JSON ou YAML, similar ao que é usado em pipelines de CI/CD do GitHub Actions [[81](https://docs.github.com/en/packages/managing-github-packages-using-github-actions-workflows/example-workflows-for-publishing-a-package)] ou em ferramentas de orquestração de IA como o `@vahor/n8n-kit` [[54](https://github.com/Vahor/n8n-kit)]. Cada nó no workflow representaria uma tarefa, especificando o código a ser executado (inline, de um bucket, ou de um pacote de CDN), as dependências necessárias e os parâmetros de entrada.
53
-
54
- A implementação prática deste modelo de trabalho requer que o SADDLE forneça um executor de orquestração robusto. Este executor, dentro da função disparada, seria responsável por:
55
- 1. **Carregar a Definição do Workflow:** Ler o plano de trabalho, que pode estar armazenado em um banco de dados (usando Drizzle ORM), em um arquivo de configuração ou ser passado diretamente na chamada.
56
- 2. **Gerenciar o Estado:** Manter o estado entre as etapas do workflow. Dado que cada função é um ato isolado, o estado deve ser persistido externamente, por exemplo, em um bucket de objetos (usando uma VFS como `lowstorage` [[37](https://github.com/good-lly/lowstorage)]) ou em um banco de dados de baixa latência.
57
- 3. **Orquestrar as Tarefas:** Para cada etapa do workflow, o executor iniciaria a execução de um sandbox. Se a tarefa for um script JavaScript, ele seria executado em um V8 Isolate [[33](https://code2life.top/blog/0081-sandbox-research-2)]. Se for um pacote de CDN, o executor faria a importação dinâmica, verificando o SRI. Se for um binário, ele seria executado em um ambiente Wasm [[20](https://vercel.com/blog/introducing-support-for-webassembly-at-the-edge)].
58
- 4. **Passar Resultados:** O resultado da execução de uma tarefa (uma variável, um arquivo, uma string) seria salvo no armazenamento persistente e então passado como entrada para a próxima tarefa no fluxo.
59
-
60
- Essa abordagem de orquestração por invocações de função é semelhante à arquitetura de microsserviços. A complexidade reside no gerenciamento do fluxo de controle e na persistência de estado. O SADDLE precisaria fornecer abstrações de alto nível para simplificar essa complexidade para o usuário final, permitindo que eles definam seus workflows de forma declarativa. A integração com gatilhos é direta, pois tanto Vercel quanto Netlify oferecem suporte nativo para receber webhooks, que podem ser mapeados para disparar funções específicas [[35](https://supabase.com/docs/guides/functions), [63](https://github.com/orgs/supabase/discussions/22113)]. A funcionalidade de cron jobs também é um recurso padrão nestas plataformas, permitindo que os workflows do SADDLE sejam agendados para execução periódica [[34](https://vercel.com/crawled-sitemap.xml), [48](https://docs.netlify.com/build/functions/scheduled-functions/)]. A combinação de webhooks, cron jobs e uma estrutura de execução por funções permite que o SADDLE sirva como um gatilho para uma vasta gama de automações, desde a resposta a eventos externos (webhooks de pagamento, atualizações de repositório) até a execução de tarefas agendadas (limpeza de dados, geração de relatórios).
61
-
62
- Finalmente, a capacidade de executar pacotes externos de forma "inline" não se limita a CDNs. O SADDLE também poderia ser configurado para buscar pacotes de outros registros públicos, como npm, ou até mesmo de repositórios privados, desde que as credenciais de acesso sejam gerenciadas de forma segura. O uso de Subresource Integrity (SRI) continua sendo a prática recomendada para garantir a integridade desses pacotes, independentemente da origem. Ao combinar a execução de pacotes de CDN com a orquestração de fluxos de trabalho, o SADDLE pode se posicionar como uma poderosa ferramenta de computação distribuída, onde cada tarefa é um microserviço modular, executado de forma segura e eficiente em um ambiente serverless.
63
-
64
- ## Integração com Ecossistemas Externos: Repositórios, Registries e Bancos de Dados
65
-
66
- A viabilidade do SADDLE depende criticamente de sua capacidade de se integrar profundamente com os ecossistemas externos, transformando plataformas como Vercel e Netlify em um hub de computação que se conecta a repositórios de código, registries de pacotes e bancos de dados. Essa integração é o que permite ao framework realizar suas ações de "despejo" — depositando resultados em buckets, fazendo commits em repositórios e inserindo dados em bancos de dados. A interação com repositórios Git, como GitHub e GitLab, é um requisito fundamental. Isso pode ser alcançado de forma programática através das respectivas APIs REST. Para autenticar as operações, o SADDLE deve utilizar tokens de acesso pessoal (PATs), que podem ser armazenados de forma segura como credenciais gerenciadas pela plataforma (por exemplo, Secrets no Vercel/Netlify ou GitHub Actions) [[39](https://github.com/orgs/community/discussions/154459)]. Com um PAT válido, o SADDLE poderia executar uma variedade de operações, como fazer push de novos arquivos para um branch, criar novas branches ou, crucialmente, criar releases. Ferramentas como `theirix/gitlab-s3-releaser` demonstram um caso de uso onde um release é criado a partir de arquivos armazenados em um bucket S3, sincronizando o estado entre o armazenamento e o repositório [[70](https://github.com/theirix/gitlab-s3-releaser)]. O SADDLE poderia adaptar essa lógica, tomando os resultados de uma execução (por exemplo, um pacote de software compilado ou um conjunto de arquivos de modelo de IA) e utilizando-os como anexos para um novo release criado no GitHub ou GitLab. Essa capacidade de criar releases programaticamente é um passo crucial para automatizar pipelines de CI/CD e distribuição de software.
67
-
68
- A integração com registries de pacotes como npm, PyPI e NuGet é outra área vital. O SADDLE, ao ser um framework de computação, pode ser visto como uma ferramenta para construir e publicar pacotes. A capacidade de publicar em múltiplos registries simultaneamente é um cenário de "biblioteca unificada" que pode ser facilmente automatizado. Ferramentas como `publib` fornecem uma ferramenta unificada para publicar bibliotecas para múltiplos gerenciadores de pacotes, incluindo npm, PyPI, NuGet e Maven [[61](https://github.com/cdklabs/publib)]. Alternativamente, pipelines de CI/CD, como os do GitHub Actions, podem ser configurados para executar um fluxo de trabalho que constrói o pacote e depois o publica em vários registries [[81](https://docs.github.com/en/packages/managing-github-packages-using-github-actions-workflows/example-workflows-for-publishing-a-package)]. A documentação oficial da GitHub fornece exemplos detalhados de como publicar pacotes Node.js para o registro do GitHub e npm, e pacotes .NET para o registro do GitHub e NuGet [[41](https://docs.github.com/actions/publishing-packages/publishing-nodejs-packages), [78](https://docs.github.com/packages/working-with-a-github-packages-registry/working-with-the-npm-registry), [80](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-nuget-registry)]. Para pacotes Python, o fluxo de trabalho envolveria o uso de ferramentas como `twine` para carregar os pacotes distribuídos no diretório `dist/` para o PyPI ou para o registro do GitHub Packages [[39](https://github.com/orgs/community/discussions/154459), [98](https://github.com/marketplace/actions/pypi-publish)]. O SADDLE poderia encapsular essas complexidades em um único comando, onde um usuário define o pacote a ser publicado e os registries de destino, e o framework gerencia todo o processo de build, autenticação e upload. A autenticação geralmente é realizada usando o `GITHUB_TOKEN` dentro de um pipeline de CI/CD, que tem permissões configuráveis para publicar pacotes [[42](https://docs.github.com/en/packages/learn-github-packages/introduction-to-github-packages)].
69
-
70
- A interação com bancos de dados, especificamente através do Drizzle ORM, é um componente central para a persistência de dados. Drizzle ORM é uma excelente escolha para a arquitetura serverless do SADDLE devido à sua natureza leve e à ausência de geração de código, o que resulta em um pacote menor e tempos de inicialização mais rápidos, cruciais para ambientes de borda [[18](https://tech-insider.org/drizzle-orm-tutorial-typescript-postgres-2026/)]. Ele funciona como uma camada de tipo segura sobre SQL, inferindo tipos diretamente do esquema de banco de dados em tempo de compilação [[18](https://tech-insider.org/drizzle-orm-tutorial-typescript-postgres-2026/)]. No entanto, sua integração com plataformas como Vercel e Netlify apresenta um desafio significativo: a aplicação de migrações de banco de dados durante o processo de implantação. Como as funções de borda não têm acesso a um sistema de arquivos local, não é possível executar comandos de migração diretamente no ambiente de execução [[109](https://github.com/drizzle-team/drizzle-orm/issues/4142)]. A solução padrão da indústria é integrar a aplicação de migrações ao processo de build do projeto. O comando `drizzle-kit generate` é executado antes do build, gerando os arquivos SQL de migração, e o comando `drizzle-kit push` (ou um equivalente manual) é executado como parte do script de build no `package.json` (ex: `"build": "drizzle-kit push && next build"`), garantindo que o esquema do banco de dados esteja sempre atualizado antes que o novo código seja implantado [[17](https://www.reddit.com/r/nextjs/comments/1kvw39x/how_do_you_handle_migrations_with_drizzle_orm/), [18](https://tech-insider.org/drizzle-orm-tutorial-typescript-postgres-2026/)]. Vercel's skew protection ajuda a gerenciar essa transição de forma segura, evitando que clientes com sessões ativas sejam servidos por um backend com um esquema diferente do código que estão executando, o que poderia causar erros [[17](https://www.reddit.com/r/nextjs/comments/1kvw39x/how_do_you_handle_migrations_with_drizzle_orm/)].
71
-
72
- Para maximizar a performance e a compatibilidade, é crucial usar drivers de banco de dados específicos para serverless. Drizzle ORM recomenda o uso de drivers como `vercel-postgres` (para o serviço Vercel Postgres, que é compatível com Neon) ou `planetscale-serverless` (para PlanetScale), que são otimizados para gerenciar pools de conexões de forma eficiente em um ambiente sem estado [[36](https://orm.drizzle.team/docs/tutorials/drizzle-with-vercel-edge-functions)]. O SADDLE, ao usar Drizzle ORM, se beneficiaria desses drivers, permitindo-lhe executar consultas SQL de forma rápida e segura dentro de suas funções. A combinação de Drizzle ORM com o repository pattern é uma abordagem recomendada para construir aplicações escaláveis, e existem guias e bibliotecas disponíveis para ajudar a implementar esse padrão com o ORM [[58](https://medium.com/@vimulatus/repository-pattern-in-nest-js-with-drizzle-orm-e848aa75ecae), [59](https://gist.github.com/cayter/49d5c256a885d90c399ca6c1eca19f51), [85](https://gist.github.com/hyzyla/b075752e2b53467bf3b48daa27078ddc)]. O SADDLE poderia fornecer modelos e helpers para facilitar a implementação desse padrão, garantindo que as interações com o banco de dados sejam robustas e tipadas corretamente. Em suma, a integração com esses ecossistemas externos, embora complexa, é totalmente viável e é um pilar para o sucesso do SADDLE, permitindo que ele não apenas execute código, mas também interaja de forma produtiva com o resto da infraestrutura de TI.
73
-
74
- ## Execução Híbrida de Linguagens e Gatilhos de Trabalho
75
-
76
- Uma das propostas mais inovadoras e desafiadoras para o framework SADDLE é a sua capacidade de executar recursos computacionais em uma variedade de linguagens, indo além do JavaScript/Node.js, e de ser acionado por diferentes tipos de gatilhos, como webhooks e cron jobs. A execução de outras linguagens em um ambiente Node.js é um problema clássico da engenharia de software, e a solução para o SADDLE reside principalmente na WebAssembly (Wasm). Como discutido anteriormente, Wasm permite que código compilado de diversas linguagens, como Rust, C++, Go e até mesmo Python, seja executado em um ambiente seguro e com alto desempenho dentro de uma função serverless [[20](https://vercel.com/blog/introducing-support-for-webassembly-at-the-edge), [100](https://harshal.sheth.io/2022/01/31/webassembly.html)]. A biblioteca Pyodide é um exemplo proeminente desta abordagem para Python. Ela é uma distribuição completa do Python (CPython) compilada para Wasm, que inclui um interpretador e uma coleção de pacotes científicos populares pré-compilados [[55](https://pyodide.org/)]. É possível instalá-la como um pacote NPM (`npm install pyodide`) e usá-la para executar código Python diretamente no Node.js [[56](https://pyodide.org/en/stable/usage/index.html)]. Projetos como LangChain Sandbox já validaram a viabilidade de usar Pyodide para executar Python de forma segura em agentes de IA, destacando seu potencial para o SADDLE [[75](https://github.com/langchain-ai/langchain-sandbox), [76](https://www.linkedin.com/posts/sydney-runkle_langchain-sandbox-run-untrusted-python-safely-activity-7331029124641083395-ZkiW)].
77
-
78
- No entanto, é crucial entender as limitações de Pyodide. A principal delas é que ele não consegue executar pacotes PyPI que possuem extensões nativas escritas em C ou C++, pois essas extensões precisam ser compiladas para Wasm para funcionarem [[105](https://tech-insider.org/cloudflare-workers-vs-lambda-2026/)]. Isso exclui uma grande quantidade de bibliotecas populares em ciência de dados e machine learning. Para o SADDLE, isso significa que a execução de Python será eficaz para tarefas de script, análise de texto e modelos de ML leves, mas poderá falhar com bibliotecas mais complexas. Apesar disso, a capacidade de executar Python abre um universo de possibilidades, permitindo que os usuários aproveitem a vasta biblioteca de pacotes do ecossistema Python sem abandonar a infraestrutura Node.js do SADDLE. Outra tecnologia mencionada é o Pyright. É importante diferenciar seu propósito: Pyright é um verificador de tipos estático para Python, escrito em TypeScript e executado no Node.js [[30](https://www.facebook.com/groups/pythonph/posts/2139479236107867/), [31](https://www.datacamp.com/tutorial/pyright)]. Sua função é analisar código Python em busca de inconsistências de tipo antes da execução, não executar o código Python em si [[73](https://github.com/microsoft/pyright), [74](https://medium.com/@samunyi90/introduction-to-pyright-844d50409ad6)]. Portanto, Pyright não substitui a necessidade de um interpretador Python como o CPython em Pyodide. Para o SADDLE, Pyright poderia ser usado como uma ferramenta de linting estático dentro de um workflow, mas não como um mecanismo de execução.
79
-
80
- Além da execução de código, o SADDLE precisa de mecanismos robustos para ser acionado e iniciar seus trabalhos. Os webhooks são o principal gatilho para a computação assíncrona e baseada em eventos. Tanto Vercel quanto Netlify oferecem suporte nativo para receber webhooks e mapeá-los para disparar funções específicas [[35](https://supabase.com/docs/guides/functions), [63](https://github.com/orgs/supabase/discussions/22113)]. O SADDLE poderia expor um ponto de extremidade de webhook público que, quando acionado por um serviço externo (como Stripe, GitHub ou um aplicativo personalizado), iniciaria a execução de um workflow correspondente. Isso permite que o SADDLE reaja a eventos em tempo real, como pagamentos concluídos, pushes de código ou formulários enviados. A integração com o Docker é outro ponto relevante. Embora o foco do SADDLE seja em funções serverless, a capacidade de empacotar uma execução como um container Docker é uma opção poderosa para cargas de trabalho complexas que exigem um ambiente de dependência personalizado ou que não se encaixam bem no modelo de função curta. Vercel, por exemplo, permite que projetos que não podem ser executados com suas versões padrão do Node.js sejam implantados como imagens Docker, fornecendo flexibilidade para cargas de trabalho que não se encaixam no modelo de função curta [[52](https://vercel.com/changelog/node-js-20-is-being-deprecated)]. O SADDLE poderia, teoricamente, gerar e empacotar um Dockerfile para um "recurso" complexo, permitindo sua implantação como um serviço contêinerizado se necessário.
81
-
82
- A questão dos cron jobs é igualmente importante para tarefas agendadas. Ambas as plataformas, Vercel e Netlify, oferecem funcionalidades integradas para agendar a execução de funções. Vercel tem suporte nativo para cron jobs, permitindo que as funções sejam executadas em intervalos regulares definidos por uma expressão cron [[34](https://vercel.com/crawled-sitemap.xml)]. Da mesma forma, Netlify oferece Scheduled Functions, que funcionam de maneira semelhante e são acionadas por expressões cron ou macros de frequência como `@hourly` [[48](https://docs.netlify.com/build/functions/scheduled-functions/)]. Essa capacidade elimina a necessidade de depender de serviços externos para agendamento, como Cloud Scheduler da Google ou QStash da Upstash [[103](https://cloud.google.com/blog/products/application-development/cloud-scheduler-a-fully-managed-cron-job-service-from-google-cloud), [108](https://news.ycombinator.com/item?id=34056812)]. Para o SADDLE, isso significa que ele pode ser configurado para executar periodicamente tarefas como raspagem de websites, limpeza de caches, sincronização de dados ou qualquer outro trabalho de automação que precise ser realizado em um horário predefinido. A combinação de gatilhos por webhook para eventos imediatos e cron jobs para tarefas periódicas cria uma plataforma de computação versátil e poderosa. A tabela abaixo resume as capacidades de gatilho das plataformas-chave.
83
-
84
- | Tipo de Gatilho | Vercel | Netlify | Capacidade do SADDLE |
85
- | :--- | :--- | :--- | :--- |
86
- | **Webhook (HTTP Request)** | Sim, via `vercel.json` ou CLI [[63](https://github.com/orgs/supabase/discussions/22113)] | Sim, via `netlify.toml` ou UI [[26](https://docs.netlify.com/build/functions/overview/)] | Totalmente viável |
87
- | **Cron Job** | Sim, suporte nativo integrado [[34](https://vercel.com/crawled-sitemap.xml)] | Sim, via Scheduled Functions [[48](https://docs.netlify.com/build/functions/scheduled-functions/)] | Totalmente viável |
88
- | **Agendamento Personalizado** | Limitado às funcionalidades nativas [[106](https://northflank.com/blog/vercel-backend-limitations)] | Limitado às funcionalidades nativas [[48](https://docs.netlify.com/build/functions/scheduled-functions/)] | Requer integração com serviços externos (ex: QStash) [[108](https://news.ycombinator.com/item?id=34056812)] |
89
- | **Início por Push** | Sim, integração com Git [[34](https://vercel.com/crawled-sitemap.xml)] | Sim, integração com Git [[26](https://docs.netlify.com/build/functions/overview/)] | Totalmente viável |
90
- | **Formulário de Site** | Sim, via `deploySucceeded` ou outros eventos [[26](https://docs.netlify.com/build/functions/overview/)] | Sim, via `deploySucceeded` ou outros eventos [[26](https://docs.netlify.com/build/functions/overview/)] | Totalmente viável |
91
-
92
- Em conclusão, a execução híbrida de linguagens e os múltiplos mecanismos de gatilho são fundamentais para a visão do SADDLE. Utilizando a WebAssembly como uma ponte, o framework pode transcender as limitações do ambiente Node.js e executar código de outras linguagens de forma segura. Combinado com a capacidade nativa de responder a webhooks e cron jobs, o SADDLE se posiciona como uma plataforma de computação universal, apta a automatizar uma vasta gama de tarefas, de processamento de eventos em tempo real a execuções de tarefas periódicas complexas.
93
-
94
- ## Síntese Estratégica e Proposta de Ciclo de Vida Integrado
95
-
96
- Após uma análise aprofundada das tecnologias e práticas de engenharia contemporâneas, a viabilidade técnica do framework SADDLE emerge como altamente plausível. O projeto não representa a invenção de novos paradigmas, mas sim a orquestração inteligente e integrada de componentes e tecnologias maduras e amplamente adotadas no ecossistema moderno de desenvolvimento. A arquitetura serverless das plataformas Vercel e Netlify serve como o núcleo de execução, fornecendo escalabilidade, eficiência e um conjunto rico de serviços integrados. A principal tese desta pesquisa é que o sucesso do SADDLE não dependerá da criação de novas tecnologias, mas da habilidade de construir um executor de orquestração robusto que integre de forma coesa a segurança de sandbox, a flexibilidade de execução de pacotes de CDN, a persistência de estado através de armazenamento remoto e a interação com ecossistemas externos como repositórios e registries de pacotes.
97
-
98
- A viabilidade de cada componente individual foi validada:
99
- * **Execução Segura:** O uso de V8 Isolates para código JavaScript e WebAssembly para binários e outras linguagens (via Pyodide) oferece um ambiente de execução seguro e performático, superando as vulnerabilidades de soluções antigas como `vm2` [[33](https://code2life.top/blog/0081-sandbox-research-2), [55](https://pyodide.org/)].
100
- * **Modularidade e Dependências:** A execução de pacotes de forma "inline" via esm.sh e jsDelivr é uma prática viável e eficiente, desde que protegida por Subresource Integrity (SRI) para mitigar riscos de cadeia de suprimentos [[11](https://www.jsdelivr.com/package/npm/webpack-subresource-integrity), [15](https://andrewlock.net/avoiding-cdn-supply-chain-attacks-with-subresource-integrity/)].
101
- * **Persistência de Estado:** A ideia de usar armazenamento (buckets, bancos de dados) como memória expandida é factível através de sistemas de arquivos virtuais (VFS) como `lowstorage` e a abstração de APIs de armazenamento com bibliotecas como `storagesdk.dev` [[37](https://github.com/good-lly/lowstorage), [84](https://www.tigrisdata.com/blog/storagesdk/)].
102
- * **Orquestração e Gatilhos:** A plataforma serverless oferece suporte nativo para webhooks e cron jobs, fornecendo os gatilhos necessários para iniciar os workflows do SADDLE [[48](https://docs.netlify.com/build/functions/scheduled-functions/), [63](https://github.com/orgs/supabase/discussions/22113)].
103
- * **Integração com Ecossistemas:** A interação com repositórios Git, registries de pacotes (npm, PyPI, NuGet) e bancos de dados (via Drizzle ORM) é bem suportada por APIs e ferramentas de CI/CD, permitindo que o SADDLE cumpra suas promessas de "despejo" de dados em múltiplos destinos [[7](https://packaging.python.org/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/), [18](https://tech-insider.org/drizzle-orm-tutorial-typescript-postgres-2026/), [41](https://docs.github.com/actions/publishing-packages/publishing-nodejs-packages)].
104
-
105
- A principal incerteza e o maior desafio técnico residem na engenharia de integrar todos esses componentes em um ciclo de vida coeso e confiável. Gerenciar o estado de um workflow que pode ser dividido em múltiplas invocações de função transitória, garantir a segurança em cada etapa de execução de código externo e manter a consistência entre as diferentes partes do sistema são problemas complexos que exigirão um design de software cuidadoso. A recomendação estratégica é que o projeto SADDLE comece como uma ferramenta de linha de comando (CLI) que automatiza a geração e o gerenciamento dos artefatos (funções, configurações de rede, credenciais) para Vercel e Netlify. Isso abstrairia a complexidade da implantação e permitiria que os desenvolvedores se concentrassem na lógica de seus "recursos".
106
-
107
- Com base na análise, podemos propor um ciclo de vida integrado e detalhado para o SADDLE, que descreve o fluxo desde a definição de um recurso até a sua execução e persistência de resultados:
108
-
109
- 1. **Definição do Recurso (Package Definition):** O ciclo começa com um usuário definindo um "recurso" computacional. Este recurso é descrito por um arquivo de definição (JSON/YAML), que especifica:
110
- * **Gatilhos:** Como o recurso deve ser acionado (ex: um webhook para `/api/process-image`, um cron job `@daily`).
111
- * **Workflow Steps:** Uma sequência de etapas a serem executadas. Cada etapa pode ser um bloco de código JavaScript/TypeScript inline, a importação de um pacote de um URL de CDN (ex: `https://esm.sh/lodash-es`), ou a execução de um binário/Wasm.
112
- * **Dependências:** Listas de pacotes de CDN, com seus hashes SRI associados, para garantir a integridade.
113
- * **Ações de Despejo (Dump):** O que fazer com os resultados após a execução. Isso pode incluir fazer upload para um bucket Vercel Blob, fazer commit em um branch de um repositório GitHub, inserir dados em uma tabela do banco de dados via Drizzle ORM, ou enviar uma notificação por webhook.
114
-
115
- 2. **Implantação e Empacotamento (Deployment & Packaging):** O usuário utiliza a CLI do SADDLE para implantar o recurso. A CLI analisa o arquivo de definição e gera a infraestrutura necessária para a plataforma de destino (Vercel/Netlify). Se o recurso for um pacote público, a CLI pode configurar um pipeline de CI/CD (ex: GitHub Actions) para construir e publicar o pacote em múltiplos registries (npm, PyPI, etc.) sempre que o código principal for atualizado [[41](https://docs.github.com/actions/publishing-packages/publishing-nodejs-packages), [61](https://github.com/cdklabs/publib)]. Caso contrário, ele simplesmente cria as funções e configurações de webhook/cron necessárias na plataforma.
116
-
117
- 3. **Invocação (Trigger):** O workflow é iniciado por um evento externo. Um cliente faz uma requisição POST para o endpoint de webhook do SADDLE, ou uma hora marcada pelo cron job aciona a função correspondente.
118
-
119
- 4. **Execução e Persistência (Execution & Persistence):** A plataforma serverless dispara a função de orquestrador. Dentro da função, o executor do SADDLE:
120
- * **Recupera o Contexto:** Carrega a definição do workflow e o estado da execução anterior (se houver) de um armazenamento persistente (ex: um bucket ou um banco de dados).
121
- * **Executa a Próxima Etapa:** Inicia um sandbox (V8 Isolate ou Wasm) para executar a próxima etapa do workflow. Ele baixa e verifica os pacotes de CDN usando SRI. O código da etapa é executado dentro do sandbox isolado.
122
- * **Coleta o Resultado:** O resultado da execução (dados, arquivos, status) é capturado.
123
- * **Realiza o Despejo:** O executor do SADDLE executa as ações de "despejo" configuradas: faz upload do resultado para um bucket, cria um commit no repositório, insere registros no banco de dados com Drizzle ORM, etc.
124
- * **Atualiza o Estado:** O estado da execução é salvo novamente no armazenamento persistente, incluindo o resultado da etapa recente, para ser usado na próxima iteração do loop ou por um monitoramento posterior.
125
-
126
- 5. **Retorno (Response):** Se a invocação foi iniciada por uma requisição HTTP (webhook), a função retorna uma resposta ao cliente, geralmente contendo um ID de execução único para que o cliente possa monitorar o progresso do workflow assincronamente.
127
-
128
- Este ciclo de vida demonstra como o SADDLE pode unificar as funcionalidades de sandbox, VM, webhook, orquestrador e integrações múltiplas em uma única plataforma coerente. Ao capitalizar as fortalezas das plataformas serverless e as soluções especializadas para cada desafio técnico, o SADDLE pode se materializar como uma poderosa ferramenta de computação distribuída e serverless-first, capaz de executar uma gama impressionante de cargas de trabalho de forma segura, escalável e econômica.