@usenaive-sdk/cli 0.2.0 → 0.2.2

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 (65) hide show
  1. package/README.md +25 -0
  2. package/dist/client.d.ts +10 -0
  3. package/dist/client.js +25 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/commands/billing.d.ts +2 -0
  6. package/dist/commands/billing.js +204 -0
  7. package/dist/commands/billing.js.map +1 -0
  8. package/dist/commands/companies.d.ts +2 -0
  9. package/dist/commands/companies.js +88 -0
  10. package/dist/commands/companies.js.map +1 -0
  11. package/dist/commands/domains.d.ts +2 -0
  12. package/dist/commands/domains.js +252 -0
  13. package/dist/commands/domains.js.map +1 -0
  14. package/dist/commands/email.d.ts +2 -0
  15. package/dist/commands/email.js +289 -0
  16. package/dist/commands/email.js.map +1 -0
  17. package/dist/commands/identity.d.ts +2 -0
  18. package/dist/commands/identity.js +109 -0
  19. package/dist/commands/identity.js.map +1 -0
  20. package/dist/commands/images.d.ts +2 -0
  21. package/dist/commands/images.js +291 -0
  22. package/dist/commands/images.js.map +1 -0
  23. package/dist/commands/jobs.d.ts +2 -0
  24. package/dist/commands/jobs.js +143 -0
  25. package/dist/commands/jobs.js.map +1 -0
  26. package/dist/commands/keys.d.ts +2 -0
  27. package/dist/commands/keys.js +133 -0
  28. package/dist/commands/keys.js.map +1 -0
  29. package/dist/commands/link.d.ts +3 -0
  30. package/dist/commands/link.js +91 -0
  31. package/dist/commands/link.js.map +1 -0
  32. package/dist/commands/login.d.ts +2 -0
  33. package/dist/commands/login.js +63 -0
  34. package/dist/commands/login.js.map +1 -0
  35. package/dist/commands/register.d.ts +2 -0
  36. package/dist/commands/register.js +68 -0
  37. package/dist/commands/register.js.map +1 -0
  38. package/dist/commands/search.d.ts +2 -0
  39. package/dist/commands/search.js +209 -0
  40. package/dist/commands/search.js.map +1 -0
  41. package/dist/commands/social.d.ts +2 -0
  42. package/dist/commands/social.js +402 -0
  43. package/dist/commands/social.js.map +1 -0
  44. package/dist/commands/status.d.ts +2 -0
  45. package/dist/commands/status.js +47 -0
  46. package/dist/commands/status.js.map +1 -0
  47. package/dist/commands/usage.d.ts +2 -0
  48. package/dist/commands/usage.js +62 -0
  49. package/dist/commands/usage.js.map +1 -0
  50. package/dist/commands/video.d.ts +2 -0
  51. package/dist/commands/video.js +243 -0
  52. package/dist/commands/video.js.map +1 -0
  53. package/dist/commands/whoami.d.ts +2 -0
  54. package/dist/commands/whoami.js +37 -0
  55. package/dist/commands/whoami.js.map +1 -0
  56. package/dist/config.d.ts +10 -0
  57. package/dist/config.js +40 -0
  58. package/dist/config.js.map +1 -0
  59. package/dist/index.d.ts +2 -0
  60. package/dist/index.js +83 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/output.d.ts +37 -0
  63. package/dist/output.js +84 -0
  64. package/dist/output.js.map +1 -0
  65. package/package.json +1 -1
