@wenathlan/saddle 1.8.8 → 1.8.10

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 (748) hide show
  1. package/README.md +19 -15
  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} +1 -0
  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 +51 -0
  311. package/dist/packager/manifest.d.ts.map +1 -0
  312. package/dist/packager/manifest.js +58 -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 +119 -0
  387. package/dist/release/assets.d.ts.map +1 -0
  388. package/dist/release/assets.js +94 -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/artifactavailability.md +40 -0
  579. package/docs/artifactresearch-1.8.9.md +42 -0
  580. package/docs/enginearchitecture.md +2 -2
  581. package/docs/gapmatrix.md +2 -2
  582. package/docs/libraryapi.md +1 -1
  583. package/docs/mobileconversionresearch-1.8.10.md +59 -0
  584. package/docs/release.md +5 -5
  585. package/docs/releaseassets.md +4 -3
  586. package/docs/reorganization-1.8.9.md +28 -0
  587. package/docs/toolchainresearch-1.8.9.md +18 -0
  588. package/extension/manifest.json +1 -1
  589. package/package.json +73 -88
  590. package/adapters/forge.js +0 -16
  591. package/adapters/github.js +0 -19
  592. package/adapters/gitlab.js +0 -10
  593. package/adapters/socket.js +0 -14
  594. package/adapters/transport.js +0 -30
  595. package/ai/chunk.js +0 -22
  596. package/ai/llmstxt.js +0 -12
  597. package/ai/provenance.js +0 -18
  598. package/ai/rag.js +0 -14
  599. package/api/auth.js +0 -13
  600. package/api/control.js +0 -33
  601. package/api/rate.js +0 -31
  602. package/api/security.js +0 -42
  603. package/api/service.js +0 -36
  604. package/binary/build.js +0 -17
  605. package/bot/adapter.js +0 -8
  606. package/bot/bot.js +0 -39
  607. package/bot/commands.js +0 -18
  608. package/bot/permissions.js +0 -16
  609. package/browser/actions.js +0 -33
  610. package/browser/agent.js +0 -9
  611. package/browser/context.js +0 -52
  612. package/browser/playwright.js +0 -22
  613. package/browser/recorder.js +0 -21
  614. package/browser/session.js +0 -19
  615. package/browser/snapshot.js +0 -57
  616. package/captcha/contract.js +0 -15
  617. package/captcha/evidence.js +0 -9
  618. package/captcha/guard.js +0 -10
  619. package/cli/main.js +0 -36
  620. package/core/errors.js +0 -57
  621. package/core/events.js +0 -21
  622. package/core/hash.js +0 -73
  623. package/core/ids.js +0 -15
  624. package/dispatch/resumable.js +0 -31
  625. package/dispatch/workflow.js +0 -33
  626. package/domain/artifacts.js +0 -13
  627. package/domain/jobs.js +0 -20
  628. package/domain/sessions.js +0 -46
  629. package/extension/build.js +0 -46
  630. package/extension/content.js +0 -127
  631. package/extension/pagebridge.js +0 -41
  632. package/extension/permissions.js +0 -22
  633. package/extension/popup.css +0 -13
  634. package/extension/popup.html +0 -24
  635. package/extension/popup.js +0 -25
  636. package/extension/protocol.js +0 -95
  637. package/extension/serviceworker.js +0 -109
  638. package/extension/worker.js +0 -22
  639. package/format/check.js +0 -21
  640. package/library/public.js +0 -85
  641. package/mcp/browser.js +0 -12
  642. package/mcp/server.js +0 -28
  643. package/mcp/transport.js +0 -14
  644. package/memory/bridge.js +0 -16
  645. package/memory/engine.js +0 -45
  646. package/memory/modes.js +0 -55
  647. package/memory/objects.js +0 -18
  648. package/memory/targets.js +0 -21
  649. package/memory/transforms.js +0 -15
  650. package/modes/resolve.js +0 -39
  651. package/packager/manifest.js +0 -28
  652. package/packager/publish.js +0 -15
  653. package/persistence/adapter.js +0 -8
  654. package/persistence/drizzle.js +0 -10
  655. package/persistence/memory.js +0 -26
  656. package/persistence/prisma.js +0 -23
  657. package/persistence/schema.js +0 -29
  658. package/persistence/sql.js +0 -30
  659. package/protocol/blocks.js +0 -18
  660. package/protocol/ndjson.js +0 -17
  661. package/protocol/sse.js +0 -22
  662. package/proxy/pool.js +0 -12
  663. package/queue/idempotency.js +0 -12
  664. package/queue/persistent.js +0 -44
  665. package/queue/queue.js +0 -50
  666. package/queue/saga.js +0 -13
  667. package/release/assets.js +0 -70
  668. package/runners/health.js +0 -23
  669. package/runners/heartbeat.js +0 -26
  670. package/runners/inprocess.js +0 -19
  671. package/runners/scheduler.js +0 -16
  672. package/runtime/abort.js +0 -10
  673. package/runtime/detect.js +0 -14
  674. package/runtime/engine.js +0 -56
  675. package/runtime/retry.js +0 -27
  676. package/runtime/worker.js +0 -18
  677. package/scrape/agent.ts +0 -122
  678. package/scrape/batch.ts +0 -79
  679. package/scrape/biome.json +0 -76
  680. package/scrape/browser.ts +0 -222
  681. package/scrape/cache.js +0 -14
  682. package/scrape/cache.ts +0 -84
  683. package/scrape/chunking.ts +0 -193
  684. package/scrape/cli.ts +0 -105
  685. package/scrape/crawl.js +0 -104
  686. package/scrape/crawler.ts +0 -115
  687. package/scrape/dev-server.ts +0 -94
  688. package/scrape/errors.ts +0 -132
  689. package/scrape/events.ts +0 -26
  690. package/scrape/extract.js +0 -14
  691. package/scrape/extract.ts +0 -165
  692. package/scrape/fetch.ts +0 -105
  693. package/scrape/formats.ts +0 -85
  694. package/scrape/headers.ts +0 -71
  695. package/scrape/index.ts +0 -92
  696. package/scrape/jsdom.d.ts +0 -6
  697. package/scrape/llms-txt.ts +0 -84
  698. package/scrape/middleware.ts +0 -90
  699. package/scrape/normalize.js +0 -86
  700. package/scrape/pool.ts +0 -95
  701. package/scrape/port.ts +0 -18
  702. package/scrape/proxy.ts +0 -103
  703. package/scrape/rate-limiter.ts +0 -95
  704. package/scrape/renderer.ts +0 -194
  705. package/scrape/retry.ts +0 -64
  706. package/scrape/robots.js +0 -32
  707. package/scrape/robots.ts +0 -137
  708. package/scrape/schema.js +0 -21
  709. package/scrape/scrape.ts +0 -123
  710. package/scrape/scraper.js +0 -40
  711. package/scrape/semantic.js +0 -22
  712. package/scrape/serialize.ts +0 -310
  713. package/scrape/server.ts +0 -137
  714. package/scrape/session.ts +0 -109
  715. package/scrape/sitemap.ts +0 -131
  716. package/scrape/tokens.ts +0 -45
  717. package/scrape/tsconfig.json +0 -28
  718. package/scrape/types.ts +0 -214
  719. package/scrape/utils.ts +0 -77
  720. package/scrape/vite.config.ts +0 -55
  721. package/scrape/vitest.config.ts +0 -17
  722. package/server/node.js +0 -34
  723. package/sessions/file.js +0 -13
  724. package/sessions/replay.js +0 -61
  725. package/sessions/store.js +0 -13
  726. package/storage/adapter.js +0 -8
  727. package/storage/cache.js +0 -54
  728. package/storage/checksum.js +0 -17
  729. package/storage/chunked.js +0 -58
  730. package/storage/content.js +0 -42
  731. package/storage/filehosting.js +0 -17
  732. package/storage/githubcontents.js +0 -18
  733. package/storage/local.js +0 -35
  734. package/storage/memory.js +0 -28
  735. package/storage/s3compatible.js +0 -23
  736. package/storage/sync.js +0 -55
  737. package/surfaces/adapters.js +0 -48
  738. package/surfaces/controls.js +0 -37
  739. package/surfaces/manifest.js +0 -25
  740. package/surfaces/n8n.js +0 -24
  741. package/surfaces/operations.js +0 -43
  742. package/surfaces/targets.js +0 -16
  743. package/webhook/delivery.js +0 -26
  744. package/webhook/receiver.js +0 -20
  745. package/workflow/manifest.js +0 -20
  746. package/workflow/registry.js +0 -16
  747. package/workflow/templates.js +0 -18
  748. package/workflow/triggers.js +0 -31
