@wenathlan/saddle 1.8.7 → 1.8.9

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 (751) hide show
  1. package/README.md +18 -18
  2. package/dist/adapters/forge.d.ts +17 -0
  3. package/dist/adapters/forge.d.ts.map +1 -0
  4. package/dist/adapters/forge.js +19 -0
  5. package/dist/adapters/forge.js.map +1 -0
  6. package/dist/adapters/forgejo.d.ts +49 -0
  7. package/dist/adapters/forgejo.d.ts.map +1 -0
  8. package/{adapters → dist/adapters}/forgejo.js +1 -1
  9. package/dist/adapters/forgejo.js.map +1 -0
  10. package/dist/adapters/github.d.ts +12 -0
  11. package/dist/adapters/github.d.ts.map +1 -0
  12. package/dist/adapters/github.js +20 -0
  13. package/dist/adapters/github.js.map +1 -0
  14. package/dist/adapters/gitlab.d.ts +17 -0
  15. package/dist/adapters/gitlab.d.ts.map +1 -0
  16. package/dist/adapters/gitlab.js +10 -0
  17. package/dist/adapters/gitlab.js.map +1 -0
  18. package/dist/adapters/huggingface.d.ts +17 -0
  19. package/dist/adapters/huggingface.d.ts.map +1 -0
  20. package/{adapters → dist/adapters}/huggingface.js +1 -1
  21. package/dist/adapters/huggingface.js.map +1 -0
  22. package/dist/adapters/socket.d.ts +11 -0
  23. package/dist/adapters/socket.d.ts.map +1 -0
  24. package/dist/adapters/socket.js +17 -0
  25. package/dist/adapters/socket.js.map +1 -0
  26. package/dist/adapters/transport.d.ts +7 -0
  27. package/dist/adapters/transport.d.ts.map +1 -0
  28. package/dist/adapters/transport.js +36 -0
  29. package/dist/adapters/transport.js.map +1 -0
  30. package/dist/ai/chunk.d.ts +2 -0
  31. package/dist/ai/chunk.d.ts.map +1 -0
  32. package/dist/ai/chunk.js +36 -0
  33. package/dist/ai/chunk.js.map +1 -0
  34. package/dist/ai/llmstxt.d.ts +6 -0
  35. package/dist/ai/llmstxt.d.ts.map +1 -0
  36. package/dist/ai/llmstxt.js +12 -0
  37. package/dist/ai/llmstxt.js.map +1 -0
  38. package/dist/ai/provenance.d.ts +22 -0
  39. package/dist/ai/provenance.d.ts.map +1 -0
  40. package/dist/ai/provenance.js +25 -0
  41. package/dist/ai/provenance.js.map +1 -0
  42. package/dist/ai/rag.d.ts +26 -0
  43. package/dist/ai/rag.d.ts.map +1 -0
  44. package/dist/ai/rag.js +22 -0
  45. package/dist/ai/rag.js.map +1 -0
  46. package/dist/ai/tokens.d.ts +15 -0
  47. package/dist/ai/tokens.d.ts.map +1 -0
  48. package/{ai → dist/ai}/tokens.js +1 -1
  49. package/dist/ai/tokens.js.map +1 -0
  50. package/dist/api/auth.d.ts +16 -0
  51. package/dist/api/auth.d.ts.map +1 -0
  52. package/dist/api/auth.js +19 -0
  53. package/dist/api/auth.js.map +1 -0
  54. package/dist/api/contracts.d.ts +28 -0
  55. package/dist/api/contracts.d.ts.map +1 -0
  56. package/{api → dist/api}/contracts.js +3 -6
  57. package/dist/api/contracts.js.map +1 -0
  58. package/dist/api/control.d.ts +10 -0
  59. package/dist/api/control.d.ts.map +1 -0
  60. package/dist/api/control.js +35 -0
  61. package/dist/api/control.js.map +1 -0
  62. package/dist/api/http.d.ts +7 -0
  63. package/dist/api/http.d.ts.map +1 -0
  64. package/{api → dist/api}/http.js +5 -5
  65. package/dist/api/http.js.map +1 -0
  66. package/dist/api/rate.d.ts +28 -0
  67. package/dist/api/rate.d.ts.map +1 -0
  68. package/dist/api/rate.js +36 -0
  69. package/dist/api/rate.js.map +1 -0
  70. package/dist/api/security.d.ts +12 -0
  71. package/dist/api/security.d.ts.map +1 -0
  72. package/dist/api/security.js +56 -0
  73. package/dist/api/security.js.map +1 -0
  74. package/dist/api/service.d.ts +5 -0
  75. package/dist/api/service.d.ts.map +1 -0
  76. package/dist/api/service.js +70 -0
  77. package/dist/api/service.js.map +1 -0
  78. package/dist/apps/registry.d.ts +33 -0
  79. package/dist/apps/registry.d.ts.map +1 -0
  80. package/dist/apps/registry.js +24 -0
  81. package/dist/apps/registry.js.map +1 -0
  82. package/dist/binary/build.d.ts +29 -0
  83. package/dist/binary/build.d.ts.map +1 -0
  84. package/dist/binary/build.js +17 -0
  85. package/dist/binary/build.js.map +1 -0
  86. package/dist/bot/adapter.d.ts +5 -0
  87. package/dist/bot/adapter.d.ts.map +1 -0
  88. package/dist/bot/adapter.js +11 -0
  89. package/dist/bot/adapter.js.map +1 -0
  90. package/dist/bot/bot.d.ts +28 -0
  91. package/dist/bot/bot.d.ts.map +1 -0
  92. package/dist/bot/bot.js +52 -0
  93. package/dist/bot/bot.js.map +1 -0
  94. package/dist/bot/commands.d.ts +8 -0
  95. package/dist/bot/commands.d.ts.map +1 -0
  96. package/dist/bot/commands.js +19 -0
  97. package/dist/bot/commands.js.map +1 -0
  98. package/dist/bot/permissions.d.ts +13 -0
  99. package/dist/bot/permissions.d.ts.map +1 -0
  100. package/dist/bot/permissions.js +16 -0
  101. package/dist/bot/permissions.js.map +1 -0
  102. package/dist/browser/actions.d.ts +33 -0
  103. package/dist/browser/actions.d.ts.map +1 -0
  104. package/dist/browser/actions.js +44 -0
  105. package/dist/browser/actions.js.map +1 -0
  106. package/dist/browser/agent.d.ts +21 -0
  107. package/dist/browser/agent.d.ts.map +1 -0
  108. package/dist/browser/agent.js +13 -0
  109. package/dist/browser/agent.js.map +1 -0
  110. package/dist/browser/context.d.ts +43 -0
  111. package/dist/browser/context.d.ts.map +1 -0
  112. package/dist/browser/context.js +54 -0
  113. package/dist/browser/context.js.map +1 -0
  114. package/dist/browser/fingerprint.d.ts +4 -0
  115. package/dist/browser/fingerprint.d.ts.map +1 -0
  116. package/{browser → dist/browser}/fingerprint.js +4 -4
  117. package/dist/browser/fingerprint.js.map +1 -0
  118. package/dist/browser/index.d.ts +11 -0
  119. package/dist/browser/index.d.ts.map +1 -0
  120. package/{browser → dist/browser}/index.js +1 -0
  121. package/dist/browser/index.js.map +1 -0
  122. package/dist/browser/playwright.d.ts +11 -0
  123. package/dist/browser/playwright.d.ts.map +1 -0
  124. package/dist/browser/playwright.js +24 -0
  125. package/dist/browser/playwright.js.map +1 -0
  126. package/dist/browser/recorder.d.ts +27 -0
  127. package/dist/browser/recorder.d.ts.map +1 -0
  128. package/dist/browser/recorder.js +22 -0
  129. package/dist/browser/recorder.js.map +1 -0
  130. package/dist/browser/session.d.ts +14 -0
  131. package/dist/browser/session.d.ts.map +1 -0
  132. package/dist/browser/session.js +21 -0
  133. package/dist/browser/session.js.map +1 -0
  134. package/dist/browser/snapshot.d.ts +57 -0
  135. package/dist/browser/snapshot.d.ts.map +1 -0
  136. package/dist/browser/snapshot.js +57 -0
  137. package/dist/browser/snapshot.js.map +1 -0
  138. package/dist/captcha/contract.d.ts +35 -0
  139. package/dist/captcha/contract.d.ts.map +1 -0
  140. package/dist/captcha/contract.js +17 -0
  141. package/dist/captcha/contract.js.map +1 -0
  142. package/dist/captcha/evidence.d.ts +10 -0
  143. package/dist/captcha/evidence.d.ts.map +1 -0
  144. package/dist/captcha/evidence.js +9 -0
  145. package/dist/captcha/evidence.js.map +1 -0
  146. package/dist/captcha/guard.d.ts +23 -0
  147. package/dist/captcha/guard.d.ts.map +1 -0
  148. package/dist/captcha/guard.js +12 -0
  149. package/dist/captcha/guard.js.map +1 -0
  150. package/dist/cli/main.d.ts +4 -0
  151. package/dist/cli/main.d.ts.map +1 -0
  152. package/dist/cli/main.js +46 -0
  153. package/dist/cli/main.js.map +1 -0
  154. package/dist/core/errors.d.ts +84 -0
  155. package/dist/core/errors.d.ts.map +1 -0
  156. package/dist/core/errors.js +54 -0
  157. package/dist/core/errors.js.map +1 -0
  158. package/dist/core/events.d.ts +9 -0
  159. package/dist/core/events.d.ts.map +1 -0
  160. package/dist/core/events.js +21 -0
  161. package/dist/core/events.js.map +1 -0
  162. package/dist/core/hash.d.ts +10 -0
  163. package/dist/core/hash.d.ts.map +1 -0
  164. package/dist/core/hash.js +82 -0
  165. package/dist/core/hash.js.map +1 -0
  166. package/dist/core/ids.d.ts +10 -0
  167. package/dist/core/ids.d.ts.map +1 -0
  168. package/dist/core/ids.js +15 -0
  169. package/dist/core/ids.js.map +1 -0
  170. package/dist/deploy/index.d.ts +6 -0
  171. package/dist/deploy/index.d.ts.map +1 -0
  172. package/dist/deploy/index.js +6 -0
  173. package/dist/deploy/index.js.map +1 -0
  174. package/dist/dispatch/resumable.d.ts +85 -0
  175. package/dist/dispatch/resumable.d.ts.map +1 -0
  176. package/dist/dispatch/resumable.js +39 -0
  177. package/dist/dispatch/resumable.js.map +1 -0
  178. package/dist/dispatch/workflow.d.ts +6 -0
  179. package/dist/dispatch/workflow.d.ts.map +1 -0
  180. package/dist/dispatch/workflow.js +37 -0
  181. package/dist/dispatch/workflow.js.map +1 -0
  182. package/dist/domain/artifacts.d.ts +12 -0
  183. package/dist/domain/artifacts.d.ts.map +1 -0
  184. package/dist/domain/artifacts.js +14 -0
  185. package/dist/domain/artifacts.js.map +1 -0
  186. package/dist/domain/jobs.d.ts +12 -0
  187. package/dist/domain/jobs.d.ts.map +1 -0
  188. package/dist/domain/jobs.js +20 -0
  189. package/dist/domain/jobs.js.map +1 -0
  190. package/dist/domain/providers.d.ts +10 -0
  191. package/dist/domain/providers.d.ts.map +1 -0
  192. package/{domain → dist/domain}/providers.js +2 -2
  193. package/dist/domain/providers.js.map +1 -0
  194. package/dist/domain/runtime.d.ts +14 -0
  195. package/dist/domain/runtime.d.ts.map +1 -0
  196. package/{domain → dist/domain}/runtime.js +3 -3
  197. package/dist/domain/runtime.js.map +1 -0
  198. package/dist/domain/sessions.d.ts +12 -0
  199. package/dist/domain/sessions.d.ts.map +1 -0
  200. package/dist/domain/sessions.js +57 -0
  201. package/dist/domain/sessions.js.map +1 -0
  202. package/dist/examples/localjob.d.ts +2 -0
  203. package/dist/examples/localjob.d.ts.map +1 -0
  204. package/{examples → dist/examples}/localjob.js +1 -1
  205. package/dist/examples/localjob.js.map +1 -0
  206. package/dist/examples/publicapi.d.ts +2 -0
  207. package/dist/examples/publicapi.d.ts.map +1 -0
  208. package/{examples → dist/examples}/publicapi.js +1 -1
  209. package/dist/examples/publicapi.js.map +1 -0
  210. package/dist/extension/build.d.ts +9 -0
  211. package/dist/extension/build.d.ts.map +1 -0
  212. package/dist/extension/build.js +61 -0
  213. package/dist/extension/build.js.map +1 -0
  214. package/dist/extension/content.d.ts +6 -0
  215. package/dist/extension/content.d.ts.map +1 -0
  216. package/dist/extension/content.js +135 -0
  217. package/dist/extension/content.js.map +1 -0
  218. package/dist/extension/index.d.ts +7 -0
  219. package/dist/extension/index.d.ts.map +1 -0
  220. package/{extension → dist/extension}/index.js +1 -0
  221. package/dist/extension/index.js.map +1 -0
  222. package/dist/extension/pagebridge.d.ts +6 -0
  223. package/dist/extension/pagebridge.d.ts.map +1 -0
  224. package/dist/extension/pagebridge.js +42 -0
  225. package/dist/extension/pagebridge.js.map +1 -0
  226. package/dist/extension/permissions.d.ts +26 -0
  227. package/dist/extension/permissions.d.ts.map +1 -0
  228. package/dist/extension/permissions.js +28 -0
  229. package/dist/extension/permissions.js.map +1 -0
  230. package/dist/extension/popup.d.ts +5 -0
  231. package/dist/extension/popup.d.ts.map +1 -0
  232. package/dist/extension/popup.js +26 -0
  233. package/dist/extension/popup.js.map +1 -0
  234. package/dist/extension/protocol.d.ts +58 -0
  235. package/dist/extension/protocol.d.ts.map +1 -0
  236. package/dist/extension/protocol.js +101 -0
  237. package/dist/extension/protocol.js.map +1 -0
  238. package/dist/extension/serviceworker.d.ts +25 -0
  239. package/dist/extension/serviceworker.d.ts.map +1 -0
  240. package/dist/extension/serviceworker.js +102 -0
  241. package/dist/extension/serviceworker.js.map +1 -0
  242. package/dist/extension/worker.d.ts +28 -0
  243. package/dist/extension/worker.d.ts.map +1 -0
  244. package/dist/extension/worker.js +22 -0
  245. package/dist/extension/worker.js.map +1 -0
  246. package/dist/format/check.d.ts +8 -0
  247. package/dist/format/check.d.ts.map +1 -0
  248. package/dist/format/check.js +38 -0
  249. package/dist/format/check.js.map +1 -0
  250. package/dist/index.d.ts +117 -0
  251. package/dist/index.d.ts.map +1 -0
  252. package/{index.js → dist/index.js} +3 -7
  253. package/dist/index.js.map +1 -0
  254. package/dist/library/public.d.ts +53 -0
  255. package/dist/library/public.d.ts.map +1 -0
  256. package/dist/library/public.js +83 -0
  257. package/dist/library/public.js.map +1 -0
  258. package/dist/mcp/browser.d.ts +9 -0
  259. package/dist/mcp/browser.d.ts.map +1 -0
  260. package/dist/mcp/browser.js +13 -0
  261. package/dist/mcp/browser.js.map +1 -0
  262. package/dist/mcp/server.d.ts +35 -0
  263. package/dist/mcp/server.d.ts.map +1 -0
  264. package/dist/mcp/server.js +40 -0
  265. package/dist/mcp/server.js.map +1 -0
  266. package/dist/mcp/transport.d.ts +7 -0
  267. package/dist/mcp/transport.d.ts.map +1 -0
  268. package/dist/mcp/transport.js +17 -0
  269. package/dist/mcp/transport.js.map +1 -0
  270. package/dist/memory/bridge.d.ts +14 -0
  271. package/dist/memory/bridge.d.ts.map +1 -0
  272. package/dist/memory/bridge.js +16 -0
  273. package/dist/memory/bridge.js.map +1 -0
  274. package/dist/memory/engine.d.ts +28 -0
  275. package/dist/memory/engine.d.ts.map +1 -0
  276. package/dist/memory/engine.js +59 -0
  277. package/dist/memory/engine.js.map +1 -0
  278. package/dist/memory/modes.d.ts +43 -0
  279. package/dist/memory/modes.d.ts.map +1 -0
  280. package/dist/memory/modes.js +66 -0
  281. package/dist/memory/modes.js.map +1 -0
  282. package/dist/memory/objects.d.ts +21 -0
  283. package/dist/memory/objects.d.ts.map +1 -0
  284. package/dist/memory/objects.js +20 -0
  285. package/dist/memory/objects.js.map +1 -0
  286. package/dist/memory/targets.d.ts +78 -0
  287. package/dist/memory/targets.d.ts.map +1 -0
  288. package/dist/memory/targets.js +29 -0
  289. package/dist/memory/targets.js.map +1 -0
  290. package/dist/memory/transforms.d.ts +19 -0
  291. package/dist/memory/transforms.d.ts.map +1 -0
  292. package/dist/memory/transforms.js +14 -0
  293. package/dist/memory/transforms.js.map +1 -0
  294. package/dist/modes/matrix.d.ts +23 -0
  295. package/dist/modes/matrix.d.ts.map +1 -0
  296. package/{modes → dist/modes}/matrix.js +8 -10
  297. package/dist/modes/matrix.js.map +1 -0
  298. package/dist/modes/modes.d.ts +33 -0
  299. package/dist/modes/modes.d.ts.map +1 -0
  300. package/{modes → dist/modes}/modes.js +3 -4
  301. package/dist/modes/modes.js.map +1 -0
  302. package/dist/modes/resolve.d.ts +41 -0
  303. package/dist/modes/resolve.d.ts.map +1 -0
  304. package/dist/modes/resolve.js +39 -0
  305. package/dist/modes/resolve.js.map +1 -0
  306. package/dist/observability/metrics.d.ts +14 -0
  307. package/dist/observability/metrics.d.ts.map +1 -0
  308. package/dist/observability/metrics.js +18 -0
  309. package/dist/observability/metrics.js.map +1 -0
  310. package/dist/packager/manifest.d.ts +49 -0
  311. package/dist/packager/manifest.d.ts.map +1 -0
  312. package/dist/packager/manifest.js +49 -0
  313. package/dist/packager/manifest.js.map +1 -0
  314. package/dist/packager/publish.d.ts +51 -0
  315. package/dist/packager/publish.d.ts.map +1 -0
  316. package/dist/packager/publish.js +18 -0
  317. package/dist/packager/publish.js.map +1 -0
  318. package/dist/packager/targetcli.d.ts +7 -0
  319. package/dist/packager/targetcli.d.ts.map +1 -0
  320. package/dist/packager/targetcli.js +22 -0
  321. package/dist/packager/targetcli.js.map +1 -0
  322. package/dist/persistence/adapter.d.ts +5 -0
  323. package/dist/persistence/adapter.d.ts.map +1 -0
  324. package/dist/persistence/adapter.js +11 -0
  325. package/dist/persistence/adapter.js.map +1 -0
  326. package/dist/persistence/drizzle.d.ts +2 -0
  327. package/dist/persistence/drizzle.d.ts.map +1 -0
  328. package/dist/persistence/drizzle.js +12 -0
  329. package/dist/persistence/drizzle.js.map +1 -0
  330. package/dist/persistence/memory.d.ts +2 -0
  331. package/dist/persistence/memory.d.ts.map +1 -0
  332. package/dist/persistence/memory.js +27 -0
  333. package/dist/persistence/memory.js.map +1 -0
  334. package/dist/persistence/migrations.d.ts +19 -0
  335. package/dist/persistence/migrations.d.ts.map +1 -0
  336. package/{persistence → dist/persistence}/migrations.js +4 -5
  337. package/dist/persistence/migrations.js.map +1 -0
  338. package/dist/persistence/prisma.d.ts +2 -0
  339. package/dist/persistence/prisma.d.ts.map +1 -0
  340. package/dist/persistence/prisma.js +25 -0
  341. package/dist/persistence/prisma.js.map +1 -0
  342. package/dist/persistence/schema.d.ts +63 -0
  343. package/dist/persistence/schema.d.ts.map +1 -0
  344. package/dist/persistence/schema.js +28 -0
  345. package/dist/persistence/schema.js.map +1 -0
  346. package/dist/persistence/sql.d.ts +3 -0
  347. package/dist/persistence/sql.d.ts.map +1 -0
  348. package/dist/persistence/sql.js +37 -0
  349. package/dist/persistence/sql.js.map +1 -0
  350. package/dist/protocol/blocks.d.ts +10 -0
  351. package/dist/protocol/blocks.d.ts.map +1 -0
  352. package/dist/protocol/blocks.js +26 -0
  353. package/dist/protocol/blocks.js.map +1 -0
  354. package/dist/protocol/json.d.ts +6 -0
  355. package/dist/protocol/json.d.ts.map +1 -0
  356. package/{protocol → dist/protocol}/json.js +1 -0
  357. package/dist/protocol/json.js.map +1 -0
  358. package/dist/protocol/ndjson.d.ts +3 -0
  359. package/dist/protocol/ndjson.d.ts.map +1 -0
  360. package/dist/protocol/ndjson.js +20 -0
  361. package/dist/protocol/ndjson.js.map +1 -0
  362. package/dist/protocol/sse.d.ts +7 -0
  363. package/dist/protocol/sse.d.ts.map +1 -0
  364. package/dist/protocol/sse.js +25 -0
  365. package/dist/protocol/sse.js.map +1 -0
  366. package/dist/proxy/pool.d.ts +9 -0
  367. package/dist/proxy/pool.d.ts.map +1 -0
  368. package/dist/proxy/pool.js +27 -0
  369. package/dist/proxy/pool.js.map +1 -0
  370. package/dist/queue/idempotency.d.ts +10 -0
  371. package/dist/queue/idempotency.d.ts.map +1 -0
  372. package/dist/queue/idempotency.js +13 -0
  373. package/dist/queue/idempotency.js.map +1 -0
  374. package/dist/queue/persistent.d.ts +13 -0
  375. package/dist/queue/persistent.d.ts.map +1 -0
  376. package/dist/queue/persistent.js +49 -0
  377. package/dist/queue/persistent.js.map +1 -0
  378. package/dist/queue/queue.d.ts +7 -0
  379. package/dist/queue/queue.d.ts.map +1 -0
  380. package/dist/queue/queue.js +55 -0
  381. package/dist/queue/queue.js.map +1 -0
  382. package/dist/queue/saga.d.ts +5 -0
  383. package/dist/queue/saga.d.ts.map +1 -0
  384. package/dist/queue/saga.js +20 -0
  385. package/dist/queue/saga.js.map +1 -0
  386. package/dist/release/assets.d.ts +118 -0
  387. package/dist/release/assets.d.ts.map +1 -0
  388. package/dist/release/assets.js +69 -0
  389. package/dist/release/assets.js.map +1 -0
  390. package/dist/runners/health.d.ts +36 -0
  391. package/dist/runners/health.d.ts.map +1 -0
  392. package/dist/runners/health.js +26 -0
  393. package/dist/runners/health.js.map +1 -0
  394. package/dist/runners/heartbeat.d.ts +23 -0
  395. package/dist/runners/heartbeat.d.ts.map +1 -0
  396. package/dist/runners/heartbeat.js +29 -0
  397. package/dist/runners/heartbeat.js.map +1 -0
  398. package/dist/runners/inprocess.d.ts +17 -0
  399. package/dist/runners/inprocess.d.ts.map +1 -0
  400. package/dist/runners/inprocess.js +20 -0
  401. package/dist/runners/inprocess.js.map +1 -0
  402. package/dist/runners/scheduler.d.ts +5 -0
  403. package/dist/runners/scheduler.d.ts.map +1 -0
  404. package/dist/runners/scheduler.js +19 -0
  405. package/dist/runners/scheduler.js.map +1 -0
  406. package/dist/runtime/abort.d.ts +8 -0
  407. package/dist/runtime/abort.d.ts.map +1 -0
  408. package/dist/runtime/abort.js +13 -0
  409. package/dist/runtime/abort.js.map +1 -0
  410. package/dist/runtime/compatibility.d.ts +37 -0
  411. package/dist/runtime/compatibility.d.ts.map +1 -0
  412. package/{runtime → dist/runtime}/compatibility.js +1 -4
  413. package/dist/runtime/compatibility.js.map +1 -0
  414. package/dist/runtime/detect.d.ts +13 -0
  415. package/dist/runtime/detect.d.ts.map +1 -0
  416. package/dist/runtime/detect.js +18 -0
  417. package/dist/runtime/detect.js.map +1 -0
  418. package/dist/runtime/engine.d.ts +20 -0
  419. package/dist/runtime/engine.d.ts.map +1 -0
  420. package/dist/runtime/engine.js +61 -0
  421. package/dist/runtime/engine.js.map +1 -0
  422. package/dist/runtime/retry.d.ts +19 -0
  423. package/dist/runtime/retry.d.ts.map +1 -0
  424. package/dist/runtime/retry.js +54 -0
  425. package/dist/runtime/retry.js.map +1 -0
  426. package/dist/runtime/worker.d.ts +10 -0
  427. package/dist/runtime/worker.d.ts.map +1 -0
  428. package/dist/runtime/worker.js +25 -0
  429. package/dist/runtime/worker.js.map +1 -0
  430. package/dist/scrape/cache.d.ts +45 -0
  431. package/dist/scrape/cache.d.ts.map +1 -0
  432. package/dist/scrape/cache.js +45 -0
  433. package/dist/scrape/cache.js.map +1 -0
  434. package/dist/scrape/crawl.d.ts +47 -0
  435. package/dist/scrape/crawl.d.ts.map +1 -0
  436. package/dist/scrape/crawl.js +114 -0
  437. package/dist/scrape/crawl.js.map +1 -0
  438. package/dist/scrape/extract.d.ts +63 -0
  439. package/dist/scrape/extract.d.ts.map +1 -0
  440. package/dist/scrape/extract.js +47 -0
  441. package/dist/scrape/extract.js.map +1 -0
  442. package/dist/scrape/normalize.d.ts +52 -0
  443. package/dist/scrape/normalize.d.ts.map +1 -0
  444. package/dist/scrape/normalize.js +102 -0
  445. package/dist/scrape/normalize.js.map +1 -0
  446. package/dist/scrape/robots.d.ts +37 -0
  447. package/dist/scrape/robots.d.ts.map +1 -0
  448. package/dist/scrape/robots.js +71 -0
  449. package/dist/scrape/robots.js.map +1 -0
  450. package/dist/scrape/schema.d.ts +5 -0
  451. package/dist/scrape/schema.d.ts.map +1 -0
  452. package/dist/scrape/schema.js +25 -0
  453. package/dist/scrape/schema.js.map +1 -0
  454. package/dist/scrape/scraper.d.ts +6 -0
  455. package/dist/scrape/scraper.d.ts.map +1 -0
  456. package/dist/scrape/scraper.js +46 -0
  457. package/dist/scrape/scraper.js.map +1 -0
  458. package/dist/scrape/semantic.d.ts +25 -0
  459. package/dist/scrape/semantic.d.ts.map +1 -0
  460. package/dist/scrape/semantic.js +27 -0
  461. package/dist/scrape/semantic.js.map +1 -0
  462. package/dist/server/node.d.ts +7 -0
  463. package/dist/server/node.d.ts.map +1 -0
  464. package/dist/server/node.js +38 -0
  465. package/dist/server/node.js.map +1 -0
  466. package/dist/sessions/file.d.ts +25 -0
  467. package/dist/sessions/file.d.ts.map +1 -0
  468. package/dist/sessions/file.js +13 -0
  469. package/dist/sessions/file.js.map +1 -0
  470. package/dist/sessions/replay.d.ts +9 -0
  471. package/dist/sessions/replay.d.ts.map +1 -0
  472. package/dist/sessions/replay.js +70 -0
  473. package/dist/sessions/replay.js.map +1 -0
  474. package/dist/sessions/store.d.ts +25 -0
  475. package/dist/sessions/store.d.ts.map +1 -0
  476. package/dist/sessions/store.js +13 -0
  477. package/dist/sessions/store.js.map +1 -0
  478. package/dist/storage/adapter.d.ts +5 -0
  479. package/dist/storage/adapter.d.ts.map +1 -0
  480. package/dist/storage/adapter.js +11 -0
  481. package/dist/storage/adapter.js.map +1 -0
  482. package/dist/storage/cache.d.ts +23 -0
  483. package/dist/storage/cache.d.ts.map +1 -0
  484. package/dist/storage/cache.js +79 -0
  485. package/dist/storage/cache.js.map +1 -0
  486. package/dist/storage/checksum.d.ts +3 -0
  487. package/dist/storage/checksum.d.ts.map +1 -0
  488. package/dist/storage/checksum.js +19 -0
  489. package/dist/storage/checksum.js.map +1 -0
  490. package/dist/storage/chunked.d.ts +21 -0
  491. package/dist/storage/chunked.d.ts.map +1 -0
  492. package/dist/storage/chunked.js +67 -0
  493. package/dist/storage/chunked.js.map +1 -0
  494. package/dist/storage/content.d.ts +24 -0
  495. package/dist/storage/content.d.ts.map +1 -0
  496. package/dist/storage/content.js +44 -0
  497. package/dist/storage/content.js.map +1 -0
  498. package/dist/storage/filehosting.d.ts +2 -0
  499. package/dist/storage/filehosting.d.ts.map +1 -0
  500. package/dist/storage/filehosting.js +24 -0
  501. package/dist/storage/filehosting.js.map +1 -0
  502. package/dist/storage/githubcontents.d.ts +2 -0
  503. package/dist/storage/githubcontents.d.ts.map +1 -0
  504. package/dist/storage/githubcontents.js +29 -0
  505. package/dist/storage/githubcontents.js.map +1 -0
  506. package/dist/storage/index.d.ts +11 -0
  507. package/dist/storage/index.d.ts.map +1 -0
  508. package/{storage → dist/storage}/index.js +1 -0
  509. package/dist/storage/index.js.map +1 -0
  510. package/dist/storage/local.d.ts +2 -0
  511. package/dist/storage/local.d.ts.map +1 -0
  512. package/dist/storage/local.js +72 -0
  513. package/dist/storage/local.js.map +1 -0
  514. package/dist/storage/memory.d.ts +6 -0
  515. package/dist/storage/memory.d.ts.map +1 -0
  516. package/dist/storage/memory.js +36 -0
  517. package/dist/storage/memory.js.map +1 -0
  518. package/dist/storage/s3compatible.d.ts +2 -0
  519. package/dist/storage/s3compatible.d.ts.map +1 -0
  520. package/dist/storage/s3compatible.js +31 -0
  521. package/dist/storage/s3compatible.js.map +1 -0
  522. package/dist/storage/sync.d.ts +47 -0
  523. package/dist/storage/sync.d.ts.map +1 -0
  524. package/dist/storage/sync.js +75 -0
  525. package/dist/storage/sync.js.map +1 -0
  526. package/dist/surfaces/adapters.d.ts +97 -0
  527. package/dist/surfaces/adapters.d.ts.map +1 -0
  528. package/dist/surfaces/adapters.js +50 -0
  529. package/dist/surfaces/adapters.js.map +1 -0
  530. package/dist/surfaces/controls.d.ts +18 -0
  531. package/dist/surfaces/controls.d.ts.map +1 -0
  532. package/dist/surfaces/controls.js +45 -0
  533. package/dist/surfaces/controls.js.map +1 -0
  534. package/dist/surfaces/manifest.d.ts +68 -0
  535. package/dist/surfaces/manifest.d.ts.map +1 -0
  536. package/dist/surfaces/manifest.js +42 -0
  537. package/dist/surfaces/manifest.js.map +1 -0
  538. package/dist/surfaces/n8n.d.ts +25 -0
  539. package/dist/surfaces/n8n.d.ts.map +1 -0
  540. package/dist/surfaces/n8n.js +31 -0
  541. package/dist/surfaces/n8n.js.map +1 -0
  542. package/dist/surfaces/operations.d.ts +32 -0
  543. package/dist/surfaces/operations.d.ts.map +1 -0
  544. package/dist/surfaces/operations.js +53 -0
  545. package/dist/surfaces/operations.js.map +1 -0
  546. package/dist/surfaces/targets.d.ts +196 -0
  547. package/dist/surfaces/targets.d.ts.map +1 -0
  548. package/dist/surfaces/targets.js +27 -0
  549. package/dist/surfaces/targets.js.map +1 -0
  550. package/dist/webhook/delivery.d.ts +18 -0
  551. package/dist/webhook/delivery.d.ts.map +1 -0
  552. package/dist/webhook/delivery.js +36 -0
  553. package/dist/webhook/delivery.js.map +1 -0
  554. package/dist/webhook/receiver.d.ts +26 -0
  555. package/dist/webhook/receiver.d.ts.map +1 -0
  556. package/dist/webhook/receiver.js +24 -0
  557. package/dist/webhook/receiver.js.map +1 -0
  558. package/dist/webhook/signature.d.ts +3 -0
  559. package/dist/webhook/signature.d.ts.map +1 -0
  560. package/{webhook → dist/webhook}/signature.js +1 -1
  561. package/dist/webhook/signature.js.map +1 -0
  562. package/dist/workflow/manifest.d.ts +21 -0
  563. package/dist/workflow/manifest.d.ts.map +1 -0
  564. package/dist/workflow/manifest.js +20 -0
  565. package/dist/workflow/manifest.js.map +1 -0
  566. package/dist/workflow/registry.d.ts +7 -0
  567. package/dist/workflow/registry.d.ts.map +1 -0
  568. package/dist/workflow/registry.js +18 -0
  569. package/dist/workflow/registry.js.map +1 -0
  570. package/dist/workflow/templates.d.ts +6 -0
  571. package/dist/workflow/templates.d.ts.map +1 -0
  572. package/dist/workflow/templates.js +18 -0
  573. package/dist/workflow/templates.js.map +1 -0
  574. package/dist/workflow/triggers.d.ts +36 -0
  575. package/dist/workflow/triggers.d.ts.map +1 -0
  576. package/dist/workflow/triggers.js +33 -0
  577. package/dist/workflow/triggers.js.map +1 -0
  578. package/docs/enginearchitecture.md +5 -4
  579. package/docs/gapmatrix.md +2 -2
  580. package/docs/libraryapi.md +4 -4
  581. package/docs/release.md +5 -5
  582. package/docs/releaseassets.md +1 -1
  583. package/docs/reorganization-1.8.8.md +31 -0
  584. package/docs/reorganization-1.8.9.md +28 -0
  585. package/docs/toolchainresearch-1.8.9.md +18 -0
  586. package/extension/manifest.json +1 -1
  587. package/package.json +61 -91
  588. package/adapters/forge.js +0 -16
  589. package/adapters/github.js +0 -19
  590. package/adapters/gitlab.js +0 -10
  591. package/adapters/socket.js +0 -14
  592. package/adapters/transport.js +0 -30
  593. package/ai/chunk.js +0 -22
  594. package/ai/llmstxt.js +0 -12
  595. package/ai/provenance.js +0 -18
  596. package/ai/rag.js +0 -14
  597. package/api/auth.js +0 -13
  598. package/api/control.js +0 -33
  599. package/api/rate.js +0 -31
  600. package/api/security.js +0 -42
  601. package/api/service.js +0 -36
  602. package/binary/build.js +0 -17
  603. package/bot/adapter.js +0 -8
  604. package/bot/bot.js +0 -39
  605. package/bot/commands.js +0 -18
  606. package/bot/permissions.js +0 -16
  607. package/browser/actions.js +0 -33
  608. package/browser/agent.js +0 -9
  609. package/browser/context.js +0 -52
  610. package/browser/playwright.js +0 -22
  611. package/browser/recorder.js +0 -21
  612. package/browser/session.js +0 -19
  613. package/browser/snapshot.js +0 -57
  614. package/captcha/contract.js +0 -15
  615. package/captcha/evidence.js +0 -9
  616. package/captcha/guard.js +0 -10
  617. package/cli/main.js +0 -36
  618. package/core/errors.js +0 -37
  619. package/core/events.js +0 -21
  620. package/core/hash.js +0 -73
  621. package/core/ids.js +0 -15
  622. package/crawl/crawler.js +0 -29
  623. package/crawl/frontier.js +0 -34
  624. package/crawl/normalize.js +0 -14
  625. package/crawl/persistent.js +0 -13
  626. package/dispatch/resumable.js +0 -31
  627. package/dispatch/workflow.js +0 -33
  628. package/domain/artifacts.js +0 -13
  629. package/domain/jobs.js +0 -20
  630. package/domain/sessions.js +0 -46
  631. package/errors/taxonomy.js +0 -18
  632. package/extension/build.js +0 -46
  633. package/extension/content.js +0 -127
  634. package/extension/pagebridge.js +0 -41
  635. package/extension/permissions.js +0 -22
  636. package/extension/popup.css +0 -13
  637. package/extension/popup.html +0 -24
  638. package/extension/popup.js +0 -25
  639. package/extension/protocol.js +0 -95
  640. package/extension/serviceworker.js +0 -109
  641. package/extension/worker.js +0 -22
  642. package/format/check.js +0 -21
  643. package/library/public.js +0 -85
  644. package/mcp/browser.js +0 -12
  645. package/mcp/server.js +0 -28
  646. package/mcp/transport.js +0 -14
  647. package/memory/bridge.js +0 -16
  648. package/memory/engine.js +0 -45
  649. package/memory/modes.js +0 -55
  650. package/memory/objects.js +0 -18
  651. package/memory/targets.js +0 -21
  652. package/memory/transforms.js +0 -15
  653. package/modes/resolve.js +0 -39
  654. package/packager/manifest.js +0 -28
  655. package/packager/publish.js +0 -15
  656. package/persistence/adapter.js +0 -8
  657. package/persistence/drizzle.js +0 -10
  658. package/persistence/memory.js +0 -26
  659. package/persistence/prisma.js +0 -23
  660. package/persistence/schema.js +0 -29
  661. package/persistence/sql.js +0 -30
  662. package/protocol/blocks.js +0 -18
  663. package/protocol/ndjson.js +0 -17
  664. package/protocol/sse.js +0 -22
  665. package/proxy/pool.js +0 -12
  666. package/queue/idempotency.js +0 -12
  667. package/queue/persistent.js +0 -44
  668. package/queue/queue.js +0 -50
  669. package/queue/saga.js +0 -13
  670. package/release/assets.js +0 -70
  671. package/retry/circuit.js +0 -15
  672. package/retry/policy.js +0 -12
  673. package/runners/health.js +0 -23
  674. package/runners/heartbeat.js +0 -26
  675. package/runners/inprocess.js +0 -19
  676. package/runners/scheduler.js +0 -16
  677. package/runtime/abort.js +0 -10
  678. package/runtime/detect.js +0 -14
  679. package/runtime/engine.js +0 -56
  680. package/runtime/worker.js +0 -18
  681. package/scrape/agent.ts +0 -122
  682. package/scrape/batch.ts +0 -79
  683. package/scrape/biome.json +0 -76
  684. package/scrape/browser.ts +0 -222
  685. package/scrape/cache.js +0 -14
  686. package/scrape/cache.ts +0 -84
  687. package/scrape/chunking.ts +0 -193
  688. package/scrape/cli.ts +0 -105
  689. package/scrape/crawler.ts +0 -115
  690. package/scrape/dev-server.ts +0 -94
  691. package/scrape/errors.ts +0 -132
  692. package/scrape/events.ts +0 -26
  693. package/scrape/extract.js +0 -14
  694. package/scrape/extract.ts +0 -165
  695. package/scrape/fetch.ts +0 -105
  696. package/scrape/formats.ts +0 -85
  697. package/scrape/headers.ts +0 -71
  698. package/scrape/index.ts +0 -92
  699. package/scrape/jsdom.d.ts +0 -6
  700. package/scrape/llms-txt.ts +0 -84
  701. package/scrape/middleware.ts +0 -90
  702. package/scrape/normalize.js +0 -86
  703. package/scrape/pool.ts +0 -95
  704. package/scrape/port.ts +0 -18
  705. package/scrape/proxy.ts +0 -103
  706. package/scrape/rate-limiter.ts +0 -95
  707. package/scrape/renderer.ts +0 -194
  708. package/scrape/retry.ts +0 -64
  709. package/scrape/robots.js +0 -32
  710. package/scrape/robots.ts +0 -137
  711. package/scrape/schema.js +0 -21
  712. package/scrape/scrape.ts +0 -123
  713. package/scrape/scraper.js +0 -40
  714. package/scrape/semantic.js +0 -22
  715. package/scrape/serialize.ts +0 -310
  716. package/scrape/server.ts +0 -137
  717. package/scrape/session.ts +0 -109
  718. package/scrape/sitemap.ts +0 -131
  719. package/scrape/tokens.ts +0 -45
  720. package/scrape/tsconfig.json +0 -28
  721. package/scrape/types.ts +0 -214
  722. package/scrape/utils.ts +0 -77
  723. package/scrape/vite.config.ts +0 -55
  724. package/scrape/vitest.config.ts +0 -17
  725. package/server/node.js +0 -34
  726. package/sessions/file.js +0 -13
  727. package/sessions/replay.js +0 -61
  728. package/sessions/store.js +0 -13
  729. package/storage/adapter.js +0 -8
  730. package/storage/cache.js +0 -54
  731. package/storage/checksum.js +0 -17
  732. package/storage/chunked.js +0 -58
  733. package/storage/content.js +0 -42
  734. package/storage/filehosting.js +0 -17
  735. package/storage/githubcontents.js +0 -18
  736. package/storage/local.js +0 -35
  737. package/storage/memory.js +0 -28
  738. package/storage/s3compatible.js +0 -23
  739. package/storage/sync.js +0 -55
  740. package/surfaces/adapters.js +0 -48
  741. package/surfaces/controls.js +0 -37
  742. package/surfaces/manifest.js +0 -25
  743. package/surfaces/n8n.js +0 -24
  744. package/surfaces/operations.js +0 -43
  745. package/surfaces/targets.js +0 -16
  746. package/webhook/delivery.js +0 -26
  747. package/webhook/receiver.js +0 -20
  748. package/workflow/manifest.js +0 -20
  749. package/workflow/registry.js +0 -16
  750. package/workflow/templates.js +0 -18
  751. package/workflow/triggers.js +0 -31
