@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.
- package/{agent-HUDTEGLK.js → agent-4F3XAJWN.js} +12 -6
- package/agent-4F3XAJWN.js.map +1 -0
- package/{banking-BMZONEXP.js → banking-CWQFQKZB.js} +61 -7
- package/banking-CWQFQKZB.js.map +1 -0
- package/{browser-LQP445CU.js → browser-BI6UFWPH.js} +4 -5
- package/browser-BI6UFWPH.js.map +1 -0
- package/{chat-UF7QAWUT.js → chat-MKIW4FPP.js} +24 -16
- package/chat-MKIW4FPP.js.map +1 -0
- package/chunk-2SJTFDC2.js +189 -0
- package/chunk-2SJTFDC2.js.map +1 -0
- package/chunk-4FTIKZKP.js +64 -0
- package/chunk-4FTIKZKP.js.map +1 -0
- package/chunk-7UZXNER2.js +568 -0
- package/chunk-7UZXNER2.js.map +1 -0
- package/chunk-A6ZRMNM3.js +102 -0
- package/chunk-A6ZRMNM3.js.map +1 -0
- package/{chunk-QC63TUJC.js → chunk-C62A6LD6.js} +2 -2
- package/chunk-CCTF3YVW.js +52 -0
- package/chunk-CCTF3YVW.js.map +1 -0
- package/chunk-CD2BLKGC.js +188 -0
- package/chunk-CD2BLKGC.js.map +1 -0
- package/chunk-CEJGHPF3.js +55 -0
- package/chunk-CEJGHPF3.js.map +1 -0
- package/chunk-DUA6CF7E.js +2053 -0
- package/chunk-DUA6CF7E.js.map +1 -0
- package/chunk-E2TQAKNL.js +1300 -0
- package/chunk-E2TQAKNL.js.map +1 -0
- package/{chunk-5ZZI2LSO.js → chunk-GHKWW4NC.js} +5 -5
- package/chunk-GV3PG6CZ.js +114 -0
- package/chunk-GV3PG6CZ.js.map +1 -0
- package/chunk-GY7D76EZ.js +81 -0
- package/chunk-GY7D76EZ.js.map +1 -0
- package/chunk-HHHHZMTA.js +434 -0
- package/chunk-HHHHZMTA.js.map +1 -0
- package/chunk-HZYOJTEE.js +1275 -0
- package/chunk-HZYOJTEE.js.map +1 -0
- package/chunk-J3ZRXVI6.js +740 -0
- package/chunk-J3ZRXVI6.js.map +1 -0
- package/chunk-JJWFO27K.js +31 -0
- package/chunk-JJWFO27K.js.map +1 -0
- package/chunk-JV6LM2YC.js +39 -0
- package/chunk-JV6LM2YC.js.map +1 -0
- package/chunk-KER77KJB.js +105 -0
- package/chunk-KER77KJB.js.map +1 -0
- package/{chunk-V5ZVB7RJ.js → chunk-KKO2XGLQ.js} +1 -6
- package/chunk-KKO2XGLQ.js.map +1 -0
- package/chunk-LIYPTQAO.js +198 -0
- package/chunk-LIYPTQAO.js.map +1 -0
- package/chunk-LYLDVUHT.js +131 -0
- package/chunk-LYLDVUHT.js.map +1 -0
- package/chunk-PFWBO2VK.js +801 -0
- package/chunk-PFWBO2VK.js.map +1 -0
- package/chunk-RTCRU35A.js +194 -0
- package/chunk-RTCRU35A.js.map +1 -0
- package/{chunk-F2AM4RWA.js → chunk-RTEEWZUT.js} +2 -2
- package/{chunk-F2AM4RWA.js.map → chunk-RTEEWZUT.js.map} +1 -1
- package/{chunk-BRV4D3P2.js → chunk-RUKMHBNQ.js} +2 -2
- package/chunk-SA4DYSBR.js +31 -0
- package/chunk-SA4DYSBR.js.map +1 -0
- package/chunk-SJPOFQJU.js +792 -0
- package/chunk-SJPOFQJU.js.map +1 -0
- package/{chunk-V7A6ZFHR.js → chunk-SMPSKBAP.js} +25 -774
- package/chunk-SMPSKBAP.js.map +1 -0
- package/{chunk-E53W6UVQ.js → chunk-T2X2EGV2.js} +4 -4
- package/chunk-T2X2EGV2.js.map +1 -0
- package/chunk-U2GQH6AD.js +309 -0
- package/chunk-U2GQH6AD.js.map +1 -0
- package/chunk-U6A2RPHO.js +66 -0
- package/chunk-U6A2RPHO.js.map +1 -0
- package/chunk-UIXUGVZB.js +362 -0
- package/chunk-UIXUGVZB.js.map +1 -0
- package/chunk-XRZKJACM.js +49 -0
- package/chunk-XRZKJACM.js.map +1 -0
- package/chunk-YDS3X7KB.js +202 -0
- package/chunk-YDS3X7KB.js.map +1 -0
- package/{chunk-A6TMOGPR.js → chunk-ZKNJW4K6.js} +1412 -334
- package/chunk-ZKNJW4K6.js.map +1 -0
- package/chunk-ZXSCBS77.js +90 -0
- package/chunk-ZXSCBS77.js.map +1 -0
- package/{computer-use-RRD7BCCK.js → computer-use-6AEVW47F.js} +9 -7
- package/computer-use-6AEVW47F.js.map +1 -0
- package/{connector-XX7UU6XE.js → connector-XDQ6JEBU.js} +25 -13
- package/connector-XDQ6JEBU.js.map +1 -0
- package/{credit-GDNNAQRO.js → credit-JPQA5XPA.js} +8 -10
- package/credit-JPQA5XPA.js.map +1 -0
- package/{developer-support-IISP5UBI.js → developer-support-V7NZOU2P.js} +27 -7
- package/developer-support-V7NZOU2P.js.map +1 -0
- package/{doctor-IZM2TJOH.js → doctor-FJO24TG3.js} +13 -11
- package/doctor-FJO24TG3.js.map +1 -0
- package/{feishu-XB7SQBSI.js → feishu-PNOAM33Q.js} +99 -9
- package/feishu-PNOAM33Q.js.map +1 -0
- package/{finance-OGWHKQLU.js → finance-55OJ6GYP.js} +49 -9
- package/finance-55OJ6GYP.js.map +1 -0
- package/{generate-AA2PVOYQ.js → generate-XUKBK523.js} +26 -21
- package/generate-XUKBK523.js.map +1 -0
- package/{github-VJVIBTVF.js → github-V4MD2PMM.js} +83 -8
- package/github-V4MD2PMM.js.map +1 -0
- package/{goal-7SYVHDTK.js → goal-FS5FJKVU.js} +69 -13
- package/goal-FS5FJKVU.js.map +1 -0
- package/{host-UVQMIOBA.js → host-GITTJ6PR.js} +124 -10
- package/host-GITTJ6PR.js.map +1 -0
- package/{logs-PIS4X24E.js → logs-EEUIGYUD.js} +51 -11
- package/logs-EEUIGYUD.js.map +1 -0
- package/{mail-L33OSQ2R.js → mail-G4SAJSBD.js} +39 -8
- package/mail-G4SAJSBD.js.map +1 -0
- package/{maps-D5XTXU5U.js → maps-7ANNU3BX.js} +65 -11
- package/maps-7ANNU3BX.js.map +1 -0
- package/{model-ZFMRECDM.js → model-DSPDCJLB.js} +6 -6
- package/model-DSPDCJLB.js.map +1 -0
- package/{model-provider-EZZ2DRYZ.js → model-provider-RZQ45PNG.js} +6 -6
- package/model-provider-RZQ45PNG.js.map +1 -0
- package/package.json +1 -1
- package/{people-search-PFTIO2QS.js → people-search-I7PUMF5M.js} +22 -6
- package/people-search-I7PUMF5M.js.map +1 -0
- package/{phone-6SG5ZUNL.js → phone-SSAPGMTW.js} +90 -9
- package/phone-SSAPGMTW.js.map +1 -0
- package/{recognize-LLU6J3SW.js → recognize-D7VORZBN.js} +27 -9
- package/recognize-D7VORZBN.js.map +1 -0
- package/{resource-FGUSXS4G.js → resource-76IV3TMW.js} +21 -7
- package/resource-76IV3TMW.js.map +1 -0
- package/{scrape-BAUZ2YFD.js → scrape-JBDLNTLB.js} +22 -6
- package/scrape-JBDLNTLB.js.map +1 -0
- package/{search-DLO5RXRM.js → search-UNZNUTZX.js} +29 -9
- package/search-UNZNUTZX.js.map +1 -0
- package/{slack-CVATPKP3.js → slack-AAH6GG2W.js} +103 -11
- package/slack-AAH6GG2W.js.map +1 -0
- package/{teams-ZZYO6YIK.js → teams-6OPXE4TX.js} +90 -9
- package/teams-6OPXE4TX.js.map +1 -0
- package/{telegram-VY7T4YAR.js → telegram-RRZG73RT.js} +101 -10
- package/telegram-RRZG73RT.js.map +1 -0
- package/{upgrade-GFA4ZUU4.js → upgrade-I5IL4UQL.js} +3 -4
- package/upgrade-I5IL4UQL.js.map +1 -0
- package/{video-STFG7BET.js → video-HV44W4X7.js} +5 -4
- package/video-HV44W4X7.js.map +1 -0
- package/{weather-ISJEHJWR.js → weather-EQ7CSADB.js} +70 -16
- package/weather-EQ7CSADB.js.map +1 -0
- package/{web-YN4CVHK7.js → web-6LIMWEOZ.js} +5 -5
- package/web-6LIMWEOZ.js.map +1 -0
- package/{web-search-PC7IECND.js → web-search-AT7WONZN.js} +22 -6
- package/web-search-AT7WONZN.js.map +1 -0
- package/{whoami-KXFXZGM6.js → whoami-RKTLLSI4.js} +16 -7
- package/whoami-RKTLLSI4.js.map +1 -0
- package/{workflow-O7YZHB7A.js → workflow-ZH32P622.js} +135 -39
- package/workflow-ZH32P622.js.map +1 -0
- package/zero.js +40 -40
- package/agent-HUDTEGLK.js.map +0 -1
- package/banking-BMZONEXP.js.map +0 -1
- package/browser-LQP445CU.js.map +0 -1
- package/chat-UF7QAWUT.js.map +0 -1
- package/chunk-2W73DZDW.js +0 -32
- package/chunk-2W73DZDW.js.map +0 -1
- package/chunk-6PN6QGIM.js +0 -11405
- package/chunk-6PN6QGIM.js.map +0 -1
- package/chunk-A6TMOGPR.js.map +0 -1
- package/chunk-ANOLYIPL.js +0 -10
- package/chunk-ANOLYIPL.js.map +0 -1
- package/chunk-E53W6UVQ.js.map +0 -1
- package/chunk-V5ZVB7RJ.js.map +0 -1
- package/chunk-V7A6ZFHR.js.map +0 -1
- package/computer-use-RRD7BCCK.js.map +0 -1
- package/connector-XX7UU6XE.js.map +0 -1
- package/credit-GDNNAQRO.js.map +0 -1
- package/developer-support-IISP5UBI.js.map +0 -1
- package/doctor-IZM2TJOH.js.map +0 -1
- package/feishu-XB7SQBSI.js.map +0 -1
- package/finance-OGWHKQLU.js.map +0 -1
- package/generate-AA2PVOYQ.js.map +0 -1
- package/github-VJVIBTVF.js.map +0 -1
- package/goal-7SYVHDTK.js.map +0 -1
- package/host-UVQMIOBA.js.map +0 -1
- package/logs-PIS4X24E.js.map +0 -1
- package/mail-L33OSQ2R.js.map +0 -1
- package/maps-D5XTXU5U.js.map +0 -1
- package/model-ZFMRECDM.js.map +0 -1
- package/model-provider-EZZ2DRYZ.js.map +0 -1
- package/people-search-PFTIO2QS.js.map +0 -1
- package/phone-6SG5ZUNL.js.map +0 -1
- package/recognize-LLU6J3SW.js.map +0 -1
- package/resource-FGUSXS4G.js.map +0 -1
- package/scrape-BAUZ2YFD.js.map +0 -1
- package/search-DLO5RXRM.js.map +0 -1
- package/slack-CVATPKP3.js.map +0 -1
- package/teams-ZZYO6YIK.js.map +0 -1
- package/telegram-VY7T4YAR.js.map +0 -1
- package/upgrade-GFA4ZUU4.js.map +0 -1
- package/video-STFG7BET.js.map +0 -1
- package/weather-ISJEHJWR.js.map +0 -1
- package/web-YN4CVHK7.js.map +0 -1
- package/web-search-PC7IECND.js.map +0 -1
- package/whoami-KXFXZGM6.js.map +0 -1
- package/workflow-O7YZHB7A.js.map +0 -1
- /package/{chunk-QC63TUJC.js.map → chunk-C62A6LD6.js.map} +0 -0
- /package/{chunk-5ZZI2LSO.js.map → chunk-GHKWW4NC.js.map} +0 -0
- /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":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAkDA,eAAsB,eAAe,SAOL;AAC9B,QAAM,SAAS,MAAM,gBAAgB;AACrC,QAAM,SAAS,WAAW,oBAAoB,MAAM;AACpD,QAAM,SAAS,MAAM,OAAO,OAAO;AAAA,IACjC,OAAO;AAAA,MACL,SAAS,QAAQ;AAAA,MACjB,SAAS,QAAQ;AAAA,MACjB,OAAO,QAAQ;AAAA,MACf,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,OAAO,QAAQ;AAAA,IACjB;AAAA,EACF,CAAC;AACD,MAAI,OAAO,WAAW,IAAK,QAAO,OAAO;AACzC,cAAY,QAAQ,gCAAgC;AACtD;AAEA,eAAsB,4BAA6D;AACjF,QAAM,SAAS,MAAM,gBAAgB;AACrC,QAAM,SAAS,WAAW,qBAAqB,MAAM;AACrD,QAAM,SAAS,MAAM,OAAO,SAAS;AACrC,MAAI,OAAO,WAAW,KAAK;AACzB,WAAO;AAAA,MACL,aAAa,OAAO,KAAK;AAAA,MACzB,eAAe,OAAO,KAAK;AAAA;AAAA;AAAA,MAG3B,aAAa,OAAO,KAAK,eAAe;AAAA,IAC1C;AAAA,EACF;AACA,cAAY,QAAQ,oCAAoC;AAC1D;AAEA,eAAsB,yBAAyB,SAGP;AACtC,QAAM,SAAS,MAAM,gBAAgB;AACrC,QAAM,SAAS,WAAW,qBAAqB,MAAM;AACrD,QAAM,SAAS,MAAM,OAAO,OAAO;AAAA,IACjC,OAAO;AAAA,MACL,GAAI,QAAQ,aAAa,EAAE,YAAY,QAAQ,WAAW,IAAI,CAAC;AAAA,MAC/D,GAAI,QAAQ,eAAe,EAAE,cAAc,QAAQ,aAAa,IAAI,CAAC;AAAA,IACvE;AAAA,EACF,CAAC;AACD,MAAI,OAAO,WAAW,KAAK;AACzB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,OAAO,KAAK;AAAA,MACpB,SAAS,OAAO,KAAK;AAAA,IACvB;AAAA,EACF;AACA,MAAI,OAAO,WAAW,KAAK;AACzB,WAAO,EAAE,MAAM,UAAU;AAAA,EAC3B;AACA,cAAY,QAAQ,mCAAmC;AACzD;AAEA,eAAsB,qBAAqB,SAIH;AACtC,QAAM,SAAS,MAAM,gBAAgB;AACrC,QAAM,SAAS,WAAW,qBAAqB,MAAM;AACrD,QAAM,SAAS,MAAM,OAAO,OAAO;AAAA,IACjC,MAAM;AAAA,MACJ,SAAS,QAAQ;AAAA,MACjB,OAAO,QAAQ;AAAA,MACf,GAAI,QAAQ,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,QAAQ,MAAM;AAAA,IAChE;AAAA,EACF,CAAC;AACD,MAAI,OAAO,WAAW,KAAK;AACzB,WAAO;AAAA,MACL,UAAU,OAAO,KAAK;AAAA,MACtB,OAAO,OAAO,KAAK;AAAA;AAAA;AAAA,MAGnB,eAAe,OAAO,KAAK,iBAAiB,QAAQ,SAAS;AAAA,IAC/D;AAAA,EACF;AACA,cAAY,QAAQ,8BAA8B;AACpD;AAEA,eAAsB,qBAAqB,SAGM;AAC/C,QAAM,SAAS,MAAM,gBAAgB;AACrC,QAAM,SAAS,WAAW,0BAA0B,MAAM;AAC1D,QAAM,SAAS,MAAM,OAAO,OAAO;AAAA,IACjC,QAAQ,EAAE,IAAI,QAAQ,SAAS;AAAA,IAC/B,MAAM,EAAE,OAAO,QAAQ,MAAM;AAAA,EAC/B,CAAC;AACD,MAAI,OAAO,WAAW,KAAK;AACzB,WAAO,EAAE,UAAU,QAAQ,UAAU,OAAO,QAAQ,MAAM;AAAA,EAC5D;AACA,cAAY,QAAQ,8BAA8B;AACpD;AAEA,eAAsB,kBAAkB,SAER;AAC9B,QAAM,SAAS,MAAM,gBAAgB;AACrC,QAAM,SAAS,WAAW,4BAA4B,MAAM;AAC5D,QAAM,SAAS,MAAM,OAAO,IAAI;AAAA,IAC9B,QAAQ,EAAE,IAAI,QAAQ,SAAS;AAAA,EACjC,CAAC;AACD,MAAI,OAAO,WAAW,KAAK;AACzB,WAAO,OAAO;AAAA,EAChB;AACA,cAAY,QAAQ,2BAA2B;AACjD;AAEA,eAAsB,yBAAyB,SAE3B;AAClB,QAAM,SAAS,MAAM,kBAAkB,OAAO;AAC9C,MAAI,OAAO,SAAS;AAClB,WAAO,OAAO;AAAA,EAChB;AAIA,QAAM,WAAW,MAAM,0BAA0B;AACjD,QAAM,aAAa,SAAS,YAAY,KAAK,CAAC,cAAc;AAC1D,WAAO,UAAU,OAAO,QAAQ;AAAA,EAClC,CAAC;AACD,MAAI,CAAC,YAAY;AACf,UAAM,IAAI;AAAA,MACR,gBAAgB,QAAQ,QAAQ;AAAA,IAClC;AAAA,EACF;AACA,SAAO,WAAW;AACpB;AAEA,eAAsB,kBACpB,MACkC;AAClC,QAAM,SAAS,MAAM,gBAAgB;AACrC,QAAM,SAAS,WAAW,oBAAoB,MAAM;AACpD,QAAM,SAAS,MAAM,OAAO,KAAK,EAAE,KAAK,CAAC;AACzC,MAAI,OAAO,WAAW,KAAK;AACzB,WAAO,OAAO;AAAA,EAChB;AACA,cAAY,QAAQ,2BAA2B;AACjD;AAEA,eAAsB,mBAAmB,SAIP;AAChC,QAAM,SAAS,MAAM,gBAAgB;AACrC,QAAM,SAAS,WAAW,0BAA0B,MAAM;AAC1D,QAAM,SAAS,MAAM,OAAO,KAAK;AAAA,IAC/B,QAAQ,EAAE,UAAU,QAAQ,SAAS;AAAA,IACrC,OAAO;AAAA,MACL,aAAa,QAAQ;AAAA,MACrB,OAAO,QAAQ;AAAA,IACjB;AAAA,EACF,CAAC;AACD,MAAI,OAAO,WAAW,KAAK;AACzB,WAAO,OAAO,KAAK,OAAO,IAAI,kBAAkB;AAAA,EAClD;AACA,cAAY,QAAQ,4BAA4B;AAClD;AAEA,eAAsB,mCAAmC,SAGO;AAC9D,QAAM,SAAS,MAAM,gBAAgB;AACrC,QAAM,SAAS,WAAW,kCAAkC,MAAM;AAClE,QAAM,SAAS,MAAM,OAAO,OAAO;AAAA,IACjC,QAAQ,EAAE,IAAI,QAAQ,SAAS;AAAA,IAC/B,MAAM,EAAE,OAAO,QAAQ,MAAM;AAAA,EAC/B,CAAC;AACD,MAAI,OAAO,WAAW,KAAK;AACzB,WAAO;AAAA,MACL,UAAU,QAAQ;AAAA,MAClB,eAAe,QAAQ;AAAA,IACzB;AAAA,EACF;AACA,cAAY,QAAQ,oCAAoC;AAC1D;","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":[]}
|