@vm0/cli 9.278.0 → 9.279.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 (230) hide show
  1. package/{agent-HUDTEGLK.js → agent-4N7ZZDFJ.js} +16 -10
  2. package/agent-4N7ZZDFJ.js.map +1 -0
  3. package/{banking-BMZONEXP.js → banking-HBODHOCJ.js} +64 -10
  4. package/banking-HBODHOCJ.js.map +1 -0
  5. package/{browser-LQP445CU.js → browser-KT5KVZY2.js} +7 -8
  6. package/browser-KT5KVZY2.js.map +1 -0
  7. package/{chat-UF7QAWUT.js → chat-6RRIXDF5.js} +29 -21
  8. package/chat-6RRIXDF5.js.map +1 -0
  9. package/chunk-4ATK3VFX.js +202 -0
  10. package/chunk-4ATK3VFX.js.map +1 -0
  11. package/chunk-4CXT7THL.js +55 -0
  12. package/chunk-4CXT7THL.js.map +1 -0
  13. package/{chunk-BRV4D3P2.js → chunk-4QGLWHVD.js} +3 -3
  14. package/chunk-4SGKKHZW.js +309 -0
  15. package/chunk-4SGKKHZW.js.map +1 -0
  16. package/{chunk-AUWSMG4F.js → chunk-52CNCL6Y.js} +5 -2
  17. package/{chunk-AUWSMG4F.js.map → chunk-52CNCL6Y.js.map} +1 -1
  18. package/chunk-5RY3DZTW.js +101 -0
  19. package/chunk-5RY3DZTW.js.map +1 -0
  20. package/chunk-AFKJ4MU3.js +105 -0
  21. package/chunk-AFKJ4MU3.js.map +1 -0
  22. package/chunk-AMLZWOJK.js +792 -0
  23. package/chunk-AMLZWOJK.js.map +1 -0
  24. package/chunk-B3U6VDOF.js +90 -0
  25. package/chunk-B3U6VDOF.js.map +1 -0
  26. package/chunk-B6RXOHA2.js +801 -0
  27. package/chunk-B6RXOHA2.js.map +1 -0
  28. package/chunk-BB6QIVAM.js +189 -0
  29. package/chunk-BB6QIVAM.js.map +1 -0
  30. package/{chunk-NDYPPVD3.js → chunk-BMQE7GWV.js} +2 -2
  31. package/chunk-BMRAUGFL.js +198 -0
  32. package/chunk-BMRAUGFL.js.map +1 -0
  33. package/{chunk-45J5VDVQ.js → chunk-BS6PZU7T.js} +2 -2
  34. package/chunk-C4LKBBIS.js +2053 -0
  35. package/chunk-C4LKBBIS.js.map +1 -0
  36. package/{chunk-QC63TUJC.js → chunk-CBNDRL4P.js} +3 -3
  37. package/{chunk-V7A6ZFHR.js → chunk-CMWQJ3XO.js} +26 -775
  38. package/chunk-CMWQJ3XO.js.map +1 -0
  39. package/{chunk-NKYACNWA.js → chunk-DUWZNPUA.js} +2 -2
  40. package/{chunk-BVCE3PAD.js → chunk-G2HB4N56.js} +2 -2
  41. package/chunk-HMH473P6.js +362 -0
  42. package/chunk-HMH473P6.js.map +1 -0
  43. package/chunk-HMUAPCDD.js +81 -0
  44. package/chunk-HMUAPCDD.js.map +1 -0
  45. package/chunk-HXIDRGW4.js +434 -0
  46. package/chunk-HXIDRGW4.js.map +1 -0
  47. package/chunk-JXWXVXOW.js +1275 -0
  48. package/chunk-JXWXVXOW.js.map +1 -0
  49. package/{chunk-32FE3MDA.js → chunk-KHPTA6UQ.js} +2 -2
  50. package/chunk-KWHNNLC5.js +31 -0
  51. package/chunk-KWHNNLC5.js.map +1 -0
  52. package/chunk-LLQCX33F.js +49 -0
  53. package/chunk-LLQCX33F.js.map +1 -0
  54. package/{chunk-E53W6UVQ.js → chunk-LO24UKAH.js} +5 -5
  55. package/chunk-LO24UKAH.js.map +1 -0
  56. package/chunk-ML33LZ5V.js +66 -0
  57. package/chunk-ML33LZ5V.js.map +1 -0
  58. package/chunk-NIG6LRRX.js +39 -0
  59. package/chunk-NIG6LRRX.js.map +1 -0
  60. package/{chunk-JAUTPXVK.js → chunk-PAULHBEP.js} +2 -2
  61. package/chunk-PO3DAXC6.js +52 -0
  62. package/chunk-PO3DAXC6.js.map +1 -0
  63. package/chunk-QQT7SBVV.js +1300 -0
  64. package/chunk-QQT7SBVV.js.map +1 -0
  65. package/{chunk-J45P5ALH.js → chunk-RAQ7DE6K.js} +2 -2
  66. package/chunk-RKOODQ77.js +194 -0
  67. package/chunk-RKOODQ77.js.map +1 -0
  68. package/{chunk-V5ZVB7RJ.js → chunk-T656XQMT.js} +7 -7
  69. package/chunk-T656XQMT.js.map +1 -0
  70. package/chunk-TDLAIIDN.js +568 -0
  71. package/chunk-TDLAIIDN.js.map +1 -0
  72. package/{chunk-A6TMOGPR.js → chunk-TQKKFLRI.js} +1416 -339
  73. package/chunk-TQKKFLRI.js.map +1 -0
  74. package/{chunk-5ZZI2LSO.js → chunk-U2PPHCTL.js} +7 -7
  75. package/{chunk-VNNPAHD3.js → chunk-UH7XK55U.js} +2 -2
  76. package/chunk-VCAMYQOI.js +31 -0
  77. package/chunk-VCAMYQOI.js.map +1 -0
  78. package/chunk-WERS62WT.js +21130 -0
  79. package/chunk-WERS62WT.js.map +1 -0
  80. package/chunk-XIZVMBW4.js +188 -0
  81. package/chunk-XIZVMBW4.js.map +1 -0
  82. package/{chunk-SVFOPAWB.js → chunk-XJXBVERS.js} +2 -2
  83. package/chunk-XQ4CXHGB.js +131 -0
  84. package/chunk-XQ4CXHGB.js.map +1 -0
  85. package/{chunk-F2AM4RWA.js → chunk-XW5M3ADB.js} +3 -3
  86. package/{chunk-F2AM4RWA.js.map → chunk-XW5M3ADB.js.map} +1 -1
  87. package/chunk-YEXLP5U7.js +64 -0
  88. package/chunk-YEXLP5U7.js.map +1 -0
  89. package/chunk-ZEFTCUFJ.js +114 -0
  90. package/chunk-ZEFTCUFJ.js.map +1 -0
  91. package/{computer-use-RRD7BCCK.js → computer-use-VG65FLDL.js} +12 -10
  92. package/computer-use-VG65FLDL.js.map +1 -0
  93. package/{connector-XX7UU6XE.js → connector-25H4SU52.js} +28 -16
  94. package/connector-25H4SU52.js.map +1 -0
  95. package/{credit-GDNNAQRO.js → credit-D3RLUW6C.js} +12 -14
  96. package/credit-D3RLUW6C.js.map +1 -0
  97. package/{developer-support-IISP5UBI.js → developer-support-NMZJG32A.js} +30 -10
  98. package/developer-support-NMZJG32A.js.map +1 -0
  99. package/{doctor-IZM2TJOH.js → doctor-MXF4RDPN.js} +17 -15
  100. package/doctor-MXF4RDPN.js.map +1 -0
  101. package/{esm-GRI4FR5B.js → esm-XLHK4LBA.js} +3 -3
  102. package/{feishu-XB7SQBSI.js → feishu-SHMTS5ZM.js} +102 -12
  103. package/feishu-SHMTS5ZM.js.map +1 -0
  104. package/{finance-OGWHKQLU.js → finance-A3QUYKGH.js} +52 -12
  105. package/finance-A3QUYKGH.js.map +1 -0
  106. package/{generate-AA2PVOYQ.js → generate-QQ6ZTCR2.js} +31 -26
  107. package/generate-QQ6ZTCR2.js.map +1 -0
  108. package/{getMachineId-bsd-UR6WEJ6T.js → getMachineId-bsd-WOC3WZM5.js} +4 -4
  109. package/{getMachineId-darwin-O3UESQMK.js → getMachineId-darwin-K35YZX2F.js} +4 -4
  110. package/{getMachineId-linux-EGNGXDN3.js → getMachineId-linux-A4QJCCBS.js} +3 -3
  111. package/{getMachineId-unsupported-EZ7SMARH.js → getMachineId-unsupported-UOQIWS5S.js} +3 -3
  112. package/{getMachineId-win-CM62ICHH.js → getMachineId-win-YJDJQYJQ.js} +4 -4
  113. package/{github-VJVIBTVF.js → github-5M3YRGDF.js} +86 -11
  114. package/github-5M3YRGDF.js.map +1 -0
  115. package/{goal-7SYVHDTK.js → goal-F6G5KOI2.js} +72 -16
  116. package/goal-F6G5KOI2.js.map +1 -0
  117. package/{host-UVQMIOBA.js → host-6UT2OW4I.js} +127 -13
  118. package/host-6UT2OW4I.js.map +1 -0
  119. package/{intro-2UYXBOHI.js → intro-HYSW634N.js} +3 -3
  120. package/{logs-PIS4X24E.js → logs-YH346I7J.js} +57 -17
  121. package/logs-YH346I7J.js.map +1 -0
  122. package/{mail-L33OSQ2R.js → mail-SC44CH54.js} +42 -11
  123. package/mail-SC44CH54.js.map +1 -0
  124. package/{maps-D5XTXU5U.js → maps-YQ62JSHO.js} +68 -14
  125. package/maps-YQ62JSHO.js.map +1 -0
  126. package/{model-ZFMRECDM.js → model-PPOIXDVZ.js} +9 -9
  127. package/model-PPOIXDVZ.js.map +1 -0
  128. package/{model-provider-EZZ2DRYZ.js → model-provider-PD7FGL7A.js} +9 -9
  129. package/model-provider-PD7FGL7A.js.map +1 -0
  130. package/package.json +2 -5
  131. package/{people-search-PFTIO2QS.js → people-search-VS5J4HME.js} +25 -9
  132. package/people-search-VS5J4HME.js.map +1 -0
  133. package/{phone-6SG5ZUNL.js → phone-YZ7TX25A.js} +93 -12
  134. package/phone-YZ7TX25A.js.map +1 -0
  135. package/{recognize-LLU6J3SW.js → recognize-XKO53YEI.js} +30 -12
  136. package/recognize-XKO53YEI.js.map +1 -0
  137. package/{resource-FGUSXS4G.js → resource-V43QBVKO.js} +25 -11
  138. package/resource-V43QBVKO.js.map +1 -0
  139. package/{scrape-BAUZ2YFD.js → scrape-PDMJI2PY.js} +25 -9
  140. package/scrape-PDMJI2PY.js.map +1 -0
  141. package/{search-DLO5RXRM.js → search-USJZ3HKX.js} +35 -15
  142. package/search-USJZ3HKX.js.map +1 -0
  143. package/{slack-CVATPKP3.js → slack-K557P6WW.js} +106 -14
  144. package/slack-K557P6WW.js.map +1 -0
  145. package/{teams-ZZYO6YIK.js → teams-HN2UOU3U.js} +93 -12
  146. package/teams-HN2UOU3U.js.map +1 -0
  147. package/{telegram-VY7T4YAR.js → telegram-YCRQFLJC.js} +104 -13
  148. package/telegram-YCRQFLJC.js.map +1 -0
  149. package/{undici-MBS5ACFE.js → undici-YESHDB4G.js} +2 -2
  150. package/{upgrade-GFA4ZUU4.js → upgrade-VVJ3KJ6V.js} +7 -8
  151. package/upgrade-VVJ3KJ6V.js.map +1 -0
  152. package/{video-STFG7BET.js → video-DNGIFKVY.js} +8 -7
  153. package/video-DNGIFKVY.js.map +1 -0
  154. package/{weather-ISJEHJWR.js → weather-4Z7OZ2TP.js} +73 -19
  155. package/weather-4Z7OZ2TP.js.map +1 -0
  156. package/{web-YN4CVHK7.js → web-C6RLBMZM.js} +8 -8
  157. package/web-C6RLBMZM.js.map +1 -0
  158. package/{web-search-PC7IECND.js → web-search-CDPWLF74.js} +25 -9
  159. package/web-search-CDPWLF74.js.map +1 -0
  160. package/{whoami-KXFXZGM6.js → whoami-VDI5345O.js} +19 -10
  161. package/whoami-VDI5345O.js.map +1 -0
  162. package/{workflow-O7YZHB7A.js → workflow-VEZ3NTPR.js} +140 -44
  163. package/workflow-VEZ3NTPR.js.map +1 -0
  164. package/zero.js +46 -46
  165. package/agent-HUDTEGLK.js.map +0 -1
  166. package/banking-BMZONEXP.js.map +0 -1
  167. package/browser-LQP445CU.js.map +0 -1
  168. package/chat-UF7QAWUT.js.map +0 -1
  169. package/chunk-2W73DZDW.js +0 -32
  170. package/chunk-2W73DZDW.js.map +0 -1
  171. package/chunk-6PN6QGIM.js +0 -11405
  172. package/chunk-6PN6QGIM.js.map +0 -1
  173. package/chunk-A6TMOGPR.js.map +0 -1
  174. package/chunk-ANOLYIPL.js +0 -10
  175. package/chunk-ANOLYIPL.js.map +0 -1
  176. package/chunk-E53W6UVQ.js.map +0 -1
  177. package/chunk-V5ZVB7RJ.js.map +0 -1
  178. package/chunk-V7A6ZFHR.js.map +0 -1
  179. package/computer-use-RRD7BCCK.js.map +0 -1
  180. package/connector-XX7UU6XE.js.map +0 -1
  181. package/credit-GDNNAQRO.js.map +0 -1
  182. package/developer-support-IISP5UBI.js.map +0 -1
  183. package/doctor-IZM2TJOH.js.map +0 -1
  184. package/feishu-XB7SQBSI.js.map +0 -1
  185. package/finance-OGWHKQLU.js.map +0 -1
  186. package/generate-AA2PVOYQ.js.map +0 -1
  187. package/github-VJVIBTVF.js.map +0 -1
  188. package/goal-7SYVHDTK.js.map +0 -1
  189. package/host-UVQMIOBA.js.map +0 -1
  190. package/logs-PIS4X24E.js.map +0 -1
  191. package/mail-L33OSQ2R.js.map +0 -1
  192. package/maps-D5XTXU5U.js.map +0 -1
  193. package/model-ZFMRECDM.js.map +0 -1
  194. package/model-provider-EZZ2DRYZ.js.map +0 -1
  195. package/people-search-PFTIO2QS.js.map +0 -1
  196. package/phone-6SG5ZUNL.js.map +0 -1
  197. package/recognize-LLU6J3SW.js.map +0 -1
  198. package/resource-FGUSXS4G.js.map +0 -1
  199. package/scrape-BAUZ2YFD.js.map +0 -1
  200. package/search-DLO5RXRM.js.map +0 -1
  201. package/slack-CVATPKP3.js.map +0 -1
  202. package/teams-ZZYO6YIK.js.map +0 -1
  203. package/telegram-VY7T4YAR.js.map +0 -1
  204. package/upgrade-GFA4ZUU4.js.map +0 -1
  205. package/video-STFG7BET.js.map +0 -1
  206. package/weather-ISJEHJWR.js.map +0 -1
  207. package/web-YN4CVHK7.js.map +0 -1
  208. package/web-search-PC7IECND.js.map +0 -1
  209. package/whoami-KXFXZGM6.js.map +0 -1
  210. package/workflow-O7YZHB7A.js.map +0 -1
  211. /package/{chunk-BRV4D3P2.js.map → chunk-4QGLWHVD.js.map} +0 -0
  212. /package/{chunk-NDYPPVD3.js.map → chunk-BMQE7GWV.js.map} +0 -0
  213. /package/{chunk-45J5VDVQ.js.map → chunk-BS6PZU7T.js.map} +0 -0
  214. /package/{chunk-QC63TUJC.js.map → chunk-CBNDRL4P.js.map} +0 -0
  215. /package/{chunk-NKYACNWA.js.map → chunk-DUWZNPUA.js.map} +0 -0
  216. /package/{chunk-BVCE3PAD.js.map → chunk-G2HB4N56.js.map} +0 -0
  217. /package/{chunk-32FE3MDA.js.map → chunk-KHPTA6UQ.js.map} +0 -0
  218. /package/{chunk-JAUTPXVK.js.map → chunk-PAULHBEP.js.map} +0 -0
  219. /package/{chunk-J45P5ALH.js.map → chunk-RAQ7DE6K.js.map} +0 -0
  220. /package/{chunk-5ZZI2LSO.js.map → chunk-U2PPHCTL.js.map} +0 -0
  221. /package/{chunk-VNNPAHD3.js.map → chunk-UH7XK55U.js.map} +0 -0
  222. /package/{chunk-SVFOPAWB.js.map → chunk-XJXBVERS.js.map} +0 -0
  223. /package/{esm-GRI4FR5B.js.map → esm-XLHK4LBA.js.map} +0 -0
  224. /package/{getMachineId-bsd-UR6WEJ6T.js.map → getMachineId-bsd-WOC3WZM5.js.map} +0 -0
  225. /package/{getMachineId-darwin-O3UESQMK.js.map → getMachineId-darwin-K35YZX2F.js.map} +0 -0
  226. /package/{getMachineId-linux-EGNGXDN3.js.map → getMachineId-linux-A4QJCCBS.js.map} +0 -0
  227. /package/{getMachineId-unsupported-EZ7SMARH.js.map → getMachineId-unsupported-UOQIWS5S.js.map} +0 -0
  228. /package/{getMachineId-win-CM62ICHH.js.map → getMachineId-win-YJDJQYJQ.js.map} +0 -0
  229. /package/{intro-2UYXBOHI.js.map → intro-HYSW634N.js.map} +0 -0
  230. /package/{undici-MBS5ACFE.js.map → undici-YESHDB4G.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../packages/api-contracts/src/contracts/integrations.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nconst directUploadCapabilityShape = {\n supportsUploadHeaders: z.literal(true).optional(),\n};\n\nconst directUploadResponseShape = {\n uploadHeaders: z.record(z.string(), z.string()).optional(),\n};\n\n/**\n * Integration Slack message contract\n * POST /api/zero/integrations/slack/message\n *\n * Sends a Slack message via the org's installed bot token.\n * Requires `slack:write` capability (via ZERO_TOKEN).\n */\nconst sendSlackMessageBodySchema = z\n .object({\n channel: z.string().min(1, \"Channel ID is required\").optional(),\n user: z.string().min(1, \"User ID is required\").optional(),\n text: z.string().optional(),\n threadTs: z.string().optional(),\n blocks: z.array(z.object({ type: z.string() }).passthrough()).optional(),\n })\n .refine(\n (data) => {\n return Boolean(data.channel) !== Boolean(data.user);\n },\n { message: \"Exactly one of 'channel' or 'user' must be provided\" },\n );\n\nexport type SendSlackMessageBody = z.infer<typeof sendSlackMessageBodySchema>;\n\nconst sendSlackMessageResponseSchema = z.object({\n ok: z.literal(true),\n ts: z.string().optional(),\n channel: z.string().optional(),\n});\n\nexport type SendSlackMessageResponse = z.infer<\n typeof sendSlackMessageResponseSchema\n>;\n\nexport const integrationsSlackMessageContract = c.router({\n sendMessage: {\n method: \"POST\",\n path: \"/api/zero/integrations/slack/message\",\n headers: authHeadersSchema,\n body: sendSlackMessageBodySchema,\n responses: {\n 200: sendSlackMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Send a Slack message via org bot token\",\n },\n});\n\nexport type IntegrationsSlackMessageContract =\n typeof integrationsSlackMessageContract;\n\n/**\n * Integration Feishu message contract\n * POST /api/zero/integrations/feishu/message\n *\n * Sends a Feishu message via an org-owned custom app.\n * Requires `feishu:write` capability (via ZERO_TOKEN).\n */\nconst feishuCardSchema = z.record(z.string(), z.unknown());\n\nconst sendFeishuMessageBodySchema = z\n .object({\n installationId: z.string().uuid().optional(),\n chat: z.string().min(1, \"Chat ID is required\").optional(),\n user: z.string().min(1, \"Feishu open ID is required\").optional(),\n replyToMessageId: z.string().min(1, \"Message ID is required\").optional(),\n replyInThread: z.boolean().optional(),\n text: z.string().min(1, \"Message text is required\").optional(),\n card: feishuCardSchema.optional(),\n })\n .refine(\n (body) => {\n return (\n [body.chat, body.user, body.replyToMessageId].filter(Boolean).length ===\n 1\n );\n },\n {\n message: \"Exactly one of chat, user, or replyToMessageId is required\",\n path: [\"chat\"],\n },\n )\n .refine(\n (body) => {\n return Boolean(body.text) !== Boolean(body.card);\n },\n {\n message: \"Exactly one of text or card is required\",\n path: [\"text\"],\n },\n )\n .refine(\n (body) => {\n return !body.replyInThread || Boolean(body.replyToMessageId);\n },\n {\n message: \"replyInThread requires replyToMessageId\",\n path: [\"replyInThread\"],\n },\n );\n\nexport type SendFeishuMessageBody = z.infer<typeof sendFeishuMessageBodySchema>;\n\nconst sendFeishuMessageResponseSchema = z.object({\n ok: z.literal(true),\n messageId: z.string(),\n chatId: z.string().nullable(),\n});\n\nexport type SendFeishuMessageResponse = z.infer<\n typeof sendFeishuMessageResponseSchema\n>;\n\nexport const integrationsFeishuMessageContract = c.router({\n sendMessage: {\n method: \"POST\",\n path: \"/api/zero/integrations/feishu/message\",\n headers: authHeadersSchema,\n body: sendFeishuMessageBodySchema,\n responses: {\n 200: sendFeishuMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Send a Feishu message via an organization custom app\",\n },\n});\n\nexport type IntegrationsFeishuMessageContract =\n typeof integrationsFeishuMessageContract;\n\nexport const FEISHU_FILE_UPLOAD_MAX_BYTES = 30 * 1024 * 1024;\n\n/**\n * Integration Feishu message resource download contract.\n * Requires `feishu:write` because Feishu currently uses one capability for\n * bot-backed messaging and file access.\n */\nconst feishuResourceTypeSchema = z.enum([\"file\", \"image\"]);\n\nexport type FeishuResourceType = z.infer<typeof feishuResourceTypeSchema>;\n\nexport const integrationsFeishuDownloadFileContract = c.router({\n download: {\n method: \"GET\",\n path: \"/api/zero/integrations/feishu/download-file\",\n headers: authHeadersSchema,\n query: z.object({\n installation_id: z.string().uuid().optional(),\n message_id: z.string().min(1, \"Message ID is required\"),\n file_key: z.string().min(1, \"File key is required\"),\n type: feishuResourceTypeSchema,\n }),\n responses: {\n 200: c.otherResponse({\n contentType: \"application/octet-stream\",\n body: z.unknown(),\n }),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 413: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Download a file from a Feishu message\",\n },\n});\n\nexport type IntegrationsFeishuDownloadFileContract =\n typeof integrationsFeishuDownloadFileContract;\n\n/**\n * Integration Feishu file upload — init contract.\n *\n * The CLI uploads to temporary VM0 storage before the API forwards the bytes\n * to Feishu with the organization bot's tenant token.\n */\nconst feishuUploadInitBodySchema = z.object({\n filename: z.string().min(1, \"Filename is required\").max(255),\n contentType: z.string().min(1, \"Content type is required\").max(200),\n length: z\n .number()\n .int()\n .positive(\"File length must be a positive integer\")\n .max(\n FEISHU_FILE_UPLOAD_MAX_BYTES,\n `File must not exceed ${FEISHU_FILE_UPLOAD_MAX_BYTES} bytes`,\n ),\n ...directUploadCapabilityShape,\n});\n\nexport type FeishuUploadInitBody = z.infer<typeof feishuUploadInitBodySchema>;\n\nconst feishuUploadInitResponseSchema = z.object({\n uploadId: z.string().uuid(),\n uploadUrl: z.string(),\n fileUrl: z.string(),\n filename: z.string(),\n contentType: z.string(),\n size: z.number().int().nonnegative(),\n ...directUploadResponseShape,\n});\n\nexport type FeishuUploadInitResponse = z.infer<\n typeof feishuUploadInitResponseSchema\n>;\n\nexport const integrationsFeishuUploadInitContract = c.router({\n init: {\n method: \"POST\",\n path: \"/api/zero/integrations/feishu/upload-file/init\",\n headers: authHeadersSchema,\n body: feishuUploadInitBodySchema,\n responses: {\n 200: feishuUploadInitResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get a pre-signed upload URL for Feishu file delivery\",\n },\n});\n\n/**\n * Integration Feishu file upload — complete contract.\n *\n * Uploads the stored bytes to Feishu and sends the resulting file key to one\n * chat, user, or reply target.\n */\nconst feishuUploadCompleteBodySchema = z\n .object({\n uploadId: z.string().uuid(\"Upload ID must be a UUID\"),\n installationId: z.string().uuid().optional(),\n chat: z.string().min(1, \"Chat ID is required\").optional(),\n user: z.string().min(1, \"Feishu open ID is required\").optional(),\n replyToMessageId: z.string().min(1, \"Message ID is required\").optional(),\n replyInThread: z.boolean().optional(),\n contentType: z.string().min(1).max(200).optional(),\n })\n .refine(\n (body) => {\n return (\n [body.chat, body.user, body.replyToMessageId].filter(Boolean).length ===\n 1\n );\n },\n {\n message: \"Exactly one of chat, user, or replyToMessageId is required\",\n path: [\"chat\"],\n },\n )\n .refine(\n (body) => {\n return !body.replyInThread || Boolean(body.replyToMessageId);\n },\n {\n message: \"replyInThread requires replyToMessageId\",\n path: [\"replyInThread\"],\n },\n );\n\nexport type FeishuUploadCompleteBody = z.infer<\n typeof feishuUploadCompleteBodySchema\n>;\n\nconst feishuUploadCompleteResponseSchema = z.object({\n messageId: z.string(),\n chatId: z.string().nullable(),\n fileKey: z.string(),\n filename: z.string(),\n mimetype: z.string(),\n size: z.number().int().nonnegative(),\n url: z.string(),\n});\n\nexport type FeishuUploadCompleteResponse = z.infer<\n typeof feishuUploadCompleteResponseSchema\n>;\n\nexport const integrationsFeishuUploadCompleteContract = c.router({\n complete: {\n method: \"POST\",\n path: \"/api/zero/integrations/feishu/upload-file/complete\",\n headers: authHeadersSchema,\n body: feishuUploadCompleteBodySchema,\n responses: {\n 200: feishuUploadCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 413: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Finalize Feishu file upload and send it to a conversation\",\n },\n});\n\n/**\n * Integration Telegram message contract\n * POST /api/zero/integrations/telegram/message\n *\n * Sends a Telegram message via an org-owned bot token.\n * Requires `telegram:write` capability (via ZERO_TOKEN).\n */\nconst sendTelegramMessageBodySchema = z.object({\n botId: z.string().min(1, \"Bot ID is required\"),\n chatId: z.string().min(1, \"Chat ID is required\"),\n text: z.string().min(1, \"Message text is required\"),\n replyToMessageId: z.number().int().positive().optional(),\n messageThreadId: z.number().int().positive().optional(),\n});\n\nexport type SendTelegramMessageBody = z.infer<\n typeof sendTelegramMessageBodySchema\n>;\n\nconst sendTelegramMessageResponseSchema = z.object({\n ok: z.literal(true),\n messageId: z.number().int(),\n chatId: z.string(),\n});\n\nexport type SendTelegramMessageResponse = z.infer<\n typeof sendTelegramMessageResponseSchema\n>;\n\nexport const integrationsTelegramMessageContract = c.router({\n sendMessage: {\n method: \"POST\",\n path: \"/api/zero/integrations/telegram/message\",\n headers: authHeadersSchema,\n body: sendTelegramMessageBodySchema,\n responses: {\n 200: sendTelegramMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Send a Telegram message via org bot token\",\n },\n});\n\nexport type IntegrationsTelegramMessageContract =\n typeof integrationsTelegramMessageContract;\n\n/**\n * Integration Microsoft Teams message contract\n * POST /api/zero/integrations/teams/message\n *\n * Sends a Microsoft Teams message via the org's installed Teams bot.\n * Requires `teams:write` capability (via ZERO_TOKEN).\n */\nconst teamsAdaptiveCardSchema = z\n .object({\n type: z.literal(\"AdaptiveCard\"),\n version: z.string().min(1),\n body: z.array(z.record(z.string(), z.unknown())).optional(),\n actions: z.array(z.record(z.string(), z.unknown())).optional(),\n })\n .passthrough();\n\nconst sendTeamsMessageBodySchema = z\n .object({\n conversationId: z.string().min(1, \"Conversation ID is required\").optional(),\n user: z.string().min(1, \"Teams user ID is required\").optional(),\n text: z.string().min(1, \"Message text is required\").optional(),\n activityId: z.string().min(1, \"Activity ID is required\").optional(),\n card: teamsAdaptiveCardSchema.optional(),\n })\n .refine(\n (body) => {\n return Boolean(body.conversationId) !== Boolean(body.user);\n },\n {\n message: \"Exactly one of conversationId or user is required\",\n path: [\"conversationId\"],\n },\n )\n .refine(\n (body) => {\n return Boolean(body.text) || Boolean(body.card);\n },\n {\n message: \"Message text or card is required\",\n path: [\"text\"],\n },\n )\n .refine(\n (body) => {\n return !(body.user && body.activityId);\n },\n {\n message: \"activityId can only be used with conversationId\",\n path: [\"activityId\"],\n },\n );\n\nexport type SendTeamsMessageBody = z.infer<typeof sendTeamsMessageBodySchema>;\n\nconst sendTeamsMessageResponseSchema = z.object({\n ok: z.literal(true),\n activityId: z.string().optional(),\n conversationId: z.string(),\n});\n\nexport type SendTeamsMessageResponse = z.infer<\n typeof sendTeamsMessageResponseSchema\n>;\n\nexport const integrationsTeamsMessageContract = c.router({\n sendMessage: {\n method: \"POST\",\n path: \"/api/zero/integrations/teams/message\",\n headers: authHeadersSchema,\n body: sendTeamsMessageBodySchema,\n responses: {\n 200: sendTeamsMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Send a Microsoft Teams message via org bot\",\n },\n});\n\nexport type IntegrationsTeamsMessageContract =\n typeof integrationsTeamsMessageContract;\n\n/**\n * Integration AgentPhone message contract\n * POST /api/zero/integrations/phone/message\n *\n * Sends an AgentPhone text message to the connected phone handle.\n * Requires `phone:write` capability (via ZERO_TOKEN).\n */\nconst sendPhoneMessageBodySchema = z.object({\n agentphoneAgentId: z\n .string()\n .min(1, \"AgentPhone agent ID is required\")\n .optional(),\n toNumber: z.string().min(1, \"Phone number is required\"),\n text: z.string().min(1, \"Message text is required\"),\n});\n\nexport type SendPhoneMessageBody = z.infer<typeof sendPhoneMessageBodySchema>;\n\nconst sendPhoneMessageResponseSchema = z.object({\n ok: z.literal(true),\n messageId: z.string(),\n channel: z.string().nullable(),\n toNumber: z.string(),\n});\n\nexport type SendPhoneMessageResponse = z.infer<\n typeof sendPhoneMessageResponseSchema\n>;\n\nexport const integrationsPhoneMessageContract = c.router({\n sendMessage: {\n method: \"POST\",\n path: \"/api/zero/integrations/phone/message\",\n headers: authHeadersSchema,\n body: sendPhoneMessageBodySchema,\n responses: {\n 200: sendPhoneMessageResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Send an AgentPhone message\",\n },\n});\n\nexport type IntegrationsPhoneMessageContract =\n typeof integrationsPhoneMessageContract;\n\nconst phoneDownloadFileQuerySchema = z.object({\n file_id: z.string().min(1, \"file_id query parameter is required\"),\n});\n\nexport const integrationsPhoneDownloadFileContract = c.router({\n download: {\n method: \"GET\",\n path: \"/api/zero/integrations/phone/download-file\",\n headers: authHeadersSchema,\n query: phoneDownloadFileQuerySchema,\n responses: {\n 200: c.type<Blob>(),\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 413: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Download an AgentPhone media attachment\",\n },\n});\n\nexport type IntegrationsPhoneDownloadFileContract =\n typeof integrationsPhoneDownloadFileContract;\n\n/**\n * Integration Telegram bot list contract\n * GET /api/zero/integrations/telegram/bots\n *\n * Lists Telegram bots available in the authenticated user's org.\n * Requires `telegram:read` capability (via ZERO_TOKEN).\n */\nconst telegramBotTokenStatusSchema = z.enum([\"valid\", \"invalid\", \"unknown\"]);\n\nconst telegramConnectedUserSchema = z.object({\n telegramUserId: z.string(),\n telegramUsername: z.string().nullable(),\n telegramDisplayName: z.string().nullable(),\n});\n\nconst telegramBotListItemSchema = z.object({\n id: z.string(),\n kind: z.enum([\"custom\", \"official\"]).optional(),\n username: z.string().nullable(),\n agent: z.object({ id: z.string(), name: z.string() }).nullable(),\n isOwner: z.boolean(),\n isConnected: z.boolean(),\n connectedUser: telegramConnectedUserSchema.nullable().optional(),\n tokenStatus: telegramBotTokenStatusSchema,\n official: z\n .object({\n configured: z.boolean(),\n usesDefaultAgent: z.boolean(),\n linkedTelegramUserId: z.string().nullable(),\n })\n .optional(),\n});\n\nconst listTelegramBotsResponseSchema = z.object({\n bots: z.array(telegramBotListItemSchema),\n});\n\nexport type TelegramBotListItem = z.infer<typeof telegramBotListItemSchema>;\nexport type ListTelegramBotsResponse = z.infer<\n typeof listTelegramBotsResponseSchema\n>;\n\nexport const integrationsTelegramBotListContract = c.router({\n listBots: {\n method: \"GET\",\n path: \"/api/zero/integrations/telegram/bots\",\n headers: authHeadersSchema,\n responses: {\n 200: listTelegramBotsResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"List Telegram bots available in the authenticated user's org\",\n },\n});\n\nexport type IntegrationsTelegramBotListContract =\n typeof integrationsTelegramBotListContract;\n\n/**\n * Integration Slack file upload — init contract\n * POST /api/zero/integrations/slack/upload-file/init\n *\n * Requests a pre-signed upload URL from Slack via the org's bot token.\n * The CLI then uploads the file directly to that URL (no auth needed).\n * Requires `slack:write` capability (via ZERO_TOKEN).\n */\nconst slackUploadInitBodySchema = z.object({\n filename: z.string().min(1, \"Filename is required\"),\n length: z.number().int().positive(\"File length must be a positive integer\"),\n ...directUploadCapabilityShape,\n canonical: z\n .object({\n operationId: z.string().uuid(),\n contentType: z.string().min(1).max(200),\n checksumSha256: z.string().regex(/^[a-f0-9]{64}$/),\n channel: z.string().min(1, \"Channel ID is required\"),\n threadTs: z.string().optional(),\n title: z.string().optional(),\n initialComment: z.string().optional(),\n })\n .optional(),\n});\n\nexport type SlackUploadInitBody = z.infer<typeof slackUploadInitBodySchema>;\n\nconst directSlackUploadInitResponseSchema = z.object({\n uploadUrl: z.string(),\n fileId: z.string(),\n});\n\nconst canonicalSlackUploadInitResponseSchema = z.object({\n kind: z.literal(\"canonical\"),\n assetId: z.string().uuid(),\n operationId: z.string().uuid(),\n uploadUrl: z.string().url().optional(),\n url: z.string().url(),\n ...directUploadResponseShape,\n});\n\nconst slackUploadInitResponseSchema = z.union([\n directSlackUploadInitResponseSchema,\n canonicalSlackUploadInitResponseSchema,\n]);\n\nexport type SlackUploadInitResponse = z.infer<\n typeof slackUploadInitResponseSchema\n>;\n\nexport const integrationsSlackUploadInitContract = c.router({\n init: {\n method: \"POST\",\n path: \"/api/zero/integrations/slack/upload-file/init\",\n headers: authHeadersSchema,\n body: slackUploadInitBodySchema,\n responses: {\n 200: slackUploadInitResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Get a pre-signed Slack upload URL via org bot token\",\n },\n});\n\nconst slackUploadMaterializeBodySchema = z.object({\n assetId: z.string().uuid(),\n operationId: z.string().uuid(),\n});\n\nconst slackUploadMaterializeResponseSchema = z.object({\n assetId: z.string().uuid(),\n url: z.string().url(),\n delivery: z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"pending\"),\n uploadUrl: z.string(),\n fileId: z.string(),\n }),\n z.object({\n status: z.literal(\"delivered\"),\n fileId: z.string(),\n permalink: z.string(),\n }),\n z.object({\n status: z.literal(\"failed\"),\n message: z.string(),\n retryable: z.boolean(),\n }),\n ]),\n});\n\nexport type SlackUploadMaterializeBody = z.infer<\n typeof slackUploadMaterializeBodySchema\n>;\nexport type SlackUploadMaterializeResponse = z.infer<\n typeof slackUploadMaterializeResponseSchema\n>;\n\nexport const integrationsSlackUploadMaterializeContract = c.router({\n materialize: {\n method: \"POST\",\n path: \"/api/zero/integrations/slack/upload-file/materialize\",\n headers: authHeadersSchema,\n body: slackUploadMaterializeBodySchema,\n responses: {\n 200: slackUploadMaterializeResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Materialize a canonical Slack publication before delivery\",\n },\n});\n\n/**\n * Integration Telegram file upload — init contract\n * POST /api/zero/integrations/telegram/upload-file/init\n *\n * Requests a pre-signed upload URL for a temporary VM0-hosted file. The CLI\n * uploads the file body directly to R2, then the complete route asks Telegram\n * to fetch that file URL with the org-owned bot token.\n * Requires `telegram:write` capability (via ZERO_TOKEN).\n */\nconst telegramUploadInitBodySchema = z.object({\n filename: z.string().min(1, \"Filename is required\").max(255),\n contentType: z.string().min(1, \"Content type is required\").max(200),\n length: z.number().int().positive(\"File length must be a positive integer\"),\n ...directUploadCapabilityShape,\n});\n\nexport type TelegramUploadInitBody = z.infer<\n typeof telegramUploadInitBodySchema\n>;\n\nconst telegramUploadInitResponseSchema = z.object({\n uploadId: z.string().uuid(),\n uploadUrl: z.string(),\n fileUrl: z.string(),\n filename: z.string(),\n contentType: z.string(),\n size: z.number().int().nonnegative(),\n ...directUploadResponseShape,\n});\n\nexport type TelegramUploadInitResponse = z.infer<\n typeof telegramUploadInitResponseSchema\n>;\n\nexport const integrationsTelegramUploadInitContract = c.router({\n init: {\n method: \"POST\",\n path: \"/api/zero/integrations/telegram/upload-file/init\",\n headers: authHeadersSchema,\n body: telegramUploadInitBodySchema,\n responses: {\n 200: telegramUploadInitResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get a pre-signed upload URL for Telegram file delivery\",\n },\n});\n\n/**\n * Integration Microsoft Teams file upload — init contract\n * POST /api/zero/integrations/teams/upload-file/init\n *\n * Requests a pre-signed upload URL for a temporary VM0-hosted file. The CLI\n * uploads the file body directly to R2, then the complete route sends a Teams\n * message with the file attachment and public file URL.\n * Requires `teams:write` capability (via ZERO_TOKEN).\n */\nconst teamsUploadInitBodySchema = z.object({\n filename: z.string().min(1, \"Filename is required\").max(255),\n contentType: z.string().min(1, \"Content type is required\").max(200),\n length: z.number().int().positive(\"File length must be a positive integer\"),\n ...directUploadCapabilityShape,\n});\n\nexport type TeamsUploadInitBody = z.infer<typeof teamsUploadInitBodySchema>;\n\nconst teamsUploadInitResponseSchema = z.object({\n uploadId: z.string().uuid(),\n uploadUrl: z.string(),\n fileUrl: z.string(),\n filename: z.string(),\n contentType: z.string(),\n size: z.number().int().nonnegative(),\n ...directUploadResponseShape,\n});\n\nexport type TeamsUploadInitResponse = z.infer<\n typeof teamsUploadInitResponseSchema\n>;\n\nexport const integrationsTeamsUploadInitContract = c.router({\n init: {\n method: \"POST\",\n path: \"/api/zero/integrations/teams/upload-file/init\",\n headers: authHeadersSchema,\n body: teamsUploadInitBodySchema,\n responses: {\n 200: teamsUploadInitResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get a pre-signed upload URL for Microsoft Teams file delivery\",\n },\n});\n\n/**\n * Integration Telegram file upload — complete contract\n * POST /api/zero/integrations/telegram/upload-file/complete\n *\n * Sends an uploaded file URL to a Telegram chat via sendDocument using the\n * requested org-owned bot token.\n * Requires `telegram:write` capability (via ZERO_TOKEN).\n */\nconst telegramUploadCompleteBodySchema = z.object({\n uploadId: z.string().uuid(\"Upload ID must be a UUID\"),\n botId: z.string().min(1, \"Bot ID is required\"),\n chatId: z.string().min(1, \"Chat ID is required\"),\n contentType: z.string().min(1).max(200).optional(),\n caption: z.string().max(1024).optional(),\n messageThreadId: z.number().int().positive().optional(),\n});\n\nexport type TelegramUploadCompleteBody = z.infer<\n typeof telegramUploadCompleteBodySchema\n>;\n\nconst telegramUploadCompleteResponseSchema = z.object({\n messageId: z.number().int(),\n chatId: z.string(),\n fileId: z.string().optional(),\n filename: z.string(),\n mimetype: z.string(),\n size: z.number().int().nonnegative(),\n url: z.string(),\n});\n\nexport type TelegramUploadCompleteResponse = z.infer<\n typeof telegramUploadCompleteResponseSchema\n>;\n\nexport const integrationsTelegramUploadCompleteContract = c.router({\n complete: {\n method: \"POST\",\n path: \"/api/zero/integrations/telegram/upload-file/complete\",\n headers: authHeadersSchema,\n body: telegramUploadCompleteBodySchema,\n responses: {\n 200: telegramUploadCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Finalize Telegram file upload and send it to a chat\",\n },\n});\n\n/**\n * Integration Microsoft Teams file upload — complete contract\n * POST /api/zero/integrations/teams/upload-file/complete\n *\n * Sends an uploaded file URL to a Microsoft Teams conversation using the org's\n * installed Teams bot.\n * Requires `teams:write` capability (via ZERO_TOKEN).\n */\nconst teamsUploadCompleteBodySchema = z.object({\n uploadId: z.string().uuid(\"Upload ID must be a UUID\"),\n conversationId: z.string().min(1, \"Conversation ID is required\"),\n activityId: z.string().min(1, \"Activity ID is required\").optional(),\n contentType: z.string().min(1).max(200).optional(),\n text: z.string().max(4000).optional(),\n});\n\nexport type TeamsUploadCompleteBody = z.infer<\n typeof teamsUploadCompleteBodySchema\n>;\n\nconst teamsUploadCompleteResponseSchema = z.object({\n activityId: z.string().optional(),\n conversationId: z.string(),\n filename: z.string(),\n mimetype: z.string(),\n size: z.number().int().nonnegative(),\n url: z.string(),\n});\n\nexport type TeamsUploadCompleteResponse = z.infer<\n typeof teamsUploadCompleteResponseSchema\n>;\n\nexport const integrationsTeamsUploadCompleteContract = c.router({\n complete: {\n method: \"POST\",\n path: \"/api/zero/integrations/teams/upload-file/complete\",\n headers: authHeadersSchema,\n body: teamsUploadCompleteBodySchema,\n responses: {\n 200: teamsUploadCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary:\n \"Finalize Microsoft Teams file upload and send it to a conversation\",\n },\n});\n\n/**\n * Integration GitHub file upload — init contract\n * POST /api/zero/integrations/github/upload-file/init\n *\n * Requests a pre-signed upload URL for a temporary VM0-hosted file. The CLI\n * uploads the file body directly to R2, then the complete route posts the file\n * URL back to a GitHub issue or pull request comment.\n * Requires `github:write` capability (via ZERO_TOKEN).\n */\nconst githubUploadInitBodySchema = z.object({\n filename: z.string().min(1, \"Filename is required\").max(255),\n contentType: z.string().min(1, \"Content type is required\").max(200),\n length: z.number().int().positive(\"File length must be a positive integer\"),\n ...directUploadCapabilityShape,\n});\n\nexport type GithubUploadInitBody = z.infer<typeof githubUploadInitBodySchema>;\n\nconst githubUploadInitResponseSchema = z.object({\n uploadId: z.string().uuid(),\n uploadUrl: z.string(),\n fileUrl: z.string(),\n filename: z.string(),\n contentType: z.string(),\n size: z.number().int().nonnegative(),\n ...directUploadResponseShape,\n});\n\nexport type GithubUploadInitResponse = z.infer<\n typeof githubUploadInitResponseSchema\n>;\n\nexport const integrationsGithubUploadInitContract = c.router({\n init: {\n method: \"POST\",\n path: \"/api/zero/integrations/github/upload-file/init\",\n headers: authHeadersSchema,\n body: githubUploadInitBodySchema,\n responses: {\n 200: githubUploadInitResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 500: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Get a pre-signed upload URL for GitHub file delivery\",\n },\n});\n\n/**\n * Integration GitHub file upload — complete contract\n * POST /api/zero/integrations/github/upload-file/complete\n *\n * Posts an uploaded file URL to a GitHub issue or pull request comment using\n * the organization GitHub App installation token.\n * Requires `github:write` capability (via ZERO_TOKEN).\n */\nconst githubUploadCompleteBodySchema = z.object({\n uploadId: z.string().uuid(\"Upload ID must be a UUID\"),\n repo: z\n .string()\n .min(1, \"Repository is required\")\n .regex(/^[^/\\s]+\\/[^/\\s]+$/, \"Repository must be owner/name\"),\n issueNumber: z\n .number()\n .int()\n .positive(\"Issue or pull request number must be positive\"),\n contentType: z.string().min(1).max(200).optional(),\n caption: z.string().max(65_536).optional(),\n});\n\nexport type GithubUploadCompleteBody = z.infer<\n typeof githubUploadCompleteBodySchema\n>;\n\nconst githubUploadCompleteResponseSchema = z.object({\n commentId: z.string(),\n repo: z.string(),\n issueNumber: z.number().int(),\n filename: z.string(),\n mimetype: z.string(),\n size: z.number().int().nonnegative(),\n url: z.string(),\n});\n\nexport type GithubUploadCompleteResponse = z.infer<\n typeof githubUploadCompleteResponseSchema\n>;\n\nexport const integrationsGithubUploadCompleteContract = c.router({\n complete: {\n method: \"POST\",\n path: \"/api/zero/integrations/github/upload-file/complete\",\n headers: authHeadersSchema,\n body: githubUploadCompleteBodySchema,\n responses: {\n 200: githubUploadCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n 500: apiErrorSchema,\n },\n summary: \"Finalize GitHub file upload and post it to an issue or PR\",\n },\n});\n\n/**\n * Integration AgentPhone file upload — init contract\n * POST /api/zero/integrations/phone/upload-file/init\n *\n * Requests a pre-signed upload URL for a VM0-hosted file. The CLI uploads the\n * file body directly to R2, then complete sends the public file URL through\n * AgentPhone.\n * Requires `phone:write` capability (via ZERO_TOKEN).\n */\nconst phoneUploadInitBodySchema = z.object({\n filename: z.string().min(1, \"Filename is required\").max(255),\n contentType: z.string().min(1, \"Content type is required\").max(200),\n length: z.number().int().positive(\"File length must be a positive integer\"),\n ...directUploadCapabilityShape,\n});\n\nexport type PhoneUploadInitBody = z.infer<typeof phoneUploadInitBodySchema>;\n\nconst phoneUploadInitResponseSchema = z.object({\n uploadId: z.string().uuid(),\n uploadUrl: z.string(),\n fileUrl: z.string(),\n filename: z.string(),\n contentType: z.string(),\n size: z.number().int().nonnegative(),\n ...directUploadResponseShape,\n});\n\nexport type PhoneUploadInitResponse = z.infer<\n typeof phoneUploadInitResponseSchema\n>;\n\nexport const integrationsPhoneUploadInitContract = c.router({\n init: {\n method: \"POST\",\n path: \"/api/zero/integrations/phone/upload-file/init\",\n headers: authHeadersSchema,\n body: phoneUploadInitBodySchema,\n responses: {\n 200: phoneUploadInitResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n },\n summary: \"Get a pre-signed upload URL for AgentPhone file delivery\",\n },\n});\n\n/**\n * Integration AgentPhone file upload — complete contract\n * POST /api/zero/integrations/phone/upload-file/complete\n *\n * Sends an uploaded file URL to a connected phone handle through AgentPhone.\n * Requires `phone:write` capability (via ZERO_TOKEN).\n */\nconst phoneUploadCompleteBodySchema = z.object({\n uploadId: z.string().uuid(\"Upload ID must be a UUID\"),\n agentphoneAgentId: z\n .string()\n .min(1, \"AgentPhone agent ID is required\")\n .optional(),\n toNumber: z.string().min(1, \"Phone number is required\"),\n contentType: z.string().min(1).max(200).optional(),\n caption: z.string().max(1024).optional(),\n});\n\nexport type PhoneUploadCompleteBody = z.infer<\n typeof phoneUploadCompleteBodySchema\n>;\n\nconst phoneUploadCompleteResponseSchema = z.object({\n messageId: z.string(),\n channel: z.string().nullable(),\n toNumber: z.string(),\n filename: z.string(),\n mimetype: z.string(),\n size: z.number().int().nonnegative(),\n url: z.string(),\n});\n\nexport type PhoneUploadCompleteResponse = z.infer<\n typeof phoneUploadCompleteResponseSchema\n>;\n\nexport const integrationsPhoneUploadCompleteContract = c.router({\n complete: {\n method: \"POST\",\n path: \"/api/zero/integrations/phone/upload-file/complete\",\n headers: authHeadersSchema,\n body: phoneUploadCompleteBodySchema,\n responses: {\n 200: phoneUploadCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 502: apiErrorSchema,\n },\n summary: \"Finalize AgentPhone file upload and send it to a phone handle\",\n },\n});\n\n/**\n * Integration Slack file upload — complete contract\n * POST /api/zero/integrations/slack/upload-file/complete\n *\n * Finalizes a Slack file upload and shares it to a channel/thread.\n * Requires `slack:write` capability (via ZERO_TOKEN).\n */\nconst slackUploadCompleteBodySchema = z.object({\n fileId: z.string().min(1, \"File ID is required\"),\n channel: z.string().min(1, \"Channel ID is required\"),\n threadTs: z.string().optional(),\n title: z.string().optional(),\n initialComment: z.string().optional(),\n canonicalAssetId: z.string().uuid().optional(),\n operationId: z.string().uuid().optional(),\n uploadError: z.string().max(2000).optional(),\n});\n\nexport type SlackUploadCompleteBody = z.infer<\n typeof slackUploadCompleteBodySchema\n>;\n\nconst slackUploadCompleteResponseSchema = z.object({\n fileId: z.string(),\n permalink: z.string(),\n assetId: z.string().uuid().optional(),\n assetUrl: z.string().url().optional(),\n deliveryStatus: z.enum([\"delivered\", \"failed\"]).optional(),\n deliveryError: z.string().optional(),\n});\n\nexport type SlackUploadCompleteResponse = z.infer<\n typeof slackUploadCompleteResponseSchema\n>;\n\nexport const integrationsSlackUploadCompleteContract = c.router({\n complete: {\n method: \"POST\",\n path: \"/api/zero/integrations/slack/upload-file/complete\",\n headers: authHeadersSchema,\n body: slackUploadCompleteBodySchema,\n responses: {\n 200: slackUploadCompleteResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Finalize Slack file upload and share to channel\",\n },\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,189 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from "node:module";
3
+ const require = __createRequire(import.meta.url);
4
+ import {
5
+ canonicalChatEvent,
6
+ chatEventsContract,
7
+ chatSearchContract,
8
+ chatThreadEventsContract,
9
+ chatThreadMetadataContract,
10
+ chatThreadModelSelectionContract,
11
+ chatThreadRenameContract,
12
+ chatThreadsContract
13
+ } from "./chunk-C4LKBBIS.js";
14
+ import {
15
+ getClientConfig,
16
+ handleError,
17
+ initClient
18
+ } from "./chunk-U2PPHCTL.js";
19
+ import {
20
+ init_esm_shims
21
+ } from "./chunk-52CNCL6Y.js";
22
+
23
+ // src/lib/api/domains/zero-chat.ts
24
+ init_esm_shims();
25
+ async function searchZeroChat(options) {
26
+ const config = await getClientConfig();
27
+ const client = initClient(chatSearchContract, config);
28
+ const result = await client.search({
29
+ query: {
30
+ keyword: options.keyword,
31
+ agentId: options.agentId,
32
+ since: options.since,
33
+ limit: options.limit,
34
+ before: options.before,
35
+ after: options.after
36
+ }
37
+ });
38
+ if (result.status === 200) return result.body;
39
+ handleError(result, "Failed to search chat messages");
40
+ }
41
+ async function getZeroChatThreadSnapshot() {
42
+ const config = await getClientConfig();
43
+ const client = initClient(chatThreadsContract, config);
44
+ const result = await client.snapshot();
45
+ if (result.status === 200) {
46
+ return {
47
+ chatThreads: result.body.chatThreads,
48
+ latestEventId: result.body.latestEventId,
49
+ // CLI releases can reach an API that has not promoted sequence cursors
50
+ // yet, so preserve the UUID cursor until the new field is present.
51
+ latestSeqId: result.body.latestSeqId ?? null
52
+ };
53
+ }
54
+ handleError(result, "Failed to get chat thread snapshot");
55
+ }
56
+ async function listZeroChatThreadEvents(options) {
57
+ const config = await getClientConfig();
58
+ const client = initClient(chatThreadsContract, config);
59
+ const result = await client.events({
60
+ query: {
61
+ ...options.sinceSeqId ? { sinceSeqId: options.sinceSeqId } : {},
62
+ ...options.sinceEventId ? { sinceEventId: options.sinceEventId } : {}
63
+ }
64
+ });
65
+ if (result.status === 200) {
66
+ return {
67
+ kind: "page",
68
+ events: result.body.events,
69
+ hasMore: result.body.hasMore
70
+ };
71
+ }
72
+ if (result.status === 410) {
73
+ return { kind: "expired" };
74
+ }
75
+ handleError(result, "Failed to list chat thread events");
76
+ }
77
+ async function createZeroChatThread(options) {
78
+ const config = await getClientConfig();
79
+ const client = initClient(chatThreadsContract, config);
80
+ const result = await client.create({
81
+ body: {
82
+ agentId: options.agentId,
83
+ title: options.title,
84
+ ...options.model === void 0 ? {} : { model: options.model }
85
+ }
86
+ });
87
+ if (result.status === 201) {
88
+ return {
89
+ threadId: result.body.id,
90
+ title: result.body.title,
91
+ // An API that predates the echoed pin leaves the CLI with only the
92
+ // model the caller asked for.
93
+ selectedModel: result.body.selectedModel ?? options.model ?? null
94
+ };
95
+ }
96
+ handleError(result, "Failed to create chat thread");
97
+ }
98
+ async function renameZeroChatThread(options) {
99
+ const config = await getClientConfig();
100
+ const client = initClient(chatThreadRenameContract, config);
101
+ const result = await client.rename({
102
+ params: { id: options.threadId },
103
+ body: { title: options.title }
104
+ });
105
+ if (result.status === 204) {
106
+ return { threadId: options.threadId, title: options.title };
107
+ }
108
+ handleError(result, "Failed to rename chat thread");
109
+ }
110
+ async function getZeroChatThread(options) {
111
+ const config = await getClientConfig();
112
+ const client = initClient(chatThreadMetadataContract, config);
113
+ const result = await client.get({
114
+ params: { id: options.threadId }
115
+ });
116
+ if (result.status === 200) {
117
+ return result.body;
118
+ }
119
+ handleError(result, "Failed to get chat thread");
120
+ }
121
+ async function getZeroChatThreadAgentId(options) {
122
+ const thread = await getZeroChatThread(options);
123
+ if (thread.agentId) {
124
+ return thread.agentId;
125
+ }
126
+ const snapshot = await getZeroChatThreadSnapshot();
127
+ const projection = snapshot.chatThreads.find((candidate) => {
128
+ return candidate.id === options.threadId;
129
+ });
130
+ if (!projection) {
131
+ throw new Error(
132
+ `Chat thread "${options.threadId}" was not found in the thread snapshot`
133
+ );
134
+ }
135
+ return projection.agentId;
136
+ }
137
+ async function sendZeroChatEvent(body) {
138
+ const config = await getClientConfig();
139
+ const client = initClient(chatEventsContract, config);
140
+ const result = await client.send({ body });
141
+ if (result.status === 201) {
142
+ return result.body;
143
+ }
144
+ handleError(result, "Failed to send chat event");
145
+ }
146
+ async function listZeroChatEvents(options) {
147
+ const config = await getClientConfig();
148
+ const client = initClient(chatThreadEventsContract, config);
149
+ const result = await client.list({
150
+ params: { threadId: options.threadId },
151
+ query: {
152
+ beforeSeqId: options.beforeSeqId,
153
+ limit: options.limit
154
+ }
155
+ });
156
+ if (result.status === 200) {
157
+ return result.body.events.map(canonicalChatEvent);
158
+ }
159
+ handleError(result, "Failed to list chat events");
160
+ }
161
+ async function updateZeroChatThreadModelSelection(options) {
162
+ const config = await getClientConfig();
163
+ const client = initClient(chatThreadModelSelectionContract, config);
164
+ const result = await client.update({
165
+ params: { id: options.threadId },
166
+ body: { model: options.model }
167
+ });
168
+ if (result.status === 204) {
169
+ return {
170
+ threadId: options.threadId,
171
+ selectedModel: options.model
172
+ };
173
+ }
174
+ handleError(result, "Failed to update chat thread model");
175
+ }
176
+
177
+ export {
178
+ searchZeroChat,
179
+ getZeroChatThreadSnapshot,
180
+ listZeroChatThreadEvents,
181
+ createZeroChatThread,
182
+ renameZeroChatThread,
183
+ getZeroChatThread,
184
+ getZeroChatThreadAgentId,
185
+ sendZeroChatEvent,
186
+ listZeroChatEvents,
187
+ updateZeroChatThreadModelSelection
188
+ };
189
+ //# sourceMappingURL=chunk-BB6QIVAM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/api/domains/zero-chat.ts"],"sourcesContent":["import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n canonicalChatEvent,\n type ChatEvent,\n type ChatEventSendBody,\n chatEventsContract,\n chatThreadEventsContract,\n chatThreadsContract,\n type ChatThreadEvent,\n chatThreadMetadataContract,\n chatThreadModelSelectionContract,\n chatThreadRenameContract,\n chatSearchContract,\n type ChatThreadMetadata,\n type ChatThreadSnapshotProjection,\n type ChatSearchResponse,\n} from \"@vm0/api-contracts/contracts/chat-threads\";\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport interface ZeroChatThreadSnapshot {\n readonly chatThreads: readonly ChatThreadSnapshotProjection[];\n readonly latestEventId: string | null;\n readonly latestSeqId: number | null;\n}\n\nexport type ZeroChatThreadEvent = Omit<ChatThreadEvent, \"seqId\"> & {\n readonly seqId?: number;\n};\n\ninterface ZeroChatThreadCreateResult {\n readonly threadId: string;\n readonly title: string | null;\n readonly selectedModel: string | null;\n}\n\ninterface ZeroChatEventSendResult {\n readonly runId: string | null;\n readonly threadId: string;\n readonly status?: string;\n readonly createdAt?: string;\n}\n\ntype ZeroChatThreadEventsResult =\n | {\n readonly kind: \"page\";\n readonly events: readonly ZeroChatThreadEvent[];\n readonly hasMore: boolean;\n }\n | { readonly kind: \"expired\" };\n\nexport async function searchZeroChat(options: {\n keyword: string;\n agentId?: string;\n since?: number;\n limit?: number;\n before?: number;\n after?: number;\n}): Promise<ChatSearchResponse> {\n const config = await getClientConfig();\n const client = initClient(chatSearchContract, config);\n const result = await client.search({\n query: {\n keyword: options.keyword,\n agentId: options.agentId,\n since: options.since,\n limit: options.limit,\n before: options.before,\n after: options.after,\n },\n });\n if (result.status === 200) return result.body;\n handleError(result, \"Failed to search chat messages\");\n}\n\nexport async function getZeroChatThreadSnapshot(): Promise<ZeroChatThreadSnapshot> {\n const config = await getClientConfig();\n const client = initClient(chatThreadsContract, config);\n const result = await client.snapshot();\n if (result.status === 200) {\n return {\n chatThreads: result.body.chatThreads,\n latestEventId: result.body.latestEventId,\n // CLI releases can reach an API that has not promoted sequence cursors\n // yet, so preserve the UUID cursor until the new field is present.\n latestSeqId: result.body.latestSeqId ?? null,\n };\n }\n handleError(result, \"Failed to get chat thread snapshot\");\n}\n\nexport async function listZeroChatThreadEvents(options: {\n sinceSeqId?: number;\n sinceEventId?: string;\n}): Promise<ZeroChatThreadEventsResult> {\n const config = await getClientConfig();\n const client = initClient(chatThreadsContract, config);\n const result = await client.events({\n query: {\n ...(options.sinceSeqId ? { sinceSeqId: options.sinceSeqId } : {}),\n ...(options.sinceEventId ? { sinceEventId: options.sinceEventId } : {}),\n },\n });\n if (result.status === 200) {\n return {\n kind: \"page\",\n events: result.body.events,\n hasMore: result.body.hasMore,\n };\n }\n if (result.status === 410) {\n return { kind: \"expired\" };\n }\n handleError(result, \"Failed to list chat thread events\");\n}\n\nexport async function createZeroChatThread(options: {\n agentId: string;\n title: string;\n model?: string;\n}): Promise<ZeroChatThreadCreateResult> {\n const config = await getClientConfig();\n const client = initClient(chatThreadsContract, config);\n const result = await client.create({\n body: {\n agentId: options.agentId,\n title: options.title,\n ...(options.model === undefined ? {} : { model: options.model }),\n },\n });\n if (result.status === 201) {\n return {\n threadId: result.body.id,\n title: result.body.title,\n // An API that predates the echoed pin leaves the CLI with only the\n // model the caller asked for.\n selectedModel: result.body.selectedModel ?? options.model ?? null,\n };\n }\n handleError(result, \"Failed to create chat thread\");\n}\n\nexport async function renameZeroChatThread(options: {\n threadId: string;\n title: string;\n}): Promise<{ threadId: string; title: string }> {\n const config = await getClientConfig();\n const client = initClient(chatThreadRenameContract, config);\n const result = await client.rename({\n params: { id: options.threadId },\n body: { title: options.title },\n });\n if (result.status === 204) {\n return { threadId: options.threadId, title: options.title };\n }\n handleError(result, \"Failed to rename chat thread\");\n}\n\nexport async function getZeroChatThread(options: {\n threadId: string;\n}): Promise<ChatThreadMetadata> {\n const config = await getClientConfig();\n const client = initClient(chatThreadMetadataContract, config);\n const result = await client.get({\n params: { id: options.threadId },\n });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to get chat thread\");\n}\n\nexport async function getZeroChatThreadAgentId(options: {\n threadId: string;\n}): Promise<string> {\n const thread = await getZeroChatThread(options);\n if (thread.agentId) {\n return thread.agentId;\n }\n\n // Compatibility fallback for an API version that predates agentId on the\n // narrow metadata response.\n const snapshot = await getZeroChatThreadSnapshot();\n const projection = snapshot.chatThreads.find((candidate) => {\n return candidate.id === options.threadId;\n });\n if (!projection) {\n throw new Error(\n `Chat thread \"${options.threadId}\" was not found in the thread snapshot`,\n );\n }\n return projection.agentId;\n}\n\nexport async function sendZeroChatEvent(\n body: ChatEventSendBody,\n): Promise<ZeroChatEventSendResult> {\n const config = await getClientConfig();\n const client = initClient(chatEventsContract, config);\n const result = await client.send({ body });\n if (result.status === 201) {\n return result.body;\n }\n handleError(result, \"Failed to send chat event\");\n}\n\nexport async function listZeroChatEvents(options: {\n threadId: string;\n beforeSeqId?: number;\n limit?: number;\n}): Promise<readonly ChatEvent[]> {\n const config = await getClientConfig();\n const client = initClient(chatThreadEventsContract, config);\n const result = await client.list({\n params: { threadId: options.threadId },\n query: {\n beforeSeqId: options.beforeSeqId,\n limit: options.limit,\n },\n });\n if (result.status === 200) {\n return result.body.events.map(canonicalChatEvent);\n }\n handleError(result, \"Failed to list chat events\");\n}\n\nexport async function updateZeroChatThreadModelSelection(options: {\n threadId: string;\n model: string | null;\n}): Promise<{ threadId: string; selectedModel: string | null }> {\n const config = await getClientConfig();\n const client = initClient(chatThreadModelSelectionContract, config);\n const result = await client.update({\n params: { id: options.threadId },\n body: { model: options.model },\n });\n if (result.status === 204) {\n return {\n threadId: options.threadId,\n selectedModel: options.model,\n };\n }\n handleError(result, \"Failed to update chat thread model\");\n}\n"],"mappings":"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","names":[]}
@@ -6,7 +6,7 @@ import {
6
6
  __require,
7
7
  __toESM,
8
8
  init_esm_shims
9
- } from "./chunk-AUWSMG4F.js";
9
+ } from "./chunk-52CNCL6Y.js";
10
10
 
11
11
  // ../../node_modules/.pnpm/kleur@3.0.3/node_modules/kleur/index.js
12
12
  var require_kleur = __commonJS({
@@ -4960,4 +4960,4 @@ export {
4960
4960
  isInteractive,
4961
4961
  promptConfirm
4962
4962
  };
4963
- //# sourceMappingURL=chunk-NDYPPVD3.js.map
4963
+ //# sourceMappingURL=chunk-BMQE7GWV.js.map
@@ -0,0 +1,198 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from "node:module";
3
+ const require = __createRequire(import.meta.url);
4
+ import {
5
+ authHeadersSchema
6
+ } from "./chunk-NIG6LRRX.js";
7
+ import {
8
+ apiErrorSchema,
9
+ external_exports,
10
+ initContract
11
+ } from "./chunk-U2PPHCTL.js";
12
+ import {
13
+ init_esm_shims
14
+ } from "./chunk-52CNCL6Y.js";
15
+
16
+ // ../../packages/api-contracts/src/contracts/zero-goals.ts
17
+ init_esm_shims();
18
+ var c = initContract();
19
+ var zeroGoalStatusSchema = external_exports.enum([
20
+ "active",
21
+ "paused",
22
+ "blocked",
23
+ "complete"
24
+ ]);
25
+ var zeroGoalEventSchema = external_exports.union([
26
+ external_exports.object({
27
+ type: external_exports.literal("state"),
28
+ status: external_exports.literal("active"),
29
+ objectiveBrief: external_exports.string().min(1)
30
+ }),
31
+ external_exports.object({
32
+ type: external_exports.literal("state"),
33
+ status: external_exports.enum(["paused", "blocked", "complete"])
34
+ }),
35
+ external_exports.object({ type: external_exports.literal("cleared") })
36
+ ]);
37
+ var zeroGoalCreateRequestSchema = external_exports.object({
38
+ objective: external_exports.string().min(1).max(2e4)
39
+ });
40
+ var zeroGoalEditRequestSchema = external_exports.object({
41
+ objective: external_exports.string().min(1).max(2e4)
42
+ });
43
+ var zeroGoalResponseSchema = external_exports.object({
44
+ objective: external_exports.string(),
45
+ objectiveBrief: external_exports.string(),
46
+ status: zeroGoalStatusSchema
47
+ });
48
+ var chatThreadGoalParamsSchema = external_exports.object({
49
+ threadId: external_exports.string().min(1)
50
+ });
51
+ var zeroGoalsContract = c.router({
52
+ create: {
53
+ method: "POST",
54
+ path: "/api/zero/goal",
55
+ headers: authHeadersSchema,
56
+ body: zeroGoalCreateRequestSchema,
57
+ responses: {
58
+ 201: zeroGoalResponseSchema,
59
+ 400: apiErrorSchema,
60
+ 401: apiErrorSchema,
61
+ 403: apiErrorSchema,
62
+ 409: apiErrorSchema
63
+ },
64
+ summary: "Create a persistent goal for the current thread"
65
+ },
66
+ edit: {
67
+ method: "PATCH",
68
+ path: "/api/zero/goal",
69
+ headers: authHeadersSchema,
70
+ body: zeroGoalEditRequestSchema,
71
+ responses: {
72
+ 200: zeroGoalResponseSchema,
73
+ 400: apiErrorSchema,
74
+ 401: apiErrorSchema,
75
+ 403: apiErrorSchema,
76
+ 404: apiErrorSchema,
77
+ 409: apiErrorSchema
78
+ },
79
+ summary: "Edit the current thread goal objective"
80
+ },
81
+ get: {
82
+ method: "GET",
83
+ path: "/api/zero/goal",
84
+ headers: authHeadersSchema,
85
+ responses: {
86
+ 200: zeroGoalResponseSchema,
87
+ 401: apiErrorSchema,
88
+ 403: apiErrorSchema,
89
+ 404: apiErrorSchema,
90
+ 409: apiErrorSchema
91
+ },
92
+ summary: "Get the current thread goal"
93
+ },
94
+ getForChatThread: {
95
+ method: "GET",
96
+ path: "/api/zero/chat-threads/:threadId/goal",
97
+ headers: authHeadersSchema,
98
+ pathParams: chatThreadGoalParamsSchema,
99
+ responses: {
100
+ 200: zeroGoalResponseSchema,
101
+ 401: apiErrorSchema,
102
+ 403: apiErrorSchema,
103
+ 404: apiErrorSchema,
104
+ 409: apiErrorSchema
105
+ },
106
+ summary: "Get a chat thread goal"
107
+ },
108
+ complete: {
109
+ method: "POST",
110
+ path: "/api/zero/goal/complete",
111
+ headers: authHeadersSchema,
112
+ body: c.noBody(),
113
+ responses: {
114
+ 200: zeroGoalResponseSchema,
115
+ 401: apiErrorSchema,
116
+ 403: apiErrorSchema,
117
+ 404: apiErrorSchema,
118
+ 409: apiErrorSchema
119
+ },
120
+ summary: "Mark the current thread goal complete"
121
+ },
122
+ block: {
123
+ method: "POST",
124
+ path: "/api/zero/goal/block",
125
+ headers: authHeadersSchema,
126
+ body: c.noBody(),
127
+ responses: {
128
+ 200: zeroGoalResponseSchema,
129
+ 401: apiErrorSchema,
130
+ 403: apiErrorSchema,
131
+ 404: apiErrorSchema,
132
+ 409: apiErrorSchema
133
+ },
134
+ summary: "Mark the current thread goal blocked"
135
+ },
136
+ pause: {
137
+ method: "POST",
138
+ path: "/api/zero/goal/pause",
139
+ headers: authHeadersSchema,
140
+ body: c.noBody(),
141
+ responses: {
142
+ 200: zeroGoalResponseSchema,
143
+ 401: apiErrorSchema,
144
+ 403: apiErrorSchema,
145
+ 404: apiErrorSchema,
146
+ 409: apiErrorSchema
147
+ },
148
+ summary: "Pause the current thread goal"
149
+ },
150
+ pauseForChatThread: {
151
+ method: "POST",
152
+ path: "/api/zero/chat-threads/:threadId/goal/pause",
153
+ headers: authHeadersSchema,
154
+ pathParams: chatThreadGoalParamsSchema,
155
+ body: c.noBody(),
156
+ responses: {
157
+ 200: zeroGoalResponseSchema,
158
+ 401: apiErrorSchema,
159
+ 403: apiErrorSchema,
160
+ 404: apiErrorSchema,
161
+ 409: apiErrorSchema
162
+ },
163
+ summary: "Pause a chat thread goal"
164
+ },
165
+ resume: {
166
+ method: "POST",
167
+ path: "/api/zero/goal/resume",
168
+ headers: authHeadersSchema,
169
+ body: c.noBody(),
170
+ responses: {
171
+ 200: zeroGoalResponseSchema,
172
+ 401: apiErrorSchema,
173
+ 403: apiErrorSchema,
174
+ 404: apiErrorSchema,
175
+ 409: apiErrorSchema
176
+ },
177
+ summary: "Resume continuation for the current thread goal"
178
+ },
179
+ clear: {
180
+ method: "DELETE",
181
+ path: "/api/zero/goal",
182
+ headers: authHeadersSchema,
183
+ body: c.noBody(),
184
+ responses: {
185
+ 200: external_exports.object({ cleared: external_exports.literal(true) }),
186
+ 401: apiErrorSchema,
187
+ 403: apiErrorSchema,
188
+ 404: apiErrorSchema
189
+ },
190
+ summary: "Clear the current thread goal"
191
+ }
192
+ });
193
+
194
+ export {
195
+ zeroGoalEventSchema,
196
+ zeroGoalsContract
197
+ };
198
+ //# sourceMappingURL=chunk-BMRAUGFL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../packages/api-contracts/src/contracts/zero-goals.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { authHeadersSchema, initContract } from \"./base\";\nimport { apiErrorSchema } from \"./errors\";\n\nconst c = initContract();\n\nexport const zeroGoalStatusSchema = z.enum([\n \"active\",\n \"paused\",\n \"blocked\",\n \"complete\",\n]);\nexport type ZeroGoalStatus = z.infer<typeof zeroGoalStatusSchema>;\n\nexport const zeroGoalEventSchema = z.union([\n z.object({\n type: z.literal(\"state\"),\n status: z.literal(\"active\"),\n objectiveBrief: z.string().min(1),\n }),\n z.object({\n type: z.literal(\"state\"),\n status: z.enum([\"paused\", \"blocked\", \"complete\"]),\n }),\n z.object({ type: z.literal(\"cleared\") }),\n]);\nexport type ZeroGoalEvent = z.infer<typeof zeroGoalEventSchema>;\n\nexport const zeroGoalCreateRequestSchema = z.object({\n objective: z.string().min(1).max(20_000),\n});\nexport type ZeroGoalCreateRequest = z.infer<typeof zeroGoalCreateRequestSchema>;\n\nexport const zeroGoalEditRequestSchema = z.object({\n objective: z.string().min(1).max(20_000),\n});\nexport type ZeroGoalEditRequest = z.infer<typeof zeroGoalEditRequestSchema>;\n\nexport const zeroGoalResponseSchema = z.object({\n objective: z.string(),\n objectiveBrief: z.string(),\n status: zeroGoalStatusSchema,\n});\nexport type ZeroGoalResponse = z.infer<typeof zeroGoalResponseSchema>;\n\nconst chatThreadGoalParamsSchema = z.object({\n threadId: z.string().min(1),\n});\n\nexport const zeroGoalsContract = c.router({\n create: {\n method: \"POST\",\n path: \"/api/zero/goal\",\n headers: authHeadersSchema,\n body: zeroGoalCreateRequestSchema,\n responses: {\n 201: zeroGoalResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Create a persistent goal for the current thread\",\n },\n edit: {\n method: \"PATCH\",\n path: \"/api/zero/goal\",\n headers: authHeadersSchema,\n body: zeroGoalEditRequestSchema,\n responses: {\n 200: zeroGoalResponseSchema,\n 400: apiErrorSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Edit the current thread goal objective\",\n },\n get: {\n method: \"GET\",\n path: \"/api/zero/goal\",\n headers: authHeadersSchema,\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Get the current thread goal\",\n },\n getForChatThread: {\n method: \"GET\",\n path: \"/api/zero/chat-threads/:threadId/goal\",\n headers: authHeadersSchema,\n pathParams: chatThreadGoalParamsSchema,\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Get a chat thread goal\",\n },\n complete: {\n method: \"POST\",\n path: \"/api/zero/goal/complete\",\n headers: authHeadersSchema,\n body: c.noBody(),\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Mark the current thread goal complete\",\n },\n block: {\n method: \"POST\",\n path: \"/api/zero/goal/block\",\n headers: authHeadersSchema,\n body: c.noBody(),\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Mark the current thread goal blocked\",\n },\n pause: {\n method: \"POST\",\n path: \"/api/zero/goal/pause\",\n headers: authHeadersSchema,\n body: c.noBody(),\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Pause the current thread goal\",\n },\n pauseForChatThread: {\n method: \"POST\",\n path: \"/api/zero/chat-threads/:threadId/goal/pause\",\n headers: authHeadersSchema,\n pathParams: chatThreadGoalParamsSchema,\n body: c.noBody(),\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Pause a chat thread goal\",\n },\n resume: {\n method: \"POST\",\n path: \"/api/zero/goal/resume\",\n headers: authHeadersSchema,\n body: c.noBody(),\n responses: {\n 200: zeroGoalResponseSchema,\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n 409: apiErrorSchema,\n },\n summary: \"Resume continuation for the current thread goal\",\n },\n clear: {\n method: \"DELETE\",\n path: \"/api/zero/goal\",\n headers: authHeadersSchema,\n body: c.noBody(),\n responses: {\n 200: z.object({ cleared: z.literal(true) }),\n 401: apiErrorSchema,\n 403: apiErrorSchema,\n 404: apiErrorSchema,\n },\n summary: \"Clear the current thread goal\",\n },\n});\n\nexport type ZeroGoalsContract = typeof zeroGoalsContract;\n"],"mappings":"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","names":[]}
@@ -5,7 +5,7 @@ import {
5
5
  __esm,
6
6
  __export,
7
7
  init_esm_shims
8
- } from "./chunk-AUWSMG4F.js";
8
+ } from "./chunk-52CNCL6Y.js";
9
9
 
10
10
  // ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/version.js
11
11
  var VERSION;
@@ -1656,4 +1656,4 @@ export {
1656
1656
  esm_exports,
1657
1657
  init_esm
1658
1658
  };
1659
- //# sourceMappingURL=chunk-45J5VDVQ.js.map
1659
+ //# sourceMappingURL=chunk-BS6PZU7T.js.map