dotdo 0.0.1 → 0.1.0

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 (667) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +446 -315
  3. package/cli/README.md +238 -0
  4. package/cli/agent.ts +72 -0
  5. package/cli/bin.js +44 -0
  6. package/cli/bin.ts +38 -0
  7. package/cli/build.ts +157 -0
  8. package/cli/commands/auth/login.ts +14 -0
  9. package/cli/commands/auth/logout.ts +6 -0
  10. package/cli/commands/auth/whoami.ts +16 -0
  11. package/cli/commands/deploy-multi.ts +245 -0
  12. package/cli/commands/dev/deploy.ts +100 -0
  13. package/cli/commands/dev/dev.ts +95 -0
  14. package/cli/commands/dev/logs.ts +91 -0
  15. package/cli/commands/dev-local.ts +88 -0
  16. package/cli/commands/do-ops.ts +314 -0
  17. package/cli/commands/index.ts +100 -0
  18. package/cli/commands/init.ts +247 -0
  19. package/cli/commands/introspect/emitter.ts +315 -0
  20. package/cli/commands/introspect/index.ts +193 -0
  21. package/cli/commands/link.ts +598 -0
  22. package/cli/commands/snippets.ts +415 -0
  23. package/cli/commands/tunnel.ts +239 -0
  24. package/cli/device-auth.ts +289 -0
  25. package/cli/fallback.ts +12 -0
  26. package/cli/index.ts +121 -0
  27. package/cli/main.ts +246 -0
  28. package/cli/mcp-stdio.ts +790 -0
  29. package/cli/package.json +62 -0
  30. package/cli/runtime/do-registry.ts +193 -0
  31. package/cli/runtime/embedded-db.ts +344 -0
  32. package/cli/runtime/index.ts +9 -0
  33. package/cli/runtime/miniflare-adapter.ts +162 -0
  34. package/cli/sandbox.ts +82 -0
  35. package/cli/src/args.ts +174 -0
  36. package/cli/src/auth.ts +55 -0
  37. package/cli/src/commands/call.ts +84 -0
  38. package/cli/src/commands/charge.ts +96 -0
  39. package/cli/src/commands/config.ts +115 -0
  40. package/cli/src/commands/email.ts +112 -0
  41. package/cli/src/commands/llm.ts +115 -0
  42. package/cli/src/commands/queue.ts +134 -0
  43. package/cli/src/commands/text.ts +86 -0
  44. package/cli/src/config.ts +185 -0
  45. package/cli/src/output.ts +246 -0
  46. package/cli/src/rpc.ts +192 -0
  47. package/cli/utils/config.ts +282 -0
  48. package/cli/utils/detect.ts +73 -0
  49. package/cli/utils/index.ts +15 -0
  50. package/cli/utils/logger.ts +232 -0
  51. package/dist/ai/index.js +19 -0
  52. package/dist/ai/index.js.map +1 -0
  53. package/dist/ai/template-literals.js +852 -0
  54. package/dist/ai/template-literals.js.map +1 -0
  55. package/dist/api/middleware/auth-federation.js +573 -0
  56. package/dist/api/middleware/auth-federation.js.map +1 -0
  57. package/dist/api/middleware/auth.js +545 -0
  58. package/dist/api/middleware/auth.js.map +1 -0
  59. package/dist/db/actions.js +212 -0
  60. package/dist/db/actions.js.map +1 -0
  61. package/dist/db/auth.js +506 -0
  62. package/dist/db/auth.js.map +1 -0
  63. package/dist/db/branches.js +65 -0
  64. package/dist/db/branches.js.map +1 -0
  65. package/dist/db/clickhouse.js +1074 -0
  66. package/dist/db/clickhouse.js.map +1 -0
  67. package/dist/db/dlq.js +39 -0
  68. package/dist/db/dlq.js.map +1 -0
  69. package/dist/db/events.js +28 -0
  70. package/dist/db/events.js.map +1 -0
  71. package/dist/db/exec.js +64 -0
  72. package/dist/db/exec.js.map +1 -0
  73. package/dist/db/files.js +85 -0
  74. package/dist/db/files.js.map +1 -0
  75. package/dist/db/flags.js +24 -0
  76. package/dist/db/flags.js.map +1 -0
  77. package/dist/db/git.js +116 -0
  78. package/dist/db/git.js.map +1 -0
  79. package/dist/db/iceberg/inverted-index.js +862 -0
  80. package/dist/db/iceberg/inverted-index.js.map +1 -0
  81. package/dist/db/iceberg/puffin.js +878 -0
  82. package/dist/db/iceberg/puffin.js.map +1 -0
  83. package/dist/db/iceberg/search-manifest.js +422 -0
  84. package/dist/db/iceberg/search-manifest.js.map +1 -0
  85. package/dist/db/iceberg/types.js +8 -0
  86. package/dist/db/iceberg/types.js.map +1 -0
  87. package/dist/db/index.js +121 -0
  88. package/dist/db/index.js.map +1 -0
  89. package/dist/db/integrations.js +368 -0
  90. package/dist/db/integrations.js.map +1 -0
  91. package/dist/db/json-indexes.js +332 -0
  92. package/dist/db/json-indexes.js.map +1 -0
  93. package/dist/db/linked-accounts.js +287 -0
  94. package/dist/db/linked-accounts.js.map +1 -0
  95. package/dist/db/nouns.js +183 -0
  96. package/dist/db/nouns.js.map +1 -0
  97. package/dist/db/objects.js +170 -0
  98. package/dist/db/objects.js.map +1 -0
  99. package/dist/db/primitives/dag-scheduler/index.js +869 -0
  100. package/dist/db/primitives/dag-scheduler/index.js.map +1 -0
  101. package/dist/db/primitives/exactly-once-context.js +237 -0
  102. package/dist/db/primitives/exactly-once-context.js.map +1 -0
  103. package/dist/db/primitives/index.js +62 -0
  104. package/dist/db/primitives/index.js.map +1 -0
  105. package/dist/db/primitives/keyed-router.js +145 -0
  106. package/dist/db/primitives/keyed-router.js.map +1 -0
  107. package/dist/db/primitives/observability.js +162 -0
  108. package/dist/db/primitives/observability.js.map +1 -0
  109. package/dist/db/primitives/schema-evolution.js +643 -0
  110. package/dist/db/primitives/schema-evolution.js.map +1 -0
  111. package/dist/db/primitives/stateful-operator/index.js +770 -0
  112. package/dist/db/primitives/stateful-operator/index.js.map +1 -0
  113. package/dist/db/primitives/temporal-store.js +306 -0
  114. package/dist/db/primitives/temporal-store.js.map +1 -0
  115. package/dist/db/primitives/typed-column-store.js +1229 -0
  116. package/dist/db/primitives/typed-column-store.js.map +1 -0
  117. package/dist/db/primitives/utils/duration.js +162 -0
  118. package/dist/db/primitives/utils/duration.js.map +1 -0
  119. package/dist/db/primitives/utils/murmur3.js +116 -0
  120. package/dist/db/primitives/utils/murmur3.js.map +1 -0
  121. package/dist/db/primitives/watermark-service.js +136 -0
  122. package/dist/db/primitives/watermark-service.js.map +1 -0
  123. package/dist/db/primitives/window-manager.js +764 -0
  124. package/dist/db/primitives/window-manager.js.map +1 -0
  125. package/dist/db/relationships.js +66 -0
  126. package/dist/db/relationships.js.map +1 -0
  127. package/dist/db/schema-minimal.js +61 -0
  128. package/dist/db/schema-minimal.js.map +1 -0
  129. package/dist/db/search.js +28 -0
  130. package/dist/db/search.js.map +1 -0
  131. package/dist/db/stores.js +1665 -0
  132. package/dist/db/stores.js.map +1 -0
  133. package/dist/db/things.js +297 -0
  134. package/dist/db/things.js.map +1 -0
  135. package/dist/db/vault.js +171 -0
  136. package/dist/db/vault.js.map +1 -0
  137. package/dist/db/verbs.js +102 -0
  138. package/dist/db/verbs.js.map +1 -0
  139. package/dist/do/base.js +48 -0
  140. package/dist/do/base.js.map +1 -0
  141. package/dist/do/tiny.js +31 -0
  142. package/dist/do/tiny.js.map +1 -0
  143. package/dist/lib/DOAuth.js +261 -0
  144. package/dist/lib/DOAuth.js.map +1 -0
  145. package/dist/lib/DODispatcher.js +72 -0
  146. package/dist/lib/DODispatcher.js.map +1 -0
  147. package/dist/lib/Modifier.js +189 -0
  148. package/dist/lib/Modifier.js.map +1 -0
  149. package/dist/lib/StateStorage.js +403 -0
  150. package/dist/lib/StateStorage.js.map +1 -0
  151. package/dist/lib/TypeRegistry.js +122 -0
  152. package/dist/lib/TypeRegistry.js.map +1 -0
  153. package/dist/lib/ai/gateway.js +247 -0
  154. package/dist/lib/ai/gateway.js.map +1 -0
  155. package/dist/lib/ai/tool-loop-agent.js +591 -0
  156. package/dist/lib/ai/tool-loop-agent.js.map +1 -0
  157. package/dist/lib/auto-wiring.js +439 -0
  158. package/dist/lib/auto-wiring.js.map +1 -0
  159. package/dist/lib/browse/browserbase.js +163 -0
  160. package/dist/lib/browse/browserbase.js.map +1 -0
  161. package/dist/lib/browse/cloudflare.js +144 -0
  162. package/dist/lib/browse/cloudflare.js.map +1 -0
  163. package/dist/lib/browse/index.js +62 -0
  164. package/dist/lib/browse/index.js.map +1 -0
  165. package/dist/lib/browse/types.js +13 -0
  166. package/dist/lib/browse/types.js.map +1 -0
  167. package/dist/lib/cache/index.js +37 -0
  168. package/dist/lib/cache/index.js.map +1 -0
  169. package/dist/lib/cache/visibility.js +638 -0
  170. package/dist/lib/cache/visibility.js.map +1 -0
  171. package/dist/lib/capabilities.js +268 -0
  172. package/dist/lib/capabilities.js.map +1 -0
  173. package/dist/lib/channels/base.js +106 -0
  174. package/dist/lib/channels/base.js.map +1 -0
  175. package/dist/lib/channels/discord.js +94 -0
  176. package/dist/lib/channels/discord.js.map +1 -0
  177. package/dist/lib/channels/email.js +204 -0
  178. package/dist/lib/channels/email.js.map +1 -0
  179. package/dist/lib/channels/index.js +90 -0
  180. package/dist/lib/channels/index.js.map +1 -0
  181. package/dist/lib/channels/mdxui-chat.js +95 -0
  182. package/dist/lib/channels/mdxui-chat.js.map +1 -0
  183. package/dist/lib/channels/slack-blockkit.js +121 -0
  184. package/dist/lib/channels/slack-blockkit.js.map +1 -0
  185. package/dist/lib/channels/types.js +7 -0
  186. package/dist/lib/channels/types.js.map +1 -0
  187. package/dist/lib/cloudflare/ai.js +654 -0
  188. package/dist/lib/cloudflare/ai.js.map +1 -0
  189. package/dist/lib/cloudflare/index.js +88 -0
  190. package/dist/lib/cloudflare/index.js.map +1 -0
  191. package/dist/lib/cloudflare/kv.js +342 -0
  192. package/dist/lib/cloudflare/kv.js.map +1 -0
  193. package/dist/lib/cloudflare/queues.js +434 -0
  194. package/dist/lib/cloudflare/queues.js.map +1 -0
  195. package/dist/lib/cloudflare/r2.js +604 -0
  196. package/dist/lib/cloudflare/r2.js.map +1 -0
  197. package/dist/lib/cloudflare/vectorize.js +494 -0
  198. package/dist/lib/cloudflare/vectorize.js.map +1 -0
  199. package/dist/lib/cloudflare/workflows.js +569 -0
  200. package/dist/lib/cloudflare/workflows.js.map +1 -0
  201. package/dist/lib/colo/caching.js +196 -0
  202. package/dist/lib/colo/caching.js.map +1 -0
  203. package/dist/lib/colo/detection.js +194 -0
  204. package/dist/lib/colo/detection.js.map +1 -0
  205. package/dist/lib/colo/external-data.js +219 -0
  206. package/dist/lib/colo/external-data.js.map +1 -0
  207. package/dist/lib/colo/globe-data.js +179 -0
  208. package/dist/lib/colo/globe-data.js.map +1 -0
  209. package/dist/lib/colo/index.js +16 -0
  210. package/dist/lib/colo/index.js.map +1 -0
  211. package/dist/lib/decorators.js +37 -0
  212. package/dist/lib/decorators.js.map +1 -0
  213. package/dist/lib/discovery.js +81 -0
  214. package/dist/lib/discovery.js.map +1 -0
  215. package/dist/lib/executors/AgenticFunctionExecutor.js +619 -0
  216. package/dist/lib/executors/AgenticFunctionExecutor.js.map +1 -0
  217. package/dist/lib/executors/BaseFunctionExecutor.js +328 -0
  218. package/dist/lib/executors/BaseFunctionExecutor.js.map +1 -0
  219. package/dist/lib/executors/CascadeExecutor.js +418 -0
  220. package/dist/lib/executors/CascadeExecutor.js.map +1 -0
  221. package/dist/lib/executors/CodeFunctionExecutor.js +904 -0
  222. package/dist/lib/executors/CodeFunctionExecutor.js.map +1 -0
  223. package/dist/lib/executors/GenerativeFunctionExecutor.js +904 -0
  224. package/dist/lib/executors/GenerativeFunctionExecutor.js.map +1 -0
  225. package/dist/lib/executors/HumanFunctionExecutor.js +884 -0
  226. package/dist/lib/executors/HumanFunctionExecutor.js.map +1 -0
  227. package/dist/lib/executors/ParallelStepExecutor.js +308 -0
  228. package/dist/lib/executors/ParallelStepExecutor.js.map +1 -0
  229. package/dist/lib/executors/types.js +12 -0
  230. package/dist/lib/executors/types.js.map +1 -0
  231. package/dist/lib/experiments.js +89 -0
  232. package/dist/lib/experiments.js.map +1 -0
  233. package/dist/lib/flags/store.js +262 -0
  234. package/dist/lib/flags/store.js.map +1 -0
  235. package/dist/lib/functions/FunctionComposition.js +467 -0
  236. package/dist/lib/functions/FunctionComposition.js.map +1 -0
  237. package/dist/lib/functions/FunctionMiddleware.js +457 -0
  238. package/dist/lib/functions/FunctionMiddleware.js.map +1 -0
  239. package/dist/lib/functions/FunctionRegistry.js +426 -0
  240. package/dist/lib/functions/FunctionRegistry.js.map +1 -0
  241. package/dist/lib/functions/createFunction.js +1048 -0
  242. package/dist/lib/functions/createFunction.js.map +1 -0
  243. package/dist/lib/humans/index.js +68 -0
  244. package/dist/lib/humans/index.js.map +1 -0
  245. package/dist/lib/humans/templates.js +117 -0
  246. package/dist/lib/humans/templates.js.map +1 -0
  247. package/dist/lib/identity.js +98 -0
  248. package/dist/lib/identity.js.map +1 -0
  249. package/dist/lib/index.js +9 -0
  250. package/dist/lib/index.js.map +1 -0
  251. package/dist/lib/logging/error-logger.js +163 -0
  252. package/dist/lib/logging/error-logger.js.map +1 -0
  253. package/dist/lib/logging/index.js +160 -0
  254. package/dist/lib/logging/index.js.map +1 -0
  255. package/dist/lib/mixins/bash.js +753 -0
  256. package/dist/lib/mixins/bash.js.map +1 -0
  257. package/dist/lib/mixins/fs.js +648 -0
  258. package/dist/lib/mixins/fs.js.map +1 -0
  259. package/dist/lib/mixins/git.js +1006 -0
  260. package/dist/lib/mixins/git.js.map +1 -0
  261. package/dist/lib/mixins/npm.js +662 -0
  262. package/dist/lib/mixins/npm.js.map +1 -0
  263. package/dist/lib/noun-id.js +278 -0
  264. package/dist/lib/noun-id.js.map +1 -0
  265. package/dist/lib/rate-limit/sliding-window.js +148 -0
  266. package/dist/lib/rate-limit/sliding-window.js.map +1 -0
  267. package/dist/lib/rate-limit.js +110 -0
  268. package/dist/lib/rate-limit.js.map +1 -0
  269. package/dist/lib/rpc/bindings.js +548 -0
  270. package/dist/lib/rpc/bindings.js.map +1 -0
  271. package/dist/lib/rpc/index.js +64 -0
  272. package/dist/lib/rpc/index.js.map +1 -0
  273. package/dist/lib/safe-stringify.js +223 -0
  274. package/dist/lib/safe-stringify.js.map +1 -0
  275. package/dist/lib/sandbox/miniflare-sandbox.js +1007 -0
  276. package/dist/lib/sandbox/miniflare-sandbox.js.map +1 -0
  277. package/dist/lib/sqids.js +110 -0
  278. package/dist/lib/sqids.js.map +1 -0
  279. package/dist/lib/sql/adapters/index.js +10 -0
  280. package/dist/lib/sql/adapters/index.js.map +1 -0
  281. package/dist/lib/sql/adapters/node-sql-parser.js +552 -0
  282. package/dist/lib/sql/adapters/node-sql-parser.js.map +1 -0
  283. package/dist/lib/sql/adapters/pgsql-parser.js +1190 -0
  284. package/dist/lib/sql/adapters/pgsql-parser.js.map +1 -0
  285. package/dist/lib/sql/index.js +277 -0
  286. package/dist/lib/sql/index.js.map +1 -0
  287. package/dist/lib/sql/types.js +56 -0
  288. package/dist/lib/sql/types.js.map +1 -0
  289. package/dist/lib/type-classifier.js +126 -0
  290. package/dist/lib/type-classifier.js.map +1 -0
  291. package/dist/lib/utils/html.js +47 -0
  292. package/dist/lib/utils/html.js.map +1 -0
  293. package/dist/lib/validation.js +48 -0
  294. package/dist/lib/validation.js.map +1 -0
  295. package/dist/lib/vault/store.js +411 -0
  296. package/dist/lib/vault/store.js.map +1 -0
  297. package/dist/metrics/hunch.js +739 -0
  298. package/dist/metrics/hunch.js.map +1 -0
  299. package/dist/objects/API.js +302 -0
  300. package/dist/objects/API.js.map +1 -0
  301. package/dist/objects/Agent.js +179 -0
  302. package/dist/objects/Agent.js.map +1 -0
  303. package/dist/objects/AgenticFunctionExecutor.js +8 -0
  304. package/dist/objects/AgenticFunctionExecutor.js.map +1 -0
  305. package/dist/objects/App.js +83 -0
  306. package/dist/objects/App.js.map +1 -0
  307. package/dist/objects/Browser.js +884 -0
  308. package/dist/objects/Browser.js.map +1 -0
  309. package/dist/objects/Business.js +107 -0
  310. package/dist/objects/Business.js.map +1 -0
  311. package/dist/objects/CLI.js +221 -0
  312. package/dist/objects/CLI.js.map +1 -0
  313. package/dist/objects/CodeFunctionExecutor.js +8 -0
  314. package/dist/objects/CodeFunctionExecutor.js.map +1 -0
  315. package/dist/objects/Collection.js +161 -0
  316. package/dist/objects/Collection.js.map +1 -0
  317. package/dist/objects/DO.js +41 -0
  318. package/dist/objects/DO.js.map +1 -0
  319. package/dist/objects/DOBase.js +2309 -0
  320. package/dist/objects/DOBase.js.map +1 -0
  321. package/dist/objects/DOCache.js +153 -0
  322. package/dist/objects/DOCache.js.map +1 -0
  323. package/dist/objects/DOFull.js +1676 -0
  324. package/dist/objects/DOFull.js.map +1 -0
  325. package/dist/objects/DOTiny.js +207 -0
  326. package/dist/objects/DOTiny.js.map +1 -0
  327. package/dist/objects/Directory.js +199 -0
  328. package/dist/objects/Directory.js.map +1 -0
  329. package/dist/objects/Entity.js +413 -0
  330. package/dist/objects/Entity.js.map +1 -0
  331. package/dist/objects/Function.js +116 -0
  332. package/dist/objects/Function.js.map +1 -0
  333. package/dist/objects/Human.js +231 -0
  334. package/dist/objects/Human.js.map +1 -0
  335. package/dist/objects/HumanFunctionExecutor.js +8 -0
  336. package/dist/objects/HumanFunctionExecutor.js.map +1 -0
  337. package/dist/objects/IcebergMetadataDO.js +938 -0
  338. package/dist/objects/IcebergMetadataDO.js.map +1 -0
  339. package/dist/objects/IntegrationsDO.js +1174 -0
  340. package/dist/objects/IntegrationsDO.js.map +1 -0
  341. package/dist/objects/ObservabilityBroadcaster.js +149 -0
  342. package/dist/objects/ObservabilityBroadcaster.js.map +1 -0
  343. package/dist/objects/Package.js +154 -0
  344. package/dist/objects/Package.js.map +1 -0
  345. package/dist/objects/Product.js +193 -0
  346. package/dist/objects/Product.js.map +1 -0
  347. package/dist/objects/SDK.js +152 -0
  348. package/dist/objects/SDK.js.map +1 -0
  349. package/dist/objects/SaaS.js +235 -0
  350. package/dist/objects/SaaS.js.map +1 -0
  351. package/dist/objects/SandboxDO.js +759 -0
  352. package/dist/objects/SandboxDO.js.map +1 -0
  353. package/dist/objects/Service.js +337 -0
  354. package/dist/objects/Service.js.map +1 -0
  355. package/dist/objects/Site.js +80 -0
  356. package/dist/objects/Site.js.map +1 -0
  357. package/dist/objects/Startup.js +479 -0
  358. package/dist/objects/Startup.js.map +1 -0
  359. package/dist/objects/ThingsDO.js +170 -0
  360. package/dist/objects/ThingsDO.js.map +1 -0
  361. package/dist/objects/VectorShardDO.js +650 -0
  362. package/dist/objects/VectorShardDO.js.map +1 -0
  363. package/dist/objects/Worker.js +144 -0
  364. package/dist/objects/Worker.js.map +1 -0
  365. package/dist/objects/Workflow.js +196 -0
  366. package/dist/objects/Workflow.js.map +1 -0
  367. package/dist/objects/WorkflowFactory.js +313 -0
  368. package/dist/objects/WorkflowFactory.js.map +1 -0
  369. package/dist/objects/WorkflowRuntime.js +863 -0
  370. package/dist/objects/WorkflowRuntime.js.map +1 -0
  371. package/dist/objects/circuit-breaker-bulkhead.js +178 -0
  372. package/dist/objects/circuit-breaker-bulkhead.js.map +1 -0
  373. package/dist/objects/createFunction.js +934 -0
  374. package/dist/objects/createFunction.js.map +1 -0
  375. package/dist/objects/index.js +80 -0
  376. package/dist/objects/index.js.map +1 -0
  377. package/dist/objects/lifecycle/Branch.js +275 -0
  378. package/dist/objects/lifecycle/Branch.js.map +1 -0
  379. package/dist/objects/lifecycle/Clone.js +1499 -0
  380. package/dist/objects/lifecycle/Clone.js.map +1 -0
  381. package/dist/objects/lifecycle/Compact.js +237 -0
  382. package/dist/objects/lifecycle/Compact.js.map +1 -0
  383. package/dist/objects/lifecycle/Promote.js +476 -0
  384. package/dist/objects/lifecycle/Promote.js.map +1 -0
  385. package/dist/objects/lifecycle/Shard.js +560 -0
  386. package/dist/objects/lifecycle/Shard.js.map +1 -0
  387. package/dist/objects/lifecycle/index.js +15 -0
  388. package/dist/objects/lifecycle/index.js.map +1 -0
  389. package/dist/objects/lifecycle/types.js +33 -0
  390. package/dist/objects/lifecycle/types.js.map +1 -0
  391. package/dist/objects/mixins/infrastructure.js +171 -0
  392. package/dist/objects/mixins/infrastructure.js.map +1 -0
  393. package/dist/objects/modules/StoresModule.js +153 -0
  394. package/dist/objects/modules/StoresModule.js.map +1 -0
  395. package/dist/objects/persistence/checkpoint-manager.js +606 -0
  396. package/dist/objects/persistence/checkpoint-manager.js.map +1 -0
  397. package/dist/objects/persistence/index.js +72 -0
  398. package/dist/objects/persistence/index.js.map +1 -0
  399. package/dist/objects/persistence/migration-runner.js +562 -0
  400. package/dist/objects/persistence/migration-runner.js.map +1 -0
  401. package/dist/objects/persistence/replication-manager.js +501 -0
  402. package/dist/objects/persistence/replication-manager.js.map +1 -0
  403. package/dist/objects/persistence/tiered-storage-manager.js +595 -0
  404. package/dist/objects/persistence/tiered-storage-manager.js.map +1 -0
  405. package/dist/objects/persistence/types.js +14 -0
  406. package/dist/objects/persistence/types.js.map +1 -0
  407. package/dist/objects/persistence/wal-manager.js +653 -0
  408. package/dist/objects/persistence/wal-manager.js.map +1 -0
  409. package/dist/objects/presets/index.js +20 -0
  410. package/dist/objects/presets/index.js.map +1 -0
  411. package/dist/objects/presets/primitives.js +188 -0
  412. package/dist/objects/presets/primitives.js.map +1 -0
  413. package/dist/objects/primitives/alarm-adapter.js +141 -0
  414. package/dist/objects/primitives/alarm-adapter.js.map +1 -0
  415. package/dist/objects/primitives/index.js +337 -0
  416. package/dist/objects/primitives/index.js.map +1 -0
  417. package/dist/objects/primitives/storage-adapter.js +182 -0
  418. package/dist/objects/primitives/storage-adapter.js.map +1 -0
  419. package/dist/objects/primitives/with-primitives.js +102 -0
  420. package/dist/objects/primitives/with-primitives.js.map +1 -0
  421. package/dist/objects/services/StoreManager.js +227 -0
  422. package/dist/objects/services/StoreManager.js.map +1 -0
  423. package/dist/objects/services/index.js +13 -0
  424. package/dist/objects/services/index.js.map +1 -0
  425. package/dist/objects/transport/auth-layer.js +1451 -0
  426. package/dist/objects/transport/auth-layer.js.map +1 -0
  427. package/dist/objects/transport/capnweb-target.js +355 -0
  428. package/dist/objects/transport/capnweb-target.js.map +1 -0
  429. package/dist/objects/transport/chain.js +441 -0
  430. package/dist/objects/transport/chain.js.map +1 -0
  431. package/dist/objects/transport/handler.js +58 -0
  432. package/dist/objects/transport/handler.js.map +1 -0
  433. package/dist/objects/transport/index.js +53 -0
  434. package/dist/objects/transport/index.js.map +1 -0
  435. package/dist/objects/transport/mcp-server.js +691 -0
  436. package/dist/objects/transport/mcp-server.js.map +1 -0
  437. package/dist/objects/transport/rest-autowire.js +1508 -0
  438. package/dist/objects/transport/rest-autowire.js.map +1 -0
  439. package/dist/objects/transport/rest-router.js +440 -0
  440. package/dist/objects/transport/rest-router.js.map +1 -0
  441. package/dist/objects/transport/rpc-server.js +1539 -0
  442. package/dist/objects/transport/rpc-server.js.map +1 -0
  443. package/dist/objects/transport/shared.js +576 -0
  444. package/dist/objects/transport/shared.js.map +1 -0
  445. package/dist/objects/transport/sync-engine.js +291 -0
  446. package/dist/objects/transport/sync-engine.js.map +1 -0
  447. package/dist/objects/transport/types.js +8 -0
  448. package/dist/objects/transport/types.js.map +1 -0
  449. package/dist/sandbox/index.js +258 -0
  450. package/dist/sandbox/index.js.map +1 -0
  451. package/dist/snippets/artifacts-config.js +241 -0
  452. package/dist/snippets/artifacts-config.js.map +1 -0
  453. package/dist/snippets/artifacts-ingest.js +832 -0
  454. package/dist/snippets/artifacts-ingest.js.map +1 -0
  455. package/dist/snippets/artifacts-serve.js +1035 -0
  456. package/dist/snippets/artifacts-serve.js.map +1 -0
  457. package/dist/snippets/artifacts-types.js +161 -0
  458. package/dist/snippets/artifacts-types.js.map +1 -0
  459. package/dist/snippets/cache-probe.js +376 -0
  460. package/dist/snippets/cache-probe.js.map +1 -0
  461. package/dist/snippets/cache.js +10 -0
  462. package/dist/snippets/cache.js.map +1 -0
  463. package/dist/snippets/events.js +469 -0
  464. package/dist/snippets/events.js.map +1 -0
  465. package/dist/snippets/index.js +7 -0
  466. package/dist/snippets/index.js.map +1 -0
  467. package/dist/snippets/proxy.js +495 -0
  468. package/dist/snippets/proxy.js.map +1 -0
  469. package/dist/snippets/search.js +1759 -0
  470. package/dist/snippets/search.js.map +1 -0
  471. package/dist/streams/index.js +30 -0
  472. package/dist/streams/index.js.map +1 -0
  473. package/dist/streams/observability.js +68 -0
  474. package/dist/streams/observability.js.map +1 -0
  475. package/dist/types/AI.js +92 -0
  476. package/dist/types/AI.js.map +1 -0
  477. package/dist/types/AIFunction.js +171 -0
  478. package/dist/types/AIFunction.js.map +1 -0
  479. package/dist/types/BrowseVerb.js +89 -0
  480. package/dist/types/BrowseVerb.js.map +1 -0
  481. package/dist/types/Browser.js +31 -0
  482. package/dist/types/Browser.js.map +1 -0
  483. package/dist/types/Chaos.js +15 -0
  484. package/dist/types/Chaos.js.map +1 -0
  485. package/dist/types/CloudflareBindings.js +109 -0
  486. package/dist/types/CloudflareBindings.js.map +1 -0
  487. package/dist/types/Collection.js +50 -0
  488. package/dist/types/Collection.js.map +1 -0
  489. package/dist/types/DO.js +2 -0
  490. package/dist/types/DO.js.map +1 -0
  491. package/dist/types/DOLocation.js +63 -0
  492. package/dist/types/DOLocation.js.map +1 -0
  493. package/dist/types/EventHandler.js +57 -0
  494. package/dist/types/EventHandler.js.map +1 -0
  495. package/dist/types/Experiment.js +33 -0
  496. package/dist/types/Experiment.js.map +1 -0
  497. package/dist/types/Flag.js +57 -0
  498. package/dist/types/Flag.js.map +1 -0
  499. package/dist/types/Lifecycle.js +13 -0
  500. package/dist/types/Lifecycle.js.map +1 -0
  501. package/dist/types/Location.js +169 -0
  502. package/dist/types/Location.js.map +1 -0
  503. package/dist/types/Noun.js +66 -0
  504. package/dist/types/Noun.js.map +1 -0
  505. package/dist/types/SessionEvent.js +194 -0
  506. package/dist/types/SessionEvent.js.map +1 -0
  507. package/dist/types/Thing.js +55 -0
  508. package/dist/types/Thing.js.map +1 -0
  509. package/dist/types/ThingDO.js +153 -0
  510. package/dist/types/ThingDO.js.map +1 -0
  511. package/dist/types/Things.js +2 -0
  512. package/dist/types/Things.js.map +1 -0
  513. package/dist/types/Verb.js +119 -0
  514. package/dist/types/Verb.js.map +1 -0
  515. package/dist/types/WorkflowContext.js +70 -0
  516. package/dist/types/WorkflowContext.js.map +1 -0
  517. package/dist/types/analytics-api.js +13 -0
  518. package/dist/types/analytics-api.js.map +1 -0
  519. package/dist/types/capabilities.js +135 -0
  520. package/dist/types/capabilities.js.map +1 -0
  521. package/dist/types/drizzle.js +12 -0
  522. package/dist/types/drizzle.js.map +1 -0
  523. package/dist/types/event.js +201 -0
  524. package/dist/types/event.js.map +1 -0
  525. package/dist/types/fn.js +12 -0
  526. package/dist/types/fn.js.map +1 -0
  527. package/dist/types/iceberg.js +48 -0
  528. package/dist/types/iceberg.js.map +1 -0
  529. package/dist/types/ids.js +170 -0
  530. package/dist/types/ids.js.map +1 -0
  531. package/dist/types/index.js +41 -0
  532. package/dist/types/index.js.map +1 -0
  533. package/dist/types/introspect.js +54 -0
  534. package/dist/types/introspect.js.map +1 -0
  535. package/dist/types/observability.js +124 -0
  536. package/dist/types/observability.js.map +1 -0
  537. package/dist/types/sync-protocol.js +175 -0
  538. package/dist/types/sync-protocol.js.map +1 -0
  539. package/dist/types/vector.js +13 -0
  540. package/dist/types/vector.js.map +1 -0
  541. package/dist/workflows/ScheduleManager.js +473 -0
  542. package/dist/workflows/ScheduleManager.js.map +1 -0
  543. package/dist/workflows/StepDOBridge.js +149 -0
  544. package/dist/workflows/StepDOBridge.js.map +1 -0
  545. package/dist/workflows/StepResultStorage.js +232 -0
  546. package/dist/workflows/StepResultStorage.js.map +1 -0
  547. package/dist/workflows/WaitForEventManager.js +461 -0
  548. package/dist/workflows/WaitForEventManager.js.map +1 -0
  549. package/dist/workflows/analyzer.js +332 -0
  550. package/dist/workflows/analyzer.js.map +1 -0
  551. package/dist/workflows/compat/activity-router.js +484 -0
  552. package/dist/workflows/compat/activity-router.js.map +1 -0
  553. package/dist/workflows/compat/backends/cloudflare-workflows.js +431 -0
  554. package/dist/workflows/compat/backends/cloudflare-workflows.js.map +1 -0
  555. package/dist/workflows/compat/backends/index.js +14 -0
  556. package/dist/workflows/compat/backends/index.js.map +1 -0
  557. package/dist/workflows/compat/errors/index.js +375 -0
  558. package/dist/workflows/compat/errors/index.js.map +1 -0
  559. package/dist/workflows/compat/index.js +79 -0
  560. package/dist/workflows/compat/index.js.map +1 -0
  561. package/dist/workflows/compat/inngest/index.js +989 -0
  562. package/dist/workflows/compat/inngest/index.js.map +1 -0
  563. package/dist/workflows/compat/qstash/index.js +1263 -0
  564. package/dist/workflows/compat/qstash/index.js.map +1 -0
  565. package/dist/workflows/compat/temporal/activities.js +739 -0
  566. package/dist/workflows/compat/temporal/activities.js.map +1 -0
  567. package/dist/workflows/compat/temporal/child-workflows.js +154 -0
  568. package/dist/workflows/compat/temporal/child-workflows.js.map +1 -0
  569. package/dist/workflows/compat/temporal/client.js +381 -0
  570. package/dist/workflows/compat/temporal/client.js.map +1 -0
  571. package/dist/workflows/compat/temporal/context.js +309 -0
  572. package/dist/workflows/compat/temporal/context.js.map +1 -0
  573. package/dist/workflows/compat/temporal/determinism.js +216 -0
  574. package/dist/workflows/compat/temporal/determinism.js.map +1 -0
  575. package/dist/workflows/compat/temporal/errors.js +128 -0
  576. package/dist/workflows/compat/temporal/errors.js.map +1 -0
  577. package/dist/workflows/compat/temporal/index.js +2464 -0
  578. package/dist/workflows/compat/temporal/index.js.map +1 -0
  579. package/dist/workflows/compat/temporal/saga.js +504 -0
  580. package/dist/workflows/compat/temporal/saga.js.map +1 -0
  581. package/dist/workflows/compat/temporal/signals.js +364 -0
  582. package/dist/workflows/compat/temporal/signals.js.map +1 -0
  583. package/dist/workflows/compat/temporal/storage.js +271 -0
  584. package/dist/workflows/compat/temporal/storage.js.map +1 -0
  585. package/dist/workflows/compat/temporal/timers.js +347 -0
  586. package/dist/workflows/compat/temporal/timers.js.map +1 -0
  587. package/dist/workflows/compat/temporal/types.js +7 -0
  588. package/dist/workflows/compat/temporal/types.js.map +1 -0
  589. package/dist/workflows/compat/temporal/unified-primitives.js +339 -0
  590. package/dist/workflows/compat/temporal/unified-primitives.js.map +1 -0
  591. package/dist/workflows/compat/trigger/index.js +468 -0
  592. package/dist/workflows/compat/trigger/index.js.map +1 -0
  593. package/dist/workflows/compat/utils/index.js +69 -0
  594. package/dist/workflows/compat/utils/index.js.map +1 -0
  595. package/dist/workflows/context/correlation-capability.js +266 -0
  596. package/dist/workflows/context/correlation-capability.js.map +1 -0
  597. package/dist/workflows/context/correlation.js +484 -0
  598. package/dist/workflows/context/correlation.js.map +1 -0
  599. package/dist/workflows/context/experiment.js +289 -0
  600. package/dist/workflows/context/experiment.js.map +1 -0
  601. package/dist/workflows/context/flag.js +244 -0
  602. package/dist/workflows/context/flag.js.map +1 -0
  603. package/dist/workflows/context/foundation.js +648 -0
  604. package/dist/workflows/context/foundation.js.map +1 -0
  605. package/dist/workflows/context/human-base.js +106 -0
  606. package/dist/workflows/context/human-base.js.map +1 -0
  607. package/dist/workflows/context/human.js +368 -0
  608. package/dist/workflows/context/human.js.map +1 -0
  609. package/dist/workflows/context/measure.js +354 -0
  610. package/dist/workflows/context/measure.js.map +1 -0
  611. package/dist/workflows/context/rate-limit.js +358 -0
  612. package/dist/workflows/context/rate-limit.js.map +1 -0
  613. package/dist/workflows/context/user.js +117 -0
  614. package/dist/workflows/context/user.js.map +1 -0
  615. package/dist/workflows/context/vault.js +360 -0
  616. package/dist/workflows/context/vault.js.map +1 -0
  617. package/dist/workflows/data/entity-events/entity-events.js +489 -0
  618. package/dist/workflows/data/entity-events/entity-events.js.map +1 -0
  619. package/dist/workflows/data/experiment/index.js +599 -0
  620. package/dist/workflows/data/experiment/index.js.map +1 -0
  621. package/dist/workflows/data/goal/context.js +558 -0
  622. package/dist/workflows/data/goal/context.js.map +1 -0
  623. package/dist/workflows/data/goal/index.js +32 -0
  624. package/dist/workflows/data/goal/index.js.map +1 -0
  625. package/dist/workflows/data/measure/index.js +840 -0
  626. package/dist/workflows/data/measure/index.js.map +1 -0
  627. package/dist/workflows/data/stream/index.js +1149 -0
  628. package/dist/workflows/data/stream/index.js.map +1 -0
  629. package/dist/workflows/data/track/context.js +883 -0
  630. package/dist/workflows/data/track/context.js.map +1 -0
  631. package/dist/workflows/data/track/index.js +15 -0
  632. package/dist/workflows/data/track/index.js.map +1 -0
  633. package/dist/workflows/data/view/context.js +864 -0
  634. package/dist/workflows/data/view/context.js.map +1 -0
  635. package/dist/workflows/domain.js +93 -0
  636. package/dist/workflows/domain.js.map +1 -0
  637. package/dist/workflows/flag.js +176 -0
  638. package/dist/workflows/flag.js.map +1 -0
  639. package/dist/workflows/flags.js +217 -0
  640. package/dist/workflows/flags.js.map +1 -0
  641. package/dist/workflows/hash.js +209 -0
  642. package/dist/workflows/hash.js.map +1 -0
  643. package/dist/workflows/index.js +50 -0
  644. package/dist/workflows/index.js.map +1 -0
  645. package/dist/workflows/on.js +378 -0
  646. package/dist/workflows/on.js.map +1 -0
  647. package/dist/workflows/pipeline-promise.js +481 -0
  648. package/dist/workflows/pipeline-promise.js.map +1 -0
  649. package/dist/workflows/pipeline-types.js +20 -0
  650. package/dist/workflows/pipeline-types.js.map +1 -0
  651. package/dist/workflows/proxy.js +76 -0
  652. package/dist/workflows/proxy.js.map +1 -0
  653. package/dist/workflows/runtime.js +310 -0
  654. package/dist/workflows/runtime.js.map +1 -0
  655. package/dist/workflows/schedule-builder.js +327 -0
  656. package/dist/workflows/schedule-builder.js.map +1 -0
  657. package/dist/workflows/visibility/index.js +146 -0
  658. package/dist/workflows/visibility/index.js.map +1 -0
  659. package/dist/workflows/visibility/query-parser.js +150 -0
  660. package/dist/workflows/visibility/query-parser.js.map +1 -0
  661. package/dist/workflows/visibility/store.js +223 -0
  662. package/dist/workflows/visibility/store.js.map +1 -0
  663. package/dist/workflows/visibility/types.js +30 -0
  664. package/dist/workflows/visibility/types.js.map +1 -0
  665. package/dist/workflows/workflow.js +53 -0
  666. package/dist/workflows/workflow.js.map +1 -0
  667. package/package.json +294 -46
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThingsDO.js","sourceRoot":"","sources":["../../objects/ThingsDO.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,650 @@
1
+ /**
2
+ * VectorShardDO - Vector Index Shard for Similarity Search
3
+ *
4
+ * A Durable Object that stores and searches vectors for similarity.
5
+ * Part of the distributed vector search architecture described in
6
+ * docs/plans/unified-analytics-architecture.md.
7
+ *
8
+ * Key features:
9
+ * - Loads vectors from R2 in Float32Array format
10
+ * - Stores vectors efficiently in memory
11
+ * - Computes cosine similarity and L2 distance
12
+ * - Returns top-K results with scores using min-heap
13
+ *
14
+ * Memory efficiency:
15
+ * - Uses typed arrays (Float32Array) for compact storage
16
+ * - Batch distance computations for SIMD optimization
17
+ * - Min-heap for O(n log k) top-K selection
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * // Load vectors from R2
22
+ * await shard.loadFromR2('vectors/shard-0.vec')
23
+ *
24
+ * // Search for similar vectors
25
+ * const results = await shard.search(queryVector, 10, 'cosine')
26
+ *
27
+ * // Get shard statistics
28
+ * const stats = await shard.getStats()
29
+ * console.log(`Loaded ${stats.vectorCount} vectors`)
30
+ * ```
31
+ *
32
+ * @module objects/VectorShardDO
33
+ */
34
+ import { DurableObject } from 'cloudflare:workers';
35
+ // ============================================================================
36
+ // CONSTANTS
37
+ // ============================================================================
38
+ /** Magic bytes for vector storage format */
39
+ const MAGIC_BYTES = new Uint8Array([0x56, 0x45, 0x43, 0x31]); // "VEC1"
40
+ /** Current format version */
41
+ const FORMAT_VERSION = 1;
42
+ /** Header size in bytes */
43
+ const HEADER_SIZE = 32;
44
+ // ============================================================================
45
+ // MIN-HEAP IMPLEMENTATION
46
+ // ============================================================================
47
+ /**
48
+ * Min-heap for efficient top-K selection
49
+ *
50
+ * Uses a binary heap with the smallest element at the root.
51
+ * For top-K selection, we maintain a max-heap of size K and
52
+ * only keep elements with scores <= the max.
53
+ */
54
+ class TopKHeap {
55
+ heap = [];
56
+ capacity;
57
+ constructor(k) {
58
+ this.capacity = k;
59
+ }
60
+ get size() {
61
+ return this.heap.length;
62
+ }
63
+ /**
64
+ * Peek at the maximum score in the heap (root of max-heap)
65
+ */
66
+ peekMax() {
67
+ return this.heap.length > 0 ? this.heap[0].score : -Infinity;
68
+ }
69
+ /**
70
+ * Try to add an entry to the heap
71
+ * For cosine similarity, higher is better, so we use a min-heap
72
+ * and evict the smallest when full
73
+ */
74
+ pushForMaximize(entry) {
75
+ if (this.heap.length < this.capacity) {
76
+ this.heap.push(entry);
77
+ this.heapifyUpMin(this.heap.length - 1);
78
+ }
79
+ else if (entry.score > this.heap[0].score) {
80
+ // Replace the minimum (worst result) with the new entry
81
+ this.heap[0] = entry;
82
+ this.heapifyDownMin(0);
83
+ }
84
+ }
85
+ /**
86
+ * Try to add an entry to the heap
87
+ * For L2 distance, lower is better, so we use a max-heap
88
+ * and evict the largest when full
89
+ */
90
+ pushForMinimize(entry) {
91
+ if (this.heap.length < this.capacity) {
92
+ this.heap.push(entry);
93
+ this.heapifyUpMax(this.heap.length - 1);
94
+ }
95
+ else if (entry.score < this.heap[0].score) {
96
+ // Replace the maximum (worst result) with the new entry
97
+ this.heap[0] = entry;
98
+ this.heapifyDownMax(0);
99
+ }
100
+ }
101
+ /**
102
+ * Get all entries sorted by score
103
+ * @param ascending - Sort ascending (true for L2, false for cosine)
104
+ */
105
+ toSortedArray(ascending) {
106
+ const sorted = [...this.heap];
107
+ sorted.sort((a, b) => ascending ? a.score - b.score : b.score - a.score);
108
+ return sorted;
109
+ }
110
+ heapifyUpMin(index) {
111
+ while (index > 0) {
112
+ const parent = Math.floor((index - 1) / 2);
113
+ if (this.heap[parent].score <= this.heap[index].score)
114
+ break;
115
+ this.swap(parent, index);
116
+ index = parent;
117
+ }
118
+ }
119
+ heapifyDownMin(index) {
120
+ const length = this.heap.length;
121
+ while (true) {
122
+ const left = 2 * index + 1;
123
+ const right = 2 * index + 2;
124
+ let smallest = index;
125
+ if (left < length && this.heap[left].score < this.heap[smallest].score) {
126
+ smallest = left;
127
+ }
128
+ if (right < length && this.heap[right].score < this.heap[smallest].score) {
129
+ smallest = right;
130
+ }
131
+ if (smallest === index)
132
+ break;
133
+ this.swap(smallest, index);
134
+ index = smallest;
135
+ }
136
+ }
137
+ heapifyUpMax(index) {
138
+ while (index > 0) {
139
+ const parent = Math.floor((index - 1) / 2);
140
+ if (this.heap[parent].score >= this.heap[index].score)
141
+ break;
142
+ this.swap(parent, index);
143
+ index = parent;
144
+ }
145
+ }
146
+ heapifyDownMax(index) {
147
+ const length = this.heap.length;
148
+ while (true) {
149
+ const left = 2 * index + 1;
150
+ const right = 2 * index + 2;
151
+ let largest = index;
152
+ if (left < length && this.heap[left].score > this.heap[largest].score) {
153
+ largest = left;
154
+ }
155
+ if (right < length && this.heap[right].score > this.heap[largest].score) {
156
+ largest = right;
157
+ }
158
+ if (largest === index)
159
+ break;
160
+ this.swap(largest, index);
161
+ index = largest;
162
+ }
163
+ }
164
+ swap(i, j) {
165
+ const temp = this.heap[i];
166
+ this.heap[i] = this.heap[j];
167
+ this.heap[j] = temp;
168
+ }
169
+ }
170
+ // ============================================================================
171
+ // VECTOR SHARD DURABLE OBJECT
172
+ // ============================================================================
173
+ /**
174
+ * VectorShardDO - Durable Object for vector similarity search
175
+ */
176
+ export class VectorShardDO extends DurableObject {
177
+ static $type = 'VectorShardDO';
178
+ // Vector storage
179
+ vectors = null;
180
+ ids = [];
181
+ dimensions = 0;
182
+ loaded = false;
183
+ loadedAt = null;
184
+ // ID to index lookup for O(1) access
185
+ idToIndex = new Map();
186
+ // ═══════════════════════════════════════════════════════════════════════════
187
+ // PUBLIC API
188
+ // ═══════════════════════════════════════════════════════════════════════════
189
+ /**
190
+ * Load vectors from R2 storage
191
+ *
192
+ * @param path - Path to the vector file in R2
193
+ * @throws Error if R2 binding not available or file not found
194
+ */
195
+ async loadFromR2(path) {
196
+ const r2 = this.env.R2;
197
+ if (!r2) {
198
+ throw new Error('R2 binding not available');
199
+ }
200
+ const obj = await r2.get(path);
201
+ if (!obj) {
202
+ throw new Error(`Vector file not found: ${path}`);
203
+ }
204
+ const buffer = await obj.arrayBuffer();
205
+ await this.loadFromBuffer(buffer);
206
+ // Persist the path for reloading
207
+ await this.ctx.storage.put('vectorPath', path);
208
+ }
209
+ /**
210
+ * Load vectors from an ArrayBuffer
211
+ *
212
+ * Expected format:
213
+ * - Header (32 bytes): magic, version, count, dimensions
214
+ * - IDs section: length-prefixed UTF-8 strings
215
+ * - Vectors section: Float32Array data
216
+ */
217
+ async loadFromBuffer(buffer) {
218
+ const dataView = new DataView(buffer);
219
+ // Validate magic bytes
220
+ const magic = new Uint8Array(buffer, 0, 4);
221
+ if (!this.compareMagic(magic, MAGIC_BYTES)) {
222
+ throw new Error('Invalid vector file format: bad magic bytes');
223
+ }
224
+ // Read header
225
+ const version = dataView.getUint32(4, true);
226
+ if (version !== FORMAT_VERSION) {
227
+ throw new Error(`Unsupported format version: ${version}`);
228
+ }
229
+ const count = dataView.getUint32(8, true);
230
+ const dimensions = dataView.getUint32(12, true);
231
+ // Read IDs
232
+ let offset = HEADER_SIZE;
233
+ const ids = [];
234
+ const textDecoder = new TextDecoder();
235
+ for (let i = 0; i < count; i++) {
236
+ const idLength = dataView.getUint16(offset, true);
237
+ offset += 2;
238
+ const idBytes = new Uint8Array(buffer, offset, idLength);
239
+ ids.push(textDecoder.decode(idBytes));
240
+ offset += idLength;
241
+ }
242
+ // Align to 4-byte boundary for Float32Array
243
+ if (offset % 4 !== 0) {
244
+ offset += 4 - (offset % 4);
245
+ }
246
+ // Read vectors
247
+ const vectorsBytes = count * dimensions * 4;
248
+ const vectors = new Float32Array(buffer, offset, count * dimensions);
249
+ // Store in memory
250
+ this.vectors = new Float32Array(vectors);
251
+ this.ids = ids;
252
+ this.dimensions = dimensions;
253
+ this.loaded = true;
254
+ this.loadedAt = new Date().toISOString();
255
+ // Build ID lookup map
256
+ this.idToIndex.clear();
257
+ for (let i = 0; i < ids.length; i++) {
258
+ this.idToIndex.set(ids[i], i);
259
+ }
260
+ }
261
+ /**
262
+ * Save vectors to R2 storage
263
+ *
264
+ * @param path - Path to save the vector file in R2
265
+ */
266
+ async saveToR2(path) {
267
+ const r2 = this.env.R2;
268
+ if (!r2) {
269
+ throw new Error('R2 binding not available');
270
+ }
271
+ if (!this.loaded || !this.vectors) {
272
+ throw new Error('No vectors loaded to save');
273
+ }
274
+ const buffer = this.serializeVectors();
275
+ await r2.put(path, buffer);
276
+ }
277
+ /**
278
+ * Search for similar vectors
279
+ *
280
+ * @param query - Query vector as Float32Array
281
+ * @param k - Number of results to return
282
+ * @param metric - Distance metric ('cosine' or 'l2')
283
+ * @returns Array of search results sorted by similarity
284
+ */
285
+ async search(query, k, metric = 'cosine') {
286
+ if (!this.loaded || !this.vectors) {
287
+ throw new Error('Vectors not loaded. Call loadFromR2() first.');
288
+ }
289
+ if (query.length !== this.dimensions) {
290
+ throw new Error(`Query dimension mismatch: expected ${this.dimensions}, got ${query.length}`);
291
+ }
292
+ const startTime = performance.now();
293
+ const count = this.ids.length;
294
+ // Use appropriate heap based on metric
295
+ const heap = new TopKHeap(k);
296
+ const useMaximize = metric === 'cosine'; // Higher is better for cosine
297
+ // Compute distances for all vectors
298
+ for (let i = 0; i < count; i++) {
299
+ const vectorStart = i * this.dimensions;
300
+ const vector = this.vectors.subarray(vectorStart, vectorStart + this.dimensions);
301
+ const score = metric === 'cosine'
302
+ ? this.cosineSimilarity(query, vector)
303
+ : this.l2Distance(query, vector);
304
+ if (useMaximize) {
305
+ heap.pushForMaximize({ id: this.ids[i], score });
306
+ }
307
+ else {
308
+ heap.pushForMinimize({ id: this.ids[i], score });
309
+ }
310
+ }
311
+ // Return sorted results
312
+ // For cosine: descending (higher similarity first)
313
+ // For L2: ascending (lower distance first)
314
+ return heap.toSortedArray(!useMaximize);
315
+ }
316
+ /**
317
+ * Extended search with full options
318
+ */
319
+ async searchExtended(request) {
320
+ const startTime = performance.now();
321
+ if (!this.loaded || !this.vectors) {
322
+ throw new Error('Vectors not loaded. Call loadFromR2() first.');
323
+ }
324
+ const { query, k, metric = 'cosine', filter } = request;
325
+ if (query.length !== this.dimensions) {
326
+ throw new Error(`Query dimension mismatch: expected ${this.dimensions}, got ${query.length}`);
327
+ }
328
+ const count = this.ids.length;
329
+ const heap = new TopKHeap(k);
330
+ const useMaximize = metric === 'cosine';
331
+ let vectorsScanned = 0;
332
+ for (let i = 0; i < count; i++) {
333
+ const id = this.ids[i];
334
+ // Apply filter if provided
335
+ if (filter && !filter(id)) {
336
+ continue;
337
+ }
338
+ vectorsScanned++;
339
+ const vectorStart = i * this.dimensions;
340
+ const vector = this.vectors.subarray(vectorStart, vectorStart + this.dimensions);
341
+ const score = metric === 'cosine'
342
+ ? this.cosineSimilarity(query, vector)
343
+ : this.l2Distance(query, vector);
344
+ if (useMaximize) {
345
+ heap.pushForMaximize({ id, score });
346
+ }
347
+ else {
348
+ heap.pushForMinimize({ id, score });
349
+ }
350
+ }
351
+ const searchTimeMs = performance.now() - startTime;
352
+ return {
353
+ results: heap.toSortedArray(!useMaximize),
354
+ vectorsScanned,
355
+ searchTimeMs,
356
+ };
357
+ }
358
+ /**
359
+ * Get statistics about this shard
360
+ */
361
+ async getStats() {
362
+ const vectorCount = this.ids.length;
363
+ const memoryBytes = this.vectors
364
+ ? this.vectors.byteLength + this.ids.reduce((sum, id) => sum + id.length * 2, 0)
365
+ : 0;
366
+ return {
367
+ vectorCount,
368
+ dimensions: this.dimensions,
369
+ memoryBytes,
370
+ loaded: this.loaded,
371
+ loadedAt: this.loadedAt ?? undefined,
372
+ };
373
+ }
374
+ /**
375
+ * Get a specific vector by ID
376
+ */
377
+ async getVector(id) {
378
+ if (!this.loaded || !this.vectors) {
379
+ return null;
380
+ }
381
+ const index = this.idToIndex.get(id);
382
+ if (index === undefined) {
383
+ return null;
384
+ }
385
+ const start = index * this.dimensions;
386
+ return this.vectors.slice(start, start + this.dimensions);
387
+ }
388
+ /**
389
+ * Check if a vector exists
390
+ */
391
+ async hasVector(id) {
392
+ return this.idToIndex.has(id);
393
+ }
394
+ /**
395
+ * Add vectors in batch
396
+ */
397
+ async addVectors(request) {
398
+ const { ids, vectors, dimensions } = request;
399
+ if (vectors.length !== ids.length * dimensions) {
400
+ throw new Error('Vector array size mismatch');
401
+ }
402
+ // Initialize if first vectors
403
+ if (!this.loaded) {
404
+ this.vectors = new Float32Array(vectors);
405
+ this.ids = [...ids];
406
+ this.dimensions = dimensions;
407
+ this.loaded = true;
408
+ this.loadedAt = new Date().toISOString();
409
+ for (let i = 0; i < ids.length; i++) {
410
+ this.idToIndex.set(ids[i], i);
411
+ }
412
+ return { inserted: ids.length, failed: [] };
413
+ }
414
+ // Validate dimensions
415
+ if (dimensions !== this.dimensions) {
416
+ throw new Error(`Dimension mismatch: expected ${this.dimensions}, got ${dimensions}`);
417
+ }
418
+ // Check for duplicates and collect new vectors
419
+ const inserted = [];
420
+ const failed = [];
421
+ const errors = {};
422
+ for (let i = 0; i < ids.length; i++) {
423
+ const id = ids[i];
424
+ if (this.idToIndex.has(id)) {
425
+ failed.push(id);
426
+ errors[id] = 'Vector already exists';
427
+ }
428
+ else {
429
+ inserted.push(id);
430
+ }
431
+ }
432
+ if (inserted.length > 0) {
433
+ // Expand storage
434
+ const newCount = this.ids.length + inserted.length;
435
+ const newVectors = new Float32Array(newCount * this.dimensions);
436
+ newVectors.set(this.vectors);
437
+ let insertIndex = this.ids.length;
438
+ for (let i = 0; i < ids.length; i++) {
439
+ const id = ids[i];
440
+ if (!this.idToIndex.has(id)) {
441
+ const srcStart = i * dimensions;
442
+ const dstStart = insertIndex * this.dimensions;
443
+ newVectors.set(vectors.subarray(srcStart, srcStart + dimensions), dstStart);
444
+ this.idToIndex.set(id, insertIndex);
445
+ this.ids.push(id);
446
+ insertIndex++;
447
+ }
448
+ }
449
+ this.vectors = newVectors;
450
+ }
451
+ return {
452
+ inserted: inserted.length,
453
+ failed,
454
+ errors: Object.keys(errors).length > 0 ? errors : undefined,
455
+ };
456
+ }
457
+ /**
458
+ * Delete vectors in batch
459
+ */
460
+ async deleteVectors(request) {
461
+ if (!this.loaded || !this.vectors) {
462
+ return { deleted: 0, notFound: request.ids };
463
+ }
464
+ const { ids } = request;
465
+ const toDelete = new Set();
466
+ const notFound = [];
467
+ for (const id of ids) {
468
+ const index = this.idToIndex.get(id);
469
+ if (index !== undefined) {
470
+ toDelete.add(index);
471
+ this.idToIndex.delete(id);
472
+ }
473
+ else {
474
+ notFound.push(id);
475
+ }
476
+ }
477
+ if (toDelete.size === 0) {
478
+ return { deleted: 0, notFound };
479
+ }
480
+ // Rebuild arrays without deleted vectors
481
+ const newCount = this.ids.length - toDelete.size;
482
+ const newVectors = new Float32Array(newCount * this.dimensions);
483
+ const newIds = [];
484
+ let newIndex = 0;
485
+ for (let i = 0; i < this.ids.length; i++) {
486
+ if (!toDelete.has(i)) {
487
+ const srcStart = i * this.dimensions;
488
+ const dstStart = newIndex * this.dimensions;
489
+ newVectors.set(this.vectors.subarray(srcStart, srcStart + this.dimensions), dstStart);
490
+ newIds.push(this.ids[i]);
491
+ this.idToIndex.set(this.ids[i], newIndex);
492
+ newIndex++;
493
+ }
494
+ }
495
+ this.vectors = newVectors;
496
+ this.ids = newIds;
497
+ return { deleted: toDelete.size, notFound };
498
+ }
499
+ /**
500
+ * Clear all vectors from memory
501
+ */
502
+ async clear() {
503
+ this.vectors = null;
504
+ this.ids = [];
505
+ this.dimensions = 0;
506
+ this.loaded = false;
507
+ this.loadedAt = null;
508
+ this.idToIndex.clear();
509
+ }
510
+ // ═══════════════════════════════════════════════════════════════════════════
511
+ // HTTP HANDLER
512
+ // ═══════════════════════════════════════════════════════════════════════════
513
+ async fetch(request) {
514
+ const url = new URL(request.url);
515
+ try {
516
+ switch (url.pathname) {
517
+ case '/health':
518
+ return Response.json({ status: 'ok', loaded: this.loaded });
519
+ case '/stats':
520
+ return Response.json(await this.getStats());
521
+ case '/load':
522
+ if (request.method !== 'POST') {
523
+ return new Response('Method not allowed', { status: 405 });
524
+ }
525
+ const loadBody = await request.json();
526
+ await this.loadFromR2(loadBody.path);
527
+ return Response.json({ success: true, stats: await this.getStats() });
528
+ case '/search':
529
+ if (request.method !== 'POST') {
530
+ return new Response('Method not allowed', { status: 405 });
531
+ }
532
+ const searchBody = await request.json();
533
+ const query = new Float32Array(searchBody.query);
534
+ const results = await this.search(query, searchBody.k, searchBody.metric);
535
+ return Response.json({ results });
536
+ case '/vectors':
537
+ if (request.method === 'POST') {
538
+ const insertBody = await request.json();
539
+ const insertResult = await this.addVectors({
540
+ ids: insertBody.ids,
541
+ vectors: new Float32Array(insertBody.vectors),
542
+ dimensions: insertBody.dimensions,
543
+ });
544
+ return Response.json(insertResult);
545
+ }
546
+ if (request.method === 'DELETE') {
547
+ const deleteBody = await request.json();
548
+ const deleteResult = await this.deleteVectors(deleteBody);
549
+ return Response.json(deleteResult);
550
+ }
551
+ return new Response('Method not allowed', { status: 405 });
552
+ default:
553
+ return new Response('Not Found', { status: 404 });
554
+ }
555
+ }
556
+ catch (error) {
557
+ const message = error instanceof Error ? error.message : 'Unknown error';
558
+ return Response.json({ error: message }, { status: 500 });
559
+ }
560
+ }
561
+ // ═══════════════════════════════════════════════════════════════════════════
562
+ // PRIVATE METHODS
563
+ // ═══════════════════════════════════════════════════════════════════════════
564
+ /**
565
+ * Compute cosine similarity between two vectors
566
+ * Returns value in range [-1, 1], higher is more similar
567
+ */
568
+ cosineSimilarity(a, b) {
569
+ let dotProduct = 0;
570
+ let normA = 0;
571
+ let normB = 0;
572
+ for (let i = 0; i < a.length; i++) {
573
+ dotProduct += a[i] * b[i];
574
+ normA += a[i] * a[i];
575
+ normB += b[i] * b[i];
576
+ }
577
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
578
+ if (denominator === 0)
579
+ return 0;
580
+ return dotProduct / denominator;
581
+ }
582
+ /**
583
+ * Compute L2 (Euclidean) distance between two vectors
584
+ * Returns value >= 0, lower is more similar
585
+ */
586
+ l2Distance(a, b) {
587
+ let sum = 0;
588
+ for (let i = 0; i < a.length; i++) {
589
+ const diff = a[i] - b[i];
590
+ sum += diff * diff;
591
+ }
592
+ return Math.sqrt(sum);
593
+ }
594
+ /**
595
+ * Compare two byte arrays
596
+ */
597
+ compareMagic(a, b) {
598
+ if (a.length !== b.length)
599
+ return false;
600
+ for (let i = 0; i < a.length; i++) {
601
+ if (a[i] !== b[i])
602
+ return false;
603
+ }
604
+ return true;
605
+ }
606
+ /**
607
+ * Serialize vectors to ArrayBuffer for storage
608
+ */
609
+ serializeVectors() {
610
+ if (!this.vectors) {
611
+ throw new Error('No vectors to serialize');
612
+ }
613
+ const textEncoder = new TextEncoder();
614
+ const encodedIds = this.ids.map(id => textEncoder.encode(id));
615
+ // Calculate total size
616
+ let idsSize = 0;
617
+ for (const encoded of encodedIds) {
618
+ idsSize += 2 + encoded.length; // 2 bytes for length + string bytes
619
+ }
620
+ // Align to 4-byte boundary
621
+ const padding = (4 - ((HEADER_SIZE + idsSize) % 4)) % 4;
622
+ const vectorsSize = this.vectors.byteLength;
623
+ const totalSize = HEADER_SIZE + idsSize + padding + vectorsSize;
624
+ // Create buffer
625
+ const buffer = new ArrayBuffer(totalSize);
626
+ const dataView = new DataView(buffer);
627
+ const uint8View = new Uint8Array(buffer);
628
+ // Write header
629
+ uint8View.set(MAGIC_BYTES, 0);
630
+ dataView.setUint32(4, FORMAT_VERSION, true);
631
+ dataView.setUint32(8, this.ids.length, true);
632
+ dataView.setUint32(12, this.dimensions, true);
633
+ // Write IDs
634
+ let offset = HEADER_SIZE;
635
+ for (const encoded of encodedIds) {
636
+ dataView.setUint16(offset, encoded.length, true);
637
+ offset += 2;
638
+ uint8View.set(encoded, offset);
639
+ offset += encoded.length;
640
+ }
641
+ // Add padding
642
+ offset += padding;
643
+ // Write vectors
644
+ const vectorsView = new Float32Array(buffer, offset);
645
+ vectorsView.set(this.vectors);
646
+ return buffer;
647
+ }
648
+ }
649
+ export default VectorShardDO;
650
+ //# sourceMappingURL=VectorShardDO.js.map