@usenaive-sdk/cli 0.12.5 → 0.13.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.
- package/README.md +55 -6
- package/dist/client.d.ts +48 -0
- package/dist/client.js +199 -27
- package/dist/client.js.map +1 -1
- package/dist/commands/aeo.js +56 -21
- package/dist/commands/aeo.js.map +1 -1
- package/dist/commands/app-data.js +29 -11
- package/dist/commands/app-data.js.map +1 -1
- package/dist/commands/apps.d.ts +7 -0
- package/dist/commands/apps.js +255 -18
- package/dist/commands/apps.js.map +1 -1
- package/dist/commands/audio.d.ts +9 -0
- package/dist/commands/audio.js +391 -0
- package/dist/commands/audio.js.map +1 -0
- package/dist/commands/auth.d.ts +1 -0
- package/dist/commands/auth.js +20 -17
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/billing.js +9 -9
- package/dist/commands/billing.js.map +1 -1
- package/dist/commands/brain.js +798 -52
- package/dist/commands/brain.js.map +1 -1
- package/dist/commands/browser.js +8 -8
- package/dist/commands/browser.js.map +1 -1
- package/dist/commands/business.js +117 -16
- package/dist/commands/business.js.map +1 -1
- package/dist/commands/clone.js +6 -2
- package/dist/commands/clone.js.map +1 -1
- package/dist/commands/companies.d.ts +8 -0
- package/dist/commands/companies.js +137 -47
- package/dist/commands/companies.js.map +1 -1
- package/dist/commands/company-data.d.ts +2 -0
- package/dist/commands/company-data.js +168 -0
- package/dist/commands/company-data.js.map +1 -0
- package/dist/commands/compute.js +10 -3
- package/dist/commands/compute.js.map +1 -1
- package/dist/commands/connections.d.ts +6 -0
- package/dist/commands/connections.js +29 -1
- package/dist/commands/connections.js.map +1 -1
- package/dist/commands/domains.js +1 -1
- package/dist/commands/ecommerce.js +19 -9
- package/dist/commands/ecommerce.js.map +1 -1
- package/dist/commands/email.js +56 -9
- package/dist/commands/email.js.map +1 -1
- package/dist/commands/formation.js +3 -3
- package/dist/commands/identity.js +4 -3
- package/dist/commands/identity.js.map +1 -1
- package/dist/commands/images.js +85 -11
- package/dist/commands/images.js.map +1 -1
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.js +39 -36
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/jobs.js +1 -0
- package/dist/commands/jobs.js.map +1 -1
- package/dist/commands/legacy-auth.d.ts +27 -0
- package/dist/commands/legacy-auth.js +64 -0
- package/dist/commands/legacy-auth.js.map +1 -0
- package/dist/commands/llm.js +13 -0
- package/dist/commands/llm.js.map +1 -1
- package/dist/commands/login.js +2 -0
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/media.js +3 -3
- package/dist/commands/media.js.map +1 -1
- package/dist/commands/mobile.d.ts +2 -0
- package/dist/commands/mobile.js +42 -1
- package/dist/commands/mobile.js.map +1 -1
- package/dist/commands/payments.js +1 -1
- package/dist/commands/people.d.ts +2 -0
- package/dist/commands/people.js +193 -0
- package/dist/commands/people.js.map +1 -0
- package/dist/commands/phone.js +3 -78
- package/dist/commands/phone.js.map +1 -1
- package/dist/commands/projects.d.ts +13 -0
- package/dist/commands/projects.js +220 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/register.js +13 -5
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/sandbox.d.ts +2 -0
- package/dist/commands/sandbox.js +245 -0
- package/dist/commands/sandbox.js.map +1 -0
- package/dist/commands/search.js +26 -12
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/seo.js +16 -8
- package/dist/commands/seo.js.map +1 -1
- package/dist/commands/sessions.d.ts +6 -0
- package/dist/commands/sessions.js +109 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/social-data.d.ts +2 -0
- package/dist/commands/social-data.js +244 -0
- package/dist/commands/social-data.js.map +1 -0
- package/dist/commands/social.js +8 -6
- package/dist/commands/social.js.map +1 -1
- package/dist/commands/teams.d.ts +69 -0
- package/dist/commands/teams.js +503 -0
- package/dist/commands/teams.js.map +1 -0
- package/dist/commands/up.d.ts +150 -0
- package/dist/commands/up.js +415 -15
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/usage.js +15 -4
- package/dist/commands/usage.js.map +1 -1
- package/dist/commands/use.d.ts +9 -0
- package/dist/commands/use.js +76 -11
- package/dist/commands/use.js.map +1 -1
- package/dist/commands/users.d.ts +8 -0
- package/dist/commands/users.js +28 -9
- package/dist/commands/users.js.map +1 -1
- package/dist/commands/vault.js +28 -1
- package/dist/commands/vault.js.map +1 -1
- package/dist/commands/video.js +117 -18
- package/dist/commands/video.js.map +1 -1
- package/dist/commands/wallet.js +3 -3
- package/dist/commands/wallet.js.map +1 -1
- package/dist/commands/whoami.js +17 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config.d.ts +9 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +228 -24
- package/dist/index.js.map +1 -1
- package/dist/lib/brain-select.d.ts +193 -0
- package/dist/lib/brain-select.js +403 -0
- package/dist/lib/brain-select.js.map +1 -0
- package/dist/lib/cli-validation.d.ts +12 -0
- package/dist/lib/cli-validation.js +46 -0
- package/dist/lib/cli-validation.js.map +1 -0
- package/dist/lib/deprecation.d.ts +158 -0
- package/dist/lib/deprecation.js +140 -0
- package/dist/lib/deprecation.js.map +1 -0
- package/dist/lib/duration.d.ts +8 -0
- package/dist/lib/duration.js +11 -0
- package/dist/lib/duration.js.map +1 -0
- package/dist/lib/http-response.d.ts +11 -0
- package/dist/lib/http-response.js +96 -0
- package/dist/lib/http-response.js.map +1 -0
- package/dist/lib/pricing.d.ts +132 -0
- package/dist/lib/pricing.js +148 -0
- package/dist/lib/pricing.js.map +1 -0
- package/dist/lib/stream-frames.d.ts +114 -0
- package/dist/lib/stream-frames.js +169 -0
- package/dist/lib/stream-frames.js.map +1 -0
- package/dist/lib/teams-catalog.d.ts +141 -0
- package/dist/lib/teams-catalog.js +765 -0
- package/dist/lib/teams-catalog.js.map +1 -0
- package/dist/lib/unknown-command.d.ts +41 -1
- package/dist/lib/unknown-command.js +74 -0
- package/dist/lib/unknown-command.js.map +1 -1
- package/dist/output.d.ts +99 -5
- package/dist/output.js +160 -11
- package/dist/output.js.map +1 -1
- package/package.json +3 -3
- package/dist/commands/link.d.ts +0 -3
- package/dist/commands/link.js +0 -91
- package/dist/commands/link.js.map +0 -1
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { apiRequest, handleApiError, handlePendingApproval, activeUserId } from "../client.js";
|
|
3
3
|
import { agentOutput } from "../output.js";
|
|
4
|
+
import { parseIntegerOption } from "../lib/cli-validation.js";
|
|
4
5
|
function userPath(user) {
|
|
5
6
|
return `/v1/users/${user ?? activeUserId() ?? "default"}`;
|
|
6
7
|
}
|
|
8
|
+
function shellQuote(value) {
|
|
9
|
+
return `'${value.replace(/'/g, `'"'"'`)}'`;
|
|
10
|
+
}
|
|
11
|
+
export function connectionsListCommand(opts, cursor) {
|
|
12
|
+
const flags = [
|
|
13
|
+
opts.user && `--user ${shellQuote(opts.user)}`,
|
|
14
|
+
opts.search && `--search ${shellQuote(opts.search)}`,
|
|
15
|
+
opts.connected && "--connected",
|
|
16
|
+
opts.limit && `--limit ${opts.limit}`,
|
|
17
|
+
`--cursor ${shellQuote(cursor)}`,
|
|
18
|
+
].filter(Boolean);
|
|
19
|
+
return `naive connections list ${flags.join(" ")}`;
|
|
20
|
+
}
|
|
7
21
|
export const connectionsCmd = new Command("connections")
|
|
8
22
|
.alias("integrations") // back-compat alias
|
|
9
23
|
.description("3rd-party connections — connect Gmail, Slack, GitHub, and 1,000+ apps per user");
|
|
@@ -13,18 +27,32 @@ connectionsCmd
|
|
|
13
27
|
.option("--user <id>", "Target a specific tenant user")
|
|
14
28
|
.option("--search <q>", "Filter by name")
|
|
15
29
|
.option("--connected", "Only connected toolkits")
|
|
30
|
+
.option("--limit <n>", "Maximum toolkits to return (max 50)", (value) => parseIntegerOption(value, "limit", 1, 50))
|
|
31
|
+
.option("--cursor <cursor>", "Continue from a previous response's nextCursor")
|
|
16
32
|
.action(async (opts) => {
|
|
17
33
|
const qs = new URLSearchParams();
|
|
18
34
|
if (opts.search)
|
|
19
35
|
qs.set("search", opts.search);
|
|
20
36
|
if (opts.connected)
|
|
21
37
|
qs.set("connected", "true");
|
|
38
|
+
if (opts.limit)
|
|
39
|
+
qs.set("limit", String(opts.limit));
|
|
40
|
+
if (opts.cursor)
|
|
41
|
+
qs.set("cursor", opts.cursor);
|
|
22
42
|
const q = qs.toString();
|
|
23
43
|
const resp = await apiRequest("GET", `${userPath(opts.user)}/connections${q ? `?${q}` : ""}`, undefined, {
|
|
24
44
|
userId: opts.user,
|
|
25
45
|
});
|
|
26
46
|
handleApiError("connections.list", resp);
|
|
27
|
-
|
|
47
|
+
const data = resp.data;
|
|
48
|
+
agentOutput({
|
|
49
|
+
action: "connections.list",
|
|
50
|
+
result: resp.data,
|
|
51
|
+
next_steps: data.nextCursor
|
|
52
|
+
? [{ command: connectionsListCommand(opts, data.nextCursor), description: "Fetch the next page" }]
|
|
53
|
+
: [],
|
|
54
|
+
hints: data.nextCursor ? ["More toolkits are available; use the generated next-page command."] : [],
|
|
55
|
+
});
|
|
28
56
|
});
|
|
29
57
|
connectionsCmd
|
|
30
58
|
.command("connect")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connections.js","sourceRoot":"","sources":["../../src/commands/connections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"connections.js","sourceRoot":"","sources":["../../src/commands/connections.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/domains.js
CHANGED
|
@@ -60,7 +60,7 @@ System domains are auto-provisioned on registration but may start as 'pending_dn
|
|
|
60
60
|
DNS edit safety (server-enforced):
|
|
61
61
|
- Allowed types only: A, AAAA, CNAME, MX, TXT, CAA
|
|
62
62
|
- DMARC, DKIM, and inbound MX/TXT records are protected (returns 403 PROTECTED_RECORD)
|
|
63
|
-
- System domains
|
|
63
|
+
- System domains: zone-records list is allowed; set/delete return 403 SYSTEM_DOMAIN
|
|
64
64
|
- Wildcards ('*' or '*.foo') and CNAME at apex are rejected
|
|
65
65
|
- CAA values must use an allowed CA (ssl.com, letsencrypt.org, digicert.com,
|
|
66
66
|
sectigo.com, globalsign.com, amazon.com, pki.goog, google.com)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { apiRequest, handleApiError } from "../client.js";
|
|
3
|
-
import { agentOutput } from "../output.js";
|
|
3
|
+
import { agentOutput, creditCostHint } from "../output.js";
|
|
4
|
+
import { DATA_API_CREDIT_COSTS as P } from "../lib/pricing.js";
|
|
4
5
|
export const ecommerceCmd = new Command("ecommerce")
|
|
5
6
|
.description("E-commerce data — Google Shopping and Amazon product/seller/review data")
|
|
6
7
|
.addHelpText("after", `
|
|
@@ -39,9 +40,15 @@ Examples:
|
|
|
39
40
|
$ naive ecommerce task-get abc123 --platform google --endpoint products
|
|
40
41
|
$ naive ecommerce tasks-ready --platform google --endpoint products
|
|
41
42
|
|
|
42
|
-
Costs:
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
Costs (charged on task SUBMISSION; retrieval and tasks-ready are free):
|
|
44
|
+
google products ${P.ecommerceGoogleProducts} google product-info ${P.ecommerceGoogleProductInfo}
|
|
45
|
+
google sellers ${P.ecommerceGoogleSellers} google reviews ${P.ecommerceGoogleReviews}
|
|
46
|
+
amazon products ${P.ecommerceAmazonProducts} amazon asin ${P.ecommerceAmazonAsin}
|
|
47
|
+
amazon sellers ${P.ecommerceAmazonSellers} google sellers-ad-url free
|
|
48
|
+
|
|
49
|
+
The provider bills only for setting a task, so nothing is charged when you
|
|
50
|
+
collect the results. A review- or row-heavy task settles above the list price
|
|
51
|
+
when it costs us more; the charge is the response's own credits_used.
|
|
45
52
|
`);
|
|
46
53
|
// ---------------------------------------------------------------------------
|
|
47
54
|
// google <endpoint>
|
|
@@ -101,7 +108,8 @@ Submits a task_post. Use 'naive ecommerce task-get <id>' to retrieve results.
|
|
|
101
108
|
hints: [
|
|
102
109
|
`Google Shopping ${endpoint} task submitted`,
|
|
103
110
|
...(taskId ? [`Task ID: ${taskId}`] : []),
|
|
104
|
-
"
|
|
111
|
+
"Credits are charged on submission; retrieving the results is free.",
|
|
112
|
+
...(creditCostHint(resp.data) ? [creditCostHint(resp.data)] : []),
|
|
105
113
|
],
|
|
106
114
|
related_commands: ["naive ecommerce amazon", "naive ecommerce task-get"],
|
|
107
115
|
});
|
|
@@ -188,7 +196,8 @@ Submits a task_post. Use 'naive ecommerce task-get <id>' to retrieve results.
|
|
|
188
196
|
hints: [
|
|
189
197
|
`Amazon ${endpoint} task submitted`,
|
|
190
198
|
...(taskId ? [`Task ID: ${taskId}`] : []),
|
|
191
|
-
"
|
|
199
|
+
"Credits are charged on submission; retrieving the results is free.",
|
|
200
|
+
...(creditCostHint(resp.data) ? [creditCostHint(resp.data)] : []),
|
|
192
201
|
],
|
|
193
202
|
related_commands: ["naive ecommerce google", "naive ecommerce task-get"],
|
|
194
203
|
});
|
|
@@ -207,7 +216,7 @@ Examples:
|
|
|
207
216
|
$ naive ecommerce task-get abc123 --platform google --endpoint products
|
|
208
217
|
$ naive ecommerce task-get abc123 --platform amazon --endpoint asin --format html
|
|
209
218
|
|
|
210
|
-
Cost:
|
|
219
|
+
Cost: free — the task was charged when you submitted it.
|
|
211
220
|
`)
|
|
212
221
|
.action(async (id, opts) => {
|
|
213
222
|
const slug = opts.endpoint.replace(/_/g, "-");
|
|
@@ -227,7 +236,8 @@ Cost: 2 credits
|
|
|
227
236
|
],
|
|
228
237
|
hints: [
|
|
229
238
|
`Retrieved ${opts.platform} ${opts.endpoint} task ${id} (${opts.format} format)`,
|
|
230
|
-
|
|
239
|
+
// Derived from the response's authoritative credits_used, not a constant (N7).
|
|
240
|
+
...(creditCostHint(resp.data) ? [creditCostHint(resp.data)] : []),
|
|
231
241
|
],
|
|
232
242
|
related_commands: ["naive ecommerce tasks-ready"],
|
|
233
243
|
});
|
|
@@ -259,7 +269,7 @@ Examples:
|
|
|
259
269
|
: [{ command: `naive ecommerce ${opts.platform} ${slug} --help`, description: "Submit a new task" }],
|
|
260
270
|
hints: [
|
|
261
271
|
`${count} task(s) ready for ${opts.platform} ${opts.endpoint}`,
|
|
262
|
-
...(count > 0 ? ["Use 'naive ecommerce task-get <id>' to retrieve results (
|
|
272
|
+
...(count > 0 ? ["Use 'naive ecommerce task-get <id>' to retrieve results (free — charged at submission)"] : ["No tasks ready yet — check back later"]),
|
|
263
273
|
],
|
|
264
274
|
related_commands: ["naive ecommerce task-get"],
|
|
265
275
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecommerce.js","sourceRoot":"","sources":["../../src/commands/ecommerce.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;
|
|
1
|
+
{"version":3,"file":"ecommerce.js","sourceRoot":"","sources":["../../src/commands/ecommerce.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/email.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { apiRequest, handleApiError } from "../client.js";
|
|
3
|
-
import { agentOutput } from "../output.js";
|
|
3
|
+
import { agentOutput, creditCostHint } from "../output.js";
|
|
4
|
+
import { FIXED_CREDIT_COSTS, reportedCreditsUsed } from "../lib/pricing.js";
|
|
5
|
+
import { parseIntegerOption } from "../lib/cli-validation.js";
|
|
4
6
|
export const emailCmd = new Command("email")
|
|
5
7
|
.description("Send and manage emails using provisioned inboxes")
|
|
6
8
|
.addHelpText("after", `
|
|
@@ -10,6 +12,7 @@ Subcommands:
|
|
|
10
12
|
naive email delete Delete (deactivate) an email inbox
|
|
11
13
|
naive email send Send an email from a specific inbox
|
|
12
14
|
naive email inbox List received emails
|
|
15
|
+
naive email sent List sent emails
|
|
13
16
|
naive email read Read full email content by ID
|
|
14
17
|
|
|
15
18
|
Workflow:
|
|
@@ -164,8 +167,8 @@ Examples:
|
|
|
164
167
|
What this does:
|
|
165
168
|
1. Validates the inbox UUID belongs to your company
|
|
166
169
|
2. Sends the email via the provisioned email service
|
|
167
|
-
3. Deducts
|
|
168
|
-
4. Returns
|
|
170
|
+
3. Deducts ${FIXED_CREDIT_COSTS.emailSend} credits immediately
|
|
171
|
+
4. Returns a Naive message ID that works with 'naive email read'
|
|
169
172
|
|
|
170
173
|
Parameters:
|
|
171
174
|
--from-inbox The UUID of the inbox (NOT the email address). Get this from 'naive email inboxes'
|
|
@@ -174,7 +177,7 @@ Parameters:
|
|
|
174
177
|
--body Body content (plain text or HTML — HTML tags are auto-detected)
|
|
175
178
|
--reply-to Optional reply-to override
|
|
176
179
|
|
|
177
|
-
Cost:
|
|
180
|
+
Cost: ${FIXED_CREDIT_COSTS.emailSend} credits per email sent
|
|
178
181
|
`)
|
|
179
182
|
.action(async (opts) => {
|
|
180
183
|
const resp = await apiRequest("POST", "/v1/email/send", {
|
|
@@ -186,22 +189,63 @@ Cost: 1 credit per email sent
|
|
|
186
189
|
});
|
|
187
190
|
handleApiError("email.send", resp);
|
|
188
191
|
const data = resp.data;
|
|
192
|
+
const creditsUsed = reportedCreditsUsed(resp.data, FIXED_CREDIT_COSTS.emailSend);
|
|
193
|
+
const readableMessageId = data.message_id;
|
|
189
194
|
agentOutput({
|
|
190
195
|
action: "email.send",
|
|
191
196
|
result: resp.data,
|
|
192
197
|
next_steps: [
|
|
193
198
|
{ command: "naive email inbox", description: "Monitor inbox for replies" },
|
|
194
|
-
|
|
199
|
+
...(!readableMessageId
|
|
200
|
+
? []
|
|
201
|
+
: [{ command: `naive email read ${readableMessageId}`, description: "View the sent message details", when: "You want to review the sent content" }]),
|
|
202
|
+
{ command: "naive email sent", description: "List sent messages" },
|
|
195
203
|
{ command: "naive usage", description: "Check credit deduction" },
|
|
196
204
|
],
|
|
197
205
|
hints: [
|
|
198
206
|
`Email sent successfully (id: ${data.id})`,
|
|
199
|
-
|
|
207
|
+
...(readableMessageId ? [`Naive message id: ${readableMessageId}`] : []),
|
|
208
|
+
// Prefer the response's authoritative credits_used via creditCostHint (N7);
|
|
209
|
+
// fall back to the fixed pricing constant when the response omits it.
|
|
210
|
+
// Either way the credits are deducted immediately on send (not on a later job).
|
|
211
|
+
creditCostHint(resp.data)
|
|
212
|
+
? `${creditCostHint(resp.data)} (deducted immediately)`
|
|
213
|
+
: `Cost: ${creditsUsed} credits (deducted immediately)`,
|
|
214
|
+
...(data.tracking_available === false
|
|
215
|
+
? ["Delivery succeeded, but sent-message tracking is temporarily unavailable"]
|
|
216
|
+
: []),
|
|
200
217
|
"Monitor for replies with 'naive email inbox'",
|
|
201
218
|
],
|
|
202
219
|
related_commands: ["naive email inbox", "naive email read", "naive email inboxes"],
|
|
203
220
|
});
|
|
204
221
|
});
|
|
222
|
+
emailCmd
|
|
223
|
+
.command("sent")
|
|
224
|
+
.description("List sent emails")
|
|
225
|
+
.option("--limit <n>", "Maximum number of sent emails to return (default: 20, max: 100)", (value) => parseIntegerOption(value, "limit", 1, 100), 20)
|
|
226
|
+
.option("--offset <n>", "Number of sent emails to skip (default: 0)", (value) => parseIntegerOption(value, "offset", 0), 0)
|
|
227
|
+
.action(async (opts) => {
|
|
228
|
+
const params = new URLSearchParams({ limit: String(opts.limit), offset: String(opts.offset) });
|
|
229
|
+
const resp = await apiRequest("GET", `/v1/email/sent?${params}`);
|
|
230
|
+
handleApiError("email.sent", resp);
|
|
231
|
+
const data = resp.data;
|
|
232
|
+
const messages = data.emails ?? [];
|
|
233
|
+
const nextOffset = opts.offset + messages.length;
|
|
234
|
+
agentOutput({
|
|
235
|
+
action: "email.sent",
|
|
236
|
+
result: resp.data,
|
|
237
|
+
next_steps: [
|
|
238
|
+
...(messages[0]
|
|
239
|
+
? [{ command: `naive email read ${messages[0].id}`, description: "Read the most recent sent message" }]
|
|
240
|
+
: []),
|
|
241
|
+
...(data.has_more
|
|
242
|
+
? [{ command: `naive email sent --limit ${opts.limit} --offset ${nextOffset}`, description: "Load the next page of sent messages" }]
|
|
243
|
+
: []),
|
|
244
|
+
],
|
|
245
|
+
hints: [`Found ${messages.length} sent email${messages.length === 1 ? "" : "s"}`],
|
|
246
|
+
related_commands: ["naive email read", "naive email inbox", "naive email send"],
|
|
247
|
+
});
|
|
248
|
+
});
|
|
205
249
|
emailCmd
|
|
206
250
|
.command("inbox")
|
|
207
251
|
.description("List received emails for your inboxes")
|
|
@@ -266,22 +310,25 @@ What this does:
|
|
|
266
310
|
|
|
267
311
|
Use this to:
|
|
268
312
|
- Read a full email after seeing it in 'naive email inbox'
|
|
313
|
+
- Review a sent email after seeing it in 'naive email sent'
|
|
269
314
|
- Extract information from an email for further processing
|
|
270
|
-
- Check delivery/read receipts
|
|
271
315
|
`)
|
|
272
316
|
.action(async (id) => {
|
|
273
317
|
const resp = await apiRequest("GET", `/v1/email/${id}`);
|
|
274
318
|
handleApiError("email.read", resp);
|
|
275
319
|
const data = resp.data;
|
|
320
|
+
const replyAddress = data.direction === "sent" ? data.to : data.from;
|
|
276
321
|
agentOutput({
|
|
277
322
|
action: "email.read",
|
|
278
323
|
result: resp.data,
|
|
279
324
|
next_steps: [
|
|
280
325
|
{ command: "naive email inbox", description: "Go back to inbox list" },
|
|
281
|
-
{ command: `naive email send --from-inbox <uuid> --to ${
|
|
326
|
+
{ command: `naive email send --from-inbox <uuid> --to ${replyAddress} --subject "Re: ${data.subject}" --body <reply>`, description: data.direction === "sent" ? "Send a follow-up" : "Reply to this email" },
|
|
282
327
|
],
|
|
283
328
|
hints: [
|
|
284
|
-
|
|
329
|
+
data.direction === "sent"
|
|
330
|
+
? "This is a sent message; use the recipient address to follow up"
|
|
331
|
+
: "Use the sender address with 'naive email send' to reply",
|
|
285
332
|
],
|
|
286
333
|
related_commands: ["naive email inbox", "naive email send"],
|
|
287
334
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/commands/email.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;
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/commands/email.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ export const formationCmd = new Command("formation")
|
|
|
6
6
|
.addHelpText("after", `
|
|
7
7
|
Subcommands:
|
|
8
8
|
naive formation naics-codes List NAICS industry codes
|
|
9
|
-
naive formation submit [options] Step 1: Validate KYC + create $
|
|
9
|
+
naive formation submit [options] Step 1: Validate KYC + create $349 Stripe Checkout
|
|
10
10
|
naive formation retry-payment <id> Regenerate checkout URL if it expired
|
|
11
11
|
naive formation execute <id> Step 2: Submit to Doola after payment
|
|
12
12
|
naive formation list List all formations
|
|
@@ -15,7 +15,7 @@ Subcommands:
|
|
|
15
15
|
naive formation download <formationId> <docId> Get document download URL
|
|
16
16
|
|
|
17
17
|
Flow:
|
|
18
|
-
1. submit creates a draft formation and returns a Stripe Checkout URL ($
|
|
18
|
+
1. submit creates a draft formation and returns a Stripe Checkout URL ($349)
|
|
19
19
|
2. User pays via the checkout URL
|
|
20
20
|
3. execute submits the formation to Doola (decrypts PII from Footprint, maps fields)
|
|
21
21
|
|
|
@@ -200,7 +200,7 @@ formationCmd
|
|
|
200
200
|
const nextSteps = [];
|
|
201
201
|
const hints = [`Status: ${data.status}`, `Payment: ${data.payment_status}`];
|
|
202
202
|
if (data.status === "awaiting_payment" && data.payment_status === "unpaid") {
|
|
203
|
-
hints.push("Formation is waiting for $
|
|
203
|
+
hints.push("Formation is waiting for $349 payment via Stripe Checkout");
|
|
204
204
|
nextSteps.push({ command: `naive formation retry-payment ${data.id}`, description: "Generate a fresh Stripe Checkout URL (if the original expired)" });
|
|
205
205
|
}
|
|
206
206
|
else if (data.status === "pending" && data.payment_status === "paid") {
|
|
@@ -62,17 +62,18 @@ Output includes:
|
|
|
62
62
|
const resp = await apiRequest("GET", "/v1/identity/emails");
|
|
63
63
|
handleApiError("identity.emails", resp);
|
|
64
64
|
const data = resp.data;
|
|
65
|
+
const emails = data.emails ?? data.inboxes ?? [];
|
|
65
66
|
agentOutput({
|
|
66
67
|
action: "identity.emails",
|
|
67
68
|
result: resp.data,
|
|
68
69
|
next_steps: [
|
|
69
|
-
...(
|
|
70
|
-
? [{ command: `naive email send --from-inbox ${
|
|
70
|
+
...(emails.length > 0
|
|
71
|
+
? [{ command: `naive email send --from-inbox ${emails[0].id} --to <recipient> --subject <subject> --body <body>`, description: "Send an email from the first available inbox" }]
|
|
71
72
|
: []),
|
|
72
73
|
{ command: "naive email inbox", description: "View received emails" },
|
|
73
74
|
],
|
|
74
75
|
hints: [
|
|
75
|
-
`Found ${
|
|
76
|
+
`Found ${emails.length} email inboxes`,
|
|
76
77
|
"Use the inbox UUID as --from-inbox when calling 'naive email send'",
|
|
77
78
|
],
|
|
78
79
|
related_commands: ["naive email send", "naive email inbox", "naive email read"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/commands/identity.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,WAAW,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KAC/C,WAAW,CAAC,2EAA2E,CAAC;KACxF,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;;CAkBvB,CAAC;KACC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACrD,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAEjC,WAAW,CAAC;QACV,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,IAAI,CAAC,IAAI;QACjB,UAAU,EAAE;YACV,EAAE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,kDAAkD,EAAE;YACrG,EAAE,OAAO,EAAE,sFAAsF,EAAE,WAAW,EAAE,wCAAwC,EAAE,IAAI,EAAE,2BAA2B,EAAE;YAC7L,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,8BAA8B,EAAE;SACzE;QACD,KAAK,EAAE;YACL,kFAAkF;YAClF,8DAA8D;SAC/D;QACD,gBAAgB,EAAE,CAAC,uBAAuB,EAAE,0BAA0B,EAAE,qBAAqB,CAAC;KAC/F,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,WAAW;KACR,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gEAAgE,CAAC;KAC7E,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;CAcvB,CAAC;KACC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;IAC5D,cAAc,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAExC,MAAM,IAAI,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/commands/identity.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/images.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { apiRequest, handleApiError } from "../client.js";
|
|
3
|
-
import { agentOutput } from "../output.js";
|
|
3
|
+
import { agentOutput, creditCostHint, creditEstimateHint } from "../output.js";
|
|
4
4
|
export const imagesCmd = new Command("images")
|
|
5
5
|
.description("Generate AI images or search stock photos")
|
|
6
6
|
.addHelpText("after", `
|
|
@@ -18,7 +18,7 @@ Examples:
|
|
|
18
18
|
$ naive images status job-uuid-123
|
|
19
19
|
|
|
20
20
|
Cost:
|
|
21
|
-
- Image generation: dynamic, model-dependent (
|
|
21
|
+
- Image generation: dynamic, model-dependent (run 'naive images pricing --model <id>' to preview)
|
|
22
22
|
- Pricing based on model costs, converted to credits ($0.05/credit)
|
|
23
23
|
- Stock photo search: 0 credits (free)
|
|
24
24
|
- Credits deducted only on successful job completion
|
|
@@ -59,9 +59,16 @@ Parameters (via --input JSON):
|
|
|
59
59
|
num_inference_steps Quality steps (FLUX Schnell: 1-12, default 4)
|
|
60
60
|
output_format "jpeg" or "png" (default: jpeg)
|
|
61
61
|
enable_safety_checker Boolean (default: true)
|
|
62
|
+
image_url / image_urls Source image for edit/image-to-image models. Either form
|
|
63
|
+
is accepted — a single image_url is auto-wrapped to image_urls.
|
|
64
|
+
|
|
65
|
+
Reading the result (after completion, via 'naive images status <id>'):
|
|
66
|
+
Submit returns the job under 'id' (job_id is a deprecated alias).
|
|
67
|
+
The output URL is at result.media[0].url — a flat, model-independent path.
|
|
68
|
+
(result.result.images[0].url is the raw provider payload; media[] is preferred.)
|
|
62
69
|
|
|
63
70
|
Cost: dynamic — based on model pricing ($0.05/credit)
|
|
64
|
-
|
|
71
|
+
Run 'naive images pricing --model <id> --num <n>' to preview cost before generating.
|
|
65
72
|
Credits deducted only on successful completion. Failed jobs are free.
|
|
66
73
|
`)
|
|
67
74
|
.action(async (prompt, opts) => {
|
|
@@ -100,23 +107,28 @@ Cost: dynamic — based on model pricing ($0.05/credit)
|
|
|
100
107
|
if (opts.wait) {
|
|
101
108
|
agentOutput({
|
|
102
109
|
action: "images.generate.submitted",
|
|
103
|
-
|
|
110
|
+
// Surface the estimate at submit so spend is visible before the wait (N6).
|
|
111
|
+
result: { job_id: data.job_id, status: "polling", model: modelUsed, estimated_credits: data.estimated_credits ?? null },
|
|
104
112
|
next_steps: [],
|
|
105
|
-
hints: [
|
|
113
|
+
hints: [
|
|
114
|
+
"Waiting for image generation to complete...",
|
|
115
|
+
...(creditEstimateHint(resp.data) ? [creditEstimateHint(resp.data)] : []),
|
|
116
|
+
],
|
|
106
117
|
});
|
|
107
118
|
await pollJob(data.job_id);
|
|
108
119
|
}
|
|
109
120
|
else {
|
|
110
121
|
agentOutput({
|
|
111
122
|
action: "images.generate.submitted",
|
|
112
|
-
result: { job_id: data.job_id, status: "queued", model: modelUsed },
|
|
123
|
+
result: { job_id: data.job_id, status: "queued", model: modelUsed, estimated_credits: data.estimated_credits ?? null },
|
|
113
124
|
next_steps: [
|
|
114
125
|
{ command: `naive images status ${data.job_id}`, description: "Check generation progress" },
|
|
115
126
|
{ command: `naive jobs get ${data.job_id}`, description: "Get full job details" },
|
|
116
127
|
],
|
|
117
128
|
hints: [
|
|
118
129
|
`Image generation submitted (model: ${modelUsed})`,
|
|
119
|
-
|
|
130
|
+
// Echoes the API's pre-flight estimate (same source that bills at completion) — N6.
|
|
131
|
+
...(creditEstimateHint(resp.data) ? [creditEstimateHint(resp.data)] : ["Credits deducted only on successful completion"]),
|
|
120
132
|
"Typical time: 5-15 seconds depending on model",
|
|
121
133
|
],
|
|
122
134
|
related_commands: ["naive images status", "naive jobs get", "naive jobs"],
|
|
@@ -156,12 +168,15 @@ When completed, the result includes image URLs that you can download or use.
|
|
|
156
168
|
const resp = await apiRequest("GET", `/v1/images/${jobId}`);
|
|
157
169
|
handleApiError("images.status", resp);
|
|
158
170
|
const data = resp.data;
|
|
171
|
+
// N12: prefer the flat, model-independent media[] path; fall back to the raw
|
|
172
|
+
// provider nesting for older API responses that predate media[].
|
|
173
|
+
const imageUrl = data.media?.[0]?.url ?? data.result?.images?.[0]?.url;
|
|
159
174
|
agentOutput({
|
|
160
175
|
action: "images.status",
|
|
161
176
|
result: resp.data,
|
|
162
177
|
next_steps: [
|
|
163
|
-
...(data.status === "completed" &&
|
|
164
|
-
? [{ command: `# Download: curl -o image.png "${
|
|
178
|
+
...(data.status === "completed" && imageUrl
|
|
179
|
+
? [{ command: `# Download: curl -o image.png "${imageUrl}"`, description: "Download the generated image (result.media[0].url)" }]
|
|
165
180
|
: []),
|
|
166
181
|
...(data.status === "queued" || data.status === "processing"
|
|
167
182
|
? [{ command: `naive images status ${jobId}`, description: "Check again in a few seconds" }]
|
|
@@ -171,6 +186,10 @@ When completed, the result includes image URLs that you can download or use.
|
|
|
171
186
|
hints: [
|
|
172
187
|
`Job status: ${data.status}`,
|
|
173
188
|
...(data.status === "completed" ? [`${data.result?.images?.length ?? 0} image(s) generated`] : []),
|
|
189
|
+
// Post-hoc: the completed job's ACTUAL credits_used — same single source
|
|
190
|
+
// as the pre-flight estimate, so before/at/after agree (N6).
|
|
191
|
+
...(creditCostHint(resp.data) ? [creditCostHint(resp.data)] : []),
|
|
192
|
+
...(data.status === "failed" ? [`Failed (no credits deducted). Reason: ${data.error || "unknown"}`] : []),
|
|
174
193
|
],
|
|
175
194
|
related_commands: ["naive images generate", "naive jobs"],
|
|
176
195
|
});
|
|
@@ -256,14 +275,67 @@ What this does:
|
|
|
256
275
|
hints: [
|
|
257
276
|
"Use the model 'id' field as the --model parameter in 'naive images generate'",
|
|
258
277
|
"Faster models cost fewer credits; higher-quality models cost more",
|
|
278
|
+
"Each model includes credits_estimate (1 image; null when pricing is unavailable)",
|
|
279
|
+
"For an exact quote: naive images pricing --model <id> --num <n>",
|
|
259
280
|
],
|
|
260
|
-
related_commands: ["naive images generate", "naive images stock"],
|
|
281
|
+
related_commands: ["naive images generate", "naive images pricing", "naive images stock"],
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
imagesCmd
|
|
285
|
+
.command("pricing")
|
|
286
|
+
.description("Preview the estimated credit cost of an image model before generating")
|
|
287
|
+
.requiredOption("--model <model>", "Image model ID (get IDs from 'naive images models')")
|
|
288
|
+
.option("--num <n>", "Number of images to price (default: 1)", "1")
|
|
289
|
+
.addHelpText("after", `
|
|
290
|
+
Examples:
|
|
291
|
+
$ naive images pricing --model fal-ai/flux/schnell
|
|
292
|
+
$ naive images pricing --model fal-ai/flux-pro/v1.1 --num 4
|
|
293
|
+
|
|
294
|
+
What this does:
|
|
295
|
+
Returns the ESTIMATED credit cost, derived from the model's live fal.ai price —
|
|
296
|
+
the same source that bills the job on completion, so the estimate tracks the
|
|
297
|
+
real charge. Nothing is spent by this command.
|
|
298
|
+
|
|
299
|
+
Cost: free (this is a price preview; generation itself is charged on completion)
|
|
300
|
+
`)
|
|
301
|
+
.action(async (opts) => {
|
|
302
|
+
const numImages = parseInt(opts.num ?? "1", 10);
|
|
303
|
+
if (!Number.isFinite(numImages) || numImages <= 0) {
|
|
304
|
+
console.error(JSON.stringify({
|
|
305
|
+
success: false,
|
|
306
|
+
action: "images.pricing",
|
|
307
|
+
error: { code: "invalid_argument", message: "--num must be a positive integer" },
|
|
308
|
+
recovery_steps: [
|
|
309
|
+
{ command: `naive images pricing --model ${opts.model} --num 1`, description: "Price a single image" },
|
|
310
|
+
],
|
|
311
|
+
}, null, 2));
|
|
312
|
+
process.exit(1);
|
|
313
|
+
}
|
|
314
|
+
const params = new URLSearchParams({ model: opts.model, num_images: String(numImages) });
|
|
315
|
+
const resp = await apiRequest("GET", `/v1/images/pricing?${params}`);
|
|
316
|
+
handleApiError("images.pricing", resp);
|
|
317
|
+
const data = resp.data;
|
|
318
|
+
agentOutput({
|
|
319
|
+
action: "images.pricing",
|
|
320
|
+
result: resp.data,
|
|
321
|
+
next_steps: [
|
|
322
|
+
{ command: `naive images generate "your prompt" --model ${opts.model} --num ${numImages}`, description: "Generate images with this model" },
|
|
323
|
+
{ command: "naive images models", description: "Compare estimates across all models" },
|
|
324
|
+
],
|
|
325
|
+
hints: [
|
|
326
|
+
typeof data.estimated_credits === "number"
|
|
327
|
+
? `Estimated cost: ${data.estimated_credits} credits for ${data.num_images ?? numImages} image(s) (charged only on successful completion)`
|
|
328
|
+
: "Pricing unavailable for this model",
|
|
329
|
+
"This is an estimate; the exact charge is metered from the number of images delivered",
|
|
330
|
+
],
|
|
331
|
+
related_commands: ["naive images generate", "naive images models"],
|
|
261
332
|
});
|
|
262
333
|
});
|
|
263
334
|
async function pollJob(jobId) {
|
|
264
335
|
while (true) {
|
|
265
336
|
await new Promise((r) => setTimeout(r, 2000));
|
|
266
337
|
const resp = await apiRequest("GET", `/v1/jobs/${jobId}`);
|
|
338
|
+
handleApiError("images.generate.poll", resp);
|
|
267
339
|
const data = resp.data;
|
|
268
340
|
if (data.status === "completed" || data.status === "failed") {
|
|
269
341
|
agentOutput({
|
|
@@ -284,7 +356,9 @@ async function pollJob(jobId) {
|
|
|
284
356
|
hints: [
|
|
285
357
|
data.status === "completed"
|
|
286
358
|
? `Generation complete — ${data.result?.images?.length ?? 0} image(s) ready`
|
|
287
|
-
:
|
|
359
|
+
: `Generation failed — no credits deducted. Reason: ${data.error || "unknown"}`,
|
|
360
|
+
// Actual charge, derived from the completed job's credits_used (N6/N7).
|
|
361
|
+
...(creditCostHint(resp.data) ? [creditCostHint(resp.data)] : []),
|
|
288
362
|
...(data.status === "completed" ? ["Tip: Use 'naive social post' to publish directly to Instagram, Twitter, LinkedIn, etc."] : []),
|
|
289
363
|
],
|
|
290
364
|
related_commands: ["naive images generate", "naive images stock", "naive social post", "naive jobs"],
|