@@ -0,0 +1,402 @@
1
+ import { Command } from "commander";
2
+ import { apiRequest, handleApiError } from "../client.js";
3
+ import { agentOutput } from "../output.js";
4
+ export const socialCmd = new Command("social")
5
+ .description("Social media — connect accounts, create posts, view analytics (via bundle.social)")
6
+ .addHelpText("after", `
7
+ Subcommands:
8
+ naive social status Check activation + connected accounts
9
+ naive social activate Activate social media for your company
10
+ naive social connect Get OAuth URL for a platform
11
+ naive social portal Get multi-platform portal URL
12
+ naive social accounts List connected accounts
13
+ naive social label <id> --label ... Set a label on an account
14
+ naive social disconnect <id> Disconnect an account
15
+ naive social sync Sync accounts from bundle.social
16
+ naive social upload --url <url> Upload media from URL
17
+ naive social posts List posts
18
+ naive social post <content> Create a post (draft by default)
19
+ naive social get <id> Get post details
20
+ naive social edit <id> Edit a draft post
21
+ naive social delete <id> Delete a post
22
+ naive social publish <id> Publish a draft
23
+ naive social analytics <id> Get post analytics
24
+ naive social comments <id> Get post comments
25
+ naive social account-analytics <id> Get account analytics
26
+
27
+ Supported Platforms:
28
+ TWITTER, LINKEDIN, INSTAGRAM, FACEBOOK, TIKTOK, YOUTUBE,
29
+ THREADS, PINTEREST, REDDIT, BLUESKY
30
+
31
+ Platform Tips:
32
+ YouTube: --youtube-type SHORT (vertical, <3min) or VIDEO (landscape)
33
+ TikTok: privacy auto-set to PUBLIC_TO_EVERYONE
34
+ Instagram: defaults to Reel type for video posts
35
+ Twitter: auto-truncated to 280 chars
36
+ Reddit: pass --platform-data '{"REDDIT":{"sr":"subreddit"}}' for subreddit
37
+
38
+ Cost:
39
+ - Publishing a post: 1 credit
40
+ - Drafts, analytics, account management: free
41
+ `);
42
+ socialCmd
43
+ .command("status")
44
+ .description("Check social media activation status and connected accounts")
45
+ .action(async () => {
46
+ const resp = await apiRequest("GET", "/v1/social/status");
47
+ handleApiError("social.status", resp);
48
+ agentOutput({
49
+ action: "social.status",
50
+ result: resp.data,
51
+ next_steps: [
52
+ ...(resp.data.activated
53
+ ? [{ command: "naive social accounts", description: "List connected accounts" }]
54
+ : [{ command: "naive social activate", description: "Activate social media" }]),
55
+ ],
56
+ hints: [resp.data.activated ? "Social media is active" : "Social media is not yet activated"],
57
+ });
58
+ });
59
+ socialCmd
60
+ .command("activate")
61
+ .description("Activate social media integration for your company")
62
+ .action(async () => {
63
+ const resp = await apiRequest("POST", "/v1/social/activate");
64
+ handleApiError("social.activate", resp);
65
+ agentOutput({
66
+ action: "social.activate",
67
+ result: resp.data,
68
+ next_steps: [
69
+ { command: 'naive social connect --platform twitter --redirect-url https://example.com', description: "Connect a social account" },
70
+ { command: "naive social portal --redirect-url https://example.com", description: "Open multi-platform connect portal" },
71
+ ],
72
+ hints: ["Social media activated. Connect accounts to start posting."],
73
+ });
74
+ });
75
+ socialCmd
76
+ .command("connect")
77
+ .description("Get OAuth URL to connect a social media account")
78
+ .requiredOption("--platform <platform>", "Platform: TWITTER, LINKEDIN, INSTAGRAM, FACEBOOK, TIKTOK, YOUTUBE, THREADS, PINTEREST, REDDIT, BLUESKY")
79
+ .option("--redirect-url <url>", "URL to redirect after connection", "https://usenaive.ai/developers")
80
+ .action(async (opts) => {
81
+ const resp = await apiRequest("POST", "/v1/social/connect", {
82
+ platform: opts.platform.toUpperCase(),
83
+ redirect_url: opts.redirectUrl,
84
+ });
85
+ handleApiError("social.connect", resp);
86
+ agentOutput({
87
+ action: "social.connect",
88
+ result: resp.data,
89
+ next_steps: [
90
+ { command: "naive social sync", description: "Sync accounts after connecting" },
91
+ { command: "naive social accounts", description: "List connected accounts" },
92
+ ],
93
+ hints: [
94
+ `Open this URL to connect your ${opts.platform.toUpperCase()} account:`,
95
+ resp.data.url,
96
+ "After connecting, run 'naive social sync' to refresh accounts.",
97
+ ],
98
+ });
99
+ });
100
+ socialCmd
101
+ .command("portal")
102
+ .description("Get a portal URL to connect multiple social media platforms at once")
103
+ .option("--redirect-url <url>", "URL to redirect after connection", "https://usenaive.ai/developers")
104
+ .option("--platforms <list>", "Comma-separated platform list to show")
105
+ .action(async (opts) => {
106
+ const body = { redirect_url: opts.redirectUrl };
107
+ if (opts.platforms)
108
+ body.platforms = opts.platforms.split(",").map((p) => p.trim().toUpperCase());
109
+ const resp = await apiRequest("POST", "/v1/social/portal", body);
110
+ handleApiError("social.portal", resp);
111
+ agentOutput({
112
+ action: "social.portal",
113
+ result: resp.data,
114
+ next_steps: [
115
+ { command: "naive social sync", description: "Sync accounts after connecting" },
116
+ ],
117
+ hints: [
118
+ "Open this URL to connect multiple social accounts:",
119
+ resp.data.url,
120
+ ],
121
+ });
122
+ });
123
+ socialCmd
124
+ .command("accounts")
125
+ .description("List connected social media accounts")
126
+ .action(async () => {
127
+ const resp = await apiRequest("GET", "/v1/social/accounts");
128
+ handleApiError("social.accounts", resp);
129
+ agentOutput({
130
+ action: "social.accounts",
131
+ result: resp.data,
132
+ next_steps: [
133
+ { command: 'naive social post "Hello!" --platforms twitter', description: "Create a post" },
134
+ { command: 'naive social connect --platform <platform> --redirect-url <url>', description: "Connect more accounts" },
135
+ ],
136
+ hints: [`${(resp.data.accounts ?? []).length} connected account(s)`],
137
+ });
138
+ });
139
+ socialCmd
140
+ .command("label <account-id>")
141
+ .description("Set a label on a social media account")
142
+ .requiredOption("--label <label>", "Label text to set")
143
+ .action(async (accountId, opts) => {
144
+ const resp = await apiRequest("POST", `/v1/social/accounts/${accountId}/label`, { label: opts.label });
145
+ handleApiError("social.label", resp);
146
+ agentOutput({
147
+ action: "social.label",
148
+ result: resp.data,
149
+ next_steps: [
150
+ { command: "naive social accounts", description: "List accounts" },
151
+ ],
152
+ hints: [`Label set to "${opts.label}"`],
153
+ });
154
+ });
155
+ socialCmd
156
+ .command("disconnect <account-id>")
157
+ .description("Disconnect a social media account")
158
+ .action(async (accountId) => {
159
+ const resp = await apiRequest("DELETE", `/v1/social/accounts/${accountId}`);
160
+ handleApiError("social.disconnect", resp);
161
+ agentOutput({
162
+ action: "social.disconnect",
163
+ result: resp.data,
164
+ next_steps: [
165
+ { command: "naive social accounts", description: "List remaining accounts" },
166
+ ],
167
+ hints: ["Account disconnected"],
168
+ });
169
+ });
170
+ socialCmd
171
+ .command("sync")
172
+ .description("Sync social accounts from bundle.social")
173
+ .action(async () => {
174
+ const resp = await apiRequest("POST", "/v1/social/sync");
175
+ handleApiError("social.sync", resp);
176
+ agentOutput({
177
+ action: "social.sync",
178
+ result: resp.data,
179
+ next_steps: [
180
+ { command: "naive social accounts", description: "View synced accounts" },
181
+ ],
182
+ hints: [`Synced ${resp.data.synced ?? 0} account(s)`],
183
+ });
184
+ });
185
+ socialCmd
186
+ .command("upload")
187
+ .description("Upload media from a URL for use in social posts")
188
+ .requiredOption("--url <url>", "Public URL of the media file")
189
+ .action(async (opts) => {
190
+ const resp = await apiRequest("POST", "/v1/social/upload", { url: opts.url });
191
+ handleApiError("social.upload", resp);
192
+ agentOutput({
193
+ action: "social.upload",
194
+ result: resp.data,
195
+ next_steps: [
196
+ { command: 'naive social post "content" --platforms youtube --media-url <url>', description: "Create a post with media" },
197
+ ],
198
+ hints: ["Media uploaded. Use the upload ID or pass media_urls when creating posts (auto-upload)."],
199
+ });
200
+ });
201
+ socialCmd
202
+ .command("posts")
203
+ .description("List social media posts")
204
+ .option("--status <status>", "Filter by status: draft, scheduled, published, failed")
205
+ .option("--limit <n>", "Max results", "50")
206
+ .option("--offset <n>", "Pagination offset", "0")
207
+ .action(async (opts) => {
208
+ const params = new URLSearchParams();
209
+ if (opts.status)
210
+ params.set("status", opts.status);
211
+ params.set("limit", opts.limit);
212
+ params.set("offset", opts.offset);
213
+ const resp = await apiRequest("GET", `/v1/social/posts?${params}`);
214
+ handleApiError("social.posts", resp);
215
+ agentOutput({
216
+ action: "social.posts",
217
+ result: resp.data,
218
+ next_steps: [
219
+ { command: 'naive social post "content" --platforms twitter', description: "Create a new post" },
220
+ ],
221
+ hints: [`${resp.data.count ?? 0} post(s) returned`],
222
+ });
223
+ });
224
+ socialCmd
225
+ .command("post [content]")
226
+ .description("Create a social media post (draft by default, use --publish to publish immediately)")
227
+ .requiredOption("--platforms <list>", "Comma-separated platforms: twitter,linkedin,youtube,...")
228
+ .option("--publish", "Publish immediately (default: create as draft)")
229
+ .option("--media-url <url>", "Media URL (auto-uploaded for video/image platforms)")
230
+ .option("--youtube-type <type>", "YouTube type: SHORT (vertical, <3min) or VIDEO (landscape)")
231
+ .option("--platform-data <json>", "Per-platform overrides as JSON")
232
+ .option("--title <title>", "Post title (auto-generated from content if omitted)")
233
+ .option("--account-ids <ids>", "Comma-separated account UUIDs to post from")
234
+ .option("--schedule-at <datetime>", "ISO 8601 datetime to schedule the post")
235
+ .action(async (content, opts) => {
236
+ if (!content) {
237
+ console.error(JSON.stringify({
238
+ success: false,
239
+ action: "social.post",
240
+ error: { code: "missing_argument", message: "Provide the post content as a positional argument" },
241
+ recovery_steps: [
242
+ { command: 'naive social post "Your content here" --platforms twitter,linkedin --publish', description: "Create and publish a post" },
243
+ { command: 'naive social post "Your content here" --platforms twitter,linkedin', description: "Create a draft" },
244
+ ],
245
+ }, null, 2));
246
+ process.exit(1);
247
+ }
248
+ const body = {
249
+ content,
250
+ platforms: opts.platforms.split(",").map((p) => p.trim().toUpperCase()),
251
+ publish_now: !!(opts.publish || opts.scheduleAt),
252
+ };
253
+ if (opts.title)
254
+ body.title = opts.title;
255
+ if (opts.mediaUrl)
256
+ body.media_urls = [opts.mediaUrl];
257
+ if (opts.youtubeType)
258
+ body.youtube_type = opts.youtubeType.toUpperCase();
259
+ if (opts.platformData)
260
+ body.platform_data = JSON.parse(opts.platformData);
261
+ if (opts.accountIds)
262
+ body.account_ids = opts.accountIds.split(",").map((id) => id.trim());
263
+ if (opts.scheduleAt)
264
+ body.scheduled_at = opts.scheduleAt;
265
+ const resp = await apiRequest("POST", "/v1/social/posts", body);
266
+ handleApiError("social.post", resp);
267
+ const data = resp.data;
268
+ agentOutput({
269
+ action: "social.post",
270
+ result: resp.data,
271
+ next_steps: [
272
+ ...(data.status === "draft"
273
+ ? [{ command: `naive social publish ${data.id}`, description: "Publish this draft" }]
274
+ : [{ command: `naive social get ${data.id}`, description: "Check post status" }]),
275
+ { command: `naive social analytics ${data.id}`, description: "View post analytics (after publishing)" },
276
+ ],
277
+ hints: [
278
+ data.status === "draft"
279
+ ? "Draft created. Use 'naive social publish' to publish, or re-run with --publish."
280
+ : `Post ${data.status === "publishing" ? "queued for publishing" : "scheduled"}. 1 credit deducted.`,
281
+ ],
282
+ related_commands: ["naive social posts", "naive social analytics"],
283
+ });
284
+ });
285
+ socialCmd
286
+ .command("get <post-id>")
287
+ .description("Get details of a social media post")
288
+ .action(async (postId) => {
289
+ const resp = await apiRequest("GET", `/v1/social/posts/${postId}`);
290
+ handleApiError("social.get", resp);
291
+ agentOutput({
292
+ action: "social.get",
293
+ result: resp.data,
294
+ next_steps: [
295
+ { command: `naive social analytics ${postId}`, description: "View analytics" },
296
+ { command: `naive social comments ${postId}`, description: "View comments" },
297
+ ],
298
+ hints: [`Post status: ${resp.data.status}`],
299
+ });
300
+ });
301
+ socialCmd
302
+ .command("edit <post-id>")
303
+ .description("Edit a draft social media post")
304
+ .option("--content <text>", "Updated content")
305
+ .option("--platforms <list>", "Updated comma-separated platform list")
306
+ .option("--platform-data <json>", "Updated per-platform overrides as JSON")
307
+ .action(async (postId, opts) => {
308
+ const body = {};
309
+ if (opts.content)
310
+ body.content = opts.content;
311
+ if (opts.platforms)
312
+ body.platforms = opts.platforms.split(",").map((p) => p.trim().toUpperCase());
313
+ if (opts.platformData)
314
+ body.platform_data = JSON.parse(opts.platformData);
315
+ const resp = await apiRequest("PATCH", `/v1/social/posts/${postId}`, body);
316
+ handleApiError("social.edit", resp);
317
+ agentOutput({
318
+ action: "social.edit",
319
+ result: resp.data,
320
+ next_steps: [
321
+ { command: `naive social publish ${postId}`, description: "Publish the updated draft" },
322
+ ],
323
+ hints: ["Draft updated"],
324
+ });
325
+ });
326
+ socialCmd
327
+ .command("delete <post-id>")
328
+ .description("Delete a social media post")
329
+ .action(async (postId) => {
330
+ const resp = await apiRequest("DELETE", `/v1/social/posts/${postId}`);
331
+ handleApiError("social.delete", resp);
332
+ agentOutput({
333
+ action: "social.delete",
334
+ result: resp.data,
335
+ next_steps: [
336
+ { command: "naive social posts", description: "View remaining posts" },
337
+ ],
338
+ hints: ["Post deleted"],
339
+ });
340
+ });
341
+ socialCmd
342
+ .command("publish <post-id>")
343
+ .description("Publish a draft social media post (costs 1 credit)")
344
+ .action(async (postId) => {
345
+ const resp = await apiRequest("POST", `/v1/social/posts/${postId}/publish`);
346
+ handleApiError("social.publish", resp);
347
+ agentOutput({
348
+ action: "social.publish",
349
+ result: resp.data,
350
+ next_steps: [
351
+ { command: `naive social get ${postId}`, description: "Check post status" },
352
+ { command: `naive social analytics ${postId}`, description: "View analytics" },
353
+ ],
354
+ hints: ["Post published (1 credit deducted)"],
355
+ });
356
+ });
357
+ socialCmd
358
+ .command("analytics <post-id>")
359
+ .description("Get analytics for a published social media post")
360
+ .action(async (postId) => {
361
+ const resp = await apiRequest("GET", `/v1/social/posts/${postId}/analytics`);
362
+ handleApiError("social.analytics", resp);
363
+ agentOutput({
364
+ action: "social.analytics",
365
+ result: resp.data,
366
+ next_steps: [
367
+ { command: `naive social comments ${postId}`, description: "View comments" },
368
+ ],
369
+ hints: ["Post analytics retrieved"],
370
+ });
371
+ });
372
+ socialCmd
373
+ .command("comments <post-id>")
374
+ .description("Get comments on a published social media post")
375
+ .action(async (postId) => {
376
+ const resp = await apiRequest("GET", `/v1/social/posts/${postId}/comments`);
377
+ handleApiError("social.comments", resp);
378
+ agentOutput({
379
+ action: "social.comments",
380
+ result: resp.data,
381
+ next_steps: [
382
+ { command: `naive social analytics ${postId}`, description: "View analytics" },
383
+ ],
384
+ hints: ["Post comments retrieved"],
385
+ });
386
+ });
387
+ socialCmd
388
+ .command("account-analytics <account-id>")
389
+ .description("Get analytics for a connected social media account")
390
+ .action(async (accountId) => {
391
+ const resp = await apiRequest("GET", `/v1/social/accounts/${accountId}/analytics`);
392
+ handleApiError("social.account-analytics", resp);
393
+ agentOutput({
394
+ action: "social.account-analytics",
395
+ result: resp.data,
396
+ next_steps: [
397
+ { command: "naive social accounts", description: "List all accounts" },
398
+ ],
399
+ hints: ["Account analytics retrieved"],
400
+ });
401
+ });
402
+ //# sourceMappingURL=social.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social.js","sourceRoot":"","sources":["../../src/commands/social.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const statusCmd: Command;
@@ -0,0 +1,47 @@
1
+ import { Command } from "commander";
2
+ import { apiRequest, handleApiError } from "../client.js";
3
+ import { agentOutput } from "../output.js";
4
+ export const statusCmd = new Command("status")
5
+ .description("Show full agent status: identity, credits, tier, and resource summary")
6
+ .addHelpText("after", `
7
+ Examples:
8
+ $ naive status
9
+
10
+ What this does:
11
+ Returns a comprehensive status overview:
12
+ - Agent identity (name, ID)
13
+ - Company context (name, ID)
14
+ - Credit balance and billing tier
15
+ - Resource counts (inboxes, active jobs, etc.)
16
+ - API connectivity confirmation
17
+
18
+ Use this to:
19
+ - Verify the CLI is properly configured and authenticated
20
+ - Check remaining credits before starting a task
21
+ - Get a quick overview of available resources
22
+ - Confirm which company you're operating under
23
+ `)
24
+ .action(async () => {
25
+ const resp = await apiRequest("GET", "/v1/status");
26
+ handleApiError("status", resp);
27
+ const data = resp.data;
28
+ const lowCredits = data.credits?.balance < 10;
29
+ agentOutput({
30
+ action: "status",
31
+ result: resp.data,
32
+ next_steps: [
33
+ ...(lowCredits
34
+ ? [{ command: "# Add credits at https://usenaive.ai/billing", description: "Your credit balance is low", when: "Balance below 10 credits" }]
35
+ : []),
36
+ { command: "naive usage", description: "See detailed credit usage history" },
37
+ { command: "naive identity", description: "View full resource details" },
38
+ { command: "naive jobs --status processing", description: "Check active async jobs" },
39
+ ],
40
+ hints: [
41
+ `Balance: ${data.credits?.balance ?? "?"} credits (${data.credits?.tier ?? "free"} tier)`,
42
+ ...(lowCredits ? ["WARNING: Low credit balance. Some operations may fail."] : []),
43
+ ],
44
+ related_commands: ["naive whoami", "naive usage", "naive identity", "naive jobs"],
45
+ });
46
+ });
47
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC3C,WAAW,CAAC,uEAAuE,CAAC;KACpF,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;CAiBvB,CAAC;KACC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACnD,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAKjB,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,CAAC;IAE9C,WAAW,CAAC;QACV,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI,CAAC,IAAI;QACjB,UAAU,EAAE;YACV,GAAG,CAAC,UAAU;gBACZ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,8CAA8C,EAAE,WAAW,EAAE,4BAA4B,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;gBAC5I,CAAC,CAAC,EAAE,CAAC;YACP,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mCAAmC,EAAE;YAC5E,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,4BAA4B,EAAE;YACxE,EAAE,OAAO,EAAE,gCAAgC,EAAE,WAAW,EAAE,yBAAyB,EAAE;SACtF;QACD,KAAK,EAAE;YACL,YAAY,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,GAAG,aAAa,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,MAAM,QAAQ;YACzF,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,wDAAwD,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAClF;QACD,gBAAgB,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,CAAC;KAClF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const usageCmd: Command;
@@ -0,0 +1,62 @@
1
+ import { Command } from "commander";
2
+ import { apiRequest, handleApiError } from "../client.js";
3
+ import { agentOutput } from "../output.js";
4
+ export const usageCmd = new Command("usage")
5
+ .description("Show credit usage history with transaction details")
6
+ .option("--days <n>", "Number of days to look back (default: 30)", "30")
7
+ .option("--limit <n>", "Maximum number of transactions to return (default: 50)", "50")
8
+ .addHelpText("after", `
9
+ Examples:
10
+ $ naive usage
11
+ $ naive usage --days 7
12
+ $ naive usage --days 1 --limit 100
13
+
14
+ What this does:
15
+ Returns a list of credit transactions showing:
16
+ - Transaction type (deduction, addition, refund)
17
+ - Amount and running balance
18
+ - Operation that triggered it (e.g., "image_generation", "email_send")
19
+ - Timestamp
20
+ - Reference ID (for idempotency/audit)
21
+
22
+ Use this to:
23
+ - Audit what's consuming credits
24
+ - Identify expensive operations
25
+ - Verify credits were deducted correctly after async job completion
26
+ - Check if a refund was issued for a failed job
27
+
28
+ Credit costs reference:
29
+ Fixed-price operations:
30
+ - Web search: 0.01 credits
31
+ - URL extraction: 0.02 credits
32
+ - Email send: 1.0 credits
33
+ - Stock photo search: free (0 credits)
34
+ - Deep research: 1.0–5.0 credits (depth-dependent)
35
+
36
+ Dynamic-price operations (fal.ai — model-dependent):
37
+ - Image generation: varies (GET /v1/images/pricing to preview)
38
+ - Video generation: varies (GET /v1/video/pricing to preview)
39
+ - Pricing: based on fal.ai model costs, at $0.50 per credit
40
+ `)
41
+ .action(async (opts) => {
42
+ const resp = await apiRequest("GET", `/v1/usage?days=${opts.days}&limit=${opts.limit}`);
43
+ handleApiError("usage", resp);
44
+ const data = resp.data;
45
+ const count = data.transactions?.length ?? 0;
46
+ agentOutput({
47
+ action: "usage",
48
+ result: resp.data,
49
+ next_steps: [
50
+ { command: "naive status", description: "See current balance summary" },
51
+ { command: "naive usage --days 1", description: "Narrow to today's usage only" },
52
+ { command: "naive jobs", description: "Check pending jobs (credits deducted on completion)" },
53
+ ],
54
+ hints: [
55
+ `Showing ${count} transactions from the last ${opts.days} days`,
56
+ "Async jobs (image/video generation) deduct credits only on completion, not at submission",
57
+ "Failed async jobs do not deduct credits",
58
+ ],
59
+ related_commands: ["naive status", "naive jobs"],
60
+ });
61
+ });
62
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KACzC,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,YAAY,EAAE,2CAA2C,EAAE,IAAI,CAAC;KACvE,MAAM,CAAC,aAAa,EAAE,wDAAwD,EAAE,IAAI,CAAC;KACrF,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,kBAAkB,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACxF,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAiE,CAAC;IACpF,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC;IAE7C,WAAW,CAAC;QACV,MAAM,EAAE,OAAO;QACf,MAAM,EAAE,IAAI,CAAC,IAAI;QACjB,UAAU,EAAE;YACV,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,6BAA6B,EAAE;YACvE,EAAE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,8BAA8B,EAAE;YAChF,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,qDAAqD,EAAE;SAC9F;QACD,KAAK,EAAE;YACL,WAAW,KAAK,+BAA+B,IAAI,CAAC,IAAI,OAAO;YAC/D,0FAA0F;YAC1F,yCAAyC;SAC1C;QACD,gBAAgB,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;KACjD,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const videoCmd: Command;