@@ -0,0 +1,40 @@
1
+ # Saddle 1.8.9 artifact availability
2
+
3
+ Saddle 1.8.9 is a TypeScript-first engine release with native packaging generated from the shared Tauri 2 desktop boundary. The workflows derive the release version from the release tag and attach only the files produced by the corresponding runner. Tauri documents `android build` and `ios build` as separate platform commands, while the desktop `build` command generates platform installers from the resolved frontend distribution [1].
4
+
5
+ ## Verified release assets
6
+
7
+ The following artifacts are attached to the [v1.8.9 GitHub release][3]. The desktop assets are unsigned build artifacts; code signing, notarization and store submission remain caller-owned. The Android files are debug-signed test artifacts and are not production store releases.
8
+
9
+ | Surface | Generated asset | Release status | Distribution note |
10
+ | ----------------- | --------------------------------------------------------------------------------------------------------------------------------- | -------------- | ------------------------------------------------------------------------------------- |
11
+ | Windows | [Saddle Browser 1.8.9 setup EXE](https://github.com/wenathlan/saddle/releases/download/v1.8.9/Saddle.Browser_1.8.9_x64-setup.exe) | Generated | Unsigned installer; caller-owned signing and update policy. |
12
+ | Windows | [Saddle Browser 1.8.9 MSI](https://github.com/wenathlan/saddle/releases/download/v1.8.9/Saddle.Browser_1.8.9_x64_en-US.msi) | Generated | Unsigned installer; caller-owned signing and enterprise deployment. |
13
+ | Linux | [Debian package](https://github.com/wenathlan/saddle/releases/download/v1.8.9/Saddle.Browser_1.8.9_amd64.deb) | Generated | Unsigned package; Snap and Flatpak are not part of this release. |
14
+ | Linux | [RPM package](https://github.com/wenathlan/saddle/releases/download/v1.8.9/Saddle.Browser-1.8.9-1.x86_64.rpm) | Generated | Unsigned package; repository publication remains caller-owned. |
15
+ | Linux | [AppImage](https://github.com/wenathlan/saddle/releases/download/v1.8.9/Saddle.Browser_1.8.9_amd64.AppImage) | Generated | Portable unsigned image. |
16
+ | macOS | [DMG](https://github.com/wenathlan/saddle/releases/download/v1.8.9/Saddle.Browser_1.8.9_aarch64.dmg) | Generated | Unsigned and not notarized; PKG is deferred. |
17
+ | Android | [Debug APK](https://github.com/wenathlan/saddle/releases/download/v1.8.9/app-universal-debug.apk) | Generated | Debug key for test installation; production signing is caller-owned. |
18
+ | Android | [Debug AAB](https://github.com/wenathlan/saddle/releases/download/v1.8.9/app-universal-debug.aab) | Generated | Debug key for test packaging; production signing is caller-owned. |
19
+ | Container | [Saddle container tarball](https://github.com/wenathlan/saddle/releases/download/v1.8.9/saddle-container-1.8.9.tar.gz) | Generated | OCI image exported as a tarball; deployment runtime and registry remain caller-owned. |
20
+ | Browser extension | [Saddle extension ZIP](https://github.com/wenathlan/saddle/releases/download/v1.8.9/saddle-extension-1.8.9.zip) | Generated | Deterministic extension package. |
21
+
22
+ The platform manifests and checksums are also attached. They are named `artifact-manifest-linux.json`, `artifact-manifest-windows.json`, `artifact-manifest-macos.json`, `artifact-manifest-android.json`, `container-artifact-manifest.json`, `SHA256SUMS-linux`, `SHA256SUMS-windows`, `SHA256SUMS-macos`, `SHA256SUMS-android` and `SHA256SUMS-container`.
23
+
24
+ ## Unavailable or caller-owned targets
25
+
26
+ The iOS workflow exists but is gated by `SADDLE_IOS_ENABLED` or an explicit manual dispatch input. No IPA is claimed for v1.8.9 because the release was not run with Apple Developer certificates, provisioning profiles and export credentials. The same ownership rule applies to PKG, MSIX, Snap, Flatpak, production Android signing, Windows signing, macOS signing and notarization. The package targets for npm, GitHub Packages, GHCR, Maven, NuGet and RubyGems remain separate registry workflows and are not duplicated as release binaries.
27
+
28
+ Tauri configuration is resolved from `tauri.conf.json` and can be extended with platform-specific configuration files, which keeps the core application boundary reusable without embedding signing material or infrastructure endpoints [2].
29
+
30
+ ## References
31
+
32
+ [1]: https://v2.tauri.app/reference/cli/ "Tauri Command Line Interface"
33
+ [2]: https://v2.tauri.app/develop/configuration-files/ "Tauri Configuration Files"
34
+ [3]: https://github.com/wenathlan/saddle/releases/tag/v1.8.9 "Saddle v1.8.9 GitHub Release"
35
+
36
+ ## 1.8.10 conversion contract
37
+
38
+ Version 1.8.10 keeps the Tauri desktop browser and adds explicit Capacitor Android and iOS conversion targets. The shared source is the TypeScript library plus the compiled `web/dist/public` output; the native folders do not fork engine logic. The Android release build enables R8 and resource shrinking, and the workflow creates an ephemeral CI test key when caller production signing secrets are absent.
39
+
40
+ The 1.8.10 workflow names the public outputs `saddle.browser.1.8.10.<format>`, `saddle.apk.1.8.10.apk`, `saddle.aab.1.8.10.aab`, `saddle.ipa.1.8.10.ipa`, `saddle.container.1.8.10.tar.gz` and `saddle.extension.1.8.10.zip`. Surface manifests and checksums use the corresponding `manifest.<surface>.1.8.10.json` and `sha256.<surface>.1.8.10` forms. The release is not considered complete until the live GitHub asset list matches these generated names.
@@ -0,0 +1,42 @@
1
+ # Artifact research 1.8.9
2
+
3
+ ## Decision summary
4
+
5
+ The missing release artifacts require a shared desktop browser shell plus platform-specific CI jobs. The source boundary should remain one TypeScript application and one compiled Saddle library; platform jobs should package that boundary rather than create independent application logic.
6
+
7
+ | Surface | Recommended build boundary | Required runner or toolchain | Release status |
8
+ | --- | --- | --- | --- |
9
+ | Desktop browser shell | Tauri 2 or an equivalent caller-selected shell around the existing web build | Rust, platform WebView and platform packaging tools | Can generate platform bundles in CI; signing remains caller-owned |
10
+ | Windows | Tauri Windows bundle or Electron Forge maker when an Electron shell is explicitly selected | Windows runner; EXE/MSI/MSIX maker and optional signing certificate | Unsigned installers can be generated by configured CI; store distribution requires signing |
11
+ | Linux | Tauri Debian, RPM, AppImage, Snap or Flatpak bundle | Linux runner and format-specific tools | Debian and AppImage are practical first artifacts; Snap/Flatpak require their own validation and publishing channels |
12
+ | macOS | Tauri app/DMG/PKG bundle | macOS runner with Xcode toolchain | App, DMG and PKG need signing; outside the App Store also needs notarization |
13
+ | Android | Shared web application through Tauri Android or a native Gradle wrapper | Linux runner with Android SDK/Gradle | Debug APK can be produced without the owner's release key; release APK/AAB requires private signing material |
14
+ | iOS | Shared web application through Tauri iOS or a native Xcode project | macOS runner with Xcode | IPA/archive requires Xcode, provisioning and signing inputs; no unsigned App Store artifact is a valid release product |
15
+
16
+ ## Primary findings
17
+
18
+ Tauri 2 exposes `build`, `android build` and `ios build` commands and automatically bundles configured platform formats. Its distribution documentation lists Debian, Snap, AppImage, Flatpak and RPM for Linux, DMG and app bundles for macOS, Windows installers, and Android/iOS distribution surfaces. The same documentation states that most platforms require code signing, so an artifact workflow must distinguish generated unsigned output from store-ready signed output [1].
19
+
20
+ Tauri's development documentation confirms that the web UI is displayed inside the platform WebView and that the mobile commands use Android Studio or Xcode when the caller needs an IDE. It also warns that mobile iOS physical-device development requires the `TAURI_DEV_HOST` address and an Xcode-connected device, which is why the repository should expose that value as workflow configuration rather than hardcoding a host [2].
21
+
22
+ Electron Forge is a viable alternative when the project explicitly chooses Electron. Its makers are configured per platform and can produce formats such as DMG, AppX and Flatpak [3]. The Debian maker requires Linux or macOS plus `fakeroot` and `dpkg`, so Debian packaging belongs on a Linux CI job with those packages available [4]. The project should not add Electron merely to produce installers if a lighter Tauri shell satisfies the browser requirement.
23
+
24
+ Android's official command-line guidance distinguishes debug and release output. `assembleDebug` creates a debug APK signed by the SDK's debug key for testing, while release APKs and bundles require the owner's private signing key. The same documentation describes Gradle `bundle<Variant>` tasks for AAB output and explains that an AAB is not directly installable on a device [5]. Consequently, the workflow may publish a debug APK as a clearly labeled test artifact, but must require a repository secret or environment-provided keystore before claiming a release APK or AAB.
25
+
26
+ Apple's Xcode command-line guidance identifies `xcodebuild` as the tool for building, testing, archiving and exporting Xcode projects. iOS packaging therefore belongs on a macOS runner and must receive a scheme, archive path, export options, provisioning profile and certificate from the caller or repository secrets [6]. The workflow can prepare an archive contract when those inputs are absent, but it must not fabricate an IPA or signing identity.
27
+
28
+ GitHub-hosted runners provide standard Linux, Windows and macOS labels. The runner reference documents `ubuntu-latest`, `windows-latest` and `macos-latest` families and notes Android SDK acceleration on Linux runners [7]. The release workflow should use those labels for platform jobs and derive every version from the release tag; it should not assume that a Linux sandbox can cross-build a signed Windows, Android or iOS artifact.
29
+
30
+ ## Implementation consequence
31
+
32
+ The first implementation should add a shared desktop application manifest and a Tauri-oriented workflow contract, then add Windows and Linux jobs that can generate unsigned installers when their native tools are present. Android and iOS jobs should be caller-configured and should report `unavailable` rather than emitting a misleading artifact when SDKs, certificates or provisioning inputs are missing. Every generated file must be checksumed, uploaded to the existing GitHub release and listed in a machine-readable release asset manifest.
33
+
34
+ ## References
35
+
36
+ [1]: https://v2.tauri.app/distribute/ "Tauri 2 distribution and signing guidance"
37
+ [2]: https://v2.tauri.app/develop/ "Tauri 2 desktop and mobile development guidance"
38
+ [3]: https://www.electronforge.io/config/makers "Electron Forge makers"
39
+ [4]: https://www.electronforge.io/config/makers/deb "Electron Forge Debian maker requirements"
40
+ [5]: https://developer.android.com/build/building-cmdline "Android command-line build, APK, AAB and signing guidance"
41
+ [6]: https://developer.apple.com/library/archive/technotes/tn2339/_index.html "Apple Xcode command-line build and archive guidance"
42
+ [7]: https://docs.github.com/en/actions/reference/runners/github-hosted-runners "GitHub-hosted runner platforms and capabilities"
@@ -23,7 +23,7 @@ The project has no `src` folder. The root is the map of the engine.
23
23
  | `tests` | local deterministic tests without credentials |
24
24
  | `examples` | small runnable integration examples |
25
25
 
26
- All internal file names are lowercase and contain no underscore or hyphen. Related logic stays grouped and each module remains small enough to reason about in isolation. Version 1.8.8 groups crawl URL normalization, traversal, frontier budgets and persistence in `scrape/crawl.js`; it does not merge distinct storage cache, job queue or browser session contracts merely because they use similar words.
26
+ All internal file names are lowercase and contain no underscore or hyphen. Related logic stays grouped and each module remains small enough to reason about in isolation. Version 1.8.9 uses TypeScript source at the root and groups crawl URL normalization, traversal, frontier budgets and persistence in `scrape/crawl.ts`; it does not merge distinct storage cache, job queue or browser session contracts merely because they use similar words.
27
27
 
28
28
  ## public contracts
29
29
 
@@ -65,7 +65,7 @@ The same contracts support paired modes. A mode can exist without its pair, and
65
65
  | browser | headless job definition | capture and replay adapter |
66
66
  | network | local deterministic job | remote provider and storage adapter |
67
67
 
68
- The first cut implements library, cli, binary entry point, internal memory, and internal file. The other modes are extension points, not hardcoded promises. Version 1.8.8 preserves this boundary while reducing duplicated active context files.
68
+ The first cut implements library, CLI, binary entry point, internal memory, and internal file. The other modes are extension points and declarative target plans, not hardcoded platform promises. Version 1.8.9 preserves this boundary while compiling the active engine to ignored `dist/` output.
69
69
 
70
70
  ## infrastructure rules
71
71
 
package/docs/gapmatrix.md CHANGED
@@ -19,11 +19,11 @@ This matrix turns the supplied README and conclusions into implementation decisi
19
19
  | Browser agent | Implemented injected action adapter for navigate, click, type, screenshot, DOM, title, scroll and command batches | Vendor-neutral action results and bounded action batches are public; optional Playwright provider is isolated behind `browser-playwright` | P1 | Keep the adapter boundary; browser binaries and credentials remain caller-owned |
20
20
  | Browser snapshots | Implemented public contract | Snapshot ids, bounded elements, stable refs, stale checks and diffs are covered by deterministic tests | P0 | Reuse the contract from MCP and extension transport |
21
21
  | Session replay | Implemented | Replay restores caller-owned window, tab and frame context before actions; context identifiers are validated and counted | P1 | Keep browser selection and restoration in injected adapters |
22
- | Extension runtime | Manifest V3 manifest, service worker, content bridge, popup, snapshot diffs, context metadata and deterministic build artifact are implemented | Cross-browser manifests remain unbundled | P2 | Keep a pure JavaScript MV3 reference surface with minimal permissions |
22
+ | Extension runtime | TypeScript-first Manifest V3 source, service worker, content bridge, popup, snapshot diffs, context metadata and deterministic JavaScript build artifact are implemented | Cross-browser manifests remain unbundled | P2 | Keep the compiled MV3 artifact minimal and keep cross-browser profiles caller-owned |
23
23
  | Extension messaging | Versioned envelope, correlation id, timeout, sender metadata and error response contract are implemented | Long-lived ports remain caller-owned | P1 | Keep transport-neutral messages and explicit runtime adapters |
24
24
  | Service worker resilience | Implemented contract slice | Pending command envelopes, attempt metadata and snapshot summaries persist through injected storage; resume remains explicit and user-owned | P0 | Rehydrate metadata on startup and never replay a command without an explicit caller action |
25
25
  | Permissions | Contract slice | `permissionpolicy` keeps the base permissions minimal and optional escalation caller-owned | P0 | Start with `storage` and no broad host permissions; make host access caller-configured |
26
- | Content isolation | Implemented read-only page-to-extension boundary | The page world cannot invoke extension commands; richer page facts remain bounded | P1 | Keep `pagebridge.js` read-only, token-correlated and caller-controlled |
26
+ | Content isolation | Implemented read-only page-to-extension boundary | The page world cannot invoke extension commands; richer page facts remain bounded | P1 | Keep the compiled page bridge read-only, token-correlated and caller-controlled |
27
27
  | Task agent | Partial | Jobs, workflows and bot commands exist, but no browser task planner or tool registry | P1 | Reuse workflow, trigger and bot contracts; add browser task commands only after snapshots |
28
28
  | MCP | Implemented scrape, crawl, batch, extract and serialize tools with JSON-RPC handling | No browser snapshot or browser action MCP tools | P1 | Add browser tools as an optional adapter over the same snapshot/action contracts |
29
29
  | API security | Implemented URL protocol and private hostname/IP checks | Request envelopes, optional authorization, security headers, redirect bounds and injected DNS resolution checks are now available | P0 | Keep credentials caller-owned and reject private or rebinding targets before transport |
@@ -56,7 +56,7 @@ The `fetcher`, browser adapter, persistence adapter, proxy pool, captcha solver,
56
56
 
57
57
  ## package surfaces
58
58
 
59
- The package exposes explicit subpaths for `./browser`, `./bot`, `./captcha`, `./memory-engine`, and `./deploy`. Desktop, mobile, and n8n contracts are exported from the root entry; the root entry remains the complete JavaScript API for consumers that prefer one import.
59
+ The package exposes explicit subpaths for `./browser`, `./bot`, `./captcha`, `./memory-engine`, and `./deploy`. Desktop, mobile, target-plan and n8n contracts are exported from the root entry; the root entry remains the complete compiled JavaScript API with generated TypeScript declarations for consumers that prefer one import.
60
60
 
61
61
  The `./extension` subpath exposes browser-neutral message, snapshot and service-worker routing contracts. The concrete Manifest V3 files live in `extension/`; they are not imported by the core at runtime and do not require Chrome when the library is used as a Node package. The browser surface also exposes snapshots, tab/frame context, action results, bounded action batches and recording through `./browser`.
62
62
 
@@ -0,0 +1,59 @@
1
+ # Mobile conversion research for Saddle 1.8.10
2
+
3
+ ## Scope and date
4
+
5
+ This research was reviewed on 13 August 2026 for the 1.8.10 planning cycle. The objective is to preserve one TypeScript-first library core, reuse the compiled web surface, create explicit Android and iOS boundaries, keep the Tauri desktop browser, reduce Android release size and make release filenames predictable.
6
+
7
+ ## Framework comparison
8
+
9
+ | Approach | Strengths | Tradeoffs | Setup complexity | Decision |
10
+ | --- | --- | --- | --- | --- |
11
+ | Tauri 2 for desktop and mobile | Reuses any HTML, CSS and JavaScript frontend; uses the system webview; already builds Saddle desktop; Rust boundary remains available for native capabilities. Tauri documents a small native footprint because the webview is not bundled with every application [1]. | Android and iOS projects are generated through Tauri’s mobile commands; native signing and store configuration remain platform-specific. The current Android debug build is not a valid production-size benchmark. | Medium for desktop, medium-high for mobile | Keep for the desktop browser and retain as a supported mobile alternative. |
12
+ | Capacitor 8.5.0 for Android and iOS | Designed to drop into an existing web project. The documented requirements are a package manifest, a built web directory and a root `index.html`; `npx cap add android`, `npx cap add ios` and `npx cap sync` create and synchronize the native projects [2]. Android uses the system WebView and exposes a JavaScript bridge to Java or Kotlin [3]. | Adds native Android and iOS project trees and a separate plugin boundary. It does not automatically make a web bundle small; release shrinking, asset selection and ABI strategy still control the final size. | Medium | Select as the primary 1.8.10 conversion path for explicit `android/` and `ios/` folders. |
13
+ | Ionic Framework 7.2.1 with Capacitor | Provides a mobile UI component system and navigation conventions on top of the web stack. It can be adopted where mobile-specific controls are required. | It is optional for Capacitor. Adding Ionic to Saddle’s existing React/Tailwind surface would duplicate or replace UI primitives and would not, by itself, solve the 119 MiB debug APK problem. | Medium-high | Do not migrate the current design to Ionic in 1.8.10. Evaluate Ionic components later only for a clearly identified mobile interaction gap. |
14
+
15
+ ## Chosen architecture
16
+
17
+ The library remains the source of truth. The existing `desktop/` Tauri shell remains the browser and desktop application surface. The existing root `browser/` directory remains the transport-neutral browser-agent logic and must not be duplicated as a second browser implementation.
18
+
19
+ The 1.8.10 work introduces explicit `android/` and `ios/` surface boundaries using Capacitor configuration and native project inputs. Both surfaces consume the same compiled web distribution and import the same library contracts. They do not fork the engine, reimplement browser actions or store credentials in source control. The generated native projects are conversion targets; the TypeScript and TSX source remains authoritative.
20
+
21
+ The browser naming is normalized at the release boundary rather than by renaming the transport-neutral `browser/` logic into a second application. The desktop browser bundle is named from the Saddle product identity, while the internal browser modules keep their API-compatible names.
22
+
23
+ ## Why the 1.8.9 debug APK is large
24
+
25
+ The v1.8.9 APK is `125,242,132` bytes, approximately 119.5 MiB. It was generated by the workflow with Tauri’s `--debug --apk --aab` path, so it is a debug test artifact rather than a production-size release benchmark. The release AAB is `35,494,095` bytes, approximately 33.8 MiB, but it is also debug-signed.
26
+
27
+ The primary optimization path is therefore to generate a release build, enable R8 code shrinking and resource shrinking, and measure the result with Android’s APK Analyzer. Android documents that R8 removes unreachable code, optimizes and obfuscates the remaining code, while resource shrinking removes unused resources [4]. Android also documents that App Bundles allow Google Play to generate device-specific APKs and that `--split-per-abi` is useful for testing or distribution outside Google Play [5]. APK Analyzer reports raw size, estimated download size and side-by-side differences between builds [6].
28
+
29
+ The 1.8.10 workflow will keep a debug artifact only as an explicitly named test output. The release path will produce a release AAB and an architecture-specific APK when signing inputs are available. It will not claim that a debug universal APK is store-ready.
30
+
31
+ ### Measured 1.8.9 APK composition
32
+
33
+ The downloaded `app-universal-debug.apk` is 120 MiB on disk and contains 925 archive entries with 133,213,007 bytes of uncompressed content. The dominant entry is `lib/arm64-v8a/libsaddle_desktop.so` at 118,076,216 bytes. The web distribution is approximately 3.3 MiB, so the web assets are not the primary cause of the APK size. The first optimization target is the debug Rust shared library: release compilation, symbol stripping, native profile selection and inspection of the generated `.so` are required before evaluating a framework change.
34
+
35
+ ## Release naming policy
36
+
37
+ Public artifact names use lowercase product identity, dots as separators and the release version. The policy avoids underscores, build-helper names and ambiguous generic files.
38
+
39
+ | Surface | 1.8.10 naming pattern |
40
+ | --- | --- |
41
+ | Desktop browser | `saddle.browser.1.8.10.<format>` |
42
+ | Android APK | `saddle.apk.1.8.10.<abi>.apk` |
43
+ | Android AAB | `saddle.aab.1.8.10.aab` |
44
+ | iOS IPA | `saddle.ipa.1.8.10.ipa` |
45
+ | Container | `saddle.container.1.8.10.tar.gz` |
46
+ | Extension | `saddle.extension.1.8.10.zip` |
47
+ | Checksums | `sha256.<surface>.1.8.10` |
48
+ | Manifest | `manifest.<surface>.1.8.10.json` |
49
+
50
+ The workflow must reject `build_script_build*.exe`, `build-script-build.exe`, `saddle_desktop.exe`, generic `artifact-manifest.json`, generic `SHA256SUMS` and any public filename containing an underscore. Rust build-script executables are intermediate compilation outputs and are never release assets.
51
+
52
+ ## References
53
+
54
+ [1]: https://v2.tauri.app/start/ "Tauri: What is Tauri?"
55
+ [2]: https://capacitorjs.com/docs/getting-started "Capacitor: Installing Capacitor"
56
+ [3]: https://capacitorjs.com/docs/android "Capacitor Android Documentation"
57
+ [4]: https://developer.android.com/topic/performance/app-optimization/enable-app-optimization "Android Developers: Enable app optimization with R8"
58
+ [5]: https://v2.tauri.app/distribute/google-play/ "Tauri: Google Play distribution"
59
+ [6]: https://developer.android.com/studio/debug/apk-analyzer "Android Developers: Analyze your build with the APK Analyzer"
package/docs/release.md CHANGED
@@ -6,10 +6,10 @@ The release path is intentionally split into source validation, package validati
6
6
 
7
7
  | step | owner | condition |
8
8
  |---|---|---|
9
- | package version | repository | `package.json` matches the release tag, for example `1.8.8` |
9
+ | package version | repository | `package.json` matches the release tag, for example `1.8.9` |
10
10
  | quality gate | GitHub Actions | `npm run pack:check` passes |
11
- | tag | repository owner | tag `v1.8.8` points to the validated release commit |
12
- | GitHub release | repository owner | release `v1.8.8` is created from the validated tag |
11
+ | tag | repository owner | tag `v1.8.9` points to the validated release commit |
12
+ | GitHub release | repository owner | release `v1.8.9` is created from the validated tag |
13
13
  | GitHub Packages | GitHub Actions | `publishgithubnpm.yml`, `publishghcr.yml`, `publishmaven.yml`, `publishnuget.yml`, and `publishrubygems.yml` use `GITHUB_TOKEN` |
14
14
  | public npmjs | owner-managed GitHub Actions secret | `publishnpmjs.yml` uses `NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}` and derives the version from the release tag or latest release in manual maintenance runs |
15
15
  | extension zip | GitHub Actions | `buildextension.yml` derives the version from the release tag, validates the unpacked artifact and attaches `saddle-extension-<version>.zip` |
@@ -22,8 +22,8 @@ The npm token previously sent in chat is compromised and must not be used. GitHu
22
22
 
23
23
  ```text
24
24
  npm run pack:check
25
- git tag v1.8.8
26
- git push origin v1.8.8
25
+ git tag v1.8.9
26
+ git push origin v1.8.9
27
27
  ```
28
28
 
29
29
  The release-created event is the publication and extension-asset trigger for the release workflows. A dry-run verifies package shape and local tests, but cannot verify registry ownership, Trusted Publisher configuration, package scope authorization, package visibility or browser-store submission; those remain settings controlled by the owner.
@@ -1,16 +1,17 @@
1
1
  # Release assets
2
2
 
3
- The Node-only release adapter creates deterministic metadata for caller-selected artifacts. It writes `SHA256SUMS`, `sbom.cdx.json` in CycloneDX 1.5 shape and `provenance.intoto.jsonl` in an in-toto statement shape. The adapter never publishes, authenticates or selects a registry.
3
+ The Node-only release adapter creates deterministic metadata for caller-selected artifacts. For version `1.8.10`, it writes dotted surface-specific names such as `sha256.desktop.1.8.10`, `manifest.desktop.1.8.10.json`, `sbom.desktop.1.8.10.cdx.json` and `provenance.desktop.1.8.10.intoto.jsonl`. The adapter rejects underscore-based public names and Rust build-helper executables. It never publishes, authenticates or selects a registry.
4
4
 
5
5
  ```bash
6
6
  npm run release:assets -- \
7
- --version 1.8.8 \
7
+ --version 1.8.10 \
8
+ --surface desktop \
8
9
  --output build/release \
9
10
  --artifact build/saddle.tgz \
10
11
  --build-type caller-build \
11
12
  --builder caller-ci
12
13
  ```
13
14
 
14
- The artifact paths are supplied by the caller and are sorted before the checksum and provenance files are written. Package dependencies are read from the root lockfile to build a compact component list. The output can be attached to a release or checked by a registry-specific workflow without adding credentials to the library.
15
+ The artifact paths are supplied by the caller and are sorted before the checksum, manifest, SBOM and provenance files are written. Package dependencies are read from the root lockfile to build a compact component list. The output can be attached to a release or checked by a registry-specific workflow without adding credentials to the library.
15
16
 
16
17
  The package also exports the adapter as `@wenathlan/saddle/release-assets`. It is intentionally Node-only because release metadata reads files and uses the Node crypto implementation; the transport-neutral root remains free of Node imports.
@@ -0,0 +1,28 @@
1
+ # Reorganization 1.8.9
2
+
3
+ ## Scope
4
+
5
+ Version 1.8.9 converts the active engine and its deterministic test surface to a root-based TypeScript source layout. The source tree does not gain `src/`; generated JavaScript, declarations, source maps and target plans are created in ignored `dist/` or `build/` directories by local scripts and release workflows.
6
+
7
+ ## Ownership groups
8
+
9
+ | Group | Canonical source context | Compatibility rule |
10
+ | --- | --- | --- |
11
+ | Public engine | `index.ts`, `library`, `domain`, `core`, `runtime` | Root exports keep their public names and emit stable `dist/*.js` paths. |
12
+ | Storage and memory | `storage`, `memory`, `persistence` | Physical, vector, remote and in-process adapters remain caller-owned. |
13
+ | Acquisition | `scrape`, `browser`, `captcha`, `proxy` | Scrape, crawl, browser and evidence contracts remain separate where their capabilities differ. |
14
+ | Operations | `queue`, `dispatch`, `workflow`, `runners`, `observability` | Retry, circuit, scheduling and resume contracts stay grouped by lifecycle responsibility. |
15
+ | Delivery | `packager`, `release`, `binary`, `surfaces`, `extension`, `cli` | Delivery modules describe plans or build adapters; they do not own store credentials or signing keys. |
16
+ | Web | `web/App.tsx`, `web/components`, `web/pages`, `web/lib`, `web/contexts`, `web/hooks` | The static React surface remains root based and TypeScript. The dynamic debug collector is an explicit `@ts-nocheck` browser instrumentation boundary. |
17
+
18
+ ## Build boundary
19
+
20
+ The project uses a project-local TypeScript 7 compiler. `npm run build:engine` removes and regenerates `dist/`; package `main`, `module`, `browser`, `types`, `bin` and all declared export targets point at that generated output. The npm package includes `dist`, but the Git repository does not commit generated output.
21
+
22
+ ## Target boundary
23
+
24
+ Application, computer, desktop, mobile, Android, iOS, browser, extension, web, CLI, binary, LibreOffice, MCP, VSIX and container formats are represented by declarative manifests. The workflow produces plans for each target and uploads them as CI artifacts. Actual Android SDK, Xcode, desktop installer, browser-store, LibreOffice and signing toolchains remain caller-selected adapters because the core cannot safely embed platform credentials or vendor infrastructure.
25
+
26
+ ## Verification
27
+
28
+ The active Node contract has 98 passing tests. The preserved legacy scrape TypeScript surface has 69 passing Vitest tests. Web `tsc`, Pages build, format checks, package dry-run and high-severity audit remain release gates. A target plan is accepted only when it contains the release version, canonical compiled entry, output path, caller-managed credentials marker and reproducible metadata.
@@ -0,0 +1,18 @@
1
+ # Toolchain research 1.8.9
2
+
3
+ ## Date
4
+
5
+ The migration baseline is **2026-08-13**.
6
+
7
+ ## Verified sources
8
+
9
+ | Area | Verified finding | Source |
10
+ | --- | --- | --- |
11
+ | TypeScript | The official TypeScript download page states that TypeScript 7.0 is currently available and recommends a project-local npm installation for reproducible lockfiles. | [TypeScript download](https://www.typescriptlang.org/download/) |
12
+ | TypeScript release | The official TypeScript team blog announces TypeScript 7.0 as the current native compiler release. | [Announcing TypeScript 7.0](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/) |
13
+ | Node.js | Node.js 26.7.0 is the current release in the v26 line as of 2026-08-05. | [Node.js 26.7.0](https://nodejs.org/en/blog/release/v26.7.0) |
14
+ | Node.js support | The official release table identifies v26 as Current and v24 as LTS; production targets should remain caller-selectable between supported Current and LTS runtimes. | [Node.js releases](https://nodejs.org/en/about/previous-releases) |
15
+
16
+ ## Migration decision
17
+
18
+ The root project will use a project-local TypeScript compiler pinned in `package.json` and `package-lock.json`. The engine target remains Node.js `>=26.7.0`, while target manifests may declare a different runtime only when the target adapter and workflow provide an explicit compatibility contract. Generated JavaScript, declaration files, source maps and bundles remain build output and are not committed as source.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "Saddle browser bridge",
4
- "version": "1.8.8",
4
+ "version": "1.8.10",
5
5
  "description": "User initiated page snapshots through the Saddle browser contract.",
6
6
  "minimum_chrome_version": "110",
7
7
  "permissions": ["activeTab", "scripting", "storage"],
package/package.json CHANGED
@@ -1,19 +1,25 @@
1
1
  {
2
2
  "name": "@wenathlan/saddle",
3
- "version": "1.8.8",
3
+ "version": "1.8.10",
4
4
  "description": "binary computing engine that turns distributed storage into a publishable working set",
5
5
  "type": "module",
6
6
  "private": false,
7
7
  "license": "GPL-3.0-only",
8
8
  "author": "Wenathlan",
9
9
  "sideEffects": false,
10
- "main": "./index.js",
11
- "module": "./index.js",
12
- "browser": "./index.js",
10
+ "main": "./dist/index.js",
11
+ "module": "./dist/index.js",
12
+ "browser": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
13
14
  "packageManager": "npm@12.0.2",
14
15
  "publishConfig": {
15
16
  "access": "public"
16
17
  },
18
+ "overrides": {
19
+ "xcode": {
20
+ "uuid": "11.1.1"
21
+ }
22
+ },
17
23
  "repository": {
18
24
  "type": "git",
19
25
  "url": "https://github.com/wenathlan/saddle.git"
@@ -42,88 +48,66 @@
42
48
  }
43
49
  },
44
50
  "bin": {
45
- "saddle": "./cli/main.js"
51
+ "saddle": "./dist/cli/main.js"
46
52
  },
47
53
  "exports": {
48
- ".": "./index.js",
49
- "./memory": "./memory/bridge.js",
50
- "./memory-node": "./memory/bridge.js",
51
- "./memory-engine": "./memory/engine.js",
52
- "./storage": "./storage/index.js",
53
- "./storage-node": "./storage/local.js",
54
- "./runners": "./runners/scheduler.js",
55
- "./sessions": "./domain/sessions.js",
56
- "./modes": "./modes/resolve.js",
57
- "./mode": "./modes/matrix.js",
58
- "./browser": "./browser/index.js",
59
- "./browser-playwright": "./browser/playwright.js",
60
- "./bot": "./bot/bot.js",
61
- "./captcha": "./captcha/contract.js",
62
- "./deploy": "./deploy/index.js",
63
- "./extension": "./extension/index.js",
64
- "./server-node": "./server/node.js",
65
- "./sessions-file": "./sessions/file.js",
66
- "./sessions-store": "./sessions/store.js",
67
- "./queue-persistent": "./queue/persistent.js",
68
- "./captcha-evidence": "./captcha/evidence.js",
69
- "./hash": "./core/hash.js",
70
- "./release-assets": "./release/assets.js",
71
- "./worker": "./runtime/worker.js"
54
+ ".": "./dist/index.js",
55
+ "./memory": "./dist/memory/bridge.js",
56
+ "./memory-node": "./dist/memory/bridge.js",
57
+ "./memory-engine": "./dist/memory/engine.js",
58
+ "./storage": "./dist/storage/index.js",
59
+ "./storage-node": "./dist/storage/local.js",
60
+ "./runners": "./dist/runners/scheduler.js",
61
+ "./sessions": "./dist/domain/sessions.js",
62
+ "./modes": "./dist/modes/resolve.js",
63
+ "./mode": "./dist/modes/matrix.js",
64
+ "./browser": "./dist/browser/index.js",
65
+ "./browser-playwright": "./dist/browser/playwright.js",
66
+ "./bot": "./dist/bot/bot.js",
67
+ "./captcha": "./dist/captcha/contract.js",
68
+ "./deploy": "./dist/deploy/index.js",
69
+ "./extension": "./dist/extension/index.js",
70
+ "./server-node": "./dist/server/node.js",
71
+ "./sessions-file": "./dist/sessions/file.js",
72
+ "./sessions-store": "./dist/sessions/store.js",
73
+ "./queue-persistent": "./dist/queue/persistent.js",
74
+ "./captcha-evidence": "./dist/captcha/evidence.js",
75
+ "./hash": "./dist/core/hash.js",
76
+ "./release-assets": "./dist/release/assets.js",
77
+ "./worker": "./dist/runtime/worker.js"
72
78
  },
73
79
  "files": [
74
- "core",
75
- "domain",
76
- "memory",
77
- "runners",
78
- "runtime",
79
- "storage",
80
- "sessions",
81
- "modes",
82
- "adapters",
83
- "persistence",
84
- "queue",
85
- "dispatch",
86
- "scrape",
87
- "api",
88
- "mcp",
89
- "browser",
90
- "proxy",
91
- "captcha",
92
- "ai",
93
- "webhook",
94
- "surfaces",
95
- "library",
96
- "server",
97
- "binary",
98
- "format",
99
- "packager",
100
- "bot",
101
- "protocol",
102
- "workflow",
103
- "cli",
104
- "extension",
105
- "release",
106
- "index.js",
80
+ "dist",
81
+ "extension/manifest.json",
107
82
  "docs",
108
- "examples",
109
83
  "README.md",
110
84
  "LICENSE"
111
85
  ],
112
86
  "scripts": {
113
- "check": "node --check index.js && node --check runtime/engine.js && node --check runtime/retry.js && node --check cli/main.js && node --check extension/protocol.js && node --check extension/serviceworker.js && node --check extension/worker.js && node --check extension/content.js && node --check extension/pagebridge.js && node --check extension/popup.js && node --check extension/permissions.js && node --check extension/build.js && node --check release/assets.js && node --check sessions/replay.js && node --check browser/recorder.js && node --check scrape/normalize.js && node --check scrape/crawl.js",
114
- "formatcheck": "node format/check.js",
115
- "test": "node --test tests/*.test.js",
116
- "run": "node cli/main.js",
117
- "extension:build": "node extension/build.js",
118
- "release:assets": "node release/assets.js",
87
+ "build:engine": "node tests/scripts/buildengine.mjs",
88
+ "check": "npm run build:engine && node --check dist/index.js && node --check dist/runtime/engine.js && node --check dist/cli/main.js && node --check dist/extension/serviceworker.js && node --check dist/release/assets.js",
89
+ "formatcheck": "node --import tsx format/check.ts",
90
+ "test": "npm run build:engine && node --import tsx --test tests/engine.test.ts tests/extension.test.ts tests/package.test.ts tests/release.test.ts",
91
+ "test:legacy": "vitest run tests/agent-utils.test.ts tests/cache.test.ts tests/chunking.test.ts tests/core.test.ts tests/errors.test.ts tests/llms-txt.test.ts tests/middleware.test.ts tests/proxy.test.ts tests/tokens.test.ts",
92
+ "run": "npm run build:engine && node dist/cli/main.js",
93
+ "extension:build": "npm run build:engine && node dist/extension/build.js",
94
+ "release:assets": "npm run build:engine && node dist/release/assets.js",
95
+ "target:manifest": "npm run build:engine && node dist/packager/targetcli.js",
119
96
  "pack:check": "npm run check && npm run formatcheck && npm test && npm pack --dry-run",
120
97
  "prepublishOnly": "npm run pack:check",
98
+ "tauri": "npx --yes @tauri-apps/cli@2.11.4",
99
+ "capacitor:sync:android": "npm run web:build:pages && cap sync android",
100
+ "capacitor:sync:ios": "npm run web:build:pages && cap sync ios",
121
101
  "web:dev": "vite --config web/vite.config.ts --host",
122
102
  "web:check": "tsc --project web/tsconfig.json --noEmit",
123
103
  "web:build": "vite build --config web/vite.config.ts",
124
104
  "web:build:pages": "vite build --config web/vite.config.ts"
125
105
  },
126
106
  "devDependencies": {
107
+ "@capacitor/android": "^8.5.0",
108
+ "@capacitor/cli": "^8.5.0",
109
+ "@capacitor/core": "^8.5.0",
110
+ "@capacitor/ios": "^8.5.0",
127
111
  "@hookform/resolvers": "^5.2.2",
128
112
  "@radix-ui/react-accordion": "^1.2.12",
129
113
  "@radix-ui/react-alert-dialog": "^1.1.15",
@@ -151,17 +135,31 @@
151
135
  "@radix-ui/react-toggle": "^1.1.10",
152
136
  "@radix-ui/react-toggle-group": "^1.1.11",
153
137
  "@radix-ui/react-tooltip": "^1.2.8",
138
+ "@tailwindcss/typography": "^0.5.15",
139
+ "@tailwindcss/vite": "^4.1.3",
140
+ "@types/express": "4.17.21",
141
+ "@types/google.maps": "^3.58.1",
142
+ "@types/node": "^24.7.0",
143
+ "@types/react": "^19.2.1",
144
+ "@types/react-dom": "^19.2.1",
145
+ "@vitejs/plugin-react": "^5.0.4",
146
+ "add": "^2.0.6",
147
+ "autoprefixer": "^10.4.20",
154
148
  "axios": "^1.12.0",
155
149
  "class-variance-authority": "^0.7.1",
156
150
  "clsx": "^2.1.1",
157
151
  "cmdk": "^1.1.1",
158
152
  "embla-carousel-react": "^8.6.0",
153
+ "esbuild": "^0.25.0",
159
154
  "express": "^4.21.2",
160
155
  "framer-motion": "^12.23.22",
161
156
  "input-otp": "^1.4.2",
157
+ "jsdom": "26.1.0",
162
158
  "lucide-react": "^0.453.0",
163
159
  "nanoid": "^5.1.5",
164
160
  "next-themes": "^0.4.6",
161
+ "postcss": "^8.4.47",
162
+ "prettier": "^3.6.2",
165
163
  "react": "^19.2.1",
166
164
  "react-day-picker": "^9.11.1",
167
165
  "react-dom": "^19.2.1",
@@ -171,29 +169,16 @@
171
169
  "sonner": "^2.0.7",
172
170
  "streamdown": "^1.4.0",
173
171
  "tailwind-merge": "^3.3.1",
174
- "tailwindcss-animate": "^1.0.7",
175
- "vaul": "^1.1.2",
176
- "wouter": "^3.3.5",
177
- "zod": "^4.1.12",
178
- "@tailwindcss/typography": "^0.5.15",
179
- "@tailwindcss/vite": "^4.1.3",
180
- "@types/express": "4.17.21",
181
- "@types/google.maps": "^3.58.1",
182
- "@types/node": "^24.7.0",
183
- "@types/react": "^19.2.1",
184
- "@types/react-dom": "^19.2.1",
185
- "@vitejs/plugin-react": "^5.0.4",
186
- "add": "^2.0.6",
187
- "autoprefixer": "^10.4.20",
188
- "esbuild": "^0.25.0",
189
- "postcss": "^8.4.47",
190
- "prettier": "^3.6.2",
191
172
  "tailwindcss": "^4.1.14",
173
+ "tailwindcss-animate": "^1.0.7",
192
174
  "tsx": "^4.19.1",
193
175
  "tw-animate-css": "^1.4.0",
194
- "typescript": "5.6.3",
176
+ "typescript": "7.0.2",
177
+ "vaul": "^1.1.2",
195
178
  "vite": "^7.1.7",
196
179
  "vite-plugin-manus-runtime": "^0.0.58",
197
- "vitest": "^4.1.10"
180
+ "vitest": "^4.1.10",
181
+ "wouter": "^3.3.5",
182
+ "zod": "^4.1.12"
198
183
  }
199
184
  }
package/adapters/forge.js DELETED
@@ -1,16 +0,0 @@
1
- /**
2
- * forge adapter defines the common dispatch and artifact surface for compatible forges.
3
- */
4
- import { transport } from "./transport.js";
5
-
6
- export function forgeadapter(options = {}) {
7
- if (!options.baseurl || typeof options.token !== "function") throw new TypeError("forge adapter requires baseurl and token function");
8
- const client = transport({ fetcher: options.fetcher, attempts: options.attempts, timeout: options.timeout });
9
- async function call(path, init = {}) { const token = await options.token(); return client.request(new URL(path, options.baseurl), { ...init, headers: { authorization: `Bearer ${token}`, accept: "application/json", ...(init.headers ?? {}) } }); }
10
- return {
11
- kind: options.kind ?? "forge",
12
- async health(path = "/") { const response = await call(path); return { ok: response.ok, status: response.status }; },
13
- async dispatch(spec) { if (!spec?.path || !spec.ref) throw new TypeError("forge dispatch requires path and ref"); const response = await call(spec.path, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ ref: spec.ref, inputs: spec.inputs ?? {} }) }); return { accepted: response.ok, status: response.status, body: response.json ? await response.json() : undefined }; },
14
- async upload(spec) { if (!spec?.path || !spec.data) throw new TypeError("forge upload requires path and data"); const response = await call(spec.path, { method: "PUT", headers: { "content-type": spec.contenttype ?? "application/octet-stream" }, body: spec.data }); return { accepted: response.ok, status: response.status }; }
15
- };
16
- }
@@ -1,19 +0,0 @@
1
- /**
2
- * github adapter uses caller supplied credentials and base url configuration.
3
- */
4
- import { transport } from "./transport.js";
5
-
6
- export function githubadapter(options = {}) {
7
- if (!options.baseurl || typeof options.token !== "function") throw new TypeError("github adapter requires baseurl and token function");
8
- const client = transport({ fetcher: options.fetcher, attempts: options.attempts, timeout: options.timeout });
9
- async function call(path, init = {}) {
10
- const token = await options.token();
11
- const headers = { accept: "application/vnd.github+json", authorization: `Bearer ${token}`, "x-github-api-version": options.apiversion ?? "2022-11-28", ...(init.headers ?? {}) };
12
- return client.request(new URL(path, options.baseurl), { ...init, headers });
13
- }
14
- return {
15
- async health() { const response = await call("/rate_limit"); return { ok: response.ok, status: response.status }; },
16
- async dispatch(owner, repository, workflow, input = {}) { const response = await call(`/repos/${owner}/${repository}/actions/workflows/${workflow}/dispatches`, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ ref: input.ref ?? "main", inputs: input.inputs ?? {} }) }); return { accepted: response.status === 204, status: response.status }; },
17
- async run(owner, repository, runid) { const response = await call(`/repos/${owner}/${repository}/actions/runs/${runid}`); return response.json(); }
18
- };
19
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * gitlab adapter keeps project addressing and token ownership outside the package.
3
- */
4
- import { forgeadapter } from "./forge.js";
5
-
6
- export function gitlabadapter(options = {}) {
7
- const project = encodeURIComponent(options.project ?? "");
8
- const base = forgeadapter({ ...options, kind: "gitlab" });
9
- return { ...base, async dispatch(spec) { return base.dispatch({ ...spec, path: spec.path ?? `/api/v4/projects/${project}/pipeline` }); } };
10
- }
@@ -1,14 +0,0 @@
1
- /**
2
- * socket adapter keeps realtime optional and accepts a caller supplied websocket constructor.
3
- */
4
- export function socketadapter(options = {}) {
5
- const websocket = options.websocket ?? globalThis.WebSocket;
6
- if (!websocket) throw new Error("websocket implementation is required");
7
- return {
8
- connect(url, protocols) {
9
- if (!url) throw new TypeError("socket url is required");
10
- const socket = new websocket(url, protocols);
11
- return { socket, send(value) { socket.send(typeof value === "string" ? value : JSON.stringify(value)); }, close(code, reason) { socket.close(code, reason); } };
12
- }
13
- };
14
- }