@ai2aim.ai/hivemind-sdk 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RC_FILENAME_EXPORT = void 0;
7
+ exports.loadCliConfig = loadCliConfig;
8
+ exports.maskConfig = maskConfig;
9
+ const node_fs_1 = __importDefault(require("node:fs"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const RC_FILENAME = ".hivemindrc.json";
12
+ const ENV_PREFIX = "HIVEMIND_";
13
+ function env(key) {
14
+ return process.env[`${ENV_PREFIX}${key}`] ?? process.env[key];
15
+ }
16
+ function envBool(key) {
17
+ const v = env(key);
18
+ if (v === undefined)
19
+ return undefined;
20
+ return v === "1" || v.toLowerCase() === "true" || v === "yes";
21
+ }
22
+ function envInt(key) {
23
+ const v = env(key);
24
+ if (v === undefined)
25
+ return undefined;
26
+ const n = parseInt(v, 10);
27
+ return Number.isNaN(n) ? undefined : n;
28
+ }
29
+ /**
30
+ * Load config from env (HIVEMIND_*) and optional .hivemindrc.json in cwd.
31
+ * Env overrides file. Returns null if baseUrl or iapClientId is missing (all endpoints are IAP-protected).
32
+ */
33
+ function loadCliConfig(cwd = process.cwd()) {
34
+ const rcPath = node_path_1.default.join(cwd, RC_FILENAME);
35
+ let fileConfig = {};
36
+ if (node_fs_1.default.existsSync(rcPath)) {
37
+ try {
38
+ const raw = node_fs_1.default.readFileSync(rcPath, "utf-8");
39
+ fileConfig = JSON.parse(raw);
40
+ }
41
+ catch {
42
+ // ignore invalid json
43
+ }
44
+ }
45
+ const baseUrl = env("BASE_URL") ??
46
+ fileConfig.baseUrl;
47
+ const iapClientId = (env("IAP_CLIENT_ID") ?? process.env.IAP_CLIENT_ID) ??
48
+ fileConfig.iapClientId;
49
+ if (!baseUrl || !iapClientId)
50
+ return null;
51
+ const config = {
52
+ baseUrl,
53
+ iapClientId,
54
+ apiPrefix: env("API_PREFIX") ??
55
+ fileConfig.apiPrefix ??
56
+ "/v1",
57
+ apiKey: env("API_KEY") ??
58
+ fileConfig.apiKey,
59
+ adminKey: env("ADMIN_KEY") ??
60
+ fileConfig.adminKey,
61
+ webhookSecret: env("WEBHOOK_SECRET") ??
62
+ fileConfig.webhookSecret,
63
+ iapServiceAccountKeyPath: (env("IAP_SA_KEY_PATH") ?? process.env.GOOGLE_SA_KEY_PATH) ??
64
+ fileConfig.iapServiceAccountKeyPath,
65
+ employeeId: env("EMPLOYEE_ID") ??
66
+ fileConfig.employeeId,
67
+ timeoutMs: envInt("TIMEOUT_MS") ??
68
+ fileConfig.timeoutMs ??
69
+ 30_000,
70
+ insecure: envBool("INSECURE") ?? fileConfig.insecure ?? false,
71
+ };
72
+ return config;
73
+ }
74
+ /**
75
+ * Return config with secrets masked for display.
76
+ */
77
+ function maskConfig(config) {
78
+ const mask = (s) => s ? (s.length > 8 ? s.slice(0, 4) + "***" + s.slice(-2) : "***") : undefined;
79
+ return {
80
+ baseUrl: config.baseUrl,
81
+ apiPrefix: config.apiPrefix,
82
+ apiKey: config.apiKey ? mask(config.apiKey) : undefined,
83
+ adminKey: config.adminKey ? "[set]" : undefined,
84
+ webhookSecret: config.webhookSecret ? "[set]" : undefined,
85
+ iapClientId: config.iapClientId ? mask(config.iapClientId) : undefined,
86
+ iapServiceAccountKeyPath: config.iapServiceAccountKeyPath ?? undefined,
87
+ employeeId: config.employeeId,
88
+ timeoutMs: config.timeoutMs,
89
+ insecure: config.insecure,
90
+ };
91
+ }
92
+ exports.RC_FILENAME_EXPORT = RC_FILENAME;
93
+ //# sourceMappingURL=cli-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-config.js","sourceRoot":"","sources":["../src/cli-config.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,309 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const commander_1 = require("commander");
10
+ const client_1 = require("./client");
11
+ const cli_config_1 = require("./cli-config");
12
+ const program = new commander_1.Command();
13
+ program
14
+ .name("hivemind")
15
+ .description("CLI for the Hivemind API")
16
+ .version("1.0.0");
17
+ // ---------------------------------------------------------------------------
18
+ // init
19
+ // ---------------------------------------------------------------------------
20
+ program
21
+ .command("init")
22
+ .description("Initialize Hivemind config in the current directory")
23
+ .option("-d, --dir <path>", "Directory to create config in", process.cwd())
24
+ .option("--env-only", "Only create .env.example, no .hivemindrc.json")
25
+ .option("--rc-only", "Only create .hivemindrc.json, no .env.example")
26
+ .action((opts) => {
27
+ const dir = node_path_1.default.resolve(opts.dir);
28
+ if (!node_fs_1.default.existsSync(dir)) {
29
+ console.error("Error: Directory does not exist:", dir);
30
+ process.exit(1);
31
+ }
32
+ const rcPath = node_path_1.default.join(dir, cli_config_1.RC_FILENAME_EXPORT);
33
+ const envExamplePath = node_path_1.default.join(dir, ".env.example");
34
+ const rcTemplate = {
35
+ baseUrl: "https://your-api-url.com",
36
+ iapClientId: "xxx.apps.googleusercontent.com",
37
+ apiPrefix: "/v1",
38
+ apiKey: "vtx_org_xxx",
39
+ // adminKey: "your-admin-key",
40
+ // iapServiceAccountKeyPath: "./sa-key.json",
41
+ // insecure: false,
42
+ // timeoutMs: 30000,
43
+ };
44
+ if (!opts.envOnly) {
45
+ if (node_fs_1.default.existsSync(rcPath)) {
46
+ console.log("Exists:", rcPath, "(skipped)");
47
+ }
48
+ else {
49
+ node_fs_1.default.writeFileSync(rcPath, JSON.stringify(rcTemplate, null, 2), "utf-8");
50
+ console.log("Created:", rcPath);
51
+ }
52
+ }
53
+ if (!opts.rcOnly) {
54
+ const envLines = [
55
+ "# Hivemind API (all endpoints are IAP-protected)",
56
+ "HIVEMIND_BASE_URL=https://your-api-url.com",
57
+ "IAP_CLIENT_ID=xxx.apps.googleusercontent.com",
58
+ "HIVEMIND_API_KEY=vtx_org_xxx",
59
+ "# HIVEMIND_ADMIN_KEY=your-admin-key",
60
+ "# HIVEMIND_API_PREFIX=/v1",
61
+ "# GOOGLE_SA_KEY_PATH=./sa-key.json",
62
+ "# HIVEMIND_INSECURE=false",
63
+ "# HIVEMIND_TIMEOUT_MS=30000",
64
+ ].join("\n");
65
+ if (node_fs_1.default.existsSync(envExamplePath)) {
66
+ console.log("Exists:", envExamplePath, "(skipped)");
67
+ }
68
+ else {
69
+ node_fs_1.default.writeFileSync(envExamplePath, envLines, "utf-8");
70
+ console.log("Created:", envExamplePath);
71
+ }
72
+ }
73
+ console.log("\nNext: set HIVEMIND_BASE_URL and IAP_CLIENT_ID (and HIVEMIND_API_KEY for org calls), then run hivemind health");
74
+ });
75
+ // ---------------------------------------------------------------------------
76
+ // config
77
+ // ---------------------------------------------------------------------------
78
+ program
79
+ .command("config")
80
+ .description("Show resolved config (secrets masked)")
81
+ .option("-d, --dir <path>", "Directory to look for .hivemindrc.json", process.cwd())
82
+ .action((opts) => {
83
+ const config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
84
+ if (!config) {
85
+ console.error("No config found. Set HIVEMIND_BASE_URL and IAP_CLIENT_ID (or run hivemind init and edit .hivemindrc.json).");
86
+ process.exit(1);
87
+ }
88
+ console.log(JSON.stringify((0, cli_config_1.maskConfig)(config), null, 2));
89
+ });
90
+ // ---------------------------------------------------------------------------
91
+ // health
92
+ // ---------------------------------------------------------------------------
93
+ program
94
+ .command("health")
95
+ .description("Call the API health endpoint")
96
+ .option("-d, --dir <path>", "Directory to look for config", process.cwd())
97
+ .option("-u, --url <url>", "Override base URL")
98
+ .action(async (opts) => {
99
+ let config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
100
+ if (opts.url) {
101
+ if (config) {
102
+ config = { ...config, baseUrl: opts.url };
103
+ }
104
+ else {
105
+ const iapId = process.env.IAP_CLIENT_ID ?? process.env.HIVEMIND_IAP_CLIENT_ID;
106
+ if (!iapId) {
107
+ console.error("IAP_CLIENT_ID is required (all endpoints are IAP-protected).");
108
+ process.exit(1);
109
+ }
110
+ config = { baseUrl: opts.url, iapClientId: iapId };
111
+ }
112
+ }
113
+ if (!config?.baseUrl || !config?.iapClientId) {
114
+ console.error("Set HIVEMIND_BASE_URL and IAP_CLIENT_ID, or use --url with IAP_CLIENT_ID in env.");
115
+ process.exit(1);
116
+ }
117
+ const client = new client_1.HivemindClient(config);
118
+ try {
119
+ const result = await client.health();
120
+ console.log(JSON.stringify(result, null, 2));
121
+ }
122
+ catch (err) {
123
+ if (err instanceof client_1.HivemindError) {
124
+ console.error("Health check failed:", err.statusCode, err.detail);
125
+ }
126
+ else {
127
+ console.error("Health check failed:", err);
128
+ }
129
+ process.exit(1);
130
+ }
131
+ });
132
+ // ---------------------------------------------------------------------------
133
+ // helper
134
+ // ---------------------------------------------------------------------------
135
+ const helper = program
136
+ .command("helper")
137
+ .description("Helper utilities for config and connection");
138
+ helper
139
+ .command("validate")
140
+ .description("Validate config and optionally test connection")
141
+ .option("-d, --dir <path>", "Directory for config", process.cwd())
142
+ .option("--skip-ping", "Do not call health endpoint")
143
+ .action(async (opts) => {
144
+ const config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
145
+ if (!config) {
146
+ console.error("No config. Run hivemind init and set HIVEMIND_BASE_URL and IAP_CLIENT_ID.");
147
+ process.exit(1);
148
+ }
149
+ console.log("Config: baseUrl =", config.baseUrl, "apiKey =", config.apiKey ? "[set]" : "[not set]");
150
+ if (!opts.skipPing) {
151
+ const client = new client_1.HivemindClient(config);
152
+ try {
153
+ const result = await client.health();
154
+ console.log("Connection OK:", result.service, result.status);
155
+ }
156
+ catch (err) {
157
+ console.error("Connection failed:", err instanceof Error ? err.message : err);
158
+ process.exit(1);
159
+ }
160
+ }
161
+ else {
162
+ console.log("Skipped connection test (--skip-ping)");
163
+ }
164
+ });
165
+ helper
166
+ .command("env")
167
+ .description("Print env var template for copy-paste")
168
+ .action(() => {
169
+ const lines = [
170
+ "export HIVEMIND_BASE_URL=https://your-api-url.com",
171
+ "export HIVEMIND_API_KEY=vtx_org_xxx",
172
+ "# export HIVEMIND_ADMIN_KEY=your-admin-key",
173
+ "# export IAP_CLIENT_ID=xxx.apps.googleusercontent.com",
174
+ "# export GOOGLE_SA_KEY_PATH=./sa-key.json",
175
+ "# export HIVEMIND_INSECURE=false",
176
+ ];
177
+ console.log(lines.join("\n"));
178
+ });
179
+ // ---------------------------------------------------------------------------
180
+ // query (quick RAG query from CLI)
181
+ // ---------------------------------------------------------------------------
182
+ program
183
+ .command("query <org_id> <question>")
184
+ .description("Run a RAG query (requires API key)")
185
+ .option("-d, --dir <path>", "Directory for config", process.cwd())
186
+ .action(async (orgId, question, opts) => {
187
+ const config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
188
+ if (!config?.baseUrl) {
189
+ console.error("No config. Set HIVEMIND_BASE_URL, IAP_CLIENT_ID, and HIVEMIND_API_KEY for query.");
190
+ process.exit(1);
191
+ }
192
+ if (!config.apiKey) {
193
+ console.error("HIVEMIND_API_KEY required for query.");
194
+ process.exit(1);
195
+ }
196
+ const client = new client_1.HivemindClient(config);
197
+ try {
198
+ const result = await client.query(orgId, { query: question });
199
+ console.log(result.answer ?? JSON.stringify(result, null, 2));
200
+ }
201
+ catch (err) {
202
+ if (err instanceof client_1.HivemindError) {
203
+ console.error("Query failed:", err.statusCode, err.detail);
204
+ }
205
+ else {
206
+ console.error("Query failed:", err);
207
+ }
208
+ process.exit(1);
209
+ }
210
+ });
211
+ // ---------------------------------------------------------------------------
212
+ // org (admin: create org from CLI)
213
+ // ---------------------------------------------------------------------------
214
+ program
215
+ .command("org:create <org_id> <name>")
216
+ .description("Create an organization (admin key required)")
217
+ .option("-d, --dir <path>", "Directory for config", process.cwd())
218
+ .option("-t, --tier <tier>", "Tier: free | standard | premium | enterprise", "standard")
219
+ .action(async (orgId, name, opts) => {
220
+ const config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
221
+ if (!config?.baseUrl || !config.adminKey) {
222
+ console.error("Set HIVEMIND_BASE_URL, IAP_CLIENT_ID, and HIVEMIND_ADMIN_KEY (or adminKey in .hivemindrc.json).");
223
+ process.exit(1);
224
+ }
225
+ const client = new client_1.HivemindClient(config);
226
+ try {
227
+ const result = await client.createOrganization({
228
+ org_id: orgId,
229
+ name,
230
+ tier: opts.tier,
231
+ });
232
+ console.log("Organization created.");
233
+ console.log("API Key (save securely):", result.api_key);
234
+ console.log(JSON.stringify(result.organization, null, 2));
235
+ }
236
+ catch (err) {
237
+ if (err instanceof client_1.HivemindError) {
238
+ console.error("Create failed:", err.statusCode, err.detail);
239
+ }
240
+ else {
241
+ console.error("Create failed:", err);
242
+ }
243
+ process.exit(1);
244
+ }
245
+ });
246
+ // ---------------------------------------------------------------------------
247
+ // scrape
248
+ // ---------------------------------------------------------------------------
249
+ program
250
+ .command("scrape <urls...>")
251
+ .description("Submit URLs to scrape and optionally wait for results")
252
+ .option("-d, --dir <path>", "Directory for config", process.cwd())
253
+ .option("--wait", "Wait for scrape to complete and print results")
254
+ .option("--timeout <ms>", "Max wait time in ms when using --wait", "120000")
255
+ .action(async (urls, opts) => {
256
+ const config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
257
+ if (!config?.baseUrl) {
258
+ console.error("No config. Set HIVEMIND_BASE_URL and IAP_CLIENT_ID.");
259
+ process.exit(1);
260
+ }
261
+ const client = new client_1.HivemindClient(config);
262
+ try {
263
+ if (opts.wait) {
264
+ const result = await client.scrapeAndWait(urls, 2000, parseInt(opts.timeout, 10));
265
+ console.log(JSON.stringify(result, null, 2));
266
+ }
267
+ else {
268
+ const result = await client.scrape({ urls });
269
+ console.log("Task ID:", result.task_id, "Status:", result.status);
270
+ console.log("Check: hivemind scrape:status", result.task_id);
271
+ }
272
+ }
273
+ catch (err) {
274
+ if (err instanceof client_1.HivemindError) {
275
+ console.error("Scrape failed:", err.statusCode, err.detail);
276
+ }
277
+ else {
278
+ console.error("Scrape failed:", err);
279
+ }
280
+ process.exit(1);
281
+ }
282
+ });
283
+ program
284
+ .command("scrape:status <task_id>")
285
+ .description("Get scraping task status and result")
286
+ .option("-d, --dir <path>", "Directory for config", process.cwd())
287
+ .action(async (taskId, opts) => {
288
+ const config = (0, cli_config_1.loadCliConfig)(node_path_1.default.resolve(opts.dir));
289
+ if (!config?.baseUrl) {
290
+ console.error("No config. Set HIVEMIND_BASE_URL and IAP_CLIENT_ID.");
291
+ process.exit(1);
292
+ }
293
+ const client = new client_1.HivemindClient(config);
294
+ try {
295
+ const result = await client.getScrapeStatus(taskId);
296
+ console.log(JSON.stringify(result, null, 2));
297
+ }
298
+ catch (err) {
299
+ if (err instanceof client_1.HivemindError) {
300
+ console.error("Status failed:", err.statusCode, err.detail);
301
+ }
302
+ else {
303
+ console.error("Status failed:", err);
304
+ }
305
+ process.exit(1);
306
+ }
307
+ });
308
+ program.parse();
309
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}