@vercel/factory 0.0.14 → 0.0.16

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 (510) hide show
  1. package/CHANGELOG.md +356 -0
  2. package/README.md +96 -2
  3. package/dist/agent-routes.d.mts +113 -0
  4. package/dist/agent-routes.mjs +91 -0
  5. package/dist/agent-routes.mjs.map +1 -0
  6. package/dist/api-contracts.d.mts +1768 -0
  7. package/dist/api-contracts.mjs +119 -0
  8. package/dist/api-contracts.mjs.map +1 -0
  9. package/dist/api-images.d.mts +30 -0
  10. package/dist/api-images.mjs +28 -0
  11. package/dist/api-images.mjs.map +1 -0
  12. package/dist/api-task-graph.mjs +57 -0
  13. package/dist/api-task-graph.mjs.map +1 -0
  14. package/dist/api.d.mts +111 -216
  15. package/dist/api.mjs +1063 -99
  16. package/dist/api.mjs.map +1 -1
  17. package/dist/approval-access.d.mts +39 -0
  18. package/dist/approval-access.mjs +62 -0
  19. package/dist/approval-access.mjs.map +1 -0
  20. package/dist/approval-contracts.d.mts +698 -0
  21. package/dist/approval-contracts.mjs +27 -0
  22. package/dist/approval-contracts.mjs.map +1 -0
  23. package/dist/approval.d.mts +49 -0
  24. package/dist/approval.mjs +39 -0
  25. package/dist/approval.mjs.map +1 -0
  26. package/dist/blob/artifacts.d.mts +37 -0
  27. package/dist/blob/artifacts.mjs +45 -0
  28. package/dist/blob/artifacts.mjs.map +1 -0
  29. package/dist/blob/index.d.mts +84 -12
  30. package/dist/blob/index.mjs +179 -45
  31. package/dist/blob/index.mjs.map +1 -1
  32. package/dist/budget.d.mts +115 -0
  33. package/dist/budget.mjs +147 -0
  34. package/dist/budget.mjs.map +1 -0
  35. package/dist/budgets.d.mts +4 -0
  36. package/dist/budgets.mjs +4 -0
  37. package/dist/build-factory.d.mts +7 -4
  38. package/dist/build-factory.mjs +2 -1
  39. package/dist/build-factory.mjs.map +1 -1
  40. package/dist/change-verification/brief.d.mts +9 -0
  41. package/dist/change-verification/brief.mjs +13 -0
  42. package/dist/change-verification/brief.mjs.map +1 -0
  43. package/dist/change-verification/dispatch.d.mts +37 -0
  44. package/dist/change-verification/dispatch.mjs +83 -0
  45. package/dist/change-verification/dispatch.mjs.map +1 -0
  46. package/dist/change-verification/eve-tool.d.mts +61 -0
  47. package/dist/change-verification/eve-tool.mjs +89 -0
  48. package/dist/change-verification/eve-tool.mjs.map +1 -0
  49. package/dist/change-verification/result.mjs +130 -0
  50. package/dist/change-verification/result.mjs.map +1 -0
  51. package/dist/changes/eve-record-change.d.mts +56 -0
  52. package/dist/changes/eve-record-change.mjs +131 -0
  53. package/dist/changes/eve-record-change.mjs.map +1 -0
  54. package/dist/changes/presentation.d.mts +14 -0
  55. package/dist/changes.d.mts +24 -0
  56. package/dist/changes.mjs +29 -0
  57. package/dist/changes.mjs.map +1 -0
  58. package/dist/client-events.d.mts +25 -0
  59. package/dist/client-events.mjs +45 -0
  60. package/dist/client-events.mjs.map +1 -0
  61. package/dist/client-stream.d.mts +28 -0
  62. package/dist/client-stream.mjs +210 -0
  63. package/dist/client-stream.mjs.map +1 -0
  64. package/dist/client-transcript.d.mts +41 -0
  65. package/dist/client-transcript.mjs +233 -0
  66. package/dist/client-transcript.mjs.map +1 -0
  67. package/dist/client.d.mts +343 -0
  68. package/dist/client.mjs +366 -0
  69. package/dist/client.mjs.map +1 -0
  70. package/dist/code-review/contracts.d.mts +27 -0
  71. package/dist/code-review/eve-post-review.d.mts +70 -0
  72. package/dist/code-review/eve-post-review.mjs +195 -0
  73. package/dist/code-review/eve-post-review.mjs.map +1 -0
  74. package/dist/code-review/eve-review-comments.d.mts +75 -0
  75. package/dist/code-review/eve-review-comments.mjs +193 -0
  76. package/dist/code-review/eve-review-comments.mjs.map +1 -0
  77. package/dist/code-review/github-contracts.d.mts +10 -0
  78. package/dist/code-review/github-reporter.d.mts +46 -0
  79. package/dist/code-review/github-reporter.mjs +262 -0
  80. package/dist/code-review/github-reporter.mjs.map +1 -0
  81. package/dist/code-review/preparation.d.mts +34 -0
  82. package/dist/code-review/preparation.mjs +23 -0
  83. package/dist/code-review/preparation.mjs.map +1 -0
  84. package/dist/code-review/stall.d.mts +17 -0
  85. package/dist/code-review/stall.mjs +30 -0
  86. package/dist/code-review/stall.mjs.map +1 -0
  87. package/dist/code-review.d.mts +7 -0
  88. package/dist/code-review.mjs +5 -0
  89. package/dist/communication.d.mts +9 -0
  90. package/dist/communication.mjs +9 -0
  91. package/dist/connectors/github.d.mts +26 -0
  92. package/dist/connectors/github.mjs +55 -0
  93. package/dist/connectors/github.mjs.map +1 -0
  94. package/dist/connectors/index.d.mts +35 -3
  95. package/dist/connectors/index.mjs +3 -52
  96. package/dist/connectors/index.mjs.map +1 -1
  97. package/dist/connectors/outbox.d.mts +34 -0
  98. package/dist/connectors/outbox.mjs +50 -0
  99. package/dist/connectors/outbox.mjs.map +1 -0
  100. package/dist/connectors/slack-approval-blocks.mjs +136 -0
  101. package/dist/connectors/slack-approval-blocks.mjs.map +1 -0
  102. package/dist/connectors/slack-approvals.d.mts +29 -0
  103. package/dist/connectors/slack-approvals.mjs +346 -0
  104. package/dist/connectors/slack-approvals.mjs.map +1 -0
  105. package/dist/connectors/slack.d.mts +35 -52
  106. package/dist/connectors/slack.mjs +13 -85
  107. package/dist/connectors/slack.mjs.map +1 -1
  108. package/dist/deepsec/eve-tool.d.mts +110 -0
  109. package/dist/deepsec/eve-tool.mjs +166 -0
  110. package/dist/deepsec/eve-tool.mjs.map +1 -0
  111. package/dist/deepsec/finding.d.mts +84 -0
  112. package/dist/deepsec/finding.mjs +56 -0
  113. package/dist/deepsec/finding.mjs.map +1 -0
  114. package/dist/deepsec.d.mts +3 -0
  115. package/dist/delivery-metrics/metrics.d.mts +93 -0
  116. package/dist/delivery-metrics/metrics.mjs +200 -0
  117. package/dist/delivery-metrics/metrics.mjs.map +1 -0
  118. package/dist/delivery-metrics.d.mts +2 -0
  119. package/dist/delivery-metrics.mjs +2 -0
  120. package/dist/dispatch.d.mts +152 -0
  121. package/dist/dispatch.mjs +199 -0
  122. package/dist/dispatch.mjs.map +1 -0
  123. package/dist/errors.d.mts +15 -0
  124. package/dist/errors.mjs +38 -0
  125. package/dist/errors.mjs.map +1 -0
  126. package/dist/eve/index.d.mts +209 -1277
  127. package/dist/eve/index.mjs +312 -1073
  128. package/dist/eve/index.mjs.map +1 -1
  129. package/dist/eve/invoke.d.mts +144 -0
  130. package/dist/eve/invoke.mjs +254 -0
  131. package/dist/eve/invoke.mjs.map +1 -0
  132. package/dist/eve/session-client.d.mts +186 -0
  133. package/dist/eve/session-client.mjs +245 -0
  134. package/dist/eve/session-client.mjs.map +1 -0
  135. package/dist/eve/task-execution.d.mts +380 -0
  136. package/dist/eve/task-execution.mjs +73 -0
  137. package/dist/eve/task-execution.mjs.map +1 -0
  138. package/dist/eve/task-session.d.mts +129 -0
  139. package/dist/eve/task-session.mjs +245 -0
  140. package/dist/eve/task-session.mjs.map +1 -0
  141. package/dist/eve/transcript.d.mts +37 -0
  142. package/dist/eve/transcript.mjs +69 -0
  143. package/dist/eve/transcript.mjs.map +1 -0
  144. package/dist/execution-public.d.mts +8 -0
  145. package/dist/execution-public.mjs +7 -0
  146. package/dist/execution.d.mts +183 -0
  147. package/dist/execution.mjs +223 -0
  148. package/dist/execution.mjs.map +1 -0
  149. package/dist/finding-remediation/admission.d.mts +53 -0
  150. package/dist/finding-remediation/admission.mjs +90 -0
  151. package/dist/finding-remediation/admission.mjs.map +1 -0
  152. package/dist/finding-remediation/brief.d.mts +14 -0
  153. package/dist/finding-remediation/brief.mjs +25 -0
  154. package/dist/finding-remediation/brief.mjs.map +1 -0
  155. package/dist/finding-remediation/eve-tool.d.mts +29 -0
  156. package/dist/finding-remediation/eve-tool.mjs +34 -0
  157. package/dist/finding-remediation/eve-tool.mjs.map +1 -0
  158. package/dist/findings/fingerprint.d.mts +14 -0
  159. package/dist/findings/fingerprint.mjs +28 -0
  160. package/dist/findings/fingerprint.mjs.map +1 -0
  161. package/dist/findings.d.mts +7 -0
  162. package/dist/findings.mjs +6 -0
  163. package/dist/github-app.d.mts +54 -0
  164. package/dist/github-app.mjs +121 -0
  165. package/dist/github-app.mjs.map +1 -0
  166. package/dist/github-publication.d.mts +199 -0
  167. package/dist/github-publication.mjs +442 -0
  168. package/dist/github-publication.mjs.map +1 -0
  169. package/dist/github-transfer.d.mts +81 -0
  170. package/dist/github-transfer.mjs +273 -0
  171. package/dist/github-transfer.mjs.map +1 -0
  172. package/dist/github.d.mts +446 -2
  173. package/dist/github.mjs +357 -56
  174. package/dist/github.mjs.map +1 -1
  175. package/dist/image-input.d.mts +51 -0
  176. package/dist/image-input.mjs +63 -0
  177. package/dist/image-input.mjs.map +1 -0
  178. package/dist/inbox-activity.d.mts +53 -0
  179. package/dist/inbox-activity.mjs +41 -0
  180. package/dist/inbox-activity.mjs.map +1 -0
  181. package/dist/index.d.mts +16 -484
  182. package/dist/index.mjs +15 -522
  183. package/dist/intake-contracts.d.mts +55 -0
  184. package/dist/intake-contracts.mjs +33 -0
  185. package/dist/intake-contracts.mjs.map +1 -0
  186. package/dist/integrations/deepsec.d.mts +5 -0
  187. package/dist/integrations/deepsec.mjs +3 -0
  188. package/dist/integrations/github.d.mts +11 -0
  189. package/dist/integrations/github.mjs +9 -0
  190. package/dist/integrations/slack.d.mts +5 -0
  191. package/dist/integrations/slack.mjs +5 -0
  192. package/dist/integrations/vercel.d.mts +5 -0
  193. package/dist/integrations/vercel.mjs +4 -0
  194. package/dist/merge-resolution/contracts.d.mts +17 -0
  195. package/dist/merge-resolution/contracts.mjs +19 -0
  196. package/dist/merge-resolution/contracts.mjs.map +1 -0
  197. package/dist/merge-resolution/eve-tools.d.mts +47 -0
  198. package/dist/merge-resolution/eve-tools.mjs +122 -0
  199. package/dist/merge-resolution/eve-tools.mjs.map +1 -0
  200. package/dist/model-settings.d.mts +41 -0
  201. package/dist/model-settings.mjs +35 -0
  202. package/dist/model-settings.mjs.map +1 -0
  203. package/dist/multi-repository-changes/coordination.d.mts +49 -0
  204. package/dist/multi-repository-changes/coordination.mjs +115 -0
  205. package/dist/multi-repository-changes/coordination.mjs.map +1 -0
  206. package/dist/planning/cancellation.mjs +82 -0
  207. package/dist/planning/cancellation.mjs.map +1 -0
  208. package/dist/planning/configuration.d.mts +23 -0
  209. package/dist/planning/configuration.mjs +56 -0
  210. package/dist/planning/configuration.mjs.map +1 -0
  211. package/dist/planning/contracts.d.mts +136 -0
  212. package/dist/planning/contracts.mjs +42 -0
  213. package/dist/planning/contracts.mjs.map +1 -0
  214. package/dist/planning/dependencies.mjs +44 -0
  215. package/dist/planning/dependencies.mjs.map +1 -0
  216. package/dist/planning/effects.mjs +122 -0
  217. package/dist/planning/effects.mjs.map +1 -0
  218. package/dist/planning/reconcile.mjs +279 -0
  219. package/dist/planning/reconcile.mjs.map +1 -0
  220. package/dist/planning/runtime.d.mts +27 -0
  221. package/dist/planning/runtime.mjs +25 -0
  222. package/dist/planning/runtime.mjs.map +1 -0
  223. package/dist/planning/state.mjs +92 -0
  224. package/dist/planning/state.mjs.map +1 -0
  225. package/dist/planning/turns.mjs +262 -0
  226. package/dist/planning/turns.mjs.map +1 -0
  227. package/dist/planning/validation.mjs +106 -0
  228. package/dist/planning/validation.mjs.map +1 -0
  229. package/dist/postgres/index.d.mts +48 -1
  230. package/dist/postgres/index.mjs +45 -3
  231. package/dist/postgres/index.mjs.map +1 -1
  232. package/dist/presets/software-development/approval.d.mts +14 -0
  233. package/dist/presets/software-development/approval.mjs +21 -0
  234. package/dist/presets/software-development/approval.mjs.map +1 -0
  235. package/dist/presets/software-development/deepsec-brief.d.mts +8 -0
  236. package/dist/presets/software-development/deepsec-brief.mjs +14 -0
  237. package/dist/presets/software-development/deepsec-brief.mjs.map +1 -0
  238. package/dist/presets/software-development/dispatch.d.mts +56 -0
  239. package/dist/presets/software-development/dispatch.mjs +67 -0
  240. package/dist/presets/software-development/dispatch.mjs.map +1 -0
  241. package/dist/presets/software-development/eve-delegation-policy.d.mts +7 -0
  242. package/dist/presets/software-development/eve-delegation-policy.mjs +34 -0
  243. package/dist/presets/software-development/eve-delegation-policy.mjs.map +1 -0
  244. package/dist/presets/software-development/eve.d.mts +18 -0
  245. package/dist/presets/software-development/eve.mjs +19 -0
  246. package/dist/presets/software-development/eve.mjs.map +1 -0
  247. package/dist/presets/software-development/finish-task-policy.d.mts +7 -0
  248. package/dist/presets/software-development/finish-task-policy.mjs +9 -0
  249. package/dist/presets/software-development/finish-task-policy.mjs.map +1 -0
  250. package/dist/presets/software-development/recovery.d.mts +32 -0
  251. package/dist/presets/software-development/recovery.mjs +120 -0
  252. package/dist/presets/software-development/recovery.mjs.map +1 -0
  253. package/dist/presets/software-development/task-communication.d.mts +24 -0
  254. package/dist/presets/software-development/task-communication.mjs +157 -0
  255. package/dist/presets/software-development/task-communication.mjs.map +1 -0
  256. package/dist/presets/software-development.d.mts +10 -0
  257. package/dist/presets/software-development.mjs +9 -0
  258. package/dist/pull-requests/contracts.d.mts +72 -0
  259. package/dist/pull-requests/eve-fetch.d.mts +57 -0
  260. package/dist/pull-requests/eve-fetch.mjs +151 -0
  261. package/dist/pull-requests/eve-fetch.mjs.map +1 -0
  262. package/dist/pull-requests/github-label-manager.d.mts +27 -0
  263. package/dist/pull-requests/github-label-manager.mjs +40 -0
  264. package/dist/pull-requests/github-label-manager.mjs.map +1 -0
  265. package/dist/pull-requests/github-publisher.d.mts +67 -0
  266. package/dist/pull-requests/github-publisher.mjs +405 -0
  267. package/dist/pull-requests/github-publisher.mjs.map +1 -0
  268. package/dist/pull-requests.d.mts +6 -0
  269. package/dist/pull-requests.mjs +4 -0
  270. package/dist/receipts.d.mts +4 -0
  271. package/dist/receipts.mjs +3 -0
  272. package/dist/repositories.d.mts +18 -0
  273. package/dist/repositories.mjs +33 -0
  274. package/dist/repositories.mjs.map +1 -0
  275. package/dist/sandbox/command.d.mts +18 -0
  276. package/dist/sandbox/execution-abort.d.mts +16 -0
  277. package/dist/sandbox/execution-abort.mjs +49 -0
  278. package/dist/sandbox/execution-abort.mjs.map +1 -0
  279. package/dist/sandbox/execution-environment.d.mts +25 -0
  280. package/dist/sandbox/execution-run-ledger.d.mts +115 -0
  281. package/dist/sandbox/execution-run-ledger.mjs +209 -0
  282. package/dist/sandbox/execution-run-ledger.mjs.map +1 -0
  283. package/dist/sandbox/execution.d.mts +54 -0
  284. package/dist/sandbox/execution.mjs +228 -0
  285. package/dist/sandbox/execution.mjs.map +1 -0
  286. package/dist/sandbox/harness-runner.d.mts +79 -0
  287. package/dist/sandbox/harness-runner.mjs +162 -0
  288. package/dist/sandbox/harness-runner.mjs.map +1 -0
  289. package/dist/sandbox/index.d.mts +10 -0
  290. package/dist/sandbox/index.mjs +7 -0
  291. package/dist/sandbox/task-environment.d.mts +50 -0
  292. package/dist/sandbox/task-environment.mjs +140 -0
  293. package/dist/sandbox/task-environment.mjs.map +1 -0
  294. package/dist/sandbox/workspace.d.mts +29 -0
  295. package/dist/sandbox/workspace.mjs +28 -0
  296. package/dist/sandbox/workspace.mjs.map +1 -0
  297. package/dist/schema/agent-route.d.mts +40 -0
  298. package/dist/schema/agent-route.mjs +33 -0
  299. package/dist/schema/agent-route.mjs.map +1 -0
  300. package/dist/schema/answer.d.mts +23 -0
  301. package/dist/schema/answer.mjs +21 -0
  302. package/dist/schema/answer.mjs.map +1 -0
  303. package/dist/schema/budget.d.mts +38 -0
  304. package/dist/schema/budget.mjs +30 -0
  305. package/dist/schema/budget.mjs.map +1 -0
  306. package/dist/schema/catalog.mjs +72 -0
  307. package/dist/schema/catalog.mjs.map +1 -0
  308. package/dist/schema/change.d.mts +117 -0
  309. package/dist/schema/change.mjs +68 -0
  310. package/dist/schema/change.mjs.map +1 -0
  311. package/dist/schema/common.d.mts +33 -0
  312. package/dist/{id-BLIkCVue.mjs → schema/common.mjs} +7 -16
  313. package/dist/schema/common.mjs.map +1 -0
  314. package/dist/schema/communication.d.mts +52 -0
  315. package/dist/{communication-Kd9nU5RP.mjs → schema/communication.mjs} +8 -3
  316. package/dist/schema/communication.mjs.map +1 -0
  317. package/dist/schema/execution.d.mts +101 -0
  318. package/dist/schema/execution.mjs +86 -0
  319. package/dist/schema/execution.mjs.map +1 -0
  320. package/dist/schema/factory-config.d.mts +122 -0
  321. package/dist/schema/factory-config.mjs +90 -0
  322. package/dist/schema/factory-config.mjs.map +1 -0
  323. package/dist/schema/finding.d.mts +125 -0
  324. package/dist/schema/finding.mjs +67 -0
  325. package/dist/schema/finding.mjs.map +1 -0
  326. package/dist/schema/id.d.mts +43 -0
  327. package/dist/schema/id.mjs +32 -0
  328. package/dist/schema/id.mjs.map +1 -0
  329. package/dist/schema/outbox.d.mts +240 -0
  330. package/dist/schema/outbox.mjs +53 -0
  331. package/dist/schema/outbox.mjs.map +1 -0
  332. package/dist/schema/question-route.mjs +16 -0
  333. package/dist/schema/question-route.mjs.map +1 -0
  334. package/dist/schema/receipt.d.mts +81 -0
  335. package/dist/schema/receipt.mjs +94 -0
  336. package/dist/schema/receipt.mjs.map +1 -0
  337. package/dist/schema/repository.d.mts +30 -0
  338. package/dist/schema/repository.mjs +29 -0
  339. package/dist/schema/repository.mjs.map +1 -0
  340. package/dist/schema/session.d.mts +136 -0
  341. package/dist/schema/session.mjs +54 -0
  342. package/dist/schema/session.mjs.map +1 -0
  343. package/dist/schema/signal.d.mts +105 -0
  344. package/dist/schema/signal.mjs +81 -0
  345. package/dist/schema/signal.mjs.map +1 -0
  346. package/dist/schema/slack-pr-notifications.d.mts +12 -0
  347. package/dist/schema/slack-pr-notifications.mjs +11 -0
  348. package/dist/schema/slack-pr-notifications.mjs.map +1 -0
  349. package/dist/schema/stored-session.mjs +10 -0
  350. package/dist/schema/stored-session.mjs.map +1 -0
  351. package/dist/schema/stored-task.mjs +20 -0
  352. package/dist/schema/stored-task.mjs.map +1 -0
  353. package/dist/schema/task-effect.d.mts +39 -0
  354. package/dist/schema/task-effect.mjs +29 -0
  355. package/dist/schema/task-effect.mjs.map +1 -0
  356. package/dist/schema/task-graph.d.mts +3173 -0
  357. package/dist/schema/task-graph.mjs +97 -0
  358. package/dist/schema/task-graph.mjs.map +1 -0
  359. package/dist/schema/task-message.d.mts +254 -0
  360. package/dist/schema/task-message.mjs +189 -0
  361. package/dist/schema/task-message.mjs.map +1 -0
  362. package/dist/schema/task.d.mts +273 -0
  363. package/dist/schema/task.mjs +200 -0
  364. package/dist/schema/task.mjs.map +1 -0
  365. package/dist/schema/transcript.d.mts +176 -0
  366. package/dist/schema/transcript.mjs +87 -0
  367. package/dist/schema/transcript.mjs.map +1 -0
  368. package/dist/schema/transitions.d.mts +50 -0
  369. package/dist/schema/transitions.mjs +303 -0
  370. package/dist/schema/transitions.mjs.map +1 -0
  371. package/dist/schema/work.d.mts +150 -0
  372. package/dist/schema/work.mjs +102 -0
  373. package/dist/schema/work.mjs.map +1 -0
  374. package/dist/session-previews.d.mts +76 -0
  375. package/dist/session-previews.mjs +55 -0
  376. package/dist/session-previews.mjs.map +1 -0
  377. package/dist/session-review.d.mts +120 -0
  378. package/dist/session-review.mjs +79 -0
  379. package/dist/session-review.mjs.map +1 -0
  380. package/dist/signal-triage.d.mts +20 -0
  381. package/dist/signal-triage.mjs +85 -0
  382. package/dist/signal-triage.mjs.map +1 -0
  383. package/dist/signals.d.mts +20 -0
  384. package/dist/signals.mjs +19 -0
  385. package/dist/signals.mjs.map +1 -0
  386. package/dist/stall.d.mts +41 -0
  387. package/dist/stall.mjs +83 -0
  388. package/dist/stall.mjs.map +1 -0
  389. package/dist/storage.d.mts +4 -0
  390. package/dist/storage.mjs +4 -0
  391. package/dist/store/driver.d.mts +65 -0
  392. package/dist/store/driver.mjs +42 -0
  393. package/dist/store/driver.mjs.map +1 -0
  394. package/dist/store/engine.d.mts +683 -0
  395. package/dist/store/engine.mjs +2309 -0
  396. package/dist/store/engine.mjs.map +1 -0
  397. package/dist/store/memory.d.mts +24 -0
  398. package/dist/store/memory.mjs +69 -0
  399. package/dist/store/memory.mjs.map +1 -0
  400. package/dist/store/slack-pr-notifications.d.mts +44 -0
  401. package/dist/store/slack-pr-notifications.mjs +121 -0
  402. package/dist/store/slack-pr-notifications.mjs.map +1 -0
  403. package/dist/store/task-effects.d.mts +38 -0
  404. package/dist/store/task-effects.mjs +118 -0
  405. package/dist/store/task-effects.mjs.map +1 -0
  406. package/dist/store/task-graphs.d.mts +60 -0
  407. package/dist/store/task-graphs.mjs +212 -0
  408. package/dist/store/task-graphs.mjs.map +1 -0
  409. package/dist/store/task-messages.d.mts +136 -0
  410. package/dist/store/task-messages.mjs +475 -0
  411. package/dist/store/task-messages.mjs.map +1 -0
  412. package/dist/store/task-work.d.mts +180 -0
  413. package/dist/store/task-work.mjs +137 -0
  414. package/dist/store/task-work.mjs.map +1 -0
  415. package/dist/store/work-notifications.d.mts +19 -0
  416. package/dist/store/work-notifications.mjs +48 -0
  417. package/dist/store/work-notifications.mjs.map +1 -0
  418. package/dist/sweep.d.mts +79 -0
  419. package/dist/sweep.mjs +171 -0
  420. package/dist/sweep.mjs.map +1 -0
  421. package/dist/task-communication.d.mts +35 -0
  422. package/dist/task-communication.mjs +47 -0
  423. package/dist/task-communication.mjs.map +1 -0
  424. package/dist/task-graph-view.d.mts +267 -0
  425. package/dist/task-graph-view.mjs +17 -0
  426. package/dist/task-graph-view.mjs.map +1 -0
  427. package/dist/task-message-processing.d.mts +60 -0
  428. package/dist/task-message-processing.mjs +200 -0
  429. package/dist/task-message-processing.mjs.map +1 -0
  430. package/dist/task-protocols.d.mts +80 -0
  431. package/dist/task-protocols.mjs +47 -0
  432. package/dist/task-protocols.mjs.map +1 -0
  433. package/dist/tasks.d.mts +17 -0
  434. package/dist/tasks.mjs +17 -0
  435. package/dist/vercel-git.d.mts +53 -0
  436. package/dist/vercel-git.mjs +344 -0
  437. package/dist/vercel-git.mjs.map +1 -0
  438. package/dist/vercel-github-api.d.mts +103 -0
  439. package/dist/vercel-github-api.mjs +363 -0
  440. package/dist/vercel-github-api.mjs.map +1 -0
  441. package/dist/vercel.d.mts +34 -2
  442. package/dist/vercel.mjs +49 -3
  443. package/dist/vercel.mjs.map +1 -1
  444. package/dist/work-triage/eve-tool.d.mts +29 -0
  445. package/dist/work-triage/eve-tool.mjs +32 -0
  446. package/dist/work-triage/eve-tool.mjs.map +1 -0
  447. package/dist/work-triage/find-existing-work.d.mts +32 -0
  448. package/dist/work-triage/find-existing-work.mjs +31 -0
  449. package/dist/work-triage/find-existing-work.mjs.map +1 -0
  450. package/dist/work-triage/github.d.mts +15 -0
  451. package/dist/work-triage/github.mjs +14 -0
  452. package/dist/work-triage/github.mjs.map +1 -0
  453. package/dist/work-triage.d.mts +4 -0
  454. package/dist/work-triage.mjs +3 -0
  455. package/dist/workflows.d.mts +146 -0
  456. package/dist/workflows.mjs +139 -0
  457. package/dist/workflows.mjs.map +1 -0
  458. package/dist/workspace-diff-assembly.d.mts +33 -0
  459. package/dist/workspace-diff-assembly.mjs +95 -0
  460. package/dist/workspace-diff-assembly.mjs.map +1 -0
  461. package/dist/workspace-diff.d.mts +90 -0
  462. package/dist/workspace-diff.mjs +61 -0
  463. package/dist/workspace-diff.mjs.map +1 -0
  464. package/dist/workspace-files-git.d.mts +15 -0
  465. package/dist/workspace-files-git.mjs +61 -0
  466. package/dist/workspace-files-git.mjs.map +1 -0
  467. package/dist/workspace-files.d.mts +107 -0
  468. package/dist/workspace-files.mjs +74 -0
  469. package/dist/workspace-files.mjs.map +1 -0
  470. package/dist/workspace-snapshot.d.mts +26 -0
  471. package/dist/workspace-snapshot.mjs +80 -0
  472. package/dist/workspace-snapshot.mjs.map +1 -0
  473. package/docs/getting-started.md +104 -0
  474. package/docs/index.md +100 -0
  475. package/docs/recipes/cancellation.md +215 -0
  476. package/docs/recipes/custom-workflow.md +153 -0
  477. package/docs/recipes/dependent-tasks.md +207 -0
  478. package/docs/recipes/eve-agent.md +277 -0
  479. package/docs/recipes/human-input.md +204 -0
  480. package/docs/recipes/persistence-recovery.md +268 -0
  481. package/docs/recipes/retry-recovery.md +241 -0
  482. package/docs/recipes/task-messaging.md +215 -0
  483. package/docs/recipes/typed-eve-result.md +161 -0
  484. package/docs/runtime-integration.md +137 -0
  485. package/package.json +142 -46
  486. package/dist/approval-JX2Px9IC.mjs +0 -132
  487. package/dist/approval-JX2Px9IC.mjs.map +0 -1
  488. package/dist/budget-DzSiIA4t.mjs +0 -42
  489. package/dist/budget-DzSiIA4t.mjs.map +0 -1
  490. package/dist/change-D2U6v7Ek.mjs +0 -554
  491. package/dist/change-D2U6v7Ek.mjs.map +0 -1
  492. package/dist/communication-Kd9nU5RP.mjs.map +0 -1
  493. package/dist/coordination-Cq08hb1l.mjs +0 -76
  494. package/dist/coordination-Cq08hb1l.mjs.map +0 -1
  495. package/dist/dispatch-BaZS3PT8.d.mts +0 -76
  496. package/dist/driver-BC0Mt5KG.d.mts +0 -34
  497. package/dist/driver-Bbd25rNM.mjs +0 -23
  498. package/dist/driver-Bbd25rNM.mjs.map +0 -1
  499. package/dist/engine-DFHU2Pe-.d.mts +0 -781
  500. package/dist/engine-WaUM2cGA.mjs +0 -1068
  501. package/dist/engine-WaUM2cGA.mjs.map +0 -1
  502. package/dist/factory-config-BoRXOw43.mjs +0 -50
  503. package/dist/factory-config-BoRXOw43.mjs.map +0 -1
  504. package/dist/factory-config-D2yU3G0c.d.mts +0 -58
  505. package/dist/github-C5HNBN6p.d.mts +0 -279
  506. package/dist/id-BLIkCVue.mjs.map +0 -1
  507. package/dist/index-Bw6hggoH.d.mts +0 -40
  508. package/dist/index.mjs.map +0 -1
  509. package/dist/task-CcOyOJ3k.mjs +0 -154
  510. package/dist/task-CcOyOJ3k.mjs.map +0 -1
