@assemblyline-agents/runtime 2.0.0 → 3.0.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 (389) hide show
  1. package/LICENSE +1 -1
  2. package/dist/a2a-client.d.ts +22 -0
  3. package/dist/a2a-client.d.ts.map +1 -0
  4. package/dist/a2a-client.js +211 -0
  5. package/dist/a2a-client.js.map +1 -0
  6. package/dist/agent-hook-context.d.ts +6 -1
  7. package/dist/agent-hook-context.d.ts.map +1 -1
  8. package/dist/agent-hook-context.js +24 -11
  9. package/dist/agent-hook-context.js.map +1 -1
  10. package/dist/agent-hook-evaluation.d.ts +6 -1
  11. package/dist/agent-hook-evaluation.d.ts.map +1 -1
  12. package/dist/agent-hook-evaluation.js +16 -5
  13. package/dist/agent-hook-evaluation.js.map +1 -1
  14. package/dist/agent-hook-run-lifecycle.d.ts +5 -1
  15. package/dist/agent-hook-run-lifecycle.d.ts.map +1 -1
  16. package/dist/agent-hook-run-lifecycle.js +11 -13
  17. package/dist/agent-hook-run-lifecycle.js.map +1 -1
  18. package/dist/agent-surface.d.ts +32 -0
  19. package/dist/agent-surface.d.ts.map +1 -0
  20. package/dist/agent-surface.js +85 -0
  21. package/dist/agent-surface.js.map +1 -0
  22. package/dist/attachments.d.ts +5 -1
  23. package/dist/attachments.d.ts.map +1 -1
  24. package/dist/attachments.js +58 -32
  25. package/dist/attachments.js.map +1 -1
  26. package/dist/audience.d.ts +30 -0
  27. package/dist/audience.d.ts.map +1 -0
  28. package/dist/audience.js +68 -0
  29. package/dist/audience.js.map +1 -0
  30. package/dist/automation-event-match.d.ts +8 -0
  31. package/dist/automation-event-match.d.ts.map +1 -0
  32. package/dist/automation-event-match.js +25 -0
  33. package/dist/automation-event-match.js.map +1 -0
  34. package/dist/background-review-trigger.d.ts.map +1 -1
  35. package/dist/background-review-trigger.js +14 -16
  36. package/dist/background-review-trigger.js.map +1 -1
  37. package/dist/background-review-types.d.ts +9 -2
  38. package/dist/background-review-types.d.ts.map +1 -1
  39. package/dist/background-review-worker.js +2 -2
  40. package/dist/background-review-worker.js.map +1 -1
  41. package/dist/background-review.d.ts.map +1 -1
  42. package/dist/background-review.js +27 -10
  43. package/dist/background-review.js.map +1 -1
  44. package/dist/builtin-tool-executors.d.ts +47 -21
  45. package/dist/builtin-tool-executors.d.ts.map +1 -1
  46. package/dist/builtin-tool-executors.js +293 -121
  47. package/dist/builtin-tool-executors.js.map +1 -1
  48. package/dist/builtin-tools.d.ts +16 -8
  49. package/dist/builtin-tools.d.ts.map +1 -1
  50. package/dist/builtin-tools.js +309 -70
  51. package/dist/builtin-tools.js.map +1 -1
  52. package/dist/capability-catalog.d.ts +3 -2
  53. package/dist/capability-catalog.d.ts.map +1 -1
  54. package/dist/capability-catalog.js +10 -6
  55. package/dist/capability-catalog.js.map +1 -1
  56. package/dist/capability-inspection.d.ts +31 -0
  57. package/dist/capability-inspection.d.ts.map +1 -0
  58. package/dist/capability-inspection.js +58 -0
  59. package/dist/capability-inspection.js.map +1 -0
  60. package/dist/channel-http-util.d.ts.map +1 -1
  61. package/dist/channel-http-util.js +6 -2
  62. package/dist/channel-http-util.js.map +1 -1
  63. package/dist/channel-ingress.d.ts +16 -1
  64. package/dist/channel-ingress.d.ts.map +1 -1
  65. package/dist/channel-ingress.js +117 -7
  66. package/dist/channel-ingress.js.map +1 -1
  67. package/dist/channel.d.ts +58 -2
  68. package/dist/channel.d.ts.map +1 -1
  69. package/dist/checkpoints.d.ts +1 -1
  70. package/dist/checkpoints.d.ts.map +1 -1
  71. package/dist/checkpoints.js +6 -6
  72. package/dist/checkpoints.js.map +1 -1
  73. package/dist/child-process-env.d.ts +7 -0
  74. package/dist/child-process-env.d.ts.map +1 -0
  75. package/dist/child-process-env.js +41 -0
  76. package/dist/child-process-env.js.map +1 -0
  77. package/dist/computer-relay-protocol.d.ts.map +1 -1
  78. package/dist/computer-relay-protocol.js +4 -4
  79. package/dist/computer-relay-protocol.js.map +1 -1
  80. package/dist/concurrency.d.ts +1 -1
  81. package/dist/concurrency.js +1 -1
  82. package/dist/connection-auth-util.d.ts +1 -0
  83. package/dist/connection-auth-util.d.ts.map +1 -1
  84. package/dist/connection-auth-util.js +1 -1
  85. package/dist/connection-auth-util.js.map +1 -1
  86. package/dist/connection-clients.d.ts +11 -3
  87. package/dist/connection-clients.d.ts.map +1 -1
  88. package/dist/connection-clients.js +71 -8
  89. package/dist/connection-clients.js.map +1 -1
  90. package/dist/connection-event-store.d.ts +98 -0
  91. package/dist/connection-event-store.d.ts.map +1 -0
  92. package/dist/connection-event-store.js +162 -0
  93. package/dist/connection-event-store.js.map +1 -0
  94. package/dist/connection-events.d.ts +51 -0
  95. package/dist/connection-events.d.ts.map +1 -0
  96. package/dist/connection-events.js +343 -0
  97. package/dist/connection-events.js.map +1 -0
  98. package/dist/connection-stores.d.ts +3 -0
  99. package/dist/connection-stores.d.ts.map +1 -1
  100. package/dist/connection-stores.js +4 -1
  101. package/dist/connection-stores.js.map +1 -1
  102. package/dist/connection-util.d.ts +3 -2
  103. package/dist/connection-util.d.ts.map +1 -1
  104. package/dist/connection-util.js +18 -1
  105. package/dist/connection-util.js.map +1 -1
  106. package/dist/connections.d.ts +54 -5
  107. package/dist/connections.d.ts.map +1 -1
  108. package/dist/connections.js +342 -53
  109. package/dist/connections.js.map +1 -1
  110. package/dist/context-policy-util.d.ts.map +1 -1
  111. package/dist/context-policy-util.js +1 -3
  112. package/dist/context-policy-util.js.map +1 -1
  113. package/dist/conversation-context.d.ts +6 -2
  114. package/dist/conversation-context.d.ts.map +1 -1
  115. package/dist/conversation-context.js +45 -12
  116. package/dist/conversation-context.js.map +1 -1
  117. package/dist/conversation-transcript.d.ts +8 -5
  118. package/dist/conversation-transcript.d.ts.map +1 -1
  119. package/dist/conversation-transcript.js +24 -5
  120. package/dist/conversation-transcript.js.map +1 -1
  121. package/dist/conversation-turn-coalescing.d.ts +22 -0
  122. package/dist/conversation-turn-coalescing.d.ts.map +1 -0
  123. package/dist/conversation-turn-coalescing.js +121 -0
  124. package/dist/conversation-turn-coalescing.js.map +1 -0
  125. package/dist/conversation-turn-dispatch.d.ts +5 -2
  126. package/dist/conversation-turn-dispatch.d.ts.map +1 -1
  127. package/dist/conversation-turn-dispatch.js +59 -22
  128. package/dist/conversation-turn-dispatch.js.map +1 -1
  129. package/dist/default-outbound-route.d.ts +29 -0
  130. package/dist/default-outbound-route.d.ts.map +1 -0
  131. package/dist/default-outbound-route.js +105 -0
  132. package/dist/default-outbound-route.js.map +1 -0
  133. package/dist/delivery-artifacts.d.ts +2 -0
  134. package/dist/delivery-artifacts.d.ts.map +1 -0
  135. package/dist/delivery-artifacts.js +34 -0
  136. package/dist/delivery-artifacts.js.map +1 -0
  137. package/dist/delivery-files.d.ts +5 -0
  138. package/dist/delivery-files.d.ts.map +1 -0
  139. package/dist/delivery-files.js +33 -0
  140. package/dist/delivery-files.js.map +1 -0
  141. package/dist/delivery-queue.d.ts +21 -1
  142. package/dist/delivery-queue.d.ts.map +1 -1
  143. package/dist/delivery-queue.js +144 -1
  144. package/dist/delivery-queue.js.map +1 -1
  145. package/dist/delivery-send.d.ts +2 -2
  146. package/dist/delivery-send.d.ts.map +1 -1
  147. package/dist/delivery-send.js +256 -100
  148. package/dist/delivery-send.js.map +1 -1
  149. package/dist/durable-files.d.ts +37 -0
  150. package/dist/durable-files.d.ts.map +1 -0
  151. package/dist/durable-files.js +63 -0
  152. package/dist/durable-files.js.map +1 -0
  153. package/dist/harness-loop.d.ts +6 -1
  154. package/dist/harness-loop.d.ts.map +1 -1
  155. package/dist/harness-loop.js +110 -25
  156. package/dist/harness-loop.js.map +1 -1
  157. package/dist/heic-transcode-worker.d.ts +2 -0
  158. package/dist/heic-transcode-worker.d.ts.map +1 -0
  159. package/dist/heic-transcode-worker.js +59 -0
  160. package/dist/heic-transcode-worker.js.map +1 -0
  161. package/dist/heic-transcode.d.ts +18 -0
  162. package/dist/heic-transcode.d.ts.map +1 -0
  163. package/dist/heic-transcode.js +99 -0
  164. package/dist/heic-transcode.js.map +1 -0
  165. package/dist/human-input-routing.d.ts +22 -0
  166. package/dist/human-input-routing.d.ts.map +1 -0
  167. package/dist/human-input-routing.js +26 -0
  168. package/dist/human-input-routing.js.map +1 -0
  169. package/dist/in-memory-conversation-turn-store.d.ts +3 -1
  170. package/dist/in-memory-conversation-turn-store.d.ts.map +1 -1
  171. package/dist/in-memory-conversation-turn-store.js +41 -2
  172. package/dist/in-memory-conversation-turn-store.js.map +1 -1
  173. package/dist/in-memory-run-store.d.ts +8 -0
  174. package/dist/in-memory-run-store.d.ts.map +1 -1
  175. package/dist/in-memory-run-store.js +28 -5
  176. package/dist/in-memory-run-store.js.map +1 -1
  177. package/dist/in-memory-sandbox-session-store.d.ts +2 -1
  178. package/dist/in-memory-sandbox-session-store.d.ts.map +1 -1
  179. package/dist/in-memory-sandbox-session-store.js +65 -1
  180. package/dist/in-memory-sandbox-session-store.js.map +1 -1
  181. package/dist/in-memory-small-stores.d.ts +18 -1
  182. package/dist/in-memory-small-stores.d.ts.map +1 -1
  183. package/dist/in-memory-small-stores.js +107 -1
  184. package/dist/in-memory-small-stores.js.map +1 -1
  185. package/dist/in-memory-workspace-store.d.ts +40 -0
  186. package/dist/in-memory-workspace-store.d.ts.map +1 -0
  187. package/dist/in-memory-workspace-store.js +370 -0
  188. package/dist/in-memory-workspace-store.js.map +1 -0
  189. package/dist/index.d.ts +73 -36
  190. package/dist/index.d.ts.map +1 -1
  191. package/dist/index.js +390 -258
  192. package/dist/index.js.map +1 -1
  193. package/dist/json-util.d.ts +8 -0
  194. package/dist/json-util.d.ts.map +1 -1
  195. package/dist/json-util.js +8 -0
  196. package/dist/json-util.js.map +1 -1
  197. package/dist/local-sandbox.d.ts +3 -2
  198. package/dist/local-sandbox.d.ts.map +1 -1
  199. package/dist/local-sandbox.js +69 -25
  200. package/dist/local-sandbox.js.map +1 -1
  201. package/dist/mcp-client.d.ts.map +1 -1
  202. package/dist/mcp-client.js +3 -2
  203. package/dist/mcp-client.js.map +1 -1
  204. package/dist/media-processor.d.ts +42 -0
  205. package/dist/media-processor.d.ts.map +1 -0
  206. package/dist/media-processor.js +2 -0
  207. package/dist/media-processor.js.map +1 -0
  208. package/dist/model-media.d.ts +13 -1
  209. package/dist/model-media.d.ts.map +1 -1
  210. package/dist/model-media.js +81 -18
  211. package/dist/model-media.js.map +1 -1
  212. package/dist/model-visible-interrupts.d.ts +10 -0
  213. package/dist/model-visible-interrupts.d.ts.map +1 -0
  214. package/dist/model-visible-interrupts.js +41 -0
  215. package/dist/model-visible-interrupts.js.map +1 -0
  216. package/dist/operator-controls.d.ts.map +1 -1
  217. package/dist/operator-controls.js +16 -3
  218. package/dist/operator-controls.js.map +1 -1
  219. package/dist/outbound-http-policy.d.ts +7 -0
  220. package/dist/outbound-http-policy.d.ts.map +1 -0
  221. package/dist/outbound-http-policy.js +155 -0
  222. package/dist/outbound-http-policy.js.map +1 -0
  223. package/dist/public-api.d.ts +21 -0
  224. package/dist/public-api.d.ts.map +1 -0
  225. package/dist/public-api.js +19 -0
  226. package/dist/public-api.js.map +1 -0
  227. package/dist/replay-resume.d.ts +8 -0
  228. package/dist/replay-resume.d.ts.map +1 -1
  229. package/dist/replay-resume.js +141 -11
  230. package/dist/replay-resume.js.map +1 -1
  231. package/dist/resource-projection-util.d.ts +1 -1
  232. package/dist/resource-projection-util.d.ts.map +1 -1
  233. package/dist/resource-projection-util.js +21 -10
  234. package/dist/resource-projection-util.js.map +1 -1
  235. package/dist/resource-projection.d.ts +8 -1
  236. package/dist/resource-projection.d.ts.map +1 -1
  237. package/dist/resource-projection.js +229 -29
  238. package/dist/resource-projection.js.map +1 -1
  239. package/dist/run-heartbeat.d.ts +12 -2
  240. package/dist/run-heartbeat.d.ts.map +1 -1
  241. package/dist/run-heartbeat.js +31 -4
  242. package/dist/run-heartbeat.js.map +1 -1
  243. package/dist/run-outcome.d.ts +9 -5
  244. package/dist/run-outcome.d.ts.map +1 -1
  245. package/dist/run-outcome.js +14 -5
  246. package/dist/run-outcome.js.map +1 -1
  247. package/dist/run-recovery.d.ts +19 -3
  248. package/dist/run-recovery.d.ts.map +1 -1
  249. package/dist/run-recovery.js +205 -34
  250. package/dist/run-recovery.js.map +1 -1
  251. package/dist/run-replay.d.ts +35 -0
  252. package/dist/run-replay.d.ts.map +1 -0
  253. package/dist/run-replay.js +193 -0
  254. package/dist/run-replay.js.map +1 -0
  255. package/dist/run-result.d.ts +4 -0
  256. package/dist/run-result.d.ts.map +1 -0
  257. package/dist/run-result.js +18 -0
  258. package/dist/run-result.js.map +1 -0
  259. package/dist/run-timeline-query.d.ts +38 -0
  260. package/dist/run-timeline-query.d.ts.map +1 -0
  261. package/dist/run-timeline-query.js +99 -0
  262. package/dist/run-timeline-query.js.map +1 -0
  263. package/dist/runs-query.d.ts.map +1 -1
  264. package/dist/runs-query.js +11 -3
  265. package/dist/runs-query.js.map +1 -1
  266. package/dist/runtime-bundle.d.ts.map +1 -1
  267. package/dist/runtime-bundle.js +2 -0
  268. package/dist/runtime-bundle.js.map +1 -1
  269. package/dist/runtime-learning.d.ts +15 -13
  270. package/dist/runtime-learning.d.ts.map +1 -1
  271. package/dist/runtime-learning.js +79 -58
  272. package/dist/runtime-learning.js.map +1 -1
  273. package/dist/runtime-types.d.ts +68 -9
  274. package/dist/runtime-types.d.ts.map +1 -1
  275. package/dist/sandbox-fs.d.ts +8 -5
  276. package/dist/sandbox-fs.d.ts.map +1 -1
  277. package/dist/sandbox-fs.js +30 -31
  278. package/dist/sandbox-fs.js.map +1 -1
  279. package/dist/sandbox-handle.d.ts +25 -0
  280. package/dist/sandbox-handle.d.ts.map +1 -0
  281. package/dist/sandbox-handle.js +120 -0
  282. package/dist/sandbox-handle.js.map +1 -0
  283. package/dist/sandbox-session-identity.d.ts +14 -0
  284. package/dist/sandbox-session-identity.d.ts.map +1 -0
  285. package/dist/sandbox-session-identity.js +33 -0
  286. package/dist/sandbox-session-identity.js.map +1 -0
  287. package/dist/sandbox-session-key.d.ts.map +1 -1
  288. package/dist/sandbox-session-key.js +12 -9
  289. package/dist/sandbox-session-key.js.map +1 -1
  290. package/dist/sandbox-session-lifecycle.d.ts.map +1 -1
  291. package/dist/sandbox-session-lifecycle.js +187 -44
  292. package/dist/sandbox-session-lifecycle.js.map +1 -1
  293. package/dist/sandbox-snapshot-policy.js +3 -3
  294. package/dist/sandbox-snapshot-policy.js.map +1 -1
  295. package/dist/sandbox-state-sync.d.ts +4 -2
  296. package/dist/sandbox-state-sync.d.ts.map +1 -1
  297. package/dist/sandbox-state-sync.js +47 -15
  298. package/dist/sandbox-state-sync.js.map +1 -1
  299. package/dist/sandbox-sync-worker.d.ts +11 -2
  300. package/dist/sandbox-sync-worker.d.ts.map +1 -1
  301. package/dist/sandbox-sync-worker.js +143 -31
  302. package/dist/sandbox-sync-worker.js.map +1 -1
  303. package/dist/schedule-execution.d.ts.map +1 -1
  304. package/dist/schedule-execution.js +127 -23
  305. package/dist/schedule-execution.js.map +1 -1
  306. package/dist/sdk-api-client.d.ts +17 -0
  307. package/dist/sdk-api-client.d.ts.map +1 -0
  308. package/dist/sdk-api-client.js +55 -0
  309. package/dist/sdk-api-client.js.map +1 -0
  310. package/dist/security.js +2 -2
  311. package/dist/security.js.map +1 -1
  312. package/dist/self-improvement.d.ts +5 -1
  313. package/dist/self-improvement.d.ts.map +1 -1
  314. package/dist/self-improvement.js +28 -14
  315. package/dist/self-improvement.js.map +1 -1
  316. package/dist/skill-bundles.d.ts +55 -0
  317. package/dist/skill-bundles.d.ts.map +1 -0
  318. package/dist/skill-bundles.js +134 -0
  319. package/dist/skill-bundles.js.map +1 -0
  320. package/dist/source-loader.js +7 -7
  321. package/dist/source-loader.js.map +1 -1
  322. package/dist/state-store-helpers.d.ts +2 -0
  323. package/dist/state-store-helpers.d.ts.map +1 -1
  324. package/dist/state-store-helpers.js +11 -1
  325. package/dist/state-store-helpers.js.map +1 -1
  326. package/dist/state-stores.d.ts +1 -0
  327. package/dist/state-stores.d.ts.map +1 -1
  328. package/dist/state-stores.js +26 -7
  329. package/dist/state-stores.js.map +1 -1
  330. package/dist/state.d.ts +305 -5
  331. package/dist/state.d.ts.map +1 -1
  332. package/dist/state.js +41 -2
  333. package/dist/state.js.map +1 -1
  334. package/dist/storage.d.ts +47 -2
  335. package/dist/storage.d.ts.map +1 -1
  336. package/dist/storage.js +158 -6
  337. package/dist/storage.js.map +1 -1
  338. package/dist/subagent-execution.d.ts +1 -1
  339. package/dist/subagent-execution.d.ts.map +1 -1
  340. package/dist/subagent-execution.js +10 -12
  341. package/dist/subagent-execution.js.map +1 -1
  342. package/dist/target-instructions.js +1 -1
  343. package/dist/target-instructions.js.map +1 -1
  344. package/dist/tool-apis.d.ts.map +1 -1
  345. package/dist/tool-apis.js +33 -9
  346. package/dist/tool-apis.js.map +1 -1
  347. package/dist/tool-execution.d.ts +22 -12
  348. package/dist/tool-execution.d.ts.map +1 -1
  349. package/dist/tool-execution.js +368 -238
  350. package/dist/tool-execution.js.map +1 -1
  351. package/dist/turn-media.d.ts +29 -0
  352. package/dist/turn-media.d.ts.map +1 -0
  353. package/dist/turn-media.js +233 -0
  354. package/dist/turn-media.js.map +1 -0
  355. package/dist/usage-reconciliation.d.ts +1 -1
  356. package/dist/usage-reconciliation.js +1 -1
  357. package/dist/workspace-id.d.ts +10 -0
  358. package/dist/workspace-id.d.ts.map +1 -0
  359. package/dist/workspace-id.js +55 -0
  360. package/dist/workspace-id.js.map +1 -0
  361. package/dist/workspace-manifest.d.ts +24 -0
  362. package/dist/workspace-manifest.d.ts.map +1 -0
  363. package/dist/workspace-manifest.js +111 -0
  364. package/dist/workspace-manifest.js.map +1 -0
  365. package/dist/workspace-operation-limiter.d.ts +16 -0
  366. package/dist/workspace-operation-limiter.d.ts.map +1 -0
  367. package/dist/workspace-operation-limiter.js +31 -0
  368. package/dist/workspace-operation-limiter.js.map +1 -0
  369. package/dist/workspace-operations.d.ts +145 -0
  370. package/dist/workspace-operations.d.ts.map +1 -0
  371. package/dist/workspace-operations.js +420 -0
  372. package/dist/workspace-operations.js.map +1 -0
  373. package/dist/workspace-runtime.d.ts +110 -0
  374. package/dist/workspace-runtime.d.ts.map +1 -0
  375. package/dist/workspace-runtime.js +240 -0
  376. package/dist/workspace-runtime.js.map +1 -0
  377. package/dist/workspace-search.d.ts +55 -0
  378. package/dist/workspace-search.d.ts.map +1 -0
  379. package/dist/workspace-search.js +262 -0
  380. package/dist/workspace-search.js.map +1 -0
  381. package/dist/workspace-service.d.ts +173 -0
  382. package/dist/workspace-service.d.ts.map +1 -0
  383. package/dist/workspace-service.js +619 -0
  384. package/dist/workspace-service.js.map +1 -0
  385. package/dist/workspace.d.ts +7 -0
  386. package/dist/workspace.d.ts.map +1 -0
  387. package/dist/workspace.js +7 -0
  388. package/dist/workspace.js.map +1 -0
  389. package/package.json +7 -4
