@vm0/cli 9.278.0 → 9.278.1

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 (194) hide show
  1. package/{agent-HUDTEGLK.js → agent-4F3XAJWN.js} +12 -6
  2. package/agent-4F3XAJWN.js.map +1 -0
  3. package/{banking-BMZONEXP.js → banking-CWQFQKZB.js} +61 -7
  4. package/banking-CWQFQKZB.js.map +1 -0
  5. package/{browser-LQP445CU.js → browser-BI6UFWPH.js} +4 -5
  6. package/browser-BI6UFWPH.js.map +1 -0
  7. package/{chat-UF7QAWUT.js → chat-MKIW4FPP.js} +24 -16
  8. package/chat-MKIW4FPP.js.map +1 -0
  9. package/chunk-2SJTFDC2.js +189 -0
  10. package/chunk-2SJTFDC2.js.map +1 -0
  11. package/chunk-4FTIKZKP.js +64 -0
  12. package/chunk-4FTIKZKP.js.map +1 -0
  13. package/chunk-7UZXNER2.js +568 -0
  14. package/chunk-7UZXNER2.js.map +1 -0
  15. package/chunk-A6ZRMNM3.js +102 -0
  16. package/chunk-A6ZRMNM3.js.map +1 -0
  17. package/{chunk-QC63TUJC.js → chunk-C62A6LD6.js} +2 -2
  18. package/chunk-CCTF3YVW.js +52 -0
  19. package/chunk-CCTF3YVW.js.map +1 -0
  20. package/chunk-CD2BLKGC.js +188 -0
  21. package/chunk-CD2BLKGC.js.map +1 -0
  22. package/chunk-CEJGHPF3.js +55 -0
  23. package/chunk-CEJGHPF3.js.map +1 -0
  24. package/chunk-DUA6CF7E.js +2053 -0
  25. package/chunk-DUA6CF7E.js.map +1 -0
  26. package/chunk-E2TQAKNL.js +1300 -0
  27. package/chunk-E2TQAKNL.js.map +1 -0
  28. package/{chunk-5ZZI2LSO.js → chunk-GHKWW4NC.js} +5 -5
  29. package/chunk-GV3PG6CZ.js +114 -0
  30. package/chunk-GV3PG6CZ.js.map +1 -0
  31. package/chunk-GY7D76EZ.js +81 -0
  32. package/chunk-GY7D76EZ.js.map +1 -0
  33. package/chunk-HHHHZMTA.js +434 -0
  34. package/chunk-HHHHZMTA.js.map +1 -0
  35. package/chunk-HZYOJTEE.js +1275 -0
  36. package/chunk-HZYOJTEE.js.map +1 -0
  37. package/chunk-J3ZRXVI6.js +740 -0
  38. package/chunk-J3ZRXVI6.js.map +1 -0
  39. package/chunk-JJWFO27K.js +31 -0
  40. package/chunk-JJWFO27K.js.map +1 -0
  41. package/chunk-JV6LM2YC.js +39 -0
  42. package/chunk-JV6LM2YC.js.map +1 -0
  43. package/chunk-KER77KJB.js +105 -0
  44. package/chunk-KER77KJB.js.map +1 -0
  45. package/{chunk-V5ZVB7RJ.js → chunk-KKO2XGLQ.js} +1 -6
  46. package/chunk-KKO2XGLQ.js.map +1 -0
  47. package/chunk-LIYPTQAO.js +198 -0
  48. package/chunk-LIYPTQAO.js.map +1 -0
  49. package/chunk-LYLDVUHT.js +131 -0
  50. package/chunk-LYLDVUHT.js.map +1 -0
  51. package/chunk-PFWBO2VK.js +801 -0
  52. package/chunk-PFWBO2VK.js.map +1 -0
  53. package/chunk-RTCRU35A.js +194 -0
  54. package/chunk-RTCRU35A.js.map +1 -0
  55. package/{chunk-F2AM4RWA.js → chunk-RTEEWZUT.js} +2 -2
  56. package/{chunk-F2AM4RWA.js.map → chunk-RTEEWZUT.js.map} +1 -1
  57. package/{chunk-BRV4D3P2.js → chunk-RUKMHBNQ.js} +2 -2
  58. package/chunk-SA4DYSBR.js +31 -0
  59. package/chunk-SA4DYSBR.js.map +1 -0
  60. package/chunk-SJPOFQJU.js +792 -0
  61. package/chunk-SJPOFQJU.js.map +1 -0
  62. package/{chunk-V7A6ZFHR.js → chunk-SMPSKBAP.js} +25 -774
  63. package/chunk-SMPSKBAP.js.map +1 -0
  64. package/{chunk-E53W6UVQ.js → chunk-T2X2EGV2.js} +4 -4
  65. package/chunk-T2X2EGV2.js.map +1 -0
  66. package/chunk-U2GQH6AD.js +309 -0
  67. package/chunk-U2GQH6AD.js.map +1 -0
  68. package/chunk-U6A2RPHO.js +66 -0
  69. package/chunk-U6A2RPHO.js.map +1 -0
  70. package/chunk-UIXUGVZB.js +362 -0
  71. package/chunk-UIXUGVZB.js.map +1 -0
  72. package/chunk-XRZKJACM.js +49 -0
  73. package/chunk-XRZKJACM.js.map +1 -0
  74. package/chunk-YDS3X7KB.js +202 -0
  75. package/chunk-YDS3X7KB.js.map +1 -0
  76. package/{chunk-A6TMOGPR.js → chunk-ZKNJW4K6.js} +1412 -334
  77. package/chunk-ZKNJW4K6.js.map +1 -0
  78. package/chunk-ZXSCBS77.js +90 -0
  79. package/chunk-ZXSCBS77.js.map +1 -0
  80. package/{computer-use-RRD7BCCK.js → computer-use-6AEVW47F.js} +9 -7
  81. package/computer-use-6AEVW47F.js.map +1 -0
  82. package/{connector-XX7UU6XE.js → connector-XDQ6JEBU.js} +25 -13
  83. package/connector-XDQ6JEBU.js.map +1 -0
  84. package/{credit-GDNNAQRO.js → credit-JPQA5XPA.js} +8 -10
  85. package/credit-JPQA5XPA.js.map +1 -0
  86. package/{developer-support-IISP5UBI.js → developer-support-V7NZOU2P.js} +27 -7
  87. package/developer-support-V7NZOU2P.js.map +1 -0
  88. package/{doctor-IZM2TJOH.js → doctor-FJO24TG3.js} +13 -11
  89. package/doctor-FJO24TG3.js.map +1 -0
  90. package/{feishu-XB7SQBSI.js → feishu-PNOAM33Q.js} +99 -9
  91. package/feishu-PNOAM33Q.js.map +1 -0
  92. package/{finance-OGWHKQLU.js → finance-55OJ6GYP.js} +49 -9
  93. package/finance-55OJ6GYP.js.map +1 -0
  94. package/{generate-AA2PVOYQ.js → generate-XUKBK523.js} +26 -21
  95. package/generate-XUKBK523.js.map +1 -0
  96. package/{github-VJVIBTVF.js → github-V4MD2PMM.js} +83 -8
  97. package/github-V4MD2PMM.js.map +1 -0
  98. package/{goal-7SYVHDTK.js → goal-FS5FJKVU.js} +69 -13
  99. package/goal-FS5FJKVU.js.map +1 -0
  100. package/{host-UVQMIOBA.js → host-GITTJ6PR.js} +124 -10
  101. package/host-GITTJ6PR.js.map +1 -0
  102. package/{logs-PIS4X24E.js → logs-EEUIGYUD.js} +51 -11
  103. package/logs-EEUIGYUD.js.map +1 -0
  104. package/{mail-L33OSQ2R.js → mail-G4SAJSBD.js} +39 -8
  105. package/mail-G4SAJSBD.js.map +1 -0
  106. package/{maps-D5XTXU5U.js → maps-7ANNU3BX.js} +65 -11
  107. package/maps-7ANNU3BX.js.map +1 -0
  108. package/{model-ZFMRECDM.js → model-DSPDCJLB.js} +6 -6
  109. package/model-DSPDCJLB.js.map +1 -0
  110. package/{model-provider-EZZ2DRYZ.js → model-provider-RZQ45PNG.js} +6 -6
  111. package/model-provider-RZQ45PNG.js.map +1 -0
  112. package/package.json +1 -1
  113. package/{people-search-PFTIO2QS.js → people-search-I7PUMF5M.js} +22 -6
  114. package/people-search-I7PUMF5M.js.map +1 -0
  115. package/{phone-6SG5ZUNL.js → phone-SSAPGMTW.js} +90 -9
  116. package/phone-SSAPGMTW.js.map +1 -0
  117. package/{recognize-LLU6J3SW.js → recognize-D7VORZBN.js} +27 -9
  118. package/recognize-D7VORZBN.js.map +1 -0
  119. package/{resource-FGUSXS4G.js → resource-76IV3TMW.js} +21 -7
  120. package/resource-76IV3TMW.js.map +1 -0
  121. package/{scrape-BAUZ2YFD.js → scrape-JBDLNTLB.js} +22 -6
  122. package/scrape-JBDLNTLB.js.map +1 -0
  123. package/{search-DLO5RXRM.js → search-UNZNUTZX.js} +29 -9
  124. package/search-UNZNUTZX.js.map +1 -0
  125. package/{slack-CVATPKP3.js → slack-AAH6GG2W.js} +103 -11
  126. package/slack-AAH6GG2W.js.map +1 -0
  127. package/{teams-ZZYO6YIK.js → teams-6OPXE4TX.js} +90 -9
  128. package/teams-6OPXE4TX.js.map +1 -0
  129. package/{telegram-VY7T4YAR.js → telegram-RRZG73RT.js} +101 -10
  130. package/telegram-RRZG73RT.js.map +1 -0
  131. package/{upgrade-GFA4ZUU4.js → upgrade-I5IL4UQL.js} +3 -4
  132. package/upgrade-I5IL4UQL.js.map +1 -0
  133. package/{video-STFG7BET.js → video-HV44W4X7.js} +5 -4
  134. package/video-HV44W4X7.js.map +1 -0
  135. package/{weather-ISJEHJWR.js → weather-EQ7CSADB.js} +70 -16
  136. package/weather-EQ7CSADB.js.map +1 -0
  137. package/{web-YN4CVHK7.js → web-6LIMWEOZ.js} +5 -5
  138. package/web-6LIMWEOZ.js.map +1 -0
  139. package/{web-search-PC7IECND.js → web-search-AT7WONZN.js} +22 -6
  140. package/web-search-AT7WONZN.js.map +1 -0
  141. package/{whoami-KXFXZGM6.js → whoami-RKTLLSI4.js} +16 -7
  142. package/whoami-RKTLLSI4.js.map +1 -0
  143. package/{workflow-O7YZHB7A.js → workflow-ZH32P622.js} +135 -39
  144. package/workflow-ZH32P622.js.map +1 -0
  145. package/zero.js +40 -40
  146. package/agent-HUDTEGLK.js.map +0 -1
  147. package/banking-BMZONEXP.js.map +0 -1
  148. package/browser-LQP445CU.js.map +0 -1
  149. package/chat-UF7QAWUT.js.map +0 -1
  150. package/chunk-2W73DZDW.js +0 -32
  151. package/chunk-2W73DZDW.js.map +0 -1
  152. package/chunk-6PN6QGIM.js +0 -11405
  153. package/chunk-6PN6QGIM.js.map +0 -1
  154. package/chunk-A6TMOGPR.js.map +0 -1
  155. package/chunk-ANOLYIPL.js +0 -10
  156. package/chunk-ANOLYIPL.js.map +0 -1
  157. package/chunk-E53W6UVQ.js.map +0 -1
  158. package/chunk-V5ZVB7RJ.js.map +0 -1
  159. package/chunk-V7A6ZFHR.js.map +0 -1
  160. package/computer-use-RRD7BCCK.js.map +0 -1
  161. package/connector-XX7UU6XE.js.map +0 -1
  162. package/credit-GDNNAQRO.js.map +0 -1
  163. package/developer-support-IISP5UBI.js.map +0 -1
  164. package/doctor-IZM2TJOH.js.map +0 -1
  165. package/feishu-XB7SQBSI.js.map +0 -1
  166. package/finance-OGWHKQLU.js.map +0 -1
  167. package/generate-AA2PVOYQ.js.map +0 -1
  168. package/github-VJVIBTVF.js.map +0 -1
  169. package/goal-7SYVHDTK.js.map +0 -1
  170. package/host-UVQMIOBA.js.map +0 -1
  171. package/logs-PIS4X24E.js.map +0 -1
  172. package/mail-L33OSQ2R.js.map +0 -1
  173. package/maps-D5XTXU5U.js.map +0 -1
  174. package/model-ZFMRECDM.js.map +0 -1
  175. package/model-provider-EZZ2DRYZ.js.map +0 -1
  176. package/people-search-PFTIO2QS.js.map +0 -1
  177. package/phone-6SG5ZUNL.js.map +0 -1
  178. package/recognize-LLU6J3SW.js.map +0 -1
  179. package/resource-FGUSXS4G.js.map +0 -1
  180. package/scrape-BAUZ2YFD.js.map +0 -1
  181. package/search-DLO5RXRM.js.map +0 -1
  182. package/slack-CVATPKP3.js.map +0 -1
  183. package/teams-ZZYO6YIK.js.map +0 -1
  184. package/telegram-VY7T4YAR.js.map +0 -1
  185. package/upgrade-GFA4ZUU4.js.map +0 -1
  186. package/video-STFG7BET.js.map +0 -1
  187. package/weather-ISJEHJWR.js.map +0 -1
  188. package/web-YN4CVHK7.js.map +0 -1
  189. package/web-search-PC7IECND.js.map +0 -1
  190. package/whoami-KXFXZGM6.js.map +0 -1
  191. package/workflow-O7YZHB7A.js.map +0 -1
  192. /package/{chunk-QC63TUJC.js.map → chunk-C62A6LD6.js.map} +0 -0
  193. /package/{chunk-5ZZI2LSO.js.map → chunk-GHKWW4NC.js.map} +0 -0
  194. /package/{chunk-BRV4D3P2.js.map → chunk-RUKMHBNQ.js.map} +0 -0