@@ -1,25 +0,0 @@
1
- /**
2
- * popup sends user initiated read commands through the service worker.
3
- */
4
-
5
- import { createcommand } from "./protocol.js";
6
-
7
- const status = document.querySelector("#status");
8
- const output = document.querySelector("#output");
9
-
10
- for (const button of document.querySelectorAll("[data-command]")) button.addEventListener("click", () => request(button.dataset.command));
11
-
12
- async function request(command) {
13
- try {
14
- status.textContent = "Reading active tab…";
15
- const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
16
- if (!tab?.id) throw new Error("no active tab");
17
- const response = await chrome.runtime.sendMessage(createcommand(command, { tabid: tab.id }));
18
- if (response?.type === "error") throw new Error(response.error?.message ?? "extension request failed");
19
- output.textContent = JSON.stringify(response?.payload ?? response, null, 2);
20
- status.textContent = "Complete.";
21
- } catch (error) {
22
- status.textContent = "Request failed.";
23
- output.textContent = String(error.message ?? error);
24
- }
25
- }
@@ -1,95 +0,0 @@
1
- /**
2
- * extension protocol defines serializable commands, responses, errors and page snapshots.
3
- */
4
-
5
- export const protocolversion = 1;
6
- export const extensioncommands = Object.freeze(["snapshot", "readpage", "pagefacts", "clickref", "fillref"]);
7
-
8
- /** Creates a compact identifier without embedding a host, port or credential. */
9
- export function createid(prefix = "msg", source) {
10
- const generator = source ?? (() => globalThis.crypto?.randomUUID?.() ?? `${Date.now()}${Math.random().toString(16).slice(2)}`);
11
- const value = generator().replaceAll("-", "");
12
- return `${prefix}${value}`;
13
- }
14
-
15
- /** Creates a versioned command for the extension message bus. */
16
- export function createcommand(command, payload = {}, options = {}) {
17
- if (!extensioncommands.includes(command)) throw new TypeError(`unsupported extension command: ${command}`);
18
- return createmessage("command", { ...options, command, payload });
19
- }
20
-
21
- /** Creates a serializable message envelope. */
22
- export function createmessage(type, options = {}) {
23
- if (!["command", "response", "error", "event"].includes(type)) throw new TypeError(`unsupported extension message type: ${type}`);
24
- const message = { version: protocolversion, type, id: options.id ?? createid(type) };
25
- if (options.requestid) message.requestid = options.requestid;
26
- if (options.command) message.command = options.command;
27
- if (options.payload !== undefined) message.payload = options.payload;
28
- if (options.error) message.error = options.error;
29
- assertserializable(message);
30
- return message;
31
- }
32
-
33
- /** Creates a correlated successful response. */
34
- export function createresponse(request, payload = {}) {
35
- assertmessage(request);
36
- return createmessage("response", { requestid: request.id, payload });
37
- }
38
-
39
- /** Creates a correlated error response with stable error fields. */
40
- export function createerror(request, error, options = {}) {
41
- const requestid = request?.id ?? options.requestid;
42
- const failure = { code: options.code ?? error?.code ?? "extension_error", message: String(error?.message ?? error ?? "extension request failed"), retryable: Boolean(options.retryable ?? error?.retryable) };
43
- return createmessage("error", { requestid, error: failure });
44
- }
45
-
46
- /** Validates a message before a privileged context handles it. */
47
- export function assertmessage(message) {
48
- if (!message || typeof message !== "object") throw new TypeError("extension message must be an object");
49
- if (message.version !== protocolversion) throw new TypeError(`unsupported extension protocol version: ${message.version}`);
50
- if (typeof message.type !== "string" || typeof message.id !== "string") throw new TypeError("extension message requires type and id");
51
- if (message.type === "command" && !extensioncommands.includes(message.command)) throw new TypeError(`unsupported extension command: ${message.command}`);
52
- if (message.payload !== undefined && (!message.payload || typeof message.payload !== "object" || Array.isArray(message.payload))) throw new TypeError("extension payload must be an object");
53
- return message;
54
- }
55
-
56
- /** Creates a structured page snapshot with stable element references. */
57
- export function createsnapshot(input = {}) {
58
- const snapshot = {
59
- version: protocolversion,
60
- snapshotid: String(input.snapshotid ?? createid("snap")),
61
- createdat: Number(input.createdat ?? Date.now()),
62
- windowid: input.windowid === undefined ? undefined : String(input.windowid),
63
- tabid: input.tabid === undefined ? undefined : String(input.tabid),
64
- frameid: input.frameid === undefined ? undefined : String(input.frameid),
65
- url: String(input.url ?? ""),
66
- title: String(input.title ?? ""),
67
- text: String(input.text ?? ""),
68
- elements: Array.isArray(input.elements) ? input.elements.map((element) => ({ ref: String(element.ref), role: String(element.role ?? "generic"), name: String(element.name ?? ""), value: element.value === undefined ? undefined : String(element.value), disabled: Boolean(element.disabled) })) : []
69
- };
70
- assertserializable(snapshot);
71
- return snapshot;
72
- }
73
-
74
- /** Returns whether a reference still belongs to the current page snapshot. */
75
- export function isfreshsnapshot(snapshotid, currentid) { return Boolean(snapshotid && currentid && snapshotid === currentid); }
76
-
77
- /** Computes bounded additions, removals and changed elements between extension snapshots. */
78
- export function snapshotdiff(previous, current) {
79
- const before = createsnapshot(previous);
80
- const after = createsnapshot(current);
81
- const oldmap = new Map(before.elements.map((element) => [element.ref, element]));
82
- const newmap = new Map(after.elements.map((element) => [element.ref, element]));
83
- return {
84
- from: before.snapshotid,
85
- to: after.snapshotid,
86
- contextchanged: before.windowid !== after.windowid || before.tabid !== after.tabid || before.frameid !== after.frameid,
87
- added: after.elements.filter((element) => !oldmap.has(element.ref)),
88
- removed: before.elements.filter((element) => !newmap.has(element.ref)),
89
- changed: after.elements.filter((element) => oldmap.has(element.ref) && JSON.stringify(oldmap.get(element.ref)) !== JSON.stringify(element))
90
- };
91
- }
92
-
93
- function assertserializable(value) {
94
- try { JSON.stringify(value); } catch (error) { throw new TypeError(`extension message is not serializable: ${error.message}`); }
95
- }
@@ -1,109 +0,0 @@
1
- /**
2
- * service worker router forwards user initiated commands to the active tab and persists resumable state.
3
- */
4
-
5
- import { assertmessage } from "./protocol.js";
6
-
7
- /** Creates a browser independent router around Chrome tabs, scripting and storage APIs. */
8
- export function createworkerrouter(options = {}) {
9
- const tabs = options.tabs;
10
- const scripting = options.scripting;
11
- const storage = options.storage;
12
- const contentfile = options.contentfile ?? "content.js";
13
- const statekey = options.statekey ?? "saddleextensionstate";
14
- const maxpending = options.maxpending ?? 32;
15
- if (typeof tabs?.sendMessage !== "function") throw new TypeError("extension router requires tabs.sendMessage");
16
- if (!Number.isSafeInteger(maxpending) || maxpending < 1) throw new TypeError("extension router maxpending must be a positive safe integer");
17
-
18
- async function ensurecontent(tabid) {
19
- if (!Number.isInteger(tabid)) throw new TypeError("extension command requires a tab id");
20
- if (typeof scripting?.executeScript !== "function") throw new TypeError("extension router requires scripting.executeScript");
21
- await scripting.executeScript({ target: { tabId: tabid }, files: [contentfile] });
22
- }
23
-
24
- async function readstate() {
25
- if (typeof storage?.get !== "function") return {};
26
- const result = await storage.get(statekey);
27
- return result?.[statekey] ?? {};
28
- }
29
-
30
- async function savestate(value) {
31
- if (typeof storage?.set === "function") await storage.set({ [statekey]: value });
32
- }
33
-
34
- async function pendingstate() {
35
- const value = await readstate();
36
- return { ...value, pending: Array.isArray(value.pending) ? value.pending.filter(validpending) : [] };
37
- }
38
-
39
- async function enqueue(request, sender) {
40
- const state = await pendingstate();
41
- const record = pendingrecord(request, sender);
42
- const pending = state.pending.filter((item) => item.requestid !== record.requestid);
43
- if (pending.length >= maxpending && !state.pending.some((item) => item.requestid === record.requestid)) throw extensionerror("PENDING_LIMIT", "extension pending command limit reached");
44
- pending.push(record);
45
- await savestate({ ...state, pending });
46
- return record;
47
- }
48
-
49
- async function complete(requestid, patch = {}) {
50
- const state = await pendingstate();
51
- await savestate({ ...state, ...patch, pending: state.pending.filter((item) => item.requestid !== requestid) });
52
- }
53
-
54
- async function markfailure(requestid, error) {
55
- const state = await pendingstate();
56
- const pending = state.pending.map((item) => item.requestid === requestid ? { ...item, attempts: item.attempts + 1, lasterror: { code: String(error?.code ?? "extension_error"), message: String(error?.message ?? error) }, updatedat: Date.now() } : item);
57
- await savestate({ ...state, pending });
58
- }
59
-
60
- async function dispatch(request, sender = {}) {
61
- const tabid = request.payload?.tabid ?? sender.tab?.id;
62
- await ensurecontent(tabid);
63
- const response = await tabs.sendMessage(tabid, request);
64
- return decorate(response, sender, tabid);
65
- }
66
-
67
- async function handle(message, sender = {}) {
68
- const request = assertmessage(message);
69
- if (request.type !== "command") throw new TypeError("extension router accepts commands only");
70
- const tabid = request.payload?.tabid ?? sender.tab?.id;
71
- await enqueue(request, { ...sender, tab: { ...sender.tab, id: tabid } });
72
- try {
73
- const response = await dispatch(request, { ...sender, tab: { ...sender.tab, id: tabid } });
74
- await complete(request.id, response?.type === "response" && response.payload?.snapshotid ? { tabid, snapshotid: response.payload.snapshotid, frameid: response.payload.frameid, windowid: response.payload.windowid, updatedat: Date.now() } : { updatedat: Date.now() });
75
- return response;
76
- } catch (error) {
77
- await markfailure(request.id, error);
78
- throw error;
79
- }
80
- }
81
-
82
- async function rehydrate() { return pendingstate(); }
83
-
84
- async function resume(requestid, sender = {}) {
85
- const state = await pendingstate();
86
- const pending = state.pending.find((item) => item.requestid === requestid);
87
- if (!pending) throw extensionerror("PENDING_NOT_FOUND", `pending command not found: ${requestid}`);
88
- const tabid = pending.tabid ?? sender.tab?.id;
89
- const response = await dispatch(pending.message, { ...sender, frameId: pending.frameid ?? sender.frameId, tab: { ...sender.tab, id: tabid, windowId: pending.windowid ?? sender.tab?.windowId } });
90
- await complete(requestid, response?.type === "response" && response.payload?.snapshotid ? { tabid, snapshotid: response.payload.snapshotid, frameid: response.payload.frameid, windowid: response.payload.windowid, updatedat: Date.now() } : { updatedat: Date.now() });
91
- return response;
92
- }
93
-
94
- async function cancel(requestid) { const state = await pendingstate(); await savestate({ ...state, pending: state.pending.filter((item) => item.requestid !== requestid) }); }
95
-
96
- return { ensurecontent, readstate, savestate, rehydrate, enqueue, resume, cancel, handle };
97
- }
98
-
99
- function pendingrecord(request, sender = {}) { return { requestid: request.id, command: request.command, message: request, tabid: request.payload?.tabid ?? sender.tab?.id, frameid: request.payload?.frameid ?? sender.frameId, windowid: request.payload?.windowid ?? sender.tab?.windowId, attempts: 0, createdat: Date.now(), updatedat: Date.now() }; }
100
-
101
- function decorate(response, sender, tabid) {
102
- if (response?.type !== "response" || !response.payload || typeof response.payload !== "object" || !response.payload.snapshotid) return response;
103
- const payload = { ...response.payload, tabid: response.payload.tabid ?? (tabid === undefined ? undefined : String(tabid)), frameid: response.payload.frameid ?? (sender.frameId === undefined ? undefined : String(sender.frameId)), windowid: response.payload.windowid ?? (sender.tab?.windowId === undefined ? undefined : String(sender.tab.windowId)) };
104
- return { ...response, payload };
105
- }
106
-
107
- function validpending(value) { return Boolean(value && typeof value === "object" && typeof value.requestid === "string" && value.message && value.message.type === "command" && Number.isSafeInteger(value.attempts) && value.attempts >= 0); }
108
-
109
- function extensionerror(code, message) { const error = new Error(message); error.code = code; return error; }
@@ -1,22 +0,0 @@
1
- /**
2
- * worker binds the generic extension router to the Manifest V3 runtime APIs.
3
- */
4
-
5
- import { createerror } from "./protocol.js";
6
- import { createworkerrouter } from "./serviceworker.js";
7
-
8
- /** Installs the service worker listeners against a caller supplied Chrome API object. */
9
- export function startworker(chromeapi = globalThis.chrome) {
10
- if (!chromeapi?.runtime?.onMessage || !chromeapi?.tabs || !chromeapi?.scripting) throw new TypeError("extension worker requires runtime tabs and scripting APIs");
11
- const router = createworkerrouter({ tabs: chromeapi.tabs, scripting: chromeapi.scripting, storage: chromeapi.storage?.session });
12
- const listener = (message, sender, sendresponse) => {
13
- router.handle(message, sender).then(sendresponse).catch((error) => sendresponse(createerror(message, error)));
14
- return true;
15
- };
16
- const startup = () => router.rehydrate().catch(() => undefined);
17
- chromeapi.runtime.onMessage.addListener(listener);
18
- chromeapi.runtime.onStartup?.addListener(startup);
19
- return { router, dispose() { chromeapi.runtime.onMessage.removeListener?.(listener); chromeapi.runtime.onStartup?.removeListener?.(startup); } };
20
- }
21
-
22
- if (globalThis.chrome?.runtime?.onMessage) startworker();
package/format/check.js DELETED
@@ -1,21 +0,0 @@
1
- /**
2
- * format check validates the public root based JavaScript layout before release.
3
- */
4
- import { readdir, readFile } from "node:fs/promises";
5
- import { join } from "node:path";
6
-
7
- const roots = ["core", "domain", "memory", "runners", "runtime", "storage", "sessions", "modes", "adapters", "persistence", "queue", "dispatch", "scrape", "crawl", "api", "mcp", "browser", "proxy", "captcha", "ai", "webhook", "surfaces", "library", "errors", "retry", "server", "binary", "deploy", "workflow", "packager", "bot", "protocol", "cli"];
8
-
9
- /** Finds JavaScript files that do not follow the skill formatting contract. */
10
- export async function formatissues(root = process.cwd()) {
11
- const issues = [];
12
- for (const directory of roots) for (const file of await javascriptfiles(join(root, directory))) { const relative = file.slice(root.length + 1); const source = await readFile(file, "utf8"); if (/[A-Z_-]/.test(relative)) issues.push(`${relative}: invalid path format`); if (!source.includes("/**")) issues.push(`${relative}: missing jsdoc`); }
13
- return issues;
14
- }
15
-
16
- /** Runs the check as a CLI and throws a short diagnostic on failure. */
17
- export async function runformatcheck() { const issues = await formatissues(); if (issues.length) throw new Error(issues.join("\n")); return { ok: true, checked: roots.length }; }
18
-
19
- async function javascriptfiles(directory) { let entries; try { entries = await readdir(directory, { withFileTypes: true }); } catch { return []; } const files = []; for (const entry of entries) { const file = join(directory, entry.name); if (entry.isDirectory()) files.push(...await javascriptfiles(file)); else if (entry.name.endsWith(".js")) files.push(file); } return files; }
20
-
21
- if (import.meta.url === `file://${process.argv[1]}`) runformatcheck().then((result) => console.log(JSON.stringify(result))).catch((error) => { console.error(error.message); process.exitCode = 1; });
package/library/public.js DELETED
@@ -1,85 +0,0 @@
1
- /**
2
- * public library helpers compose fetch extraction serialization chunking and crawl contracts.
3
- */
4
- import { crawl } from "../crawl/crawler.js";
5
- import { chunkmarkdown } from "../ai/chunk.js";
6
- import { estimatetokens } from "../ai/tokens.js";
7
- import { extracthtml } from "../scrape/extract.js";
8
- import { normalizeresponse } from "../scrape/normalize.js";
9
- import { browseragent } from "../browser/agent.js";
10
-
11
- /** Selects the fetch or browser execution path. */
12
- export async function saddleurl(url, options = {}) {
13
- const mode = options.mode ?? "fetch";
14
- if (mode === "browser") return scrapewithbrowser(url, options);
15
- return scrapeurl(url, options);
16
- }
17
-
18
- /** Fetches one URL through the caller supplied transport. */
19
- export async function scrapeurl(url, options = {}) {
20
- const target = safeurl(url);
21
- const response = await (options.fetcher ?? fetch)(target, { signal: options.signal, headers: options.headers });
22
- if (!response.ok) throw new Error(`scrape request failed with ${response.status}`);
23
- const normalized = await normalizeresponse(response, { url: target, defaultcontenttype: "text/html", maxbytes: options.maxbytes });
24
- const result = normalized.kind === "html" ? scrapehtml(normalized.content, target, options) : { content: normalized.content, data: normalized.data, metadata: { url: target, contenttype: normalized.contenttype, size: normalized.size }, bytes: normalized.bytes };
25
- return formatresult(result, options);
26
- }
27
-
28
- /** Extracts a serializable result from HTML without network access. */
29
- export function scrapehtml(html, url, options = {}) {
30
- const result = extracthtml(html, url);
31
- return { content: result.text, metadata: { url: result.url, title: result.title, description: result.description, links: result.links }, html: options.includehtml ? html : undefined };
32
- }
33
-
34
- /** Exposes structured extraction for callers that do not need formatting. */
35
- export function extractcontent(html, options = {}) { return extracthtml(html, options.url); }
36
-
37
- /** Runs a scrape through the injected browser agent contract. */
38
- export async function scrapewithbrowser(url, options = {}) {
39
- const agent = browseragent(options.browser);
40
- await agent.navigate({ url, waituntil: options.waituntil ?? "networkidle" });
41
- return formatresult({ content: await agent.text(), metadata: { url, title: await agent.title(), html: options.includehtml ? await agent.html() : undefined } }, options);
42
- }
43
-
44
- /** Serializes a result into a supported output format. */
45
- export function serializeresult(result, options = {}) {
46
- const format = options.format ?? "json";
47
- if (format === "json") return JSON.stringify(result, null, options.pretty ? 2 : 0);
48
- if (format === "text") return result.content ?? "";
49
- if (format === "markdown") return `# ${result.metadata?.title ?? "result"}\n\n${result.content ?? ""}`;
50
- if (format === "xml") return `<result><title>${escape(result.metadata?.title ?? "")}</title><content>${escape(result.content ?? "")}</content></result>`;
51
- if (format === "redis") return JSON.stringify({ content: result.content, metadata: result.metadata });
52
- throw new TypeError(`unsupported format: ${format}`);
53
- }
54
-
55
- /** Converts local HTML into Markdown. */
56
- export function serializehtml(html, options = {}) { return serializeresult(scrapehtml(html, options.url), { format: "markdown" }); }
57
-
58
- /** Builds compact context for an agent or a vector pipeline. */
59
- export function formatforagent(result, options = {}) {
60
- const content = result.content ?? "";
61
- const chunks = chunkmarkdown(content, { maxtokens: options.maxchunksize ?? 4000 });
62
- const lines = content.split(/[.!?]\s+/).filter(Boolean);
63
- return { summary: lines.slice(0, 2).join(". "), keypoints: lines.slice(0, options.keypoints ?? 5), relevanturls: result.metadata?.links ?? [], chunks, tokencount: estimatetokens(content, options.model) };
64
- }
65
-
66
- /** Processes URLs in bounded groups and emits progress events. */
67
- export async function batchscrape(options = {}) {
68
- const urls = options.urls ?? [];
69
- const concurrency = options.concurrency ?? 10;
70
- const results = [];
71
- for (let index = 0; index < urls.length; index += concurrency) {
72
- const group = urls.slice(index, index + concurrency);
73
- const completed = await Promise.all(group.map((url) => scrapeurl(url, options)));
74
- results.push(...completed);
75
- options.onprogress?.({ completed: results.length, total: urls.length });
76
- }
77
- return results;
78
- }
79
-
80
- /** Runs the crawler through the public scrape contract. */
81
- export async function crawlurl(url, options = {}) { return crawl(url, { ...options, scrape: (target) => scrapeurl(target, options) }); }
82
-
83
- function safeurl(value) { const url = new URL(value); if (!["http:", "https:"].includes(url.protocol)) throw new TypeError("url must use http or https"); return url.href; }
84
- function formatresult(result, options) { return options.format ? { ...result, serialized: serializeresult(result, options) } : result; }
85
- function escape(value) { return String(value).replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;"); }
package/mcp/browser.js DELETED
@@ -1,12 +0,0 @@
1
- /**
2
- * browser MCP tools expose snapshots and actions only through an injected browser adapter.
3
- */
4
-
5
- /** Creates optional browser tools for an MCP server without selecting Playwright or another vendor. */
6
- export function browsertools(browser) {
7
- if (typeof browser?.snapshot !== "function" || typeof browser?.action !== "function") throw new TypeError("browser MCP tools require snapshot and action");
8
- return {
9
- browser_snapshot: async (input = {}) => browser.snapshot(input),
10
- browser_action: async (input = {}) => browser.action(input)
11
- };
12
- }
package/mcp/server.js DELETED
@@ -1,28 +0,0 @@
1
- /**
2
- * mcp server implements a small JSON RPC tool surface and remains transport agnostic.
3
- */
4
- import { crawl } from "../crawl/crawler.js";
5
- import { extractwithschema } from "../scrape/schema.js";
6
- import { jsonencode } from "../protocol/json.js";
7
- import { browsertools } from "./browser.js";
8
-
9
- export function mcpserver(options = {}) {
10
- if (typeof options.scrape !== "function") throw new TypeError("mcp server requires scrape");
11
- const tools = {
12
- scrape: async (input) => options.scrape(input.url, input),
13
- crawl: async (input) => crawl(input.url, { ...input, scrape: (url) => options.scrape(url, input) }),
14
- batch: async (input) => ({ results: await Promise.all((input.urls ?? []).map((url) => options.scrape(url, input))) }),
15
- extract: async (input) => extractwithschema(input.html, input.schema, input.url),
16
- serialize: async (input) => jsonencode(input.value),
17
- ...(options.browser ? browsertools(options.browser) : {}),
18
- ...(options.tools ?? {})
19
- };
20
- return {
21
- listtools() { return Object.keys(tools).map((name) => ({ name, description: `saddle ${name} tool` })); },
22
- async handle(request) {
23
- if (request.method === "tools/list") return { jsonrpc: "2.0", id: request.id, result: { tools: this.listtools() } };
24
- if (request.method === "tools/call") { const handler = tools[request.params?.name]; if (!handler) return { jsonrpc: "2.0", id: request.id, error: { code: -32601, message: "tool not found" } }; try { return { jsonrpc: "2.0", id: request.id, result: { content: [{ type: "text", text: JSON.stringify(await handler(request.params.arguments ?? {})) }] } }; } catch (error) { return { jsonrpc: "2.0", id: request.id, error: { code: -32000, message: error.message } }; } }
25
- return { jsonrpc: "2.0", id: request.id, error: { code: -32601, message: "method not found" } };
26
- }
27
- };
28
- }
package/mcp/transport.js DELETED
@@ -1,14 +0,0 @@
1
- /**
2
- * mcp transport keeps JSON RPC framing separate from the tool server.
3
- */
4
- import { jsondecode, jsonencode } from "../protocol/json.js";
5
-
6
- /** Creates JSONL and HTTP handlers for the transport agnostic MCP server. */
7
- export function mcptransport(server) {
8
- if (typeof server?.handle !== "function") throw new TypeError("mcp transport requires server");
9
- return {
10
- async handleline(line) { const request = jsondecode(line); return jsonencode(await server.handle(request)); },
11
- async *stream(lines) { for await (const line of lines) if (String(line).trim()) yield await this.handleline(line); },
12
- async handlehttp(request) { const body = await request.text(); const response = await server.handle(jsondecode(body)); return new Response(jsonencode(response), { status: 200, headers: { "content-type": "application/json" } }); }
13
- };
14
- }
package/memory/bridge.js DELETED
@@ -1,16 +0,0 @@
1
- /**
2
- * memory bridges materialize and clear temporary working sets.
3
- */
4
- import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
5
- import { join } from "node:path";
6
- import { tmpdir } from "node:os";
7
- import { syncresult, workingset } from "../domain/runtime.js";
8
-
9
- export function localmemory(options = {}) {
10
- const base = options.base ?? tmpdir();
11
- return {
12
- async prepare(job) { const location = await mkdtemp(join(base, "saddlejob")); return workingset(job.id, location, join(location, "resultbin")); },
13
- async sync(set, bytes) { await mkdir(set.location, { recursive: true }); await writeFile(set.resultpath, bytes); return syncresult(bytes.byteLength, set.resultpath); },
14
- async cleanup(set) { await rm(set.location, { recursive: true, force: true }); }
15
- };
16
- }
package/memory/engine.js DELETED
@@ -1,45 +0,0 @@
1
- /**
2
- * memory engine loads from the first backend and persists to every backend.
3
- */
4
- import { memoryobject, tobytes } from "./objects.js";
5
- import { transformtocompute, transformtostorage } from "./transforms.js";
6
- import { storagecapabilities, syncbackends } from "../storage/sync.js";
7
-
8
- export function memoryengine(options = {}) {
9
- const backends = options.backends ?? [];
10
- const values = new Map();
11
- async function load(key) {
12
- if (!key) throw new TypeError("memory key is required");
13
- if (values.has(key)) return values.get(key);
14
- let last;
15
- for (const backend of backends) {
16
- try {
17
- const value = await backend.get(key);
18
- if (value == null) continue;
19
- const object = memoryobject({ id: key, buffer: value.data ?? value, type: value.contenttype ?? value.type, metadata: value.metadata });
20
- values.set(key, object);
21
- return object;
22
- } catch (error) { last = error; }
23
- }
24
- if (last) throw new Error(`memory engine load failed for key "${key}": ${last.message}`, { cause: last });
25
- throw new Error(`memory engine load failed for key "${key}": not found`);
26
- }
27
- async function persist(key, data, options = {}) {
28
- const payload = tobytes(data?.payload ?? data?.buffer ?? data);
29
- const object = memoryobject({ id: key, buffer: payload, type: options.mimetype ?? data?.mimetype, metadata: options.metadata ?? data?.metadata });
30
- for (const backend of backends) await backend.put(key, { data: object.buffer, contenttype: object.type, metadata: object.metadata });
31
- values.set(key, object);
32
- return object;
33
- }
34
- function release(key) { values.delete(key); }
35
- async function safeload(key) { try { return { success: true, data: await load(key) }; } catch (error) { return { success: false, error }; } }
36
- async function sync(key, options = {}) {
37
- const sourceindex = Number(options.sourceindex ?? 0);
38
- const source = backends[sourceindex];
39
- if (!source) throw new TypeError("memory sync source backend is missing");
40
- const targets = backends.filter((_backend, index) => index !== sourceindex);
41
- return syncbackends(source, targets, key, options);
42
- }
43
- function capabilities() { return backends.map((backend, index) => ({ index, capabilities: storagecapabilities(backend) })); }
44
- return { load, persist, release, safeload, sync, capabilities, transformtocompute, transformtostorage, list() { return [...values.keys()]; } };
45
- }
package/memory/modes.js DELETED
@@ -1,55 +0,0 @@
1
- /**
2
- * memory modes expose the same byte contract with different backing choices.
3
- */
4
- export function internalmemory(initial = {}) {
5
- const values = new Map(Object.entries(initial).map(([key, value]) => [key, tobytes(value)]));
6
- return {
7
- mode: "internal",
8
- async put(key, value) { values.set(key, tobytes(value)); return { key, bytes: values.get(key).byteLength }; },
9
- async get(key) { return values.get(key) ?? null; },
10
- async delete(key) { values.delete(key); },
11
- async list() { return [...values.keys()]; }
12
- };
13
- }
14
-
15
- export function externalmemory(storage) {
16
- if (!storage?.put || !storage?.get) throw new TypeError("external memory requires storage adapter");
17
- return {
18
- mode: "external",
19
- async put(key, value) { return storage.put({ key, data: tobytes(value) }); },
20
- async get(key) { try { return await storage.get(key); } catch (error) { if (error.code === "ARTIFACT_NOT_FOUND") return null; throw error; } },
21
- async delete(key) { return storage.delete(key); },
22
- async list(prefix) { return storage.list(prefix); }
23
- };
24
- }
25
-
26
- export function physicalmemory(options = {}) {
27
- if (!options.path) throw new TypeError("physical memory requires a path");
28
- return { mode: "physical", path: options.path, put: options.put, get: options.get, delete: options.delete, list: options.list };
29
- }
30
-
31
- export function vectorizedmemory() {
32
- const vectors = new Map();
33
- return {
34
- mode: "vectorized",
35
- async put(key, vector) { assertvector(vector); vectors.set(key, [...vector]); return { key, dimensions: vector.length }; },
36
- async get(key) { return vectors.get(key) ?? null; },
37
- async average(keys) { const selected = keys.map((key) => vectors.get(key)).filter(Boolean); if (!selected.length) return null; const size = selected[0].length; const result = Array.from({ length: size }, () => 0); for (const vector of selected) for (let index = 0; index < size; index += 1) result[index] += vector[index] / selected.length; return result; },
38
- async list() { return [...vectors.keys()]; }
39
- };
40
- }
41
-
42
- export function librarymemory(factory) {
43
- if (typeof factory !== "function") throw new TypeError("library memory requires a factory");
44
- return { mode: "library", async load(options) { return factory(options); } };
45
- }
46
-
47
- function tobytes(value) {
48
- if (value instanceof Uint8Array) return value;
49
- if (typeof value === "string") return new TextEncoder().encode(value);
50
- return new TextEncoder().encode(JSON.stringify(value));
51
- }
52
-
53
- function assertvector(vector) {
54
- if (!Array.isArray(vector) || vector.length === 0 || vector.some((value) => !Number.isFinite(value))) throw new TypeError("vector must be a non empty numeric array");
55
- }
package/memory/objects.js DELETED
@@ -1,18 +0,0 @@
1
- /**
2
- * memory objects and compute results are serializable contracts between storage and runtime.
3
- */
4
- export function memoryobject(options = {}) {
5
- const buffer = tobytes(options.buffer ?? options.data ?? new Uint8Array(0));
6
- return { id: options.id ?? `memory${Date.now().toString(36)}`, buffer, size: buffer.byteLength, type: options.type ?? "application/octet-stream", createdat: options.createdat ?? Date.now(), metadata: { ...(options.metadata ?? {}) } };
7
- }
8
-
9
- export function computeresult(options = {}) {
10
- return { id: options.id ?? `result${Date.now().toString(36)}`, payload: options.payload, mimetype: options.mimetype, metadata: { ...(options.metadata ?? {}) }, processingtimems: options.processingtimems ?? 0, memoryusedbytes: options.memoryusedbytes ?? 0 };
11
- }
12
-
13
- export function tobytes(value) {
14
- if (value instanceof Uint8Array) return value;
15
- if (value instanceof ArrayBuffer) return new Uint8Array(value);
16
- if (typeof value === "string") return new TextEncoder().encode(value);
17
- return new TextEncoder().encode(JSON.stringify(value));
18
- }
package/memory/targets.js DELETED
@@ -1,21 +0,0 @@
1
- /**
2
- * storage targets describe provider intent without importing a provider client.
3
- */
4
- const types = new Set(["github", "gitlab", "forgejo", "gitea", "huggingface", "kaggle", "modelscope", "filehosting"]);
5
-
6
- export function targetfactory(type, options = {}) {
7
- if (!types.has(type)) throw new TypeError(`unknown memory target: ${type}`);
8
- if (type === "github" || type === "gitlab" || type === "forgejo" || type === "gitea") return { type, platform: type, owner: options.owner, repo: options.repo, branch: options.branch ?? "main", path: options.path, token: options.token };
9
- if (type === "huggingface") return { type, space: options.space, revision: options.revision ?? "main", path: options.path, token: options.token };
10
- if (type === "kaggle") return { type, dataset: options.dataset, sslverification: options.sslverification ?? true, path: options.path, token: options.token };
11
- if (type === "modelscope") return { type, namespace: options.namespace, repo: options.repo, revision: options.revision ?? "master", path: options.path, token: options.token };
12
- return { type, host: options.host, path: options.path, method: options.method ?? "s3compatible", token: options.token };
13
- }
14
-
15
- export function targeturi(target) {
16
- if (target.type === "github" || target.type === "gitlab" || target.type === "forgejo" || target.type === "gitea") return `${target.type}://${target.owner}/${target.repo}/${target.path}`;
17
- if (target.type === "huggingface") return `hf://${target.space}/${target.path}`;
18
- if (target.type === "kaggle") return `kaggle://${target.dataset}/${target.path}`;
19
- if (target.type === "modelscope") return `modelscope://${target.namespace}/${target.repo}/${target.path}`;
20
- return `${target.method}://${target.host}/${target.path}`;
21
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * transforms annotate byte movement without pretending remote storage is physical vram.
3
- */
4
- import { computeresult, memoryobject, tobytes } from "./objects.js";
5
-
6
- export function transformtocompute(value, options = {}) {
7
- const started = performance.now();
8
- const object = memoryobject({ ...options, buffer: value?.buffer ?? value });
9
- return { ...object, processingtimems: performance.now() - started, memoryusedbytes: object.size };
10
- }
11
-
12
- export function transformtostorage(value, options = {}) {
13
- const payload = tobytes(value?.payload ?? value?.buffer ?? value);
14
- return computeresult({ id: value?.id, payload, mimetype: options.mimetype ?? value?.mimetype ?? "application/octet-stream", metadata: options.metadata ?? value?.metadata, processingtimems: value?.processingtimems, memoryusedbytes: payload.byteLength });
15
- }
package/modes/resolve.js DELETED
@@ -1,39 +0,0 @@
1
- /**
2
- * mode resolver selects open defaults while preserving every caller choice.
3
- */
4
- import { modeaxes, validatemode } from "./matrix.js";
5
-
6
- /** Resolves an execution profile without starting a process or opening a socket. */
7
- export function resolvemode(options = {}) {
8
- const profile = {
9
- execution: options.execution ?? "library",
10
- runtime: options.runtime ?? "unknown",
11
- memory: options.memory ?? "internal",
12
- file: options.file ?? "internal",
13
- dependency: options.dependency ?? "internal",
14
- visibility: options.visibility ?? "headless",
15
- pair: options.pair ?? "without"
16
- };
17
- for (const [axis, value] of Object.entries(profile)) if (!validatemode(axis, value)) throw new TypeError(`unsupported mode ${axis}:${value}`);
18
- return { ...profile, capabilities: modecapabilities(profile) };
19
- }
20
-
21
- /** Returns stable capabilities for adapters and diagnostics. */
22
- export function modecapabilities(profile) {
23
- return {
24
- library: profile.execution === "library" || profile.execution === "application",
25
- browser: profile.execution === "browser" || profile.execution === "extension" || profile.runtime === "browser" || profile.runtime === "worker",
26
- cli: profile.execution === "cli" || profile.execution === "binary",
27
- physicalmemory: profile.memory === "physical",
28
- vectorizedmemory: profile.memory === "vectorized",
29
- externalmemory: profile.memory === "external",
30
- externalfile: profile.file === "external",
31
- externaldependency: profile.dependency === "external",
32
- visible: profile.visibility === "visible"
33
- };
34
- }
35
-
36
- /** Applies one profile to a caller supplied operation. */
37
- export async function withmode(options, operation) { if (typeof operation !== "function") throw new TypeError("mode operation is required"); return operation(resolvemode(options)); }
38
-
39
- export { modeaxes };