@@ -0,0 +1,119 @@
1
+ import { changeIdSchema, repositoryIdSchema, taskIdSchema } from "./schema/id.mjs";
2
+ import { repositorySlugSchema } from "./schema/repository.mjs";
3
+ import { agentRouteBindingSchema } from "./schema/agent-route.mjs";
4
+ import { executionReferenceSchema, taskSchema } from "./schema/task.mjs";
5
+ import { hasMessageContent, imageAttachmentsSchema } from "./image-input.mjs";
6
+ import { agentSessionIdSchema, agentSessionMessageSchema, agentSessionSchema } from "./schema/session.mjs";
7
+ import { z } from "zod";
8
+ //#region src/api-contracts.ts
9
+ /** Validates an agent exposed by the operator API. */
10
+ const apiAgentSchema = z.strictObject({
11
+ id: z.string().regex(/^[a-z][a-z0-9-]{0,31}$/u).describe("Agent name used for discovery, filtering, and session creation when allowed."),
12
+ description: z.string().describe("What this agent does."),
13
+ route: agentRouteBindingSchema.optional().describe("Exact registered specialist route; absent for conversations."),
14
+ canStart: z.boolean().describe("Whether an operator may start this agent directly through the session API."),
15
+ requiresRepository: z.boolean().describe("Whether creation requires a configured repository."),
16
+ requiresChange: z.boolean().describe("Whether creation requires an existing change ID.")
17
+ });
18
+ /** Validates an idempotent request to create an operator session. */
19
+ const createSessionRequestSchema = z.strictObject({
20
+ operationId: z.string().trim().min(1).max(200).describe("Client-generated idempotency key; retain when retrying creation."),
21
+ agent: apiAgentSchema.shape.id,
22
+ model: z.string().trim().min(1).max(200).optional().describe("Explicit supported model; absent uses the repository or application default."),
23
+ repository: repositorySlugSchema.optional().describe("Configured owner/repo slug."),
24
+ changeId: changeIdSchema.optional().describe("Existing change to review, verify, or continue."),
25
+ message: agentSessionMessageSchema,
26
+ attachments: imageAttachmentsSchema.optional().describe("Uploaded images accompanying this message.")
27
+ }).refine(hasMessageContent, "Enter a message or attach an image");
28
+ /** Validates a message sent to an existing session with optimistic execution matching. */
29
+ const sendSessionMessageRequestSchema = z.strictObject({
30
+ message: agentSessionMessageSchema,
31
+ attachments: imageAttachmentsSchema.optional().describe("Uploaded images accompanying this message."),
32
+ operationId: z.string().trim().min(1).max(200).optional().describe("Required for a follow-up after completion; retain unchanged for retries."),
33
+ turnPolicy: z.enum(["steer", "queue"]).default("steer").describe("Whether an active turn is steered immediately or the message is queued."),
34
+ executionId: z.string().min(1).nullable().describe("Observed execution ID; stale writes are rejected.")
35
+ }).refine(hasMessageContent, "Enter a message or attach an image");
36
+ const sessionInputResponseBase = { requestId: z.string().min(1).describe("Pending provider input request ID.") };
37
+ /** Validates an option selection or freeform answer to one provider input request. */
38
+ const sessionInputResponseSchema = z.union([z.strictObject({
39
+ ...sessionInputResponseBase,
40
+ optionId: z.string().min(1).describe("Selected option ID."),
41
+ text: z.never().optional().describe("Absent for an option selection.")
42
+ }), z.strictObject({
43
+ ...sessionInputResponseBase,
44
+ optionId: z.never().optional().describe("Absent for a freeform answer."),
45
+ text: z.string().min(1).describe("Freeform answer text.")
46
+ })]);
47
+ /** Validates responses submitted to pending provider input requests. */
48
+ const submitSessionInputRequestSchema = z.strictObject({
49
+ executionId: z.string().min(1).describe("Observed provider session ID; stale input responses are rejected."),
50
+ inputResponses: z.array(sessionInputResponseSchema).min(1).readonly().describe("Responses to pending human-input requests.")
51
+ });
52
+ /** Validates an execution-aware session control request. */
53
+ const controlSessionRequestSchema = z.strictObject({
54
+ executionId: z.string().min(1).optional().describe("Observed provider session ID; guards against a replaced execution."),
55
+ turnId: z.string().min(1).optional().describe("Observed turn ID for cooperative interruption.")
56
+ });
57
+ /** Validates an authenticated answer to a workflow question. */
58
+ const answerSessionQuestionRequestSchema = z.strictObject({
59
+ questionId: taskIdSchema.describe("Question Task belonging to this operator session."),
60
+ answer: z.string().min(1).max(16e3).describe("Authenticated immutable human answer.")
61
+ });
62
+ /** Validates the current operator-facing projection of a Factory session. */
63
+ const sessionViewSchema = z.strictObject({
64
+ session: agentSessionSchema.describe("Durable interaction binding."),
65
+ task: taskSchema.nullable().describe("Current task state, if workflow-backed."),
66
+ dependencyTaskIds: z.array(taskIdSchema).readonly().optional().describe("Read-only current Task dependencies projected from its authoritative task graph."),
67
+ execution: executionReferenceSchema.nullable().describe("Current execution; may change after recovery."),
68
+ activeAgent: z.string().optional().describe("Agent executing the selected work in this conversation."),
69
+ source: z.string().optional().describe("Original trigger of automatically started work."),
70
+ prUrl: z.string().optional().describe("Pull request associated with the conversation."),
71
+ attention: z.enum([
72
+ "question",
73
+ "failed",
74
+ "stalled",
75
+ "review",
76
+ "conversation"
77
+ ]).optional().describe("Current human action: answer a question, inspect failed or stalled work, review a ready Change, or continue an external conversation."),
78
+ canFollowUp: z.boolean().optional().describe("Whether completed work can start a budgeted discussion in this conversation."),
79
+ hasWorkflowFailure: z.boolean().optional().describe("Whether delegated workflow work has failed, independently of a pending question."),
80
+ canCancel: z.boolean().optional().describe("Whether cancellation is available for the conversation or its delegated workflow work."),
81
+ history: z.array(z.strictObject({
82
+ taskId: taskIdSchema.optional().describe("Task owning this execution, if any."),
83
+ agent: z.string().describe("Agent that owns the provider execution."),
84
+ message: z.string().describe("Initial request displayed for this execution."),
85
+ attachments: imageAttachmentsSchema.optional().describe("Images accompanying this execution's initial user request."),
86
+ execution: executionReferenceSchema.describe("Authorized provider execution to replay.")
87
+ })).readonly().optional().describe("Earlier executions, in conversation order, including replacement attempts."),
88
+ relatedTasks: z.array(taskSchema).readonly().optional().describe("Work linked to this conversation, including specialist delegations."),
89
+ question: taskSchema.nullable().describe("Open Factory question requiring an authenticated answer.")
90
+ });
91
+ /** Validates a cursor-paginated page of operator-facing sessions. */
92
+ const sessionPageSchema = z.strictObject({
93
+ sessions: z.array(sessionViewSchema).readonly().describe("Sessions in this page."),
94
+ nextCursor: z.string().min(1).nullable().default(null).describe("Opaque cursor to pass unchanged for the next page, or null after the final page."),
95
+ totalCount: z.number().int().nonnegative().optional().describe("Total matching sessions when explicitly requested.")
96
+ });
97
+ /** Validates one configured repository exposed by the operator API. */
98
+ const repositorySummarySchema = z.strictObject({
99
+ id: repositoryIdSchema.describe("Stable configured repository identifier."),
100
+ slug: repositorySlugSchema.describe("Configured owner/repository slug.")
101
+ });
102
+ /** Validates repository slugs and their stable identifiers. */
103
+ const repositoryDetailsSchema = z.strictObject({
104
+ repositories: z.array(repositorySlugSchema).readonly().describe("Configured owner/repository slugs."),
105
+ details: z.array(repositorySummarySchema).readonly().default([]).describe("Stable identifiers and slugs for configured repositories.")
106
+ });
107
+ /** Validates a locally retained follow-up awaiting confirmed API acceptance. */
108
+ const pendingFollowUpSchema = z.strictObject({
109
+ sessionId: agentSessionIdSchema.describe("Conversation containing this follow-up."),
110
+ operationId: z.string().min(1).max(200).describe("Stable operation id retained until acceptance is confirmed."),
111
+ executionId: z.string().nullable().describe("Execution observed before sending, or null before execution starts."),
112
+ message: agentSessionMessageSchema,
113
+ attachments: imageAttachmentsSchema.optional().describe("Uploaded images accompanying this message."),
114
+ turnPolicy: z.enum(["steer", "queue"]).describe("Requested turn policy.")
115
+ }).refine(hasMessageContent, "Enter a message or attach an image");
116
+ //#endregion
117
+ export { answerSessionQuestionRequestSchema, apiAgentSchema, controlSessionRequestSchema, createSessionRequestSchema, pendingFollowUpSchema, repositoryDetailsSchema, repositorySummarySchema, sendSessionMessageRequestSchema, sessionInputResponseSchema, sessionPageSchema, sessionViewSchema, submitSessionInputRequestSchema };
118
+
119
+ //# sourceMappingURL=api-contracts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-contracts.mjs","names":[],"sources":["../src/api-contracts.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { hasMessageContent, imageAttachmentsSchema, type ImageAttachment } from \"./image-input\";\nimport {\n changeIdSchema,\n repositoryIdSchema,\n taskIdSchema,\n type ChangeId,\n type TaskId,\n} from \"./schema/id\";\nimport { repositorySlugSchema, type RepositorySlug } from \"./schema/repository\";\nimport {\n agentRouteBindingSchema,\n type AgentRouteBinding,\n type AgentRouteBindingInput,\n} from \"./schema/agent-route\";\nimport {\n agentSessionIdSchema,\n agentSessionMessageSchema,\n agentSessionSchema,\n} from \"./schema/session\";\nimport { taskSchema, executionReferenceSchema } from \"./schema/task\";\n\n/** Validates an agent exposed by the operator API. */\nexport const apiAgentSchema = z.strictObject({\n id: z\n .string()\n .regex(/^[a-z][a-z0-9-]{0,31}$/u)\n .describe(\"Agent name used for discovery, filtering, and session creation when allowed.\"),\n description: z.string().describe(\"What this agent does.\"),\n route: agentRouteBindingSchema\n .optional()\n .describe(\"Exact registered specialist route; absent for conversations.\"),\n canStart: z\n .boolean()\n .describe(\"Whether an operator may start this agent directly through the session API.\"),\n requiresRepository: z.boolean().describe(\"Whether creation requires a configured repository.\"),\n requiresChange: z.boolean().describe(\"Whether creation requires an existing change ID.\"),\n});\n/** An agent exposed for operator discovery, filtering, or session creation. */\nexport type ApiAgent = Readonly<\n Omit<z.infer<typeof apiAgentSchema>, \"route\"> & {\n readonly route?: AgentRouteBinding;\n }\n>;\n\n/** Caller input for exposing an agent through the operator API before validation and branding. */\nexport interface ApiAgentInput {\n readonly id: string;\n readonly description: string;\n readonly route?: AgentRouteBindingInput;\n readonly canStart: boolean;\n readonly requiresRepository: boolean;\n readonly requiresChange: boolean;\n}\n\n/** Validates an idempotent request to create an operator session. */\nexport const createSessionRequestSchema = z\n .strictObject({\n operationId: z\n .string()\n .trim()\n .min(1)\n .max(200)\n .describe(\"Client-generated idempotency key; retain when retrying creation.\"),\n agent: apiAgentSchema.shape.id,\n model: z\n .string()\n .trim()\n .min(1)\n .max(200)\n .optional()\n .describe(\"Explicit supported model; absent uses the repository or application default.\"),\n repository: repositorySlugSchema.optional().describe(\"Configured owner/repo slug.\"),\n changeId: changeIdSchema.optional().describe(\"Existing change to review, verify, or continue.\"),\n message: agentSessionMessageSchema,\n attachments: imageAttachmentsSchema\n .optional()\n .describe(\"Uploaded images accompanying this message.\"),\n })\n .refine(hasMessageContent, \"Enter a message or attach an image\");\n/** An idempotent request to create an operator session. */\nexport type CreateSessionRequest = Readonly<\n Omit<z.input<typeof createSessionRequestSchema>, \"attachments\" | \"repository\" | \"changeId\">\n> & {\n readonly repository?: RepositorySlug;\n readonly changeId?: ChangeId;\n readonly attachments?: readonly ImageAttachment[];\n};\n\n/** Validates a message sent to an existing session with optimistic execution matching. */\nexport const sendSessionMessageRequestSchema = z\n .strictObject({\n message: agentSessionMessageSchema,\n attachments: imageAttachmentsSchema\n .optional()\n .describe(\"Uploaded images accompanying this message.\"),\n operationId: z\n .string()\n .trim()\n .min(1)\n .max(200)\n .optional()\n .describe(\"Required for a follow-up after completion; retain unchanged for retries.\"),\n turnPolicy: z\n .enum([\"steer\", \"queue\"])\n .default(\"steer\")\n .describe(\"Whether an active turn is steered immediately or the message is queued.\"),\n executionId: z\n .string()\n .min(1)\n .nullable()\n .describe(\"Observed execution ID; stale writes are rejected.\"),\n })\n .refine(hasMessageContent, \"Enter a message or attach an image\");\n\n/** Message sent to an existing session with optimistic execution matching. */\nexport type SendSessionMessageRequest = Readonly<\n Omit<z.input<typeof sendSessionMessageRequestSchema>, \"attachments\">\n> & {\n readonly attachments?: readonly ImageAttachment[];\n};\n\nconst sessionInputResponseBase = {\n requestId: z.string().min(1).describe(\"Pending provider input request ID.\"),\n};\n\n/** Validates an option selection or freeform answer to one provider input request. */\nexport const sessionInputResponseSchema = z.union([\n z.strictObject({\n ...sessionInputResponseBase,\n optionId: z.string().min(1).describe(\"Selected option ID.\"),\n text: z.never().optional().describe(\"Absent for an option selection.\"),\n }),\n z.strictObject({\n ...sessionInputResponseBase,\n optionId: z.never().optional().describe(\"Absent for a freeform answer.\"),\n text: z.string().min(1).describe(\"Freeform answer text.\"),\n }),\n]);\n/** A response to one pending provider input request. */\nexport type SessionInputResponse = Readonly<z.input<typeof sessionInputResponseSchema>>;\n\n/** Validates responses submitted to pending provider input requests. */\nexport const submitSessionInputRequestSchema = z.strictObject({\n executionId: z\n .string()\n .min(1)\n .describe(\"Observed provider session ID; stale input responses are rejected.\"),\n inputResponses: z\n .array(sessionInputResponseSchema)\n .min(1)\n .readonly()\n .describe(\"Responses to pending human-input requests.\"),\n});\n/** Responses submitted to pending provider input requests. */\nexport interface SubmitSessionInputRequest {\n readonly executionId: string;\n readonly inputResponses: readonly SessionInputResponse[];\n}\n\n/** Validates an execution-aware session control request. */\nexport const controlSessionRequestSchema = z.strictObject({\n executionId: z\n .string()\n .min(1)\n .optional()\n .describe(\"Observed provider session ID; guards against a replaced execution.\"),\n turnId: z.string().min(1).optional().describe(\"Observed turn ID for cooperative interruption.\"),\n});\n/** Execution and turn observed before requesting a session control operation. */\nexport type ControlSessionRequest = Readonly<z.input<typeof controlSessionRequestSchema>>;\n\n/** Validates an authenticated answer to a workflow question. */\nexport const answerSessionQuestionRequestSchema = z.strictObject({\n questionId: taskIdSchema.describe(\"Question Task belonging to this operator session.\"),\n answer: z.string().min(1).max(16000).describe(\"Authenticated immutable human answer.\"),\n});\n/** Authenticated answer to a workflow question in a session. */\nexport interface AnswerSessionQuestionRequest {\n readonly questionId: TaskId;\n readonly answer: string;\n}\n\n/** Validates the current operator-facing projection of a Factory session. */\nexport const sessionViewSchema = z.strictObject({\n session: agentSessionSchema.describe(\"Durable interaction binding.\"),\n task: taskSchema.nullable().describe(\"Current task state, if workflow-backed.\"),\n dependencyTaskIds: z\n .array(taskIdSchema)\n .readonly()\n .optional()\n .describe(\"Read-only current Task dependencies projected from its authoritative task graph.\"),\n execution: executionReferenceSchema\n .nullable()\n .describe(\"Current execution; may change after recovery.\"),\n activeAgent: z\n .string()\n .optional()\n .describe(\"Agent executing the selected work in this conversation.\"),\n source: z.string().optional().describe(\"Original trigger of automatically started work.\"),\n prUrl: z.string().optional().describe(\"Pull request associated with the conversation.\"),\n attention: z\n .enum([\"question\", \"failed\", \"stalled\", \"review\", \"conversation\"])\n .optional()\n .describe(\n \"Current human action: answer a question, inspect failed or stalled work, review a ready Change, or continue an external conversation.\",\n ),\n canFollowUp: z\n .boolean()\n .optional()\n .describe(\"Whether completed work can start a budgeted discussion in this conversation.\"),\n hasWorkflowFailure: z\n .boolean()\n .optional()\n .describe(\"Whether delegated workflow work has failed, independently of a pending question.\"),\n canCancel: z\n .boolean()\n .optional()\n .describe(\n \"Whether cancellation is available for the conversation or its delegated workflow work.\",\n ),\n history: z\n .array(\n z.strictObject({\n taskId: taskIdSchema.optional().describe(\"Task owning this execution, if any.\"),\n agent: z.string().describe(\"Agent that owns the provider execution.\"),\n message: z.string().describe(\"Initial request displayed for this execution.\"),\n attachments: imageAttachmentsSchema\n .optional()\n .describe(\"Images accompanying this execution's initial user request.\"),\n execution: executionReferenceSchema.describe(\"Authorized provider execution to replay.\"),\n }),\n )\n .readonly()\n .optional()\n .describe(\"Earlier executions, in conversation order, including replacement attempts.\"),\n relatedTasks: z\n .array(taskSchema)\n .readonly()\n .optional()\n .describe(\"Work linked to this conversation, including specialist delegations.\"),\n question: taskSchema\n .nullable()\n .describe(\"Open Factory question requiring an authenticated answer.\"),\n});\n/** The current operator-facing projection of a Factory session. */\nexport type SessionView = z.infer<typeof sessionViewSchema>;\n\n/** Validates a cursor-paginated page of operator-facing sessions. */\nexport const sessionPageSchema = z.strictObject({\n sessions: z.array(sessionViewSchema).readonly().describe(\"Sessions in this page.\"),\n nextCursor: z\n .string()\n .min(1)\n .nullable()\n .default(null)\n .describe(\"Opaque cursor to pass unchanged for the next page, or null after the final page.\"),\n totalCount: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .describe(\"Total matching sessions when explicitly requested.\"),\n});\n/** Cursor-paginated operator-facing sessions. */\nexport type SessionPage = z.infer<typeof sessionPageSchema>;\n\n/** Validates one configured repository exposed by the operator API. */\nexport const repositorySummarySchema = z.strictObject({\n id: repositoryIdSchema.describe(\"Stable configured repository identifier.\"),\n slug: repositorySlugSchema.describe(\"Configured owner/repository slug.\"),\n});\n/** Configured repository exposed by the operator API. */\nexport type RepositorySummary = z.infer<typeof repositorySummarySchema>;\n\n/** Validates repository slugs and their stable identifiers. */\nexport const repositoryDetailsSchema = z.strictObject({\n repositories: z\n .array(repositorySlugSchema)\n .readonly()\n .describe(\"Configured owner/repository slugs.\"),\n details: z\n .array(repositorySummarySchema)\n .readonly()\n .default([])\n .describe(\"Stable identifiers and slugs for configured repositories.\"),\n});\n/** Repository slugs and their stable configured identifiers. */\nexport type RepositoryDetails = z.infer<typeof repositoryDetailsSchema>;\n\n/** Validates a locally retained follow-up awaiting confirmed API acceptance. */\nexport const pendingFollowUpSchema = z\n .strictObject({\n sessionId: agentSessionIdSchema.describe(\"Conversation containing this follow-up.\"),\n operationId: z\n .string()\n .min(1)\n .max(200)\n .describe(\"Stable operation id retained until acceptance is confirmed.\"),\n executionId: z\n .string()\n .nullable()\n .describe(\"Execution observed before sending, or null before execution starts.\"),\n message: agentSessionMessageSchema,\n attachments: imageAttachmentsSchema\n .optional()\n .describe(\"Uploaded images accompanying this message.\"),\n turnPolicy: z.enum([\"steer\", \"queue\"]).describe(\"Requested turn policy.\"),\n })\n .refine(hasMessageContent, \"Enter a message or attach an image\");\n/** A locally retained follow-up awaiting confirmed API acceptance. */\nexport type PendingFollowUp = Readonly<\n Omit<z.output<typeof pendingFollowUpSchema>, \"attachments\">\n> & {\n readonly attachments?: readonly ImageAttachment[];\n};\n"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { ImageAttachment } from "./image-input.mjs";
2
+ import { FactoryStores } from "./store/engine.mjs";
3
+ //#region src/api-images.d.ts
4
+ /** Minimal image-store operations required to resolve stored attachments. */
5
+ interface ResolveImageMessageStores {
6
+ readonly images: Pick<FactoryStores["images"], "get" | "validate">;
7
+ }
8
+ /** Identifies the owner, text, and stored attachments for one Eve message. */
9
+ interface ResolveImageMessageInput {
10
+ readonly owner: string;
11
+ readonly message: string;
12
+ readonly attachments?: readonly ImageAttachment[];
13
+ }
14
+ /** One text or stored-image part in a resolved Eve message. */
15
+ type ResolvedImageMessagePart = Readonly<{
16
+ type: "text";
17
+ text: string;
18
+ }> | Readonly<{
19
+ type: "file";
20
+ filename: string;
21
+ mediaType: ImageAttachment["mediaType"];
22
+ data: `data:${ImageAttachment["mediaType"]};base64,${string}`;
23
+ }>;
24
+ /** Eve-compatible message text or parts after stored image references are resolved. */
25
+ type ResolvedImageMessage = string | readonly ResolvedImageMessagePart[];
26
+ /** Resolve authorized stored image references into an Eve-compatible message. */
27
+ declare function resolveImageMessage(stores: ResolveImageMessageStores, input: ResolveImageMessageInput): Promise<ResolvedImageMessage>;
28
+ //#endregion
29
+ export { ResolveImageMessageInput, ResolveImageMessageStores, ResolvedImageMessage, ResolvedImageMessagePart, resolveImageMessage };
30
+ //# sourceMappingURL=api-images.d.mts.map
@@ -0,0 +1,28 @@
1
+ import { imageAttachmentsSchema, imagePartFilename } from "./image-input.mjs";
2
+ //#region src/api-images.ts
3
+ /** Resolve authorized stored image references into an Eve-compatible message. */
4
+ async function resolveImageMessage(stores, input) {
5
+ const { owner, message, attachments = [] } = input;
6
+ imageAttachmentsSchema.parse(attachments);
7
+ await stores.images.validate(owner, attachments);
8
+ if (attachments.length === 0) return message;
9
+ const files = await Promise.all(attachments.map(async (attachment) => {
10
+ const image = await stores.images.get(owner, attachment.id);
11
+ if (!image) throw new Error("Image is unavailable");
12
+ const data = `data:${image.mediaType};base64,${image.base64}`;
13
+ return {
14
+ type: "file",
15
+ filename: imagePartFilename(image),
16
+ mediaType: image.mediaType,
17
+ data
18
+ };
19
+ }));
20
+ return [...message ? [{
21
+ type: "text",
22
+ text: message
23
+ }] : [], ...files];
24
+ }
25
+ //#endregion
26
+ export { resolveImageMessage };
27
+
28
+ //# sourceMappingURL=api-images.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-images.mjs","names":[],"sources":["../src/api-images.ts"],"sourcesContent":["import type { FactoryStores } from \"./store/engine\";\nimport { imageAttachmentsSchema, imagePartFilename, type ImageAttachment } from \"./image-input\";\n\n/** Minimal image-store operations required to resolve stored attachments. */\nexport interface ResolveImageMessageStores {\n readonly images: Pick<FactoryStores[\"images\"], \"get\" | \"validate\">;\n}\n\n/** Identifies the owner, text, and stored attachments for one Eve message. */\nexport interface ResolveImageMessageInput {\n readonly owner: string;\n readonly message: string;\n readonly attachments?: readonly ImageAttachment[];\n}\n\n/** One text or stored-image part in a resolved Eve message. */\nexport type ResolvedImageMessagePart =\n | Readonly<{ type: \"text\"; text: string }>\n | Readonly<{\n type: \"file\";\n filename: string;\n mediaType: ImageAttachment[\"mediaType\"];\n data: `data:${ImageAttachment[\"mediaType\"]};base64,${string}`;\n }>;\n\n/** Eve-compatible message text or parts after stored image references are resolved. */\nexport type ResolvedImageMessage = string | readonly ResolvedImageMessagePart[];\n\n/** Resolve authorized stored image references into an Eve-compatible message. */\nexport async function resolveImageMessage(\n stores: ResolveImageMessageStores,\n input: ResolveImageMessageInput,\n): Promise<ResolvedImageMessage> {\n const { owner, message, attachments = [] } = input;\n imageAttachmentsSchema.parse(attachments);\n await stores.images.validate(owner, attachments);\n if (attachments.length === 0) return message;\n const files = await Promise.all(\n attachments.map(async (attachment) => {\n const image = await stores.images.get(owner, attachment.id);\n if (!image) throw new Error(\"Image is unavailable\");\n const data: `data:${ImageAttachment[\"mediaType\"]};base64,${string}` = `data:${image.mediaType};base64,${image.base64}`;\n return {\n type: \"file\" as const,\n filename: imagePartFilename(image),\n mediaType: image.mediaType,\n data,\n };\n }),\n );\n return [...(message ? [{ type: \"text\" as const, text: message }] : []), ...files];\n}\n"],"mappings":";;;AA6BA,eAAsB,oBACpB,QACA,OAC+B;CAC/B,MAAM,EAAE,OAAO,SAAS,cAAc,CAAC,MAAM;CAC7C,uBAAuB,MAAM,WAAW;CACxC,MAAM,OAAO,OAAO,SAAS,OAAO,WAAW;CAC/C,IAAI,YAAY,WAAW,GAAG,OAAO;CACrC,MAAM,QAAQ,MAAM,QAAQ,IAC1B,YAAY,IAAI,OAAO,eAAe;EACpC,MAAM,QAAQ,MAAM,OAAO,OAAO,IAAI,OAAO,WAAW,EAAE;EAC1D,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,sBAAsB;EAClD,MAAM,OAAgE,QAAQ,MAAM,UAAU,UAAU,MAAM;EAC9G,OAAO;GACL,MAAM;GACN,UAAU,kBAAkB,KAAK;GACjC,WAAW,MAAM;GACjB;EACF;CACF,CAAC,CACH;CACA,OAAO,CAAC,GAAI,UAAU,CAAC;EAAE,MAAM;EAAiB,MAAM;CAAQ,CAAC,IAAI,CAAC,GAAI,GAAG,KAAK;AAClF"}
@@ -0,0 +1,57 @@
1
+ import { agentSessionIdSchema } from "./schema/session.mjs";
2
+ //#region src/api-task-graph.ts
3
+ var TaskGraphAccessError = class extends Error {
4
+ status;
5
+ constructor(status, message) {
6
+ super(message);
7
+ this.status = status;
8
+ }
9
+ };
10
+ async function readSessionGraph(options, session) {
11
+ const { stores } = options;
12
+ if (!session.taskId) return {
13
+ rootTaskId: null,
14
+ nodes: []
15
+ };
16
+ const bound = await stores.tasks.get(session.taskId);
17
+ if (!bound) throw new TaskGraphAccessError(409, "The entrypoint Task is unavailable; refresh the graph.");
18
+ const graph = await stores.graphs.get(bound.rootTaskId);
19
+ if (!graph || !graph.nodes.some((node) => node.taskId === bound.id)) throw new TaskGraphAccessError(409, "The Task graph is unavailable; refresh to retry.");
20
+ const nodes = [];
21
+ const repositories = /* @__PURE__ */ new Map();
22
+ const sessions = /* @__PURE__ */ new Map();
23
+ for (let start = 0; start < graph.nodes.length; start += 16) nodes.push(...await Promise.all(graph.nodes.slice(start, start + 16).map(async (node) => {
24
+ const task = await stores.tasks.get(node.taskId);
25
+ if (!task || task.rootTaskId !== graph.rootTaskId || task.parentTaskId !== node.parentTaskId) throw new TaskGraphAccessError(409, "Task graph membership is incomplete; refresh to retry.");
26
+ for (const id of task.repositoryIds) {
27
+ if (!repositories.has(id)) repositories.set(id, stores.repositories.get(id).then((repo) => Boolean(repo?.enabled && options.repositories.includes(repo.slug))));
28
+ if (!await repositories.get(id)) throw new TaskGraphAccessError(403, "The graph includes a repository that is no longer enabled and configured.");
29
+ }
30
+ let context = session;
31
+ if (task.replyTo.channel === "api") {
32
+ if (!sessions.has(task.replyTo.address)) sessions.set(task.replyTo.address, stores.sessions.get(agentSessionIdSchema.parse(task.replyTo.address)));
33
+ const owned = await sessions.get(task.replyTo.address);
34
+ if (!owned || owned.owner !== session.owner) throw new TaskGraphAccessError(404, "Task graph not found");
35
+ context = owned;
36
+ } else if (task.origin.operator !== session.owner && !await options.canAccessTask?.({ id: session.owner }, task)) throw new TaskGraphAccessError(404, "Task graph not found");
37
+ const binding = task.work.route;
38
+ const route = binding ? options.routes.get(binding) : void 0;
39
+ const continuation = context.continuations?.find((item) => item.taskId === task.id);
40
+ const candidate = route?.agent ?? (binding?.id === "conversation" && binding.version === 1 && continuation?.agent === options.continuationAgent ? options.continuationAgent : void 0);
41
+ const agent = candidate && options.agents.some((item) => item.id === candidate) ? candidate : null;
42
+ return {
43
+ task,
44
+ dependencyTaskIds: node.dependencies,
45
+ session: context,
46
+ agent
47
+ };
48
+ })));
49
+ return {
50
+ rootTaskId: graph.rootTaskId,
51
+ nodes
52
+ };
53
+ }
54
+ //#endregion
55
+ export { TaskGraphAccessError, readSessionGraph };
56
+
57
+ //# sourceMappingURL=api-task-graph.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-task-graph.mjs","names":[],"sources":["../src/api-task-graph.ts"],"sourcesContent":["import type { FactoryApiOptions } from \"./api\";\nimport { agentSessionIdSchema, type AgentSession } from \"./schema/session\";\nimport type { Task } from \"./schema/task\";\nimport type { TaskId } from \"./schema/id\";\n\nexport class TaskGraphAccessError extends Error {\n constructor(\n readonly status: number,\n message: string,\n ) {\n super(message);\n }\n}\n\nexport async function readSessionGraph(options: FactoryApiOptions, session: AgentSession) {\n const { stores } = options;\n if (!session.taskId) return { rootTaskId: null, nodes: [] };\n const bound = await stores.tasks.get(session.taskId);\n if (!bound)\n throw new TaskGraphAccessError(409, \"The entrypoint Task is unavailable; refresh the graph.\");\n const graph = await stores.graphs.get(bound.rootTaskId);\n if (!graph || !graph.nodes.some((node) => node.taskId === bound.id))\n throw new TaskGraphAccessError(409, \"The Task graph is unavailable; refresh to retry.\");\n const nodes: {\n task: Task;\n dependencyTaskIds: readonly TaskId[];\n session: AgentSession;\n agent: string | null;\n }[] = [];\n const repositories = new Map<string, Promise<boolean>>();\n const sessions = new Map<string, Promise<AgentSession | null>>();\n // Bound fan-out: a graph contains at most 256 directly addressed Tasks.\n for (let start = 0; start < graph.nodes.length; start += 16) {\n nodes.push(\n ...(await Promise.all(\n graph.nodes.slice(start, start + 16).map(async (node) => {\n const task = await stores.tasks.get(node.taskId);\n if (\n !task ||\n task.rootTaskId !== graph.rootTaskId ||\n task.parentTaskId !== node.parentTaskId\n )\n throw new TaskGraphAccessError(\n 409,\n \"Task graph membership is incomplete; refresh to retry.\",\n );\n for (const id of task.repositoryIds) {\n if (!repositories.has(id))\n repositories.set(\n id,\n stores.repositories\n .get(id)\n .then((repo) =>\n Boolean(repo?.enabled && options.repositories.includes(repo.slug)),\n ),\n );\n if (!(await repositories.get(id)))\n throw new TaskGraphAccessError(\n 403,\n \"The graph includes a repository that is no longer enabled and configured.\",\n );\n }\n let context: AgentSession = session;\n if (task.replyTo.channel === \"api\") {\n if (!sessions.has(task.replyTo.address))\n sessions.set(\n task.replyTo.address,\n stores.sessions.get(agentSessionIdSchema.parse(task.replyTo.address)),\n );\n const owned = await sessions.get(task.replyTo.address);\n if (!owned || owned.owner !== session.owner)\n throw new TaskGraphAccessError(404, \"Task graph not found\");\n context = owned;\n } else if (\n task.origin.operator !== session.owner &&\n !(await options.canAccessTask?.({ id: session.owner }, task))\n ) {\n throw new TaskGraphAccessError(404, \"Task graph not found\");\n }\n const binding = task.work.route;\n const route = binding ? options.routes.get(binding) : undefined;\n const continuation = context.continuations?.find((item) => item.taskId === task.id);\n const candidate =\n route?.agent ??\n (binding?.id === \"conversation\" &&\n binding.version === 1 &&\n continuation?.agent === options.continuationAgent\n ? options.continuationAgent\n : undefined);\n const agent =\n candidate && options.agents.some((item) => item.id === candidate) ? candidate : null;\n return { task, dependencyTaskIds: node.dependencies, session: context, agent };\n }),\n )),\n );\n }\n return { rootTaskId: graph.rootTaskId, nodes };\n}\n"],"mappings":";;AAKA,IAAa,uBAAb,cAA0C,MAAM;CAEnC;CADX,YACE,QACA,SACA;EACA,MAAM,OAAO;EAHJ,KAAA,SAAA;CAIX;AACF;AAEA,eAAsB,iBAAiB,SAA4B,SAAuB;CACxF,MAAM,EAAE,WAAW;CACnB,IAAI,CAAC,QAAQ,QAAQ,OAAO;EAAE,YAAY;EAAM,OAAO,CAAC;CAAE;CAC1D,MAAM,QAAQ,MAAM,OAAO,MAAM,IAAI,QAAQ,MAAM;CACnD,IAAI,CAAC,OACH,MAAM,IAAI,qBAAqB,KAAK,wDAAwD;CAC9F,MAAM,QAAQ,MAAM,OAAO,OAAO,IAAI,MAAM,UAAU;CACtD,IAAI,CAAC,SAAS,CAAC,MAAM,MAAM,MAAM,SAAS,KAAK,WAAW,MAAM,EAAE,GAChE,MAAM,IAAI,qBAAqB,KAAK,kDAAkD;CACxF,MAAM,QAKA,CAAC;CACP,MAAM,+BAAe,IAAI,IAA8B;CACvD,MAAM,2BAAW,IAAI,IAA0C;CAE/D,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,MAAM,QAAQ,SAAS,IACvD,MAAM,KACJ,GAAI,MAAM,QAAQ,IAChB,MAAM,MAAM,MAAM,OAAO,QAAQ,EAAE,CAAC,CAAC,IAAI,OAAO,SAAS;EACvD,MAAM,OAAO,MAAM,OAAO,MAAM,IAAI,KAAK,MAAM;EAC/C,IACE,CAAC,QACD,KAAK,eAAe,MAAM,cAC1B,KAAK,iBAAiB,KAAK,cAE3B,MAAM,IAAI,qBACR,KACA,wDACF;EACF,KAAK,MAAM,MAAM,KAAK,eAAe;GACnC,IAAI,CAAC,aAAa,IAAI,EAAE,GACtB,aAAa,IACX,IACA,OAAO,aACJ,IAAI,EAAE,CAAC,CACP,MAAM,SACL,QAAQ,MAAM,WAAW,QAAQ,aAAa,SAAS,KAAK,IAAI,CAAC,CACnE,CACJ;GACF,IAAI,CAAE,MAAM,aAAa,IAAI,EAAE,GAC7B,MAAM,IAAI,qBACR,KACA,2EACF;EACJ;EACA,IAAI,UAAwB;EAC5B,IAAI,KAAK,QAAQ,YAAY,OAAO;GAClC,IAAI,CAAC,SAAS,IAAI,KAAK,QAAQ,OAAO,GACpC,SAAS,IACP,KAAK,QAAQ,SACb,OAAO,SAAS,IAAI,qBAAqB,MAAM,KAAK,QAAQ,OAAO,CAAC,CACtE;GACF,MAAM,QAAQ,MAAM,SAAS,IAAI,KAAK,QAAQ,OAAO;GACrD,IAAI,CAAC,SAAS,MAAM,UAAU,QAAQ,OACpC,MAAM,IAAI,qBAAqB,KAAK,sBAAsB;GAC5D,UAAU;EACZ,OAAO,IACL,KAAK,OAAO,aAAa,QAAQ,SACjC,CAAE,MAAM,QAAQ,gBAAgB,EAAE,IAAI,QAAQ,MAAM,GAAG,IAAI,GAE3D,MAAM,IAAI,qBAAqB,KAAK,sBAAsB;EAE5D,MAAM,UAAU,KAAK,KAAK;EAC1B,MAAM,QAAQ,UAAU,QAAQ,OAAO,IAAI,OAAO,IAAI,KAAA;EACtD,MAAM,eAAe,QAAQ,eAAe,MAAM,SAAS,KAAK,WAAW,KAAK,EAAE;EAClF,MAAM,YACJ,OAAO,UACN,SAAS,OAAO,kBACjB,QAAQ,YAAY,KACpB,cAAc,UAAU,QAAQ,oBAC5B,QAAQ,oBACR,KAAA;EACN,MAAM,QACJ,aAAa,QAAQ,OAAO,MAAM,SAAS,KAAK,OAAO,SAAS,IAAI,YAAY;EAClF,OAAO;GAAE;GAAM,mBAAmB,KAAK;GAAc,SAAS;GAAS;EAAM;CAC/E,CAAC,CACH,CACF;CAEF,OAAO;EAAE,YAAY,MAAM;EAAY;CAAM;AAC/C"}