@@ -0,0 +1,240 @@
1
+ import { FILES_MOUNT_TOOL_NAME, FILES_SEARCH_TOOL_NAME } from "./builtin-tools.js";
2
+ import { resolvePositiveIntegerEnv } from "./env-config.js";
3
+ import { isJsonObject, safeJson } from "./json-util.js";
4
+ import { SlidingWindowWorkspaceOperationLimiter } from "./workspace-operation-limiter.js";
5
+ import { DurableFileService, durableFileEntryJson } from "./durable-files.js";
6
+ import { WorkspaceService } from "./workspace-service.js";
7
+ export class RuntimeWorkspaceManager {
8
+ options;
9
+ service;
10
+ files;
11
+ constructor(options) {
12
+ this.options = options;
13
+ const env = options.env;
14
+ this.service = new WorkspaceService({
15
+ state: options.state,
16
+ blob: options.blob,
17
+ agentScope: options.agentScope,
18
+ now: options.now,
19
+ operationLimiter: new SlidingWindowWorkspaceOperationLimiter({
20
+ windowMs: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_RATE_WINDOW_MS, 60_000),
21
+ limits: {
22
+ checkpoint: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_CHECKPOINTS_PER_WINDOW, 60),
23
+ restore: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_RESTORES_PER_WINDOW, 20),
24
+ fork: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_FORKS_PER_WINDOW, 20),
25
+ hydrate: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_HYDRATES_PER_WINDOW, 120),
26
+ sync: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_SYNCS_PER_WINDOW, 120)
27
+ }
28
+ }),
29
+ maxCheckpoints: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_MAX_CHECKPOINTS, 1_000),
30
+ ...(options.embeddingProvider && (options.state.supportsWorkspaceEmbeddings?.() ?? true)
31
+ ? { embeddingProvider: options.embeddingProvider }
32
+ : {}),
33
+ limits: {
34
+ maxFiles: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_MAX_FILES, 10_000),
35
+ maxFileBytes: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_MAX_FILE_BYTES, 100 * 1024 * 1024),
36
+ maxTotalBytes: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_MAX_TOTAL_BYTES, 1024 * 1024 * 1024)
37
+ },
38
+ searchLimits: {
39
+ maxIndexedFileBytes: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_SEARCH_MAX_FILE_BYTES, 1024 * 1024),
40
+ maxChunkChars: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_SEARCH_MAX_CHUNK_CHARS, 12_000),
41
+ chunkOverlapLines: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_SEARCH_CHUNK_OVERLAP_LINES, 5),
42
+ maxChunks: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_SEARCH_MAX_CHUNKS, 50_000)
43
+ }
44
+ });
45
+ this.files = new DurableFileService({
46
+ state: options.state,
47
+ blob: options.blob,
48
+ workspaces: this.service
49
+ });
50
+ }
51
+ async executeTool(run, toolName, input, sandboxHandle) {
52
+ const raw = isJsonObject(input) ? input : {};
53
+ if (toolName === FILES_SEARCH_TOOL_NAME) {
54
+ const query = stringValue(raw.query);
55
+ const limit = typeof raw.limit === "number" && Number.isFinite(raw.limit) ? raw.limit : undefined;
56
+ const result = await this.files.list(run, {
57
+ ...(query ? { query } : {}),
58
+ ...(limit !== undefined ? { limit } : {})
59
+ });
60
+ return safeJson({
61
+ workspaceId: result.workspaceId,
62
+ files: result.files.map(durableFileEntryJson)
63
+ });
64
+ }
65
+ if (toolName === FILES_MOUNT_TOOL_NAME) {
66
+ const fileId = stringValue(raw.fileId);
67
+ if (!fileId)
68
+ throw new Error(`${FILES_MOUNT_TOOL_NAME} requires fileId.`);
69
+ const sandbox = await sandboxHandle.get();
70
+ const result = await this.files.mount(run, fileId, sandbox);
71
+ return safeJson({
72
+ workspaceId: result.workspaceId,
73
+ file: durableFileEntryJson(result.file)
74
+ });
75
+ }
76
+ const workspace = await this.service.resolveForRun(run);
77
+ if (toolName === "workspace_search") {
78
+ const query = stringValue(raw.query);
79
+ if (!query)
80
+ throw new Error("workspace_search requires query.");
81
+ const versionId = stringValue(raw.versionId);
82
+ const limit = typeof raw.limit === "number" && Number.isFinite(raw.limit) ? raw.limit : undefined;
83
+ return safeJson(await this.service.search(workspace.id, query, {
84
+ ...(versionId ? { versionId } : {}),
85
+ ...(limit !== undefined ? { limit } : {})
86
+ }));
87
+ }
88
+ if (toolName === "workspace_status")
89
+ return safeJson(await this.service.status(workspace.id));
90
+ if (toolName === "workspace_checkpoint_create") {
91
+ const name = stringValue(raw.name);
92
+ if (!name)
93
+ throw new Error("workspace_checkpoint_create requires name.");
94
+ return safeJson(await this.service.createCheckpoint({
95
+ workspaceId: workspace.id,
96
+ name,
97
+ replace: raw.replace === true,
98
+ runId: run.id
99
+ }));
100
+ }
101
+ if (toolName === "workspace_checkpoint_list") {
102
+ return safeJson({ workspaceId: workspace.id, checkpoints: await this.service.listCheckpoints(workspace.id) });
103
+ }
104
+ if (toolName === "workspace_checkpoint_restore") {
105
+ const name = stringValue(raw.name);
106
+ if (!name)
107
+ throw new Error("workspace_checkpoint_restore requires name.");
108
+ const sessionKey = this.options.sandboxSessionKey(run);
109
+ const session = await this.options.state.getSandboxSession(sessionKey);
110
+ if (session?.dirty)
111
+ throw new Error("Sync the dirty workspace before restoring a checkpoint.");
112
+ const restored = await this.service.restoreCheckpoint({
113
+ workspaceId: workspace.id,
114
+ name,
115
+ runId: run.id,
116
+ idempotencyKey: `workspace-restore-tool:${run.id}:${name}`
117
+ });
118
+ const activeSandbox = sandboxHandle.current();
119
+ if (activeSandbox)
120
+ await this.service.hydrate(run, activeSandbox, sessionKey);
121
+ return safeJson(restored);
122
+ }
123
+ if (toolName === "workspace_fork") {
124
+ const checkpointName = stringValue(raw.checkpoint);
125
+ const name = stringValue(raw.name);
126
+ const tenantId = stringValue(run.input.tenantId);
127
+ const forked = await this.service.fork({
128
+ sourceWorkspaceId: workspace.id,
129
+ ...(checkpointName ? { checkpointName } : {}),
130
+ ...(name ? { name } : {}),
131
+ ...(tenantId ? { tenantId } : {})
132
+ });
133
+ await this.options.state.appendEvent(run.id, "workspace.forked", {
134
+ sourceWorkspaceId: workspace.id,
135
+ sourceVersionId: forked.sourceVersionId ?? null,
136
+ workspaceId: forked.id
137
+ });
138
+ return safeJson(forked);
139
+ }
140
+ throw new Error(`Unsupported workspace tool: ${toolName}`);
141
+ }
142
+ listWorkspaces() {
143
+ return this.options.state.listWorkspaces({ agentScope: this.options.agentScope });
144
+ }
145
+ async listVersions(workspaceId, input = {}) {
146
+ await this.service.status(workspaceId);
147
+ return this.options.state.listWorkspaceVersions(workspaceId, input);
148
+ }
149
+ async sync(run, sandbox, job) {
150
+ const workspaceId = stringValue(job.manifest.workspaceId);
151
+ if (!workspaceId)
152
+ throw new Error(`Sandbox sync job is missing workspaceId: ${job.id}`);
153
+ const rawBaseVersionId = job.manifest.baseVersionId;
154
+ const baseVersionId = typeof rawBaseVersionId === "string"
155
+ ? rawBaseVersionId
156
+ : rawBaseVersionId === null
157
+ ? null
158
+ : undefined;
159
+ if (baseVersionId === undefined)
160
+ throw new Error(`Sandbox sync job is missing baseVersionId: ${job.id}`);
161
+ return this.service.sync({
162
+ run,
163
+ sandbox,
164
+ syncJobId: job.id,
165
+ sessionKey: this.options.sandboxSessionKey(run),
166
+ workspaceId,
167
+ baseVersionId
168
+ });
169
+ }
170
+ }
171
+ export class WorkspaceRuntimeMethods {
172
+ workspaceRuntime;
173
+ getWorkspaceStatus(workspaceId) {
174
+ return this.workspaceRuntime.service.status(workspaceId);
175
+ }
176
+ listWorkspaces() {
177
+ return this.workspaceRuntime.listWorkspaces();
178
+ }
179
+ listWorkspaceVersions(workspaceId, input = {}) {
180
+ return this.workspaceRuntime.listVersions(workspaceId, input);
181
+ }
182
+ readWorkspaceFile(workspaceId, path, versionId) {
183
+ return this.workspaceRuntime.service.readFile(workspaceId, path, versionId);
184
+ }
185
+ listWorkspaceFiles(workspaceId, input = {}) {
186
+ return this.workspaceRuntime.service.listFiles(workspaceId, input);
187
+ }
188
+ grepWorkspace(workspaceId, pattern, input = {}) {
189
+ return this.workspaceRuntime.service.grep(workspaceId, pattern, input);
190
+ }
191
+ searchWorkspace(workspaceId, query, input = {}) {
192
+ return this.workspaceRuntime.service.search(workspaceId, query, input);
193
+ }
194
+ applyWorkspaceRetention(workspaceId, input = {}) {
195
+ return this.workspaceRuntime.service.retention(workspaceId, input);
196
+ }
197
+ getWorkspaceReachability() {
198
+ return this.workspaceRuntime.service.reachability();
199
+ }
200
+ garbageCollectWorkspaces(input = {}) {
201
+ return this.workspaceRuntime.service.garbageCollect(input);
202
+ }
203
+ getWorkspaceUsage() {
204
+ return this.workspaceRuntime.service.usage();
205
+ }
206
+ getWorkspaceDiagnostics() {
207
+ return this.workspaceRuntime.service.diagnostics();
208
+ }
209
+ verifyWorkspaces(workspaceId) {
210
+ return this.workspaceRuntime.service.verify(workspaceId);
211
+ }
212
+ repairWorkspaceBlob(input) {
213
+ return this.workspaceRuntime.service.repairBlob(input);
214
+ }
215
+ repairWorkspaceHead(input) {
216
+ return this.workspaceRuntime.service.repairHead(input);
217
+ }
218
+ createWorkspaceCheckpoint(input) {
219
+ return this.workspaceRuntime.service.createCheckpoint(input);
220
+ }
221
+ listWorkspaceCheckpoints(workspaceId) {
222
+ return this.workspaceRuntime.service.listCheckpoints(workspaceId);
223
+ }
224
+ inspectWorkspaceCheckpoint(workspaceId, name) {
225
+ return this.workspaceRuntime.service.getCheckpoint(workspaceId, name);
226
+ }
227
+ deleteWorkspaceCheckpoint(workspaceId, name) {
228
+ return this.workspaceRuntime.service.deleteCheckpoint({ workspaceId, name });
229
+ }
230
+ restoreWorkspaceCheckpoint(input) {
231
+ return this.workspaceRuntime.service.restoreCheckpoint(input);
232
+ }
233
+ forkWorkspace(input) {
234
+ return this.workspaceRuntime.service.fork(input);
235
+ }
236
+ }
237
+ function stringValue(value) {
238
+ return typeof value === "string" && value.length > 0 ? value : undefined;
239
+ }
240
+ //# sourceMappingURL=workspace-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-runtime.js","sourceRoot":"","sources":["../src/workspace-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { BlobAdapter } from "./runtime-types.js";
2
+ import type { MemoryEmbeddingProvider, WorkspaceManifest, WorkspaceManifestEntry, WorkspaceSearchChunk, WorkspaceSearchResult } from "./state.js";
3
+ export interface WorkspaceSearchLimits {
4
+ maxIndexedFileBytes: number;
5
+ maxChunkChars: number;
6
+ chunkOverlapLines: number;
7
+ maxChunks: number;
8
+ }
9
+ export declare const DEFAULT_WORKSPACE_SEARCH_LIMITS: WorkspaceSearchLimits;
10
+ export interface WorkspaceSearchBuildResult {
11
+ chunks: WorkspaceSearchChunk[];
12
+ excluded: Array<{
13
+ path: string;
14
+ reason: "binary" | "oversized" | "ignored" | "secret";
15
+ }>;
16
+ embeddingModel?: string;
17
+ }
18
+ export declare function buildWorkspaceSearchChunks(input: {
19
+ workspaceId: string;
20
+ versionId: string;
21
+ manifest: WorkspaceManifest;
22
+ blob: BlobAdapter;
23
+ now: Date;
24
+ embeddingProvider?: MemoryEmbeddingProvider;
25
+ limits?: WorkspaceSearchLimits;
26
+ }): Promise<WorkspaceSearchBuildResult>;
27
+ export declare function directWorkspaceSearch(input: {
28
+ workspaceId: string;
29
+ versionId: string;
30
+ manifest: WorkspaceManifest;
31
+ blob: BlobAdapter;
32
+ query: string;
33
+ limit?: number;
34
+ limits?: WorkspaceSearchLimits;
35
+ }): Promise<WorkspaceSearchResult[]>;
36
+ export declare function semanticWorkspaceSearch(input: {
37
+ chunks: WorkspaceSearchChunk[];
38
+ query: string;
39
+ provider: MemoryEmbeddingProvider;
40
+ limit?: number;
41
+ }): Promise<WorkspaceSearchResult[]>;
42
+ export declare function embedWorkspaceSearchQuery(provider: MemoryEmbeddingProvider, query: string): Promise<{
43
+ embedding: number[];
44
+ model: string;
45
+ }>;
46
+ export declare function mergeWorkspaceSearchResults(fullText: WorkspaceSearchResult[], semantic: WorkspaceSearchResult[], limit?: number): WorkspaceSearchResult[];
47
+ export declare function workspaceSearchExclusion(entry: WorkspaceManifestEntry, limits?: WorkspaceSearchLimits): WorkspaceSearchBuildResult["excluded"][number]["reason"] | undefined;
48
+ export declare function chunkWorkspaceText(text: string, limits?: WorkspaceSearchLimits): Array<{
49
+ startLine: number;
50
+ endLine: number;
51
+ content: string;
52
+ }>;
53
+ export declare function workspaceSearchTerms(query: string): string[];
54
+ export declare function workspaceLexicalScore(path: string, content: string, terms: string[]): number;
55
+ //# sourceMappingURL=workspace-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-search.d.ts","sourceRoot":"","sources":["../src/workspace-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,262 @@
1
+ import { createHash } from "node:crypto";
2
+ export const DEFAULT_WORKSPACE_SEARCH_LIMITS = {
3
+ maxIndexedFileBytes: 1024 * 1024,
4
+ maxChunkChars: 12_000,
5
+ chunkOverlapLines: 5,
6
+ maxChunks: 50_000
7
+ };
8
+ export async function buildWorkspaceSearchChunks(input) {
9
+ const limits = input.limits ?? DEFAULT_WORKSPACE_SEARCH_LIMITS;
10
+ const chunks = [];
11
+ const excluded = [];
12
+ let embeddingModel;
13
+ for (const entry of input.manifest.entries) {
14
+ const exclusion = workspaceSearchExclusion(entry, limits);
15
+ if (exclusion) {
16
+ excluded.push({ path: entry.path, reason: exclusion });
17
+ continue;
18
+ }
19
+ const contents = await verifiedBlob(input.blob, entry);
20
+ if (contents.includes(0)) {
21
+ excluded.push({ path: entry.path, reason: "binary" });
22
+ continue;
23
+ }
24
+ const text = contents.toString("utf8");
25
+ if (Buffer.from(text, "utf8").byteLength !== contents.byteLength) {
26
+ excluded.push({ path: entry.path, reason: "binary" });
27
+ continue;
28
+ }
29
+ for (const part of chunkWorkspaceText(text, limits)) {
30
+ if (chunks.length >= limits.maxChunks)
31
+ break;
32
+ const metadata = { contentSha256: entry.sha256 };
33
+ const chunk = {
34
+ id: searchChunkId(input.workspaceId, input.versionId, entry.path, part.startLine, part.content),
35
+ workspaceId: input.workspaceId,
36
+ versionId: input.versionId,
37
+ path: entry.path,
38
+ startLine: part.startLine,
39
+ endLine: part.endLine,
40
+ content: part.content,
41
+ contentSha256: entry.sha256,
42
+ contentType: entry.contentType,
43
+ metadata,
44
+ createdAt: input.now.toISOString()
45
+ };
46
+ if (input.embeddingProvider) {
47
+ const embedded = await embedWorkspaceText(input.embeddingProvider, `${entry.path}\n${part.content}`, "document", {
48
+ workspaceId: input.workspaceId,
49
+ versionId: input.versionId,
50
+ path: entry.path,
51
+ startLine: part.startLine,
52
+ endLine: part.endLine
53
+ });
54
+ chunk.embedding = embedded.embedding;
55
+ chunk.embeddingModel = embedded.model;
56
+ embeddingModel = embedded.model;
57
+ }
58
+ chunks.push(chunk);
59
+ }
60
+ if (chunks.length >= limits.maxChunks)
61
+ break;
62
+ }
63
+ return { chunks, excluded, ...(embeddingModel ? { embeddingModel } : {}) };
64
+ }
65
+ export async function directWorkspaceSearch(input) {
66
+ const limits = input.limits ?? DEFAULT_WORKSPACE_SEARCH_LIMITS;
67
+ const terms = workspaceSearchTerms(input.query);
68
+ const results = [];
69
+ let scannedChunks = 0;
70
+ outer: for (const entry of input.manifest.entries) {
71
+ if (workspaceSearchExclusion(entry, limits))
72
+ continue;
73
+ const contents = await verifiedBlob(input.blob, entry);
74
+ if (contents.includes(0))
75
+ continue;
76
+ const text = contents.toString("utf8");
77
+ if (Buffer.from(text, "utf8").byteLength !== contents.byteLength)
78
+ continue;
79
+ for (const part of chunkWorkspaceText(text, limits)) {
80
+ if (scannedChunks >= limits.maxChunks)
81
+ break outer;
82
+ scannedChunks += 1;
83
+ const score = workspaceLexicalScore(entry.path, part.content, terms);
84
+ if (score <= 0)
85
+ continue;
86
+ results.push({
87
+ path: entry.path,
88
+ versionId: input.versionId,
89
+ startLine: part.startLine,
90
+ endLine: part.endLine,
91
+ snippet: part.content,
92
+ score,
93
+ rankingSource: "direct",
94
+ pathScore: entry.path.toLowerCase().includes(input.query.toLowerCase()) ? 1 : 0
95
+ });
96
+ }
97
+ }
98
+ return results
99
+ .sort((a, b) => b.score - a.score || b.pathScore - a.pathScore || a.path.localeCompare(b.path) || a.startLine - b.startLine)
100
+ .slice(0, boundedLimit(input.limit))
101
+ .map(({ pathScore: _pathScore, ...result }) => result);
102
+ }
103
+ export async function semanticWorkspaceSearch(input) {
104
+ const embedded = await embedWorkspaceSearchQuery(input.provider, input.query);
105
+ return input.chunks
106
+ .filter((chunk) => chunk.embedding && (!chunk.embeddingModel || chunk.embeddingModel === embedded.model))
107
+ .map((chunk) => ({ chunk, score: cosineSimilarity(embedded.embedding, chunk.embedding ?? []) }))
108
+ .filter(({ score }) => score > 0)
109
+ .sort((a, b) => b.score - a.score || a.chunk.path.localeCompare(b.chunk.path) || a.chunk.startLine - b.chunk.startLine)
110
+ .slice(0, boundedLimit(input.limit))
111
+ .map(({ chunk, score }) => ({
112
+ path: chunk.path,
113
+ versionId: chunk.versionId,
114
+ startLine: chunk.startLine,
115
+ endLine: chunk.endLine,
116
+ snippet: chunk.content,
117
+ score,
118
+ rankingSource: "semantic"
119
+ }));
120
+ }
121
+ export function embedWorkspaceSearchQuery(provider, query) {
122
+ return embedWorkspaceText(provider, query, "query", { kind: "workspace_search" });
123
+ }
124
+ export function mergeWorkspaceSearchResults(fullText, semantic, limit) {
125
+ const ranked = new Map();
126
+ for (const [source, results] of [["full_text", fullText], ["semantic", semantic]]) {
127
+ results.forEach((result, index) => {
128
+ const key = `${result.path}\u0000${result.startLine}\u0000${result.endLine}`;
129
+ const current = ranked.get(key) ?? { ...result, combined: 0, sources: new Set() };
130
+ current.combined += 1 / (60 + index + 1);
131
+ current.sources.add(source);
132
+ if (source === "semantic" && !current.snippet)
133
+ current.snippet = result.snippet;
134
+ ranked.set(key, current);
135
+ });
136
+ }
137
+ return [...ranked.values()]
138
+ .sort((a, b) => b.combined - a.combined || a.path.localeCompare(b.path) || a.startLine - b.startLine)
139
+ .slice(0, boundedLimit(limit))
140
+ .map(({ combined, sources, ...result }) => ({
141
+ ...result,
142
+ score: combined,
143
+ rankingSource: sources.size > 1 ? "hybrid" : sources.has("semantic") ? "semantic" : "full_text"
144
+ }));
145
+ }
146
+ export function workspaceSearchExclusion(entry, limits = DEFAULT_WORKSPACE_SEARCH_LIMITS) {
147
+ const path = entry.path.toLowerCase();
148
+ const parts = path.split("/");
149
+ const name = parts.at(-1) ?? path;
150
+ if (entry.sizeBytes > limits.maxIndexedFileBytes)
151
+ return "oversized";
152
+ if (parts.some((part) => SEARCH_IGNORED_DIRECTORIES.has(part)))
153
+ return "ignored";
154
+ if (parts.some((part) => SECRET_DIRECTORIES.has(part)) || isSecretFileName(name))
155
+ return "secret";
156
+ if (!isTextContent(entry))
157
+ return "binary";
158
+ return undefined;
159
+ }
160
+ export function chunkWorkspaceText(text, limits = DEFAULT_WORKSPACE_SEARCH_LIMITS) {
161
+ if (!text)
162
+ return [];
163
+ const lines = text.split("\n");
164
+ const chunks = [];
165
+ let start = 0;
166
+ while (start < lines.length) {
167
+ let end = start;
168
+ let chars = 0;
169
+ while (end < lines.length) {
170
+ const next = lines[end] ?? "";
171
+ if (end > start && chars + next.length + 1 > limits.maxChunkChars)
172
+ break;
173
+ chars += next.length + (end > start ? 1 : 0);
174
+ end += 1;
175
+ if (chars >= limits.maxChunkChars)
176
+ break;
177
+ }
178
+ if (end === start)
179
+ end += 1;
180
+ const content = lines.slice(start, end).join("\n").slice(0, limits.maxChunkChars);
181
+ chunks.push({ startLine: start + 1, endLine: end, content });
182
+ if (end >= lines.length)
183
+ break;
184
+ start = Math.max(start + 1, end - limits.chunkOverlapLines);
185
+ }
186
+ return chunks;
187
+ }
188
+ export function workspaceSearchTerms(query) {
189
+ return [...new Set(query.toLowerCase().match(/[\p{L}\p{N}_-]+/gu) ?? [])];
190
+ }
191
+ export function workspaceLexicalScore(path, content, terms) {
192
+ if (terms.length === 0)
193
+ return 0;
194
+ const normalizedPath = path.toLowerCase();
195
+ const normalizedContent = content.toLowerCase();
196
+ let score = 0;
197
+ for (const term of terms) {
198
+ if (normalizedPath.includes(term))
199
+ score += 3;
200
+ let index = normalizedContent.indexOf(term);
201
+ while (index >= 0) {
202
+ score += 1;
203
+ index = normalizedContent.indexOf(term, index + Math.max(1, term.length));
204
+ }
205
+ }
206
+ return score;
207
+ }
208
+ async function verifiedBlob(blob, entry) {
209
+ const value = await blob.get(entry.blobKey);
210
+ if (!value)
211
+ throw new Error(`Workspace content blob is missing: ${entry.blobKey}`);
212
+ const bytes = Buffer.from(value);
213
+ if (bytes.byteLength !== entry.sizeBytes || createHash("sha256").update(bytes).digest("hex") !== entry.sha256) {
214
+ throw new Error(`Workspace content failed integrity verification: ${entry.path}`);
215
+ }
216
+ return bytes;
217
+ }
218
+ async function embedWorkspaceText(provider, text, purpose, metadata) {
219
+ const bounded = text.slice(0, Math.max(1, provider.maxInputTokens ?? 2_000) * 4);
220
+ const output = await provider.embed({ text: bounded, purpose, model: provider.model, metadata });
221
+ return { embedding: output.embedding.filter(Number.isFinite), model: output.model ?? provider.model };
222
+ }
223
+ function cosineSimilarity(left, right) {
224
+ if (left.length === 0 || left.length !== right.length)
225
+ return 0;
226
+ let dot = 0;
227
+ let leftMagnitude = 0;
228
+ let rightMagnitude = 0;
229
+ for (let index = 0; index < left.length; index += 1) {
230
+ const a = left[index] ?? 0;
231
+ const b = right[index] ?? 0;
232
+ dot += a * b;
233
+ leftMagnitude += a * a;
234
+ rightMagnitude += b * b;
235
+ }
236
+ if (leftMagnitude === 0 || rightMagnitude === 0)
237
+ return 0;
238
+ return dot / (Math.sqrt(leftMagnitude) * Math.sqrt(rightMagnitude));
239
+ }
240
+ function searchChunkId(workspaceId, versionId, path, startLine, content) {
241
+ return createHash("sha256").update(`${workspaceId}\u0000${versionId}\u0000${path}\u0000${startLine}\u0000${content}`).digest("hex");
242
+ }
243
+ function boundedLimit(value) {
244
+ return Math.max(1, Math.min(100, Math.floor(value ?? 8)));
245
+ }
246
+ function isTextContent(entry) {
247
+ if (entry.contentType.startsWith("text/") || entry.contentType === "application/json")
248
+ return true;
249
+ return SEARCHABLE_EXTENSIONS.some((extension) => entry.path.toLowerCase().endsWith(extension));
250
+ }
251
+ function isSecretFileName(name) {
252
+ return name === ".env" || name.startsWith(".env.") || name === ".npmrc" || name === ".pypirc" || name === ".netrc" ||
253
+ /^(?:credentials|secrets?)(?:\.|$)/u.test(name) || /\.(?:pem|key|p12|pfx|keystore)$/u.test(name);
254
+ }
255
+ const SEARCH_IGNORED_DIRECTORIES = new Set([".git", "node_modules", "vendor", "dist", "build", "coverage", ".next", ".cache"]);
256
+ const SECRET_DIRECTORIES = new Set([".ssh", ".aws", ".gnupg"]);
257
+ const SEARCHABLE_EXTENSIONS = [
258
+ ".md", ".mdx", ".txt", ".json", ".jsonl", ".yaml", ".yml", ".toml", ".ini", ".cfg", ".conf",
259
+ ".csv", ".tsv", ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".css", ".scss", ".html", ".xml",
260
+ ".sh", ".bash", ".zsh", ".py", ".rb", ".go", ".rs", ".java", ".kt", ".swift", ".sql", ".graphql"
261
+ ];
262
+ //# sourceMappingURL=workspace-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-search.js","sourceRoot":"","sources":["../src/workspace-search.ts"],"names":[],"mappings":"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"}