@usenaive-sdk/cli 0.2.6 → 0.2.8
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 +26 -6
- package/dist/commands/aeo.js +9 -9
- package/dist/commands/aeo.js.map +1 -1
- package/dist/commands/app-data.js +12 -0
- package/dist/commands/app-data.js.map +1 -1
- package/dist/commands/billing.js +4 -4
- package/dist/commands/billing.js.map +1 -1
- package/dist/commands/business.js +14 -0
- package/dist/commands/business.js.map +1 -1
- package/dist/commands/cards.d.ts +2 -0
- package/dist/commands/cards.js +406 -0
- package/dist/commands/cards.js.map +1 -0
- package/dist/commands/domains.js +5 -5
- package/dist/commands/domains.js.map +1 -1
- package/dist/commands/ecommerce.js +3 -3
- package/dist/commands/ecommerce.js.map +1 -1
- package/dist/commands/email.js +1 -1
- package/dist/commands/formation.d.ts +2 -0
- package/dist/commands/formation.js +262 -0
- package/dist/commands/formation.js.map +1 -0
- package/dist/commands/images.js +16 -16
- package/dist/commands/images.js.map +1 -1
- package/dist/commands/search.js +5 -5
- package/dist/commands/seo.js +23 -7
- package/dist/commands/seo.js.map +1 -1
- package/dist/commands/social.js +3 -3
- package/dist/commands/social.js.map +1 -1
- package/dist/commands/usage.js +2 -2
- package/dist/commands/verification.d.ts +2 -0
- package/dist/commands/verification.js +145 -0
- package/dist/commands/verification.js.map +1 -0
- package/dist/commands/video.js +11 -11
- package/dist/commands/video.js.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { apiRequest, handleApiError } from "../client.js";
|
|
3
|
+
import { agentOutput } from "../output.js";
|
|
4
|
+
export const formationCmd = new Command("formation")
|
|
5
|
+
.description("Company formation (LLC incorporation) via Doola — requires completed KYC")
|
|
6
|
+
.addHelpText("after", `
|
|
7
|
+
Subcommands:
|
|
8
|
+
naive formation naics-codes List NAICS industry codes
|
|
9
|
+
naive formation submit [options] Step 1: Validate KYC + create $249 Stripe Checkout
|
|
10
|
+
naive formation retry-payment <id> Regenerate checkout URL if it expired
|
|
11
|
+
naive formation execute <id> Step 2: Submit to Doola after payment
|
|
12
|
+
naive formation list List all formations
|
|
13
|
+
naive formation status <id> Get formation details
|
|
14
|
+
naive formation documents <id> List formation documents
|
|
15
|
+
naive formation download <formationId> <docId> Get document download URL
|
|
16
|
+
|
|
17
|
+
Flow:
|
|
18
|
+
1. submit creates a draft formation and returns a Stripe Checkout URL ($249)
|
|
19
|
+
2. User pays via the checkout URL
|
|
20
|
+
3. execute submits the formation to Doola (decrypts PII from Footprint, maps fields)
|
|
21
|
+
|
|
22
|
+
If the checkout session expires before payment, run 'retry-payment' to get a fresh URL.
|
|
23
|
+
|
|
24
|
+
Requires completed identity verification (all members passed KYC).
|
|
25
|
+
PII (SSN, DOB, address) is pulled from Footprint vault automatically.
|
|
26
|
+
`);
|
|
27
|
+
formationCmd
|
|
28
|
+
.command("naics-codes")
|
|
29
|
+
.description("List available NAICS industry codes for company formation")
|
|
30
|
+
.action(async () => {
|
|
31
|
+
const resp = await apiRequest("GET", "/v1/formation/naics-codes");
|
|
32
|
+
handleApiError("formation.naics-codes", resp);
|
|
33
|
+
const data = resp.data;
|
|
34
|
+
agentOutput({
|
|
35
|
+
action: "formation.naics-codes",
|
|
36
|
+
result: resp.data,
|
|
37
|
+
next_steps: [
|
|
38
|
+
{ command: "naive formation submit --verification-id <id> --state WY --naics <naicsCodeId> ...", description: "Submit formation with a NAICS code" },
|
|
39
|
+
],
|
|
40
|
+
hints: [`Found ${data.naics_codes?.length ?? 0} NAICS codes`],
|
|
41
|
+
related_commands: ["naive formation submit"],
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
formationCmd
|
|
45
|
+
.command("submit")
|
|
46
|
+
.description("Submit company formation — requires completed KYC verification")
|
|
47
|
+
.requiredOption("--verification-id <id>", "UUID of the completed KYC verification")
|
|
48
|
+
.requiredOption("--state <state>", "2-letter US state code (e.g. WY, DE)")
|
|
49
|
+
.requiredOption("--naics <naicsCodeId>", "NAICS code ID from 'naive formation naics-codes'")
|
|
50
|
+
.requiredOption("--description <desc>", "Business description (max 256 chars)")
|
|
51
|
+
.requiredOption("--names <json>", "JSON array of name options: [{name, entity_type_ending}]")
|
|
52
|
+
.option("--address <json>", "JSON mailing address (optional — defaults to primary member's KYC address)")
|
|
53
|
+
.action(async (opts) => {
|
|
54
|
+
let nameOptions;
|
|
55
|
+
let mailingAddress;
|
|
56
|
+
try {
|
|
57
|
+
nameOptions = JSON.parse(opts.names);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
console.error(JSON.stringify({ success: false, error: "Invalid JSON for --names" }));
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
if (opts.address) {
|
|
64
|
+
try {
|
|
65
|
+
mailingAddress = JSON.parse(opts.address);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
console.error(JSON.stringify({ success: false, error: "Invalid JSON for --address" }));
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const body = {
|
|
73
|
+
verification_id: opts.verificationId,
|
|
74
|
+
entity_type: "LLC",
|
|
75
|
+
state: opts.state,
|
|
76
|
+
naics_code_id: opts.naics,
|
|
77
|
+
description: opts.description,
|
|
78
|
+
name_options: nameOptions,
|
|
79
|
+
};
|
|
80
|
+
if (mailingAddress)
|
|
81
|
+
body.mailing_address = mailingAddress;
|
|
82
|
+
const resp = await apiRequest("POST", "/v1/formation", body);
|
|
83
|
+
handleApiError("formation.submit", resp);
|
|
84
|
+
const data = resp.data;
|
|
85
|
+
agentOutput({
|
|
86
|
+
action: "formation.submit",
|
|
87
|
+
result: resp.data,
|
|
88
|
+
next_steps: [
|
|
89
|
+
...(data.checkout_url
|
|
90
|
+
? [{ command: `Open ${data.checkout_url}`, description: `Pay the ${data.price_usd} formation fee in browser` }]
|
|
91
|
+
: []),
|
|
92
|
+
{ command: `naive formation execute ${data.id}`, description: "After paying, run this to submit to Doola", when: "payment is complete" },
|
|
93
|
+
{ command: `naive formation status ${data.id}`, description: "Check formation status" },
|
|
94
|
+
],
|
|
95
|
+
hints: [
|
|
96
|
+
`Formation ${data.id} created with status: ${data.status}`,
|
|
97
|
+
`A ${data.price_usd} payment is required before submission to Doola`,
|
|
98
|
+
"Open the checkout_url, pay, then run 'naive formation execute' to submit",
|
|
99
|
+
],
|
|
100
|
+
related_commands: ["naive formation execute", "naive formation status", "naive formation list"],
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
formationCmd
|
|
104
|
+
.command("retry-payment <id>")
|
|
105
|
+
.description("Generate a fresh Stripe Checkout URL for a formation whose checkout expired")
|
|
106
|
+
.action(async (id) => {
|
|
107
|
+
const resp = await apiRequest("POST", `/v1/formation/${id}/retry-payment`);
|
|
108
|
+
handleApiError("formation.retry-payment", resp);
|
|
109
|
+
const data = resp.data;
|
|
110
|
+
agentOutput({
|
|
111
|
+
action: "formation.retry-payment",
|
|
112
|
+
result: resp.data,
|
|
113
|
+
next_steps: [
|
|
114
|
+
...(data.checkout_url
|
|
115
|
+
? [{ command: `Open ${data.checkout_url}`, description: `Pay the ${data.price_usd} formation fee in browser` }]
|
|
116
|
+
: []),
|
|
117
|
+
{ command: `naive formation status ${data.id}`, description: "Check formation status" },
|
|
118
|
+
],
|
|
119
|
+
hints: [
|
|
120
|
+
`New checkout URL generated for formation ${data.id}`,
|
|
121
|
+
"Open the URL and complete payment, then call 'naive formation execute' to submit to Doola",
|
|
122
|
+
],
|
|
123
|
+
related_commands: ["naive formation execute", "naive formation status"],
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
formationCmd
|
|
127
|
+
.command("execute <id>")
|
|
128
|
+
.description("Submit formation to Doola (after payment is complete)")
|
|
129
|
+
.action(async (id) => {
|
|
130
|
+
const resp = await apiRequest("POST", `/v1/formation/${id}/submit`);
|
|
131
|
+
handleApiError("formation.execute", resp);
|
|
132
|
+
const data = resp.data;
|
|
133
|
+
agentOutput({
|
|
134
|
+
action: "formation.execute",
|
|
135
|
+
result: resp.data,
|
|
136
|
+
next_steps: [
|
|
137
|
+
{ command: `naive formation status ${data.id}`, description: "Track formation progress" },
|
|
138
|
+
{ command: `naive formation documents ${data.id}`, description: "List documents (after completion)", when: "formation is completed" },
|
|
139
|
+
],
|
|
140
|
+
hints: [
|
|
141
|
+
`Formation ${data.id} status: ${data.status}`,
|
|
142
|
+
data.doola_company_id ? `Doola Company ID: ${data.doola_company_id}` : "Doola is processing the formation",
|
|
143
|
+
"Formation typically takes days to weeks. Documents will be available after completion.",
|
|
144
|
+
],
|
|
145
|
+
related_commands: ["naive formation status", "naive formation documents", "naive formation list"],
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
formationCmd
|
|
149
|
+
.command("list")
|
|
150
|
+
.description("List all company formation requests")
|
|
151
|
+
.action(async () => {
|
|
152
|
+
const resp = await apiRequest("GET", "/v1/formation");
|
|
153
|
+
handleApiError("formation.list", resp);
|
|
154
|
+
const data = resp.data;
|
|
155
|
+
const awaitingPayment = data.formations.filter((f) => f.status === "awaiting_payment");
|
|
156
|
+
const readyToExecute = data.formations.filter((f) => f.status === "pending" && f.payment_status === "paid");
|
|
157
|
+
const nextSteps = [];
|
|
158
|
+
if (readyToExecute.length > 0) {
|
|
159
|
+
nextSteps.push({ command: `naive formation execute ${readyToExecute[0].id}`, description: "Submit paid formation to Doola" });
|
|
160
|
+
}
|
|
161
|
+
else if (awaitingPayment.length > 0) {
|
|
162
|
+
nextSteps.push({ command: `naive formation status ${awaitingPayment[0].id}`, description: "View formation awaiting payment" });
|
|
163
|
+
}
|
|
164
|
+
else if (data.formations.length > 0) {
|
|
165
|
+
nextSteps.push({ command: `naive formation status ${data.formations[0].id}`, description: "View details of the latest formation" });
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
nextSteps.push({ command: "naive formation submit ...", description: "Submit a new formation" });
|
|
169
|
+
}
|
|
170
|
+
agentOutput({
|
|
171
|
+
action: "formation.list",
|
|
172
|
+
result: resp.data,
|
|
173
|
+
next_steps: nextSteps,
|
|
174
|
+
hints: [
|
|
175
|
+
`Found ${data.formations.length} formation(s)`,
|
|
176
|
+
...(awaitingPayment.length > 0 ? [`${awaitingPayment.length} awaiting payment`] : []),
|
|
177
|
+
...(readyToExecute.length > 0 ? [`${readyToExecute.length} paid and ready to execute`] : []),
|
|
178
|
+
],
|
|
179
|
+
related_commands: ["naive formation submit", "naive formation execute", "naive formation status"],
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
formationCmd
|
|
183
|
+
.command("status <id>")
|
|
184
|
+
.description("Get formation details and status")
|
|
185
|
+
.action(async (id) => {
|
|
186
|
+
const resp = await apiRequest("GET", `/v1/formation/${id}`);
|
|
187
|
+
handleApiError("formation.status", resp);
|
|
188
|
+
const data = resp.data;
|
|
189
|
+
const nextSteps = [];
|
|
190
|
+
const hints = [`Status: ${data.status}`, `Payment: ${data.payment_status}`];
|
|
191
|
+
if (data.status === "awaiting_payment" && data.payment_status === "unpaid") {
|
|
192
|
+
hints.push("Formation is waiting for $249 payment via Stripe Checkout");
|
|
193
|
+
nextSteps.push({ command: `naive formation retry-payment ${data.id}`, description: "Generate a fresh Stripe Checkout URL (if the original expired)" });
|
|
194
|
+
}
|
|
195
|
+
else if (data.status === "pending" && data.payment_status === "paid") {
|
|
196
|
+
hints.push("Payment received — ready to submit to Doola");
|
|
197
|
+
nextSteps.push({ command: `naive formation execute ${data.id}`, description: "Submit formation to Doola now" });
|
|
198
|
+
}
|
|
199
|
+
else if (data.status === "submitted" || data.status === "formation_completed") {
|
|
200
|
+
if (data.doola_company_id)
|
|
201
|
+
hints.push(`Doola Company ID: ${data.doola_company_id}`);
|
|
202
|
+
hints.push("Doola is processing the formation. Documents will appear when complete.");
|
|
203
|
+
if (data.doola_company_id) {
|
|
204
|
+
nextSteps.push({ command: `naive formation documents ${data.id}`, description: "List available documents" });
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
else if (data.status === "failed") {
|
|
208
|
+
hints.push(`Error: ${data.doola_error ?? "(unknown)"}`);
|
|
209
|
+
if (data.payment_status === "paid") {
|
|
210
|
+
hints.push("Payment was completed but formation failed at Doola. Contact support@usenaive.ai for assistance.");
|
|
211
|
+
nextSteps.push({ command: `naive formation execute ${data.id}`, description: "Retry the Doola submission (may resolve transient errors)" });
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
hints.push("Payment was not completed. You can retry payment or start a new formation.");
|
|
215
|
+
nextSteps.push({ command: `naive formation retry-payment ${data.id}`, description: "Generate a fresh checkout URL and try again" });
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
agentOutput({
|
|
219
|
+
action: "formation.status",
|
|
220
|
+
result: resp.data,
|
|
221
|
+
next_steps: nextSteps,
|
|
222
|
+
hints,
|
|
223
|
+
related_commands: ["naive formation list", "naive formation execute", "naive formation documents"],
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
formationCmd
|
|
227
|
+
.command("documents <id>")
|
|
228
|
+
.description("List documents for a formation (Articles of Organization, EIN Letter, etc.)")
|
|
229
|
+
.action(async (id) => {
|
|
230
|
+
const resp = await apiRequest("GET", `/v1/formation/${id}/documents`);
|
|
231
|
+
handleApiError("formation.documents", resp);
|
|
232
|
+
const data = resp.data;
|
|
233
|
+
agentOutput({
|
|
234
|
+
action: "formation.documents",
|
|
235
|
+
result: resp.data,
|
|
236
|
+
next_steps: data.documents.length > 0
|
|
237
|
+
? [{ command: `naive formation download ${id} ${data.documents[0].id}`, description: `Download ${data.documents[0].documentType}` }]
|
|
238
|
+
: [],
|
|
239
|
+
hints: [`Found ${data.documents.length} document(s)`],
|
|
240
|
+
related_commands: ["naive formation status", "naive formation download"],
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
formationCmd
|
|
244
|
+
.command("download <formationId> <documentId>")
|
|
245
|
+
.description("Get a temporary signed download URL for a formation document")
|
|
246
|
+
.action(async (formationId, documentId) => {
|
|
247
|
+
const resp = await apiRequest("GET", `/v1/formation/${formationId}/documents/${documentId}`);
|
|
248
|
+
handleApiError("formation.download", resp);
|
|
249
|
+
const data = resp.data;
|
|
250
|
+
agentOutput({
|
|
251
|
+
action: "formation.download",
|
|
252
|
+
result: resp.data,
|
|
253
|
+
next_steps: data.downloadUrl
|
|
254
|
+
? [{ command: `curl -o "${data.name ?? "document.pdf"}" "${data.downloadUrl}"`, description: "Download the document" }]
|
|
255
|
+
: [],
|
|
256
|
+
hints: data.downloadUrl
|
|
257
|
+
? ["Download URL is temporary — use it within 1 hour"]
|
|
258
|
+
: ["Document may not be ready yet"],
|
|
259
|
+
related_commands: ["naive formation documents"],
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
//# sourceMappingURL=formation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formation.js","sourceRoot":"","sources":["../../src/commands/formation.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/images.js
CHANGED
|
@@ -2,13 +2,13 @@ import { Command } from "commander";
|
|
|
2
2
|
import { apiRequest, handleApiError } from "../client.js";
|
|
3
3
|
import { agentOutput } from "../output.js";
|
|
4
4
|
export const imagesCmd = new Command("images")
|
|
5
|
-
.description("Generate AI images
|
|
5
|
+
.description("Generate AI images or search stock photos")
|
|
6
6
|
.addHelpText("after", `
|
|
7
7
|
Subcommands:
|
|
8
|
-
naive images generate <prompt> Generate images using
|
|
9
|
-
naive images stock <query> Search stock photos
|
|
8
|
+
naive images generate <prompt> Generate images using AI models
|
|
9
|
+
naive images stock <query> Search stock photos
|
|
10
10
|
naive images status <job_id> Check generation job status
|
|
11
|
-
naive images models List available
|
|
11
|
+
naive images models List available image generation models
|
|
12
12
|
|
|
13
13
|
Examples:
|
|
14
14
|
$ naive images generate "a futuristic city at sunset" --model fal-ai/flux/schnell
|
|
@@ -19,15 +19,15 @@ Examples:
|
|
|
19
19
|
|
|
20
20
|
Cost:
|
|
21
21
|
- Image generation: dynamic, model-dependent (use GET /v1/images/pricing to preview)
|
|
22
|
-
- Pricing based on
|
|
22
|
+
- Pricing based on model costs, converted to credits ($0.50/credit)
|
|
23
23
|
- Stock photo search: 0 credits (free)
|
|
24
24
|
- Credits deducted only on successful job completion
|
|
25
25
|
`);
|
|
26
26
|
imagesCmd
|
|
27
27
|
.command("generate [prompt]")
|
|
28
|
-
.description("Generate images using
|
|
29
|
-
.option("--model <model>", "
|
|
30
|
-
.option("--input <json>", "Full
|
|
28
|
+
.description("Generate images using AI models (async — returns job ID)")
|
|
29
|
+
.option("--model <model>", "Model ID (default: fal-ai/flux/schnell)")
|
|
30
|
+
.option("--input <json>", "Full input parameters as JSON (overrides prompt)")
|
|
31
31
|
.option("--size <size>", "Image size: square_hd, landscape_4_3, landscape_16_9, portrait_4_3, portrait_16_9")
|
|
32
32
|
.option("--num <n>", "Number of images to generate (default: 1)", "1")
|
|
33
33
|
.option("--wait", "Wait for job to complete (polls until done)")
|
|
@@ -39,7 +39,7 @@ Examples:
|
|
|
39
39
|
$ naive images generate "product photo" --model fal-ai/flux/schnell --wait
|
|
40
40
|
|
|
41
41
|
What this does:
|
|
42
|
-
1. Submits an image generation request
|
|
42
|
+
1. Submits an image generation request
|
|
43
43
|
2. Returns a job ID (async processing)
|
|
44
44
|
3. Use --wait to block until images are ready, or check with 'naive images status'
|
|
45
45
|
|
|
@@ -50,7 +50,7 @@ Available models (use 'naive images models' for full list):
|
|
|
50
50
|
fal-ai/flux-realism Photorealistic results
|
|
51
51
|
fal-ai/recraft-v3 Design-focused (logos, illustrations)
|
|
52
52
|
|
|
53
|
-
Parameters (via --input JSON
|
|
53
|
+
Parameters (via --input JSON):
|
|
54
54
|
prompt Text description of the image (required)
|
|
55
55
|
image_size square_hd | square | landscape_4_3 | landscape_16_9 | portrait_4_3 | portrait_16_9
|
|
56
56
|
num_images Number of images (1-4)
|
|
@@ -60,7 +60,7 @@ Parameters (via --input JSON — passed directly to fal.ai):
|
|
|
60
60
|
output_format "jpeg" or "png" (default: jpeg)
|
|
61
61
|
enable_safety_checker Boolean (default: true)
|
|
62
62
|
|
|
63
|
-
Cost: dynamic — based on
|
|
63
|
+
Cost: dynamic — based on model pricing ($0.50/credit)
|
|
64
64
|
Use 'GET /v1/images/pricing?model=<id>&num_images=<n>' to preview cost.
|
|
65
65
|
Credits deducted only on successful completion. Failed jobs are free.
|
|
66
66
|
`)
|
|
@@ -83,7 +83,7 @@ Cost: dynamic — based on fal.ai model pricing ($0.50/credit)
|
|
|
83
83
|
error: { code: "missing_argument", message: "Provide a prompt or --input JSON" },
|
|
84
84
|
recovery_steps: [
|
|
85
85
|
{ command: 'naive images generate "your prompt" --model fal-ai/flux/schnell', description: "Generate with a text prompt" },
|
|
86
|
-
{ command: "naive images generate --model <model> --input '{...}'", description: "Generate with full
|
|
86
|
+
{ command: "naive images generate --model <model> --input '{...}'", description: "Generate with full model parameters" },
|
|
87
87
|
{ command: "naive images models", description: "List available models" },
|
|
88
88
|
],
|
|
89
89
|
}, null, 2));
|
|
@@ -177,7 +177,7 @@ When completed, the result includes image URLs that you can download or use.
|
|
|
177
177
|
});
|
|
178
178
|
imagesCmd
|
|
179
179
|
.command("stock <query>")
|
|
180
|
-
.description("Search stock photos
|
|
180
|
+
.description("Search stock photos")
|
|
181
181
|
.option("--count <n>", "Number of results (default: 10, max: 80)", "10")
|
|
182
182
|
.option("--orientation <type>", "Filter: landscape | portrait | square")
|
|
183
183
|
.option("--color <color>", "Filter by color (red, orange, yellow, green, turquoise, blue, violet, pink, brown, black, gray, white, or hex like #ffffff)")
|
|
@@ -190,7 +190,7 @@ Examples:
|
|
|
190
190
|
$ naive images stock "abstract background" --color blue --size large
|
|
191
191
|
|
|
192
192
|
What this does:
|
|
193
|
-
Searches
|
|
193
|
+
Searches stock photos matching the query.
|
|
194
194
|
Returns photo URLs in multiple sizes (original, large, medium, small).
|
|
195
195
|
|
|
196
196
|
Parameters:
|
|
@@ -232,13 +232,13 @@ Cost: 0 credits (free)
|
|
|
232
232
|
});
|
|
233
233
|
imagesCmd
|
|
234
234
|
.command("models")
|
|
235
|
-
.description("List available
|
|
235
|
+
.description("List available image generation models with pricing")
|
|
236
236
|
.addHelpText("after", `
|
|
237
237
|
Examples:
|
|
238
238
|
$ naive images models
|
|
239
239
|
|
|
240
240
|
What this does:
|
|
241
|
-
Returns all supported
|
|
241
|
+
Returns all supported models with:
|
|
242
242
|
- Model ID (use as --model parameter)
|
|
243
243
|
- Name and description
|
|
244
244
|
- Approximate generation time
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../src/commands/images.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,
|
|
1
|
+
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../src/commands/images.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/search.js
CHANGED
|
@@ -7,7 +7,7 @@ export const searchCmd = new Command("search")
|
|
|
7
7
|
.option("--count <n>", "Number of results to return (default: 5)", "5")
|
|
8
8
|
.addHelpText("after", `
|
|
9
9
|
Subcommands:
|
|
10
|
-
naive search <query> Quick web search
|
|
10
|
+
naive search <query> Quick web search
|
|
11
11
|
naive search url <url> Extract content from a specific URL
|
|
12
12
|
naive search research <query> Deep multi-source research (async)
|
|
13
13
|
|
|
@@ -19,14 +19,14 @@ Examples:
|
|
|
19
19
|
$ naive search research "market size for AI coding tools" --depth thorough
|
|
20
20
|
|
|
21
21
|
Quick Search:
|
|
22
|
-
|
|
22
|
+
Returns top web results with:
|
|
23
23
|
- Title, URL, snippet for each result
|
|
24
24
|
- Relevance scores (when available)
|
|
25
25
|
Cost: 1 credit
|
|
26
26
|
|
|
27
27
|
URL Extraction:
|
|
28
28
|
Fetches and extracts content from a single URL.
|
|
29
|
-
Optionally uses AI
|
|
29
|
+
Optionally uses AI to extract specific information.
|
|
30
30
|
Cost: 1 credit
|
|
31
31
|
|
|
32
32
|
Deep Research:
|
|
@@ -84,7 +84,7 @@ Examples:
|
|
|
84
84
|
What this does:
|
|
85
85
|
1. Fetches the URL content (respects robots.txt)
|
|
86
86
|
2. Extracts readable text from HTML
|
|
87
|
-
3. If --extract is provided, uses AI
|
|
87
|
+
3. If --extract is provided, uses AI to extract specific information
|
|
88
88
|
4. Returns the extracted content
|
|
89
89
|
|
|
90
90
|
Parameters:
|
|
@@ -124,7 +124,7 @@ Examples:
|
|
|
124
124
|
|
|
125
125
|
What this does:
|
|
126
126
|
1. Submits a research query to the async job system
|
|
127
|
-
2. The system searches multiple sources, synthesizes with AI
|
|
127
|
+
2. The system searches multiple sources, synthesizes with AI
|
|
128
128
|
3. Returns a comprehensive report with sections and citations
|
|
129
129
|
|
|
130
130
|
Depth levels:
|
package/dist/commands/seo.js
CHANGED
|
@@ -2,7 +2,7 @@ import { Command } from "commander";
|
|
|
2
2
|
import { apiRequest, handleApiError } from "../client.js";
|
|
3
3
|
import { agentOutput } from "../output.js";
|
|
4
4
|
export const seoCmd = new Command("seo")
|
|
5
|
-
.description("SEO tools — keyword research, backlink analysis, and competitive intelligence
|
|
5
|
+
.description("SEO tools — keyword research, backlink analysis, and competitive intelligence")
|
|
6
6
|
.addHelpText("after", `
|
|
7
7
|
Subcommands:
|
|
8
8
|
naive seo keywords Keyword research (Google, Bing, Google Trends)
|
|
@@ -24,7 +24,7 @@ Credits:
|
|
|
24
24
|
// KEYWORDS
|
|
25
25
|
// ===========================================================================
|
|
26
26
|
const keywordsCmd = new Command("keywords")
|
|
27
|
-
.description("Keyword research
|
|
27
|
+
.description("Keyword research — Keywords Data API (Google, Bing, Google Trends)");
|
|
28
28
|
// --- Google Keywords ---
|
|
29
29
|
const googleKwCmd = new Command("google")
|
|
30
30
|
.description("Google Ads keyword data — search volume, keyword ideas, ad traffic");
|
|
@@ -57,7 +57,7 @@ function addKeywordSubcommand(parent, name, desc, engine, routePrefix) {
|
|
|
57
57
|
opts.task ? "Async task submitted — check with task-get" : "Live results returned",
|
|
58
58
|
"Cost: 1 credit (live calls only)",
|
|
59
59
|
],
|
|
60
|
-
related_commands: [
|
|
60
|
+
related_commands: ["naive seo backlinks", "naive seo labs"],
|
|
61
61
|
});
|
|
62
62
|
});
|
|
63
63
|
}
|
|
@@ -80,6 +80,7 @@ addKeywordSubcommand(googleKwCmd, "ad-traffic-by-platforms", "Get ad traffic by
|
|
|
80
80
|
result: resp.data,
|
|
81
81
|
next_steps: [],
|
|
82
82
|
hints: ["Free endpoint — no credits used"],
|
|
83
|
+
related_commands: ["naive seo backlinks", "naive seo labs"],
|
|
83
84
|
});
|
|
84
85
|
});
|
|
85
86
|
});
|
|
@@ -95,6 +96,7 @@ googleKwCmd
|
|
|
95
96
|
result: resp.data,
|
|
96
97
|
next_steps: [],
|
|
97
98
|
hints: ["Task results retrieved"],
|
|
99
|
+
related_commands: ["naive seo backlinks", "naive seo labs"],
|
|
98
100
|
});
|
|
99
101
|
});
|
|
100
102
|
googleKwCmd
|
|
@@ -108,6 +110,7 @@ googleKwCmd
|
|
|
108
110
|
result: resp.data,
|
|
109
111
|
next_steps: [],
|
|
110
112
|
hints: ["Use task-get to retrieve results for ready tasks"],
|
|
113
|
+
related_commands: ["naive seo backlinks", "naive seo labs"],
|
|
111
114
|
});
|
|
112
115
|
});
|
|
113
116
|
// --- Bing Keywords ---
|
|
@@ -130,6 +133,7 @@ addKeywordSubcommand(bingKwCmd, "keyword-performance", "Get Bing keyword perform
|
|
|
130
133
|
result: resp.data,
|
|
131
134
|
next_steps: [],
|
|
132
135
|
hints: ["Free endpoint — no credits used"],
|
|
136
|
+
related_commands: ["naive seo backlinks", "naive seo labs"],
|
|
133
137
|
});
|
|
134
138
|
});
|
|
135
139
|
});
|
|
@@ -144,6 +148,7 @@ bingKwCmd
|
|
|
144
148
|
result: resp.data,
|
|
145
149
|
next_steps: [],
|
|
146
150
|
hints: ["Task results retrieved"],
|
|
151
|
+
related_commands: ["naive seo backlinks", "naive seo labs"],
|
|
147
152
|
});
|
|
148
153
|
});
|
|
149
154
|
bingKwCmd
|
|
@@ -157,6 +162,7 @@ bingKwCmd
|
|
|
157
162
|
result: resp.data,
|
|
158
163
|
next_steps: [],
|
|
159
164
|
hints: ["Use task-get to retrieve results for ready tasks"],
|
|
165
|
+
related_commands: ["naive seo backlinks", "naive seo labs"],
|
|
160
166
|
});
|
|
161
167
|
});
|
|
162
168
|
// --- Google Trends ---
|
|
@@ -175,6 +181,7 @@ addKeywordSubcommand(trendsKwCmd, "explore", "Explore Google Trends data", "goog
|
|
|
175
181
|
result: resp.data,
|
|
176
182
|
next_steps: [],
|
|
177
183
|
hints: ["Free endpoint — no credits used"],
|
|
184
|
+
related_commands: ["naive seo backlinks", "naive seo labs"],
|
|
178
185
|
});
|
|
179
186
|
});
|
|
180
187
|
});
|
|
@@ -189,6 +196,7 @@ trendsKwCmd
|
|
|
189
196
|
result: resp.data,
|
|
190
197
|
next_steps: [],
|
|
191
198
|
hints: ["Task results retrieved"],
|
|
199
|
+
related_commands: ["naive seo backlinks", "naive seo labs"],
|
|
192
200
|
});
|
|
193
201
|
});
|
|
194
202
|
trendsKwCmd
|
|
@@ -202,6 +210,7 @@ trendsKwCmd
|
|
|
202
210
|
result: resp.data,
|
|
203
211
|
next_steps: [],
|
|
204
212
|
hints: ["Use task-get to retrieve results for ready tasks"],
|
|
213
|
+
related_commands: ["naive seo backlinks", "naive seo labs"],
|
|
205
214
|
});
|
|
206
215
|
});
|
|
207
216
|
// Keywords utility
|
|
@@ -216,6 +225,7 @@ keywordsCmd
|
|
|
216
225
|
result: resp.data,
|
|
217
226
|
next_steps: [],
|
|
218
227
|
hints: ["Free endpoint — no credits used"],
|
|
228
|
+
related_commands: ["naive seo backlinks", "naive seo labs"],
|
|
219
229
|
});
|
|
220
230
|
});
|
|
221
231
|
keywordsCmd.addCommand(googleKwCmd);
|
|
@@ -250,7 +260,7 @@ function addBacklinkSubcommand(name, desc) {
|
|
|
250
260
|
{ command: "naive seo backlinks summary --target <domain>", description: "Get backlink summary for a domain" },
|
|
251
261
|
],
|
|
252
262
|
hints: ["Cost: 2 credits"],
|
|
253
|
-
related_commands: ["naive seo
|
|
263
|
+
related_commands: ["naive seo keywords", "naive seo labs"],
|
|
254
264
|
});
|
|
255
265
|
});
|
|
256
266
|
}
|
|
@@ -287,6 +297,7 @@ backlinksCmd
|
|
|
287
297
|
result: resp.data,
|
|
288
298
|
next_steps: [],
|
|
289
299
|
hints: ["Free endpoint — no credits used"],
|
|
300
|
+
related_commands: ["naive seo keywords", "naive seo labs"],
|
|
290
301
|
});
|
|
291
302
|
});
|
|
292
303
|
backlinksCmd
|
|
@@ -300,6 +311,7 @@ backlinksCmd
|
|
|
300
311
|
result: resp.data,
|
|
301
312
|
next_steps: [],
|
|
302
313
|
hints: ["Free endpoint — no credits used"],
|
|
314
|
+
related_commands: ["naive seo keywords", "naive seo labs"],
|
|
303
315
|
});
|
|
304
316
|
});
|
|
305
317
|
backlinksCmd
|
|
@@ -315,13 +327,14 @@ backlinksCmd
|
|
|
315
327
|
result: resp.data,
|
|
316
328
|
next_steps: [],
|
|
317
329
|
hints: ["Free endpoint — no credits used"],
|
|
330
|
+
related_commands: ["naive seo keywords", "naive seo labs"],
|
|
318
331
|
});
|
|
319
332
|
});
|
|
320
333
|
// ===========================================================================
|
|
321
334
|
// LABS
|
|
322
335
|
// ===========================================================================
|
|
323
336
|
const labsCmd = new Command("labs")
|
|
324
|
-
.description("
|
|
337
|
+
.description("SEO Labs — competitive intelligence, SERP analysis, keyword difficulty");
|
|
325
338
|
// --- Google Labs ---
|
|
326
339
|
const googleLabsCmd = new Command("google")
|
|
327
340
|
.description("Google SERP analysis — ranked keywords, competitors, domain metrics");
|
|
@@ -350,7 +363,7 @@ function addLabsSubcommand(parent, name, desc, engine) {
|
|
|
350
363
|
{ command: `naive seo labs ${engine} ${name} --help`, description: "See all options" },
|
|
351
364
|
],
|
|
352
365
|
hints: ["Cost: 2 credits"],
|
|
353
|
-
related_commands: [
|
|
366
|
+
related_commands: ["naive seo keywords", "naive seo backlinks"],
|
|
354
367
|
});
|
|
355
368
|
});
|
|
356
369
|
}
|
|
@@ -415,6 +428,7 @@ labsCmd
|
|
|
415
428
|
result: resp.data,
|
|
416
429
|
next_steps: [],
|
|
417
430
|
hints: ["Free endpoint — no credits used"],
|
|
431
|
+
related_commands: ["naive seo keywords", "naive seo backlinks"],
|
|
418
432
|
});
|
|
419
433
|
});
|
|
420
434
|
labsCmd
|
|
@@ -428,11 +442,12 @@ labsCmd
|
|
|
428
442
|
result: resp.data,
|
|
429
443
|
next_steps: [],
|
|
430
444
|
hints: ["Free endpoint — no credits used"],
|
|
445
|
+
related_commands: ["naive seo keywords", "naive seo backlinks"],
|
|
431
446
|
});
|
|
432
447
|
});
|
|
433
448
|
labsCmd
|
|
434
449
|
.command("status")
|
|
435
|
-
.description("Check
|
|
450
|
+
.description("Check SEO Labs API status (free)")
|
|
436
451
|
.action(async () => {
|
|
437
452
|
const resp = await apiRequest("GET", "/v1/seo/labs/status");
|
|
438
453
|
handleApiError("seo.labs.status", resp);
|
|
@@ -441,6 +456,7 @@ labsCmd
|
|
|
441
456
|
result: resp.data,
|
|
442
457
|
next_steps: [],
|
|
443
458
|
hints: ["Free endpoint — no credits used"],
|
|
459
|
+
related_commands: ["naive seo keywords", "naive seo backlinks"],
|
|
444
460
|
});
|
|
445
461
|
});
|
|
446
462
|
labsCmd.addCommand(googleLabsCmd);
|