@usenaive-sdk/cli 0.15.1 → 1.0.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 +43 -402
- package/dist/index.js +51775 -502
- package/package.json +22 -18
- package/dist/client.d.ts +0 -108
- package/dist/client.js +0 -458
- package/dist/client.js.map +0 -1
- package/dist/commands/account-kits.d.ts +0 -2
- package/dist/commands/account-kits.js +0 -71
- package/dist/commands/account-kits.js.map +0 -1
- package/dist/commands/aeo.d.ts +0 -2
- package/dist/commands/aeo.js +0 -451
- package/dist/commands/aeo.js.map +0 -1
- package/dist/commands/agent-profiles.d.ts +0 -11
- package/dist/commands/agent-profiles.js +0 -120
- package/dist/commands/agent-profiles.js.map +0 -1
- package/dist/commands/agents.d.ts +0 -2
- package/dist/commands/agents.js +0 -916
- package/dist/commands/agents.js.map +0 -1
- package/dist/commands/app-data.d.ts +0 -2
- package/dist/commands/app-data.js +0 -445
- package/dist/commands/app-data.js.map +0 -1
- package/dist/commands/approvals.d.ts +0 -2
- package/dist/commands/approvals.js +0 -242
- package/dist/commands/approvals.js.map +0 -1
- package/dist/commands/apps.d.ts +0 -9
- package/dist/commands/apps.js +0 -844
- package/dist/commands/apps.js.map +0 -1
- package/dist/commands/audio.d.ts +0 -9
- package/dist/commands/audio.js +0 -391
- package/dist/commands/audio.js.map +0 -1
- package/dist/commands/auth.d.ts +0 -31
- package/dist/commands/auth.js +0 -428
- package/dist/commands/auth.js.map +0 -1
- package/dist/commands/billing.d.ts +0 -2
- package/dist/commands/billing.js +0 -250
- package/dist/commands/billing.js.map +0 -1
- package/dist/commands/brain.d.ts +0 -2
- package/dist/commands/brain.js +0 -1300
- package/dist/commands/brain.js.map +0 -1
- package/dist/commands/browser.d.ts +0 -2
- package/dist/commands/browser.js +0 -378
- package/dist/commands/browser.js.map +0 -1
- package/dist/commands/business.d.ts +0 -2
- package/dist/commands/business.js +0 -566
- package/dist/commands/business.js.map +0 -1
- package/dist/commands/cards.d.ts +0 -2
- package/dist/commands/cards.js +0 -419
- package/dist/commands/cards.js.map +0 -1
- package/dist/commands/ceo.d.ts +0 -2
- package/dist/commands/ceo.js +0 -369
- package/dist/commands/ceo.js.map +0 -1
- package/dist/commands/clone.d.ts +0 -2
- package/dist/commands/clone.js +0 -203
- package/dist/commands/clone.js.map +0 -1
- package/dist/commands/companies.d.ts +0 -10
- package/dist/commands/companies.js +0 -283
- package/dist/commands/companies.js.map +0 -1
- package/dist/commands/company-data.d.ts +0 -2
- package/dist/commands/company-data.js +0 -168
- package/dist/commands/company-data.js.map +0 -1
- package/dist/commands/compute.d.ts +0 -2
- package/dist/commands/compute.js +0 -498
- package/dist/commands/compute.js.map +0 -1
- package/dist/commands/config.d.ts +0 -2
- package/dist/commands/config.js +0 -36
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/connections.d.ts +0 -8
- package/dist/commands/connections.js +0 -137
- package/dist/commands/connections.js.map +0 -1
- package/dist/commands/cron-jobs.d.ts +0 -2
- package/dist/commands/cron-jobs.js +0 -245
- package/dist/commands/cron-jobs.js.map +0 -1
- package/dist/commands/domains.d.ts +0 -2
- package/dist/commands/domains.js +0 -474
- package/dist/commands/domains.js.map +0 -1
- package/dist/commands/ecommerce.d.ts +0 -2
- package/dist/commands/ecommerce.js +0 -277
- package/dist/commands/ecommerce.js.map +0 -1
- package/dist/commands/email.d.ts +0 -2
- package/dist/commands/email.js +0 -336
- package/dist/commands/email.js.map +0 -1
- package/dist/commands/employees.d.ts +0 -2
- package/dist/commands/employees.js +0 -190
- package/dist/commands/employees.js.map +0 -1
- package/dist/commands/env.d.ts +0 -7
- package/dist/commands/env.js +0 -112
- package/dist/commands/env.js.map +0 -1
- package/dist/commands/formation.d.ts +0 -2
- package/dist/commands/formation.js +0 -273
- package/dist/commands/formation.js.map +0 -1
- package/dist/commands/identity.d.ts +0 -2
- package/dist/commands/identity.js +0 -110
- package/dist/commands/identity.js.map +0 -1
- package/dist/commands/images.d.ts +0 -2
- package/dist/commands/images.js +0 -371
- package/dist/commands/images.js.map +0 -1
- package/dist/commands/init.d.ts +0 -5
- package/dist/commands/init.js +0 -43
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/jobs.d.ts +0 -2
- package/dist/commands/jobs.js +0 -144
- package/dist/commands/jobs.js.map +0 -1
- package/dist/commands/keys.d.ts +0 -2
- package/dist/commands/keys.js +0 -156
- package/dist/commands/keys.js.map +0 -1
- package/dist/commands/legacy-auth.d.ts +0 -27
- package/dist/commands/legacy-auth.js +0 -64
- package/dist/commands/legacy-auth.js.map +0 -1
- package/dist/commands/llm.d.ts +0 -2
- package/dist/commands/llm.js +0 -125
- package/dist/commands/llm.js.map +0 -1
- package/dist/commands/login.d.ts +0 -2
- package/dist/commands/login.js +0 -65
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.d.ts +0 -7
- package/dist/commands/logout.js +0 -55
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/logs.d.ts +0 -2
- package/dist/commands/logs.js +0 -42
- package/dist/commands/logs.js.map +0 -1
- package/dist/commands/loops.d.ts +0 -2
- package/dist/commands/loops.js +0 -260
- package/dist/commands/loops.js.map +0 -1
- package/dist/commands/media.d.ts +0 -2
- package/dist/commands/media.js +0 -183
- package/dist/commands/media.js.map +0 -1
- package/dist/commands/memory.d.ts +0 -2
- package/dist/commands/memory.js +0 -151
- package/dist/commands/memory.js.map +0 -1
- package/dist/commands/mobile.d.ts +0 -4
- package/dist/commands/mobile.js +0 -382
- package/dist/commands/mobile.js.map +0 -1
- package/dist/commands/module.d.ts +0 -8
- package/dist/commands/module.js +0 -48
- package/dist/commands/module.js.map +0 -1
- package/dist/commands/objectives.d.ts +0 -2
- package/dist/commands/objectives.js +0 -243
- package/dist/commands/objectives.js.map +0 -1
- package/dist/commands/payments.d.ts +0 -2
- package/dist/commands/payments.js +0 -131
- package/dist/commands/payments.js.map +0 -1
- package/dist/commands/people.d.ts +0 -2
- package/dist/commands/people.js +0 -197
- package/dist/commands/people.js.map +0 -1
- package/dist/commands/phone.d.ts +0 -2
- package/dist/commands/phone.js +0 -289
- package/dist/commands/phone.js.map +0 -1
- package/dist/commands/projects.d.ts +0 -13
- package/dist/commands/projects.js +0 -220
- package/dist/commands/projects.js.map +0 -1
- package/dist/commands/queue.d.ts +0 -2
- package/dist/commands/queue.js +0 -121
- package/dist/commands/queue.js.map +0 -1
- package/dist/commands/register.d.ts +0 -2
- package/dist/commands/register.js +0 -88
- package/dist/commands/register.js.map +0 -1
- package/dist/commands/report.d.ts +0 -17
- package/dist/commands/report.js +0 -109
- package/dist/commands/report.js.map +0 -1
- package/dist/commands/sandbox.d.ts +0 -2
- package/dist/commands/sandbox.js +0 -558
- package/dist/commands/sandbox.js.map +0 -1
- package/dist/commands/search.d.ts +0 -2
- package/dist/commands/search.js +0 -223
- package/dist/commands/search.js.map +0 -1
- package/dist/commands/seo.d.ts +0 -2
- package/dist/commands/seo.js +0 -528
- package/dist/commands/seo.js.map +0 -1
- package/dist/commands/sessions.d.ts +0 -6
- package/dist/commands/sessions.js +0 -109
- package/dist/commands/sessions.js.map +0 -1
- package/dist/commands/social-data.d.ts +0 -2
- package/dist/commands/social-data.js +0 -245
- package/dist/commands/social-data.js.map +0 -1
- package/dist/commands/social.d.ts +0 -2
- package/dist/commands/social.js +0 -407
- package/dist/commands/social.js.map +0 -1
- package/dist/commands/status.d.ts +0 -2
- package/dist/commands/status.js +0 -79
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/support.d.ts +0 -2
- package/dist/commands/support.js +0 -134
- package/dist/commands/support.js.map +0 -1
- package/dist/commands/tasks.d.ts +0 -2
- package/dist/commands/tasks.js +0 -409
- package/dist/commands/tasks.js.map +0 -1
- package/dist/commands/teams.d.ts +0 -69
- package/dist/commands/teams.js +0 -503
- package/dist/commands/teams.js.map +0 -1
- package/dist/commands/trading.d.ts +0 -2
- package/dist/commands/trading.js +0 -333
- package/dist/commands/trading.js.map +0 -1
- package/dist/commands/up.d.ts +0 -551
- package/dist/commands/up.js +0 -1149
- package/dist/commands/up.js.map +0 -1
- package/dist/commands/usage.d.ts +0 -2
- package/dist/commands/usage.js +0 -73
- package/dist/commands/usage.js.map +0 -1
- package/dist/commands/use.d.ts +0 -12
- package/dist/commands/use.js +0 -96
- package/dist/commands/use.js.map +0 -1
- package/dist/commands/users.d.ts +0 -10
- package/dist/commands/users.js +0 -82
- package/dist/commands/users.js.map +0 -1
- package/dist/commands/vault.d.ts +0 -2
- package/dist/commands/vault.js +0 -101
- package/dist/commands/vault.js.map +0 -1
- package/dist/commands/verification.d.ts +0 -2
- package/dist/commands/verification.js +0 -152
- package/dist/commands/verification.js.map +0 -1
- package/dist/commands/verify-email.d.ts +0 -19
- package/dist/commands/verify-email.js +0 -130
- package/dist/commands/verify-email.js.map +0 -1
- package/dist/commands/video.d.ts +0 -2
- package/dist/commands/video.js +0 -417
- package/dist/commands/video.js.map +0 -1
- package/dist/commands/voice.d.ts +0 -2
- package/dist/commands/voice.js +0 -516
- package/dist/commands/voice.js.map +0 -1
- package/dist/commands/wallet.d.ts +0 -2
- package/dist/commands/wallet.js +0 -244
- package/dist/commands/wallet.js.map +0 -1
- package/dist/commands/webhooks.d.ts +0 -13
- package/dist/commands/webhooks.js +0 -119
- package/dist/commands/webhooks.js.map +0 -1
- package/dist/commands/whoami.d.ts +0 -2
- package/dist/commands/whoami.js +0 -53
- package/dist/commands/whoami.js.map +0 -1
- package/dist/config.d.ts +0 -42
- package/dist/config.js +0 -83
- package/dist/config.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.js.map +0 -1
- package/dist/lib/brain-select.d.ts +0 -193
- package/dist/lib/brain-select.js +0 -403
- package/dist/lib/brain-select.js.map +0 -1
- package/dist/lib/cli-validation.d.ts +0 -12
- package/dist/lib/cli-validation.js +0 -46
- package/dist/lib/cli-validation.js.map +0 -1
- package/dist/lib/config-errors.d.ts +0 -4
- package/dist/lib/config-errors.js +0 -13
- package/dist/lib/config-errors.js.map +0 -1
- package/dist/lib/deprecation.d.ts +0 -158
- package/dist/lib/deprecation.js +0 -140
- package/dist/lib/deprecation.js.map +0 -1
- package/dist/lib/duration.d.ts +0 -8
- package/dist/lib/duration.js +0 -11
- package/dist/lib/duration.js.map +0 -1
- package/dist/lib/http-response.d.ts +0 -11
- package/dist/lib/http-response.js +0 -96
- package/dist/lib/http-response.js.map +0 -1
- package/dist/lib/llm-paywall.d.ts +0 -82
- package/dist/lib/llm-paywall.js +0 -231
- package/dist/lib/llm-paywall.js.map +0 -1
- package/dist/lib/pricing.d.ts +0 -132
- package/dist/lib/pricing.js +0 -148
- package/dist/lib/pricing.js.map +0 -1
- package/dist/lib/starter-config.d.ts +0 -13
- package/dist/lib/starter-config.js +0 -71
- package/dist/lib/starter-config.js.map +0 -1
- package/dist/lib/stream-frames.d.ts +0 -114
- package/dist/lib/stream-frames.js +0 -169
- package/dist/lib/stream-frames.js.map +0 -1
- package/dist/lib/teams-catalog.d.ts +0 -141
- package/dist/lib/teams-catalog.js +0 -841
- package/dist/lib/teams-catalog.js.map +0 -1
- package/dist/lib/unknown-command.d.ts +0 -71
- package/dist/lib/unknown-command.js +0 -132
- package/dist/lib/unknown-command.js.map +0 -1
- package/dist/lib/version-check.d.ts +0 -26
- package/dist/lib/version-check.js +0 -21
- package/dist/lib/version-check.js.map +0 -1
- package/dist/output.d.ts +0 -246
- package/dist/output.js +0 -539
- package/dist/output.js.map +0 -1
- package/dist/prompt.d.ts +0 -17
- package/dist/prompt.js +0 -70
- package/dist/prompt.js.map +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.js +0 -14
- package/dist/version.js.map +0 -1
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import { apiRequest, handleApiError, activeUserId } from "../client.js";
|
|
3
|
-
import { agentOutput } from "../output.js";
|
|
4
|
-
/** Resolve the user path segment — explicit --user wins, else active, else "default". */
|
|
5
|
-
function userPath(user) {
|
|
6
|
-
return `/v1/users/${user ?? activeUserId() ?? "default"}`;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Per-user MCP sessions — short-lived, revocable credentials (`nv_sess_…`)
|
|
10
|
-
* scoped to one tenant user. Docs: https://usenaive.ai/docs/getting-started/sessions
|
|
11
|
-
*/
|
|
12
|
-
export const sessionsCmd = new Command("sessions")
|
|
13
|
-
.alias("session")
|
|
14
|
-
.description("MCP sessions — mint, list, and revoke short-lived per-user MCP credentials")
|
|
15
|
-
.addHelpText("after", `
|
|
16
|
-
Subcommands:
|
|
17
|
-
naive sessions create [--user <id>] [--ttl-ms <n>] Mint a session (returns mcp.url + bearer)
|
|
18
|
-
naive sessions list [--user <id>] List sessions (tokens never returned)
|
|
19
|
-
naive sessions revoke <id> [--user <id>] Revoke immediately
|
|
20
|
-
|
|
21
|
-
Examples:
|
|
22
|
-
$ naive sessions create --ttl-ms 900000
|
|
23
|
-
$ naive sessions create --user <user_id> --ttl-ms 600000
|
|
24
|
-
$ naive sessions list --user <user_id>
|
|
25
|
-
$ naive sessions revoke <session_id> --user <user_id>
|
|
26
|
-
|
|
27
|
-
Notes:
|
|
28
|
-
- Default TTL is 15 minutes (900000 ms); max 24h
|
|
29
|
-
- Hand mcp.url + mcp.headers.Authorization to your MCP client — never put the token in the URL
|
|
30
|
-
- Scope: --user <id>, or active user from 'naive use <id>', or the workspace default user
|
|
31
|
-
`);
|
|
32
|
-
sessionsCmd
|
|
33
|
-
.command("create")
|
|
34
|
-
.description("Mint a TTL-limited MCP session for a tenant user")
|
|
35
|
-
.option("--user <id>", "Target a specific tenant user")
|
|
36
|
-
.option("--ttl-ms <ms>", "Session lifetime in milliseconds (default 900000 = 15 min, max 24h)", (v) => {
|
|
37
|
-
const n = Number(v);
|
|
38
|
-
if (!Number.isFinite(n) || n <= 0)
|
|
39
|
-
throw new Error("--ttl-ms must be a positive number");
|
|
40
|
-
return n;
|
|
41
|
-
})
|
|
42
|
-
.action(async (opts) => {
|
|
43
|
-
const body = opts.ttlMs != null ? { ttl_ms: opts.ttlMs } : {};
|
|
44
|
-
const resp = await apiRequest("POST", `${userPath(opts.user)}/sessions`, body, { userId: opts.user });
|
|
45
|
-
handleApiError("sessions.create", resp);
|
|
46
|
-
const data = resp.data;
|
|
47
|
-
agentOutput({
|
|
48
|
-
action: "sessions.create",
|
|
49
|
-
result: resp.data,
|
|
50
|
-
next_steps: [
|
|
51
|
-
{
|
|
52
|
-
command: `naive sessions list${opts.user ? ` --user ${opts.user}` : ""}`,
|
|
53
|
-
description: "List sessions for this user",
|
|
54
|
-
},
|
|
55
|
-
...(data.id
|
|
56
|
-
? [
|
|
57
|
-
{
|
|
58
|
-
command: `naive sessions revoke ${data.id}${opts.user ? ` --user ${opts.user}` : ""}`,
|
|
59
|
-
description: "Revoke this session when done",
|
|
60
|
-
},
|
|
61
|
-
]
|
|
62
|
-
: []),
|
|
63
|
-
],
|
|
64
|
-
hints: [
|
|
65
|
-
"Pass result.mcp.url and result.mcp.headers to your MCP client",
|
|
66
|
-
"The nv_sess_… token expires with the session and can be revoked early",
|
|
67
|
-
],
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
sessionsCmd
|
|
71
|
-
.command("list")
|
|
72
|
-
.description("List MCP sessions for a tenant user (tokens are never returned)")
|
|
73
|
-
.option("--user <id>", "Target a specific tenant user")
|
|
74
|
-
.action(async (opts) => {
|
|
75
|
-
const resp = await apiRequest("GET", `${userPath(opts.user)}/sessions`, undefined, { userId: opts.user });
|
|
76
|
-
handleApiError("sessions.list", resp);
|
|
77
|
-
agentOutput({
|
|
78
|
-
action: "sessions.list",
|
|
79
|
-
result: resp.data,
|
|
80
|
-
next_steps: [
|
|
81
|
-
{
|
|
82
|
-
command: `naive sessions create${opts.user ? ` --user ${opts.user}` : ""} --ttl-ms 900000`,
|
|
83
|
-
description: "Mint a new MCP session",
|
|
84
|
-
},
|
|
85
|
-
],
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
sessionsCmd
|
|
89
|
-
.command("revoke")
|
|
90
|
-
.description("Revoke an MCP session immediately")
|
|
91
|
-
.argument("<session_id>", "Session id returned by sessions create")
|
|
92
|
-
.option("--user <id>", "Target a specific tenant user")
|
|
93
|
-
.action(async (sessionId, opts) => {
|
|
94
|
-
const resp = await apiRequest("DELETE", `${userPath(opts.user)}/sessions/${sessionId}`, undefined, {
|
|
95
|
-
userId: opts.user,
|
|
96
|
-
});
|
|
97
|
-
handleApiError("sessions.revoke", resp);
|
|
98
|
-
agentOutput({
|
|
99
|
-
action: "sessions.revoke",
|
|
100
|
-
result: resp.data,
|
|
101
|
-
next_steps: [
|
|
102
|
-
{
|
|
103
|
-
command: `naive sessions list${opts.user ? ` --user ${opts.user}` : ""}`,
|
|
104
|
-
description: "Confirm the session is revoked",
|
|
105
|
-
},
|
|
106
|
-
],
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
//# sourceMappingURL=sessions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import { apiRequest, handleApiError } from "../client.js";
|
|
3
|
-
import { agentOutput, creditCostHint } from "../output.js";
|
|
4
|
-
import { parseIntegerOption } from "../lib/cli-validation.js";
|
|
5
|
-
/**
|
|
6
|
-
* Platforms a synchronous read is offered for.
|
|
7
|
-
*
|
|
8
|
-
* The async-only four are refused locally rather than sent, because the server
|
|
9
|
-
* refuses them too: a Reddit collection took 53-219 seconds for five posts, and
|
|
10
|
-
* Instagram, TikTok and YouTube drive a headless browser per post. Catching it
|
|
11
|
-
* here turns a round trip into an immediate message naming the command to use.
|
|
12
|
-
*/
|
|
13
|
-
const SYNC_PLATFORMS = ["bluesky", "hackernews", "x"];
|
|
14
|
-
const ASYNC_ONLY_PLATFORMS = ["reddit", "instagram", "tiktok", "youtube"];
|
|
15
|
-
const ALL_PLATFORMS = [...SYNC_PLATFORMS, ...ASYNC_ONLY_PLATFORMS];
|
|
16
|
-
/** Platforms whose collect can return comment threads. */
|
|
17
|
-
const COMMENT_PLATFORMS = ["reddit", "hackernews", "instagram", "tiktok", "youtube"];
|
|
18
|
-
function assertSyncPlatform(platform, mode) {
|
|
19
|
-
if (SYNC_PLATFORMS.includes(platform))
|
|
20
|
-
return;
|
|
21
|
-
if (ASYNC_ONLY_PLATFORMS.includes(platform)) {
|
|
22
|
-
throw new Error(`${platform} reads are asynchronous only — a ${mode} takes minutes, not seconds.\n` +
|
|
23
|
-
(mode === "collect"
|
|
24
|
-
? `Use: naive social-data batch --platform ${platform} --mode collect --post-ids <ids>`
|
|
25
|
-
: `Use: naive social-data batch --platform ${platform} --query <query>`));
|
|
26
|
-
}
|
|
27
|
-
throw new Error(`--platform must be one of: ${SYNC_PLATFORMS.join(", ")} ` +
|
|
28
|
-
`(${ASYNC_ONLY_PLATFORMS.join(", ")} are batch-only)`);
|
|
29
|
-
}
|
|
30
|
-
function assertKnownPlatform(platform) {
|
|
31
|
-
if (!ALL_PLATFORMS.includes(platform)) {
|
|
32
|
-
throw new Error(`--platform must be one of: ${ALL_PLATFORMS.join(", ")}`);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
export const socialDataCmd = new Command("social-data")
|
|
36
|
-
.description("Social Data — read public posts, comments & engagement")
|
|
37
|
-
.addHelpText("after", `
|
|
38
|
-
Subcommands:
|
|
39
|
-
naive social-data discover Search public posts by keyword
|
|
40
|
-
naive social-data collect Fetch known posts by id, optionally with comments
|
|
41
|
-
naive social-data batch Async read (up to 1,000 posts) — the only route to
|
|
42
|
-
reddit, instagram, tiktok and youtube
|
|
43
|
-
naive social-data task <id> Check a batch task
|
|
44
|
-
naive social-data terms The acceptable-use terms this primitive binds you to
|
|
45
|
-
naive social-data erase Honour a deletion request from a post author
|
|
46
|
-
|
|
47
|
-
Platforms: bluesky, hackernews, x — plus reddit, instagram, tiktok and youtube
|
|
48
|
-
on \`batch\` only (their collection runs for minutes).
|
|
49
|
-
|
|
50
|
-
bluesky and hackernews are the platforms' own public APIs: no credential, and a
|
|
51
|
-
flat meter rather than 3x a vendor's bill — prefer them where they fit.
|
|
52
|
-
|
|
53
|
-
Capabilities differ, and an unsupported combination is refused rather than served
|
|
54
|
-
thinner at the same price:
|
|
55
|
-
--include-comments reddit, hackernews, instagram, tiktok, youtube
|
|
56
|
-
--include-transcript youtube only
|
|
57
|
-
--query means full text on x/reddit/bluesky/hackernews, a hashtag or
|
|
58
|
-
profile on instagram, a keyword search on tiktok/youtube
|
|
59
|
-
|
|
60
|
-
Cost: the scraped platforms bill 3x what the provider run really cost, so a
|
|
61
|
-
cheap read is cheap. A run that returns nothing is still billed — we are
|
|
62
|
-
invoiced for it — but a run that FAILS never is.
|
|
63
|
-
|
|
64
|
-
READ ONLY. This does not post — use \`naive social\` to connect accounts and publish.
|
|
65
|
-
`);
|
|
66
|
-
socialDataCmd
|
|
67
|
-
.command("discover")
|
|
68
|
-
.description("Search public posts by keyword")
|
|
69
|
-
.requiredOption("--platform <platform>", "bluesky, hackernews or x (reddit/instagram/tiktok/youtube are batch-only)")
|
|
70
|
-
.requiredOption("--query <query>", "Keyword or phrase, e.g. 'AI agents'")
|
|
71
|
-
.option("--date-from <iso>", "Drop posts older than this ISO date")
|
|
72
|
-
.option("--engagement-min <n>", "Minimum total likes + comments + upvotes")
|
|
73
|
-
.option("--limit <n>", "Max posts, 1-100 (above 100 use `naive social-data batch`)")
|
|
74
|
-
.option("--prefer-official", "Require the platform's own API — refused where none is wired")
|
|
75
|
-
.action(async (opts) => {
|
|
76
|
-
assertSyncPlatform(opts.platform, "discover");
|
|
77
|
-
const filters = {};
|
|
78
|
-
if (opts.dateFrom)
|
|
79
|
-
filters.date_from = opts.dateFrom;
|
|
80
|
-
if (opts.engagementMin) {
|
|
81
|
-
filters.engagement_min = parseIntegerOption(opts.engagementMin, "--engagement-min", 0);
|
|
82
|
-
}
|
|
83
|
-
const body = { query: opts.query, filters };
|
|
84
|
-
if (opts.limit)
|
|
85
|
-
body.limit = parseIntegerOption(opts.limit, "--limit", 1, 100);
|
|
86
|
-
if (opts.preferOfficial)
|
|
87
|
-
body.prefer_official = true;
|
|
88
|
-
const resp = await apiRequest("POST", `/v1/social-data/${opts.platform}/discover`, body);
|
|
89
|
-
handleApiError("social-data.discover", resp);
|
|
90
|
-
const data = resp.data;
|
|
91
|
-
const posts = data?.data?.length ?? 0;
|
|
92
|
-
agentOutput({
|
|
93
|
-
action: "social-data.discover",
|
|
94
|
-
result: resp.data,
|
|
95
|
-
next_steps: [
|
|
96
|
-
{ command: `naive social-data collect --platform ${opts.platform} --post-ids <ids> --include-comments`, description: "Pull comments for the interesting posts" },
|
|
97
|
-
],
|
|
98
|
-
hints: [
|
|
99
|
-
`${posts} post${posts === 1 ? "" : "s"} returned via ${data?.provider ?? "the default provider"}.`,
|
|
100
|
-
creditCostHint(resp.data) ?? "",
|
|
101
|
-
].filter(Boolean),
|
|
102
|
-
related_commands: ["naive social-data collect", "naive social-data batch"],
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
socialDataCmd
|
|
106
|
-
.command("collect")
|
|
107
|
-
.description("Fetch known public posts by id")
|
|
108
|
-
.requiredOption("--platform <platform>", "bluesky, hackernews or x (reddit/instagram/tiktok/youtube are batch-only)")
|
|
109
|
-
.requiredOption("--post-ids <ids>", "Comma-separated post ids (max 500)")
|
|
110
|
-
.option("--include-comments", `Include comments — ${COMMENT_PLATFORMS.join(", ")} only`)
|
|
111
|
-
.option("--prefer-official", "Require the platform's own API — refused where none is wired")
|
|
112
|
-
.action(async (opts) => {
|
|
113
|
-
assertSyncPlatform(opts.platform, "collect");
|
|
114
|
-
const postIds = String(opts.postIds)
|
|
115
|
-
.split(",")
|
|
116
|
-
.map((id) => id.trim())
|
|
117
|
-
.filter(Boolean);
|
|
118
|
-
const body = { post_ids: postIds };
|
|
119
|
-
if (opts.includeComments)
|
|
120
|
-
body.include_comments = true;
|
|
121
|
-
if (opts.preferOfficial)
|
|
122
|
-
body.prefer_official = true;
|
|
123
|
-
const resp = await apiRequest("POST", `/v1/social-data/${opts.platform}/collect`, body);
|
|
124
|
-
handleApiError("social-data.collect", resp);
|
|
125
|
-
agentOutput({
|
|
126
|
-
action: "social-data.collect",
|
|
127
|
-
result: resp.data,
|
|
128
|
-
next_steps: [
|
|
129
|
-
{ command: "naive social-data discover --platform x --query <topic>", description: "Find more posts on this topic" },
|
|
130
|
-
],
|
|
131
|
-
hints: [creditCostHint(resp.data) ?? ""].filter(Boolean),
|
|
132
|
-
related_commands: ["naive social-data discover"],
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
socialDataCmd
|
|
136
|
-
.command("batch")
|
|
137
|
-
.description("Async read — up to 1,000 posts, and the only route to reddit, instagram, tiktok and youtube")
|
|
138
|
-
.requiredOption("--platform <platform>", ALL_PLATFORMS.join(", "))
|
|
139
|
-
.option("--mode <mode>", "discover (default) searches a query; collect takes --post-ids")
|
|
140
|
-
.option("--query <query>", "Keyword, phrase, #hashtag or @profile (mode discover)")
|
|
141
|
-
.option("--post-ids <ids>", "Comma-separated ids — shortcodes on instagram, video ids on tiktok/youtube")
|
|
142
|
-
.option("--include-comments", `Include comment threads (mode collect) — ${COMMENT_PLATFORMS.join(", ")} only`)
|
|
143
|
-
.option("--include-transcript", "Include the caption track — youtube only")
|
|
144
|
-
.option("--limit <n>", "Max posts, up to 1000 (mode discover)")
|
|
145
|
-
.option("--prefer-official", "Require the platform's own API — refused where none is wired")
|
|
146
|
-
.action(async (opts) => {
|
|
147
|
-
assertKnownPlatform(opts.platform);
|
|
148
|
-
const mode = (opts.mode ?? "discover");
|
|
149
|
-
if (mode !== "discover" && mode !== "collect") {
|
|
150
|
-
throw new Error("--mode must be 'discover' or 'collect'");
|
|
151
|
-
}
|
|
152
|
-
const body = { platform: opts.platform, mode };
|
|
153
|
-
if (mode === "collect") {
|
|
154
|
-
if (!opts.postIds)
|
|
155
|
-
throw new Error("--post-ids is required for --mode collect");
|
|
156
|
-
body.post_ids = String(opts.postIds).split(",").map((id) => id.trim()).filter(Boolean);
|
|
157
|
-
if (opts.includeComments)
|
|
158
|
-
body.include_comments = true;
|
|
159
|
-
if (opts.includeTranscript)
|
|
160
|
-
body.include_transcript = true;
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
if (!opts.query)
|
|
164
|
-
throw new Error("--query is required for --mode discover");
|
|
165
|
-
body.query = opts.query;
|
|
166
|
-
if (opts.limit)
|
|
167
|
-
body.limit = parseIntegerOption(opts.limit, "--limit", 1, 1000);
|
|
168
|
-
}
|
|
169
|
-
if (opts.preferOfficial)
|
|
170
|
-
body.prefer_official = true;
|
|
171
|
-
const resp = await apiRequest("POST", "/v1/social-data/tasks", body);
|
|
172
|
-
handleApiError("social-data.batch", resp);
|
|
173
|
-
const id = resp.data?.id;
|
|
174
|
-
agentOutput({
|
|
175
|
-
action: "social-data.batch",
|
|
176
|
-
result: resp.data,
|
|
177
|
-
next_steps: [
|
|
178
|
-
{ command: `naive social-data task ${id ?? "<id>"}`, description: "Check the collection status and get posts" },
|
|
179
|
-
],
|
|
180
|
-
hints: [
|
|
181
|
-
"Billed on 3x what the provider run cost, empty results included. A failed run is never billed.",
|
|
182
|
-
ASYNC_ONLY_PLATFORMS.includes(opts.platform)
|
|
183
|
-
? `${opts.platform} collection runs for minutes — poll rather than waiting on one request.`
|
|
184
|
-
: "",
|
|
185
|
-
].filter(Boolean),
|
|
186
|
-
related_commands: ["naive social-data task"],
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
socialDataCmd
|
|
190
|
-
.command("task <id>")
|
|
191
|
-
.description("Check an async collection task")
|
|
192
|
-
.action(async (id) => {
|
|
193
|
-
const resp = await apiRequest("GET", `/v1/social-data/tasks/${id}`);
|
|
194
|
-
handleApiError("social-data.task", resp);
|
|
195
|
-
agentOutput({
|
|
196
|
-
action: "social-data.task",
|
|
197
|
-
result: resp.data,
|
|
198
|
-
next_steps: [
|
|
199
|
-
{ command: `naive social-data task ${id}`, description: "Poll again if still processing" },
|
|
200
|
-
],
|
|
201
|
-
hints: [creditCostHint(resp.data) ?? ""].filter(Boolean),
|
|
202
|
-
related_commands: ["naive social-data batch"],
|
|
203
|
-
});
|
|
204
|
-
});
|
|
205
|
-
socialDataCmd
|
|
206
|
-
.command("terms")
|
|
207
|
-
.description("The acceptable-use terms this primitive binds you to (free)")
|
|
208
|
-
.action(async () => {
|
|
209
|
-
const resp = await apiRequest("GET", "/v1/social-data/terms");
|
|
210
|
-
handleApiError("social-data.terms", resp);
|
|
211
|
-
agentOutput({
|
|
212
|
-
action: "social-data.terms",
|
|
213
|
-
result: resp.data,
|
|
214
|
-
next_steps: [],
|
|
215
|
-
hints: ["Unmetered. These are the product surface of ToS Section 18."],
|
|
216
|
-
related_commands: ["naive social-data erase"],
|
|
217
|
-
});
|
|
218
|
-
});
|
|
219
|
-
// Post authors are data subjects too, so the deletion surface exists here for
|
|
220
|
-
// the same reason it does on People — see the note in commands/people.ts.
|
|
221
|
-
socialDataCmd
|
|
222
|
-
.command("erase")
|
|
223
|
-
.description("Erase everything held about one post author (free)")
|
|
224
|
-
.option("--handle <handle>", "The author's platform handle")
|
|
225
|
-
.option("--email <email>", "The author's email, if known")
|
|
226
|
-
.option("--linkedin <url>", "The author's LinkedIn URL, if known")
|
|
227
|
-
.action(async (opts) => {
|
|
228
|
-
if (!opts.handle && !opts.email && !opts.linkedin) {
|
|
229
|
-
throw new Error("Pass --handle, --email or --linkedin to identify the data subject.");
|
|
230
|
-
}
|
|
231
|
-
const resp = await apiRequest("POST", "/v1/social-data/erasure", {
|
|
232
|
-
handle: opts.handle,
|
|
233
|
-
email: opts.email,
|
|
234
|
-
linkedin: opts.linkedin,
|
|
235
|
-
});
|
|
236
|
-
handleApiError("social-data.erase", resp);
|
|
237
|
-
agentOutput({
|
|
238
|
-
action: "social-data.erase",
|
|
239
|
-
result: resp.data,
|
|
240
|
-
next_steps: [],
|
|
241
|
-
hints: ["Unmetered — honouring a deletion request is never billed."],
|
|
242
|
-
related_commands: ["naive social-data terms"],
|
|
243
|
-
});
|
|
244
|
-
});
|
|
245
|
-
//# sourceMappingURL=social-data.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"social-data.js","sourceRoot":"","sources":["../../src/commands/social-data.ts"],"names":[],"mappings":"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"}
|