@@ -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-DUA6CF7E.js";
14
+ import {
15
+ getClientConfig,
16
+ handleError,
17
+ initClient
18
+ } from "./chunk-GHKWW4NC.js";
19
+ import {
20
+ init_esm_shims
21
+ } from "./chunk-AUWSMG4F.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-2SJTFDC2.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":[]}
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from "node:module";
3
+ const require = __createRequire(import.meta.url);
4
+ import {
5
+ zeroBillingCreditCheckoutContract,
6
+ zeroBillingStatusContract
7
+ } from "./chunk-7UZXNER2.js";
8
+ import {
9
+ getClientConfig,
10
+ handleError,
11
+ initClient
12
+ } from "./chunk-GHKWW4NC.js";
13
+ import {
14
+ decodeZeroTokenPayload
15
+ } from "./chunk-32FE3MDA.js";
16
+ import {
17
+ init_esm_shims
18
+ } from "./chunk-AUWSMG4F.js";
19
+
20
+ // src/lib/api/domains/zero-billing.ts
21
+ init_esm_shims();
22
+ async function getZeroBillingStatus() {
23
+ const config = await getClientConfig();
24
+ const client = initClient(zeroBillingStatusContract, config);
25
+ const result = await client.get({ headers: {} });
26
+ if (result.status === 200) {
27
+ return result.body;
28
+ }
29
+ handleError(result, "Failed to get billing status");
30
+ }
31
+ async function createZeroCreditCheckout(body) {
32
+ const config = await getClientConfig();
33
+ const client = initClient(zeroBillingCreditCheckoutContract, config);
34
+ const result = await client.create({ body });
35
+ if (result.status === 200) {
36
+ return result.body;
37
+ }
38
+ handleError(result, "Failed to create credit checkout");
39
+ }
40
+
41
+ // src/commands/zero/shared/billing-capabilities.ts
42
+ init_esm_shims();
43
+ function legacyPaidCapability(tier) {
44
+ return tier !== "limited-free-1" && tier !== "pro-suspend";
45
+ }
46
+ function currentPlanCanBuyCredits(billing) {
47
+ return billing.canBuyCredits ?? legacyPaidCapability(billing.tier);
48
+ }
49
+ function currentPlanAllowsVideo(billing) {
50
+ return billing.videoGenerationAllowed ?? legacyPaidCapability(billing.tier);
51
+ }
52
+ function currentTokenCanReadBilling() {
53
+ const payload = decodeZeroTokenPayload();
54
+ return payload === void 0 || payload.capabilities.includes("billing:read");
55
+ }
56
+
57
+ export {
58
+ getZeroBillingStatus,
59
+ createZeroCreditCheckout,
60
+ currentPlanCanBuyCredits,
61
+ currentPlanAllowsVideo,
62
+ currentTokenCanReadBilling
63
+ };
64
+ //# sourceMappingURL=chunk-4FTIKZKP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/api/domains/zero-billing.ts","../src/commands/zero/shared/billing-capabilities.ts"],"sourcesContent":["import { initClient } from \"@vm0/api-contracts/contracts/trpc-contract\";\nimport {\n zeroBillingStatusContract,\n zeroBillingCreditCheckoutContract,\n type BillingStatusResponse,\n} from \"@vm0/api-contracts/contracts/zero-billing\";\n\nimport { getClientConfig, handleError } from \"../core/client-factory\";\n\nexport async function getZeroBillingStatus(): Promise<BillingStatusResponse> {\n const config = await getClientConfig();\n const client = initClient(zeroBillingStatusContract, config);\n\n const result = await client.get({ headers: {} });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to get billing status\");\n}\n\nexport async function createZeroCreditCheckout(body: {\n readonly credits: number;\n readonly successUrl: string;\n readonly cancelUrl: string;\n readonly autoRecharge?: {\n readonly enabled: boolean;\n readonly threshold?: number;\n readonly amount?: number;\n };\n}): Promise<{ readonly url: string }> {\n const config = await getClientConfig();\n const client = initClient(zeroBillingCreditCheckoutContract, config);\n\n const result = await client.create({ body });\n if (result.status === 200) {\n return result.body;\n }\n handleError(result, \"Failed to create credit checkout\");\n}\n","import type { BillingStatusResponse } from \"@vm0/api-contracts/contracts/zero-billing\";\nimport { decodeZeroTokenPayload } from \"../../../lib/api/zero-token\";\n\nfunction legacyPaidCapability(tier: string): boolean {\n return tier !== \"limited-free-1\" && tier !== \"pro-suspend\";\n}\n\nexport function currentPlanCanBuyCredits(\n billing: BillingStatusResponse,\n): boolean {\n return billing.canBuyCredits ?? legacyPaidCapability(billing.tier);\n}\n\nexport function currentPlanAllowsVideo(\n billing: BillingStatusResponse,\n): boolean {\n return billing.videoGenerationAllowed ?? legacyPaidCapability(billing.tier);\n}\n\nexport function currentTokenCanReadBilling(): boolean {\n const payload = decodeZeroTokenPayload();\n return payload === undefined || payload.capabilities.includes(\"billing:read\");\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AASA,eAAsB,uBAAuD;AAC3E,QAAM,SAAS,MAAM,gBAAgB;AACrC,QAAM,SAAS,WAAW,2BAA2B,MAAM;AAE3D,QAAM,SAAS,MAAM,OAAO,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;AAC/C,MAAI,OAAO,WAAW,KAAK;AACzB,WAAO,OAAO;AAAA,EAChB;AACA,cAAY,QAAQ,8BAA8B;AACpD;AAEA,eAAsB,yBAAyB,MAST;AACpC,QAAM,SAAS,MAAM,gBAAgB;AACrC,QAAM,SAAS,WAAW,mCAAmC,MAAM;AAEnE,QAAM,SAAS,MAAM,OAAO,OAAO,EAAE,KAAK,CAAC;AAC3C,MAAI,OAAO,WAAW,KAAK;AACzB,WAAO,OAAO;AAAA,EAChB;AACA,cAAY,QAAQ,kCAAkC;AACxD;;;ACtCA;AAGA,SAAS,qBAAqB,MAAuB;AACnD,SAAO,SAAS,oBAAoB,SAAS;AAC/C;AAEO,SAAS,yBACd,SACS;AACT,SAAO,QAAQ,iBAAiB,qBAAqB,QAAQ,IAAI;AACnE;AAEO,SAAS,uBACd,SACS;AACT,SAAO,QAAQ,0BAA0B,qBAAqB,QAAQ,IAAI;AAC5E;AAEO,SAAS,6BAAsC;AACpD,QAAM,UAAU,uBAAuB;AACvC,SAAO,YAAY,UAAa,QAAQ,aAAa,SAAS,cAAc;AAC9E;","names":[]}