hive-intelligence 1.0.0 → 1.1.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/build/{auth-PVT4GTAD.js → auth-77MKFFBQ.js} +3 -3
- package/build/{auth-PVT4GTAD.js.map → auth-77MKFFBQ.js.map} +1 -1
- package/build/{chunk-FAFUYZQS.js → chunk-CP3FXEQA.js} +6 -5
- package/build/chunk-CP3FXEQA.js.map +1 -0
- package/build/{chunk-N43VRMVB.js → chunk-DTUDM6HX.js} +2 -2
- package/build/{chunk-IWBWPHYY.js → chunk-RRI526CJ.js} +3 -3
- package/build/{chunk-IWBWPHYY.js.map → chunk-RRI526CJ.js.map} +1 -1
- package/build/cli.js +39 -20
- package/build/cli.js.map +1 -1
- package/build/{doctor-A76Q4U4K.js → doctor-7WZMCQC7.js} +4 -4
- package/build/{errors-HRGXEUZR.js → errors-U6UZWVSD.js} +2 -2
- package/build/format-CVLLK6GD.js +75 -0
- package/build/format-CVLLK6GD.js.map +1 -0
- package/build/{init-YOJK6CH2.js → init-CAVIFVSH.js} +2 -2
- package/build/{init-YOJK6CH2.js.map → init-CAVIFVSH.js.map} +1 -1
- package/build/{output-6TJ3JTZ7.js → output-7PGQWJY2.js} +2 -2
- package/build/{tools-WYOZZHHG.js → tools-XEGCLA4I.js} +11 -11
- package/build/tools-XEGCLA4I.js.map +1 -0
- package/build/{watch-P2QWGFYV.js → watch-A75SVIQ6.js} +3 -3
- package/package.json +1 -1
- package/build/chunk-FAFUYZQS.js.map +0 -1
- package/build/format-4OIUGZKY.js +0 -43
- package/build/format-4OIUGZKY.js.map +0 -1
- package/build/tools-WYOZZHHG.js.map +0 -1
- /package/build/{chunk-N43VRMVB.js.map → chunk-DTUDM6HX.js.map} +0 -0
- /package/build/{doctor-A76Q4U4K.js.map → doctor-7WZMCQC7.js.map} +0 -0
- /package/build/{errors-HRGXEUZR.js.map → errors-U6UZWVSD.js.map} +0 -0
- /package/build/{output-6TJ3JTZ7.js.map → output-7PGQWJY2.js.map} +0 -0
- /package/build/{watch-P2QWGFYV.js.map → watch-A75SVIQ6.js.map} +0 -0
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
shouldOutputJson,
|
|
9
9
|
successEnvelope,
|
|
10
10
|
writeOutput
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-CP3FXEQA.js";
|
|
12
12
|
import "./chunk-XQJ6PB2L.js";
|
|
13
13
|
import "./chunk-QMRVH5ZP.js";
|
|
14
14
|
|
|
@@ -163,7 +163,7 @@ async function runDoctor(opts) {
|
|
|
163
163
|
if (fails > 0) process.exit(1);
|
|
164
164
|
return;
|
|
165
165
|
}
|
|
166
|
-
const { table } = await import("./format-
|
|
166
|
+
const { table } = await import("./format-CVLLK6GD.js");
|
|
167
167
|
info("\nHive MCP Doctor\n");
|
|
168
168
|
info(
|
|
169
169
|
table(
|
|
@@ -181,7 +181,7 @@ ${fails === 0 ? "All checks passed" : `${fails} issues found`}${warns ? ` (${war
|
|
|
181
181
|
async function runStatus() {
|
|
182
182
|
const { CLI_VERSION: SERVER_VERSION } = await import("./version-3TZ3U4IR.js");
|
|
183
183
|
const { resolveApiKey, resolveApiUrl } = await import("./config-dir-IEOID7Q6.js");
|
|
184
|
-
const { getActiveProfile, maskKey } = await import("./auth-
|
|
184
|
+
const { getActiveProfile, maskKey } = await import("./auth-77MKFFBQ.js");
|
|
185
185
|
const apiUrl = resolveApiUrl();
|
|
186
186
|
const apiKey = resolveApiKey();
|
|
187
187
|
const profile = getActiveProfile();
|
|
@@ -228,4 +228,4 @@ export {
|
|
|
228
228
|
runDoctor,
|
|
229
229
|
runStatus
|
|
230
230
|
};
|
|
231
|
-
//# sourceMappingURL=doctor-
|
|
231
|
+
//# sourceMappingURL=doctor-7WZMCQC7.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
ExitCode,
|
|
6
6
|
classifyError,
|
|
7
7
|
suggestSimilarTools
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-RRI526CJ.js";
|
|
9
9
|
import "./chunk-QMRVH5ZP.js";
|
|
10
10
|
export {
|
|
11
11
|
CliError,
|
|
@@ -14,4 +14,4 @@ export {
|
|
|
14
14
|
classifyError,
|
|
15
15
|
suggestSimilarTools
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=errors-
|
|
17
|
+
//# sourceMappingURL=errors-U6UZWVSD.js.map
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import "./chunk-QMRVH5ZP.js";
|
|
3
|
+
|
|
4
|
+
// src/cli/format.ts
|
|
5
|
+
function pad(str, width) {
|
|
6
|
+
return str.length >= width ? str.slice(0, width) : str + " ".repeat(width - str.length);
|
|
7
|
+
}
|
|
8
|
+
function table(headers, rows) {
|
|
9
|
+
const widths = headers.map(
|
|
10
|
+
(h, i) => Math.max(h.length, ...rows.map((r) => (r[i] || "").length)) + 2
|
|
11
|
+
);
|
|
12
|
+
const headerLine = headers.map((h, i) => pad(h, widths[i])).join("");
|
|
13
|
+
const separator = widths.map((w) => "-".repeat(w)).join("");
|
|
14
|
+
const dataLines = rows.map(
|
|
15
|
+
(row) => row.map((cell, i) => pad(cell, widths[i])).join("")
|
|
16
|
+
);
|
|
17
|
+
return [headerLine, separator, ...dataLines].join("\n");
|
|
18
|
+
}
|
|
19
|
+
var LABEL_KEYS = ["name", "title", "slug", "symbol", "label", "id"];
|
|
20
|
+
function pickLabel(obj) {
|
|
21
|
+
for (const k of LABEL_KEYS) {
|
|
22
|
+
const v = obj[k];
|
|
23
|
+
if (typeof v === "string" && v) return v;
|
|
24
|
+
if (typeof v === "number" || typeof v === "boolean") return String(v);
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
function formatCell(v) {
|
|
29
|
+
if (v == null) return "";
|
|
30
|
+
if (typeof v === "string") return v;
|
|
31
|
+
if (typeof v === "number" || typeof v === "boolean") return String(v);
|
|
32
|
+
if (Array.isArray(v)) {
|
|
33
|
+
if (v.length === 0) return "";
|
|
34
|
+
if (v.every((x) => x == null || typeof x !== "object")) {
|
|
35
|
+
return v.map((x) => x == null ? "" : String(x)).join(", ");
|
|
36
|
+
}
|
|
37
|
+
const labels = v.map(
|
|
38
|
+
(x) => x && typeof x === "object" ? pickLabel(x) : null
|
|
39
|
+
).filter((x) => x !== null);
|
|
40
|
+
if (labels.length === v.length) return labels.join(", ");
|
|
41
|
+
return `[${v.length} items]`;
|
|
42
|
+
}
|
|
43
|
+
if (typeof v === "object") {
|
|
44
|
+
const label = pickLabel(v);
|
|
45
|
+
if (label) return label;
|
|
46
|
+
return `{${Object.keys(v).length} keys}`;
|
|
47
|
+
}
|
|
48
|
+
return String(v);
|
|
49
|
+
}
|
|
50
|
+
function formatTable(data) {
|
|
51
|
+
if (data.length === 0) return "(empty result)";
|
|
52
|
+
const maxCols = 8;
|
|
53
|
+
const maxWidth = 40;
|
|
54
|
+
const allKeys = [...new Set(data.flatMap(Object.keys))];
|
|
55
|
+
const cols = allKeys.slice(0, maxCols);
|
|
56
|
+
const cells = data.map(
|
|
57
|
+
(row) => cols.map((col) => formatCell(row[col]).slice(0, maxWidth))
|
|
58
|
+
);
|
|
59
|
+
const widths = cols.map(
|
|
60
|
+
(col, i) => Math.max(col.length, ...cells.map((r) => r[i].length))
|
|
61
|
+
);
|
|
62
|
+
const header = cols.map((col, i) => col.padEnd(widths[i])).join(" ");
|
|
63
|
+
const separator = widths.map((w) => "-".repeat(w)).join(" ");
|
|
64
|
+
const rows = cells.map(
|
|
65
|
+
(row) => row.map((cell, i) => cell.padEnd(widths[i])).join(" ")
|
|
66
|
+
);
|
|
67
|
+
return [header, separator, ...rows].join("\n");
|
|
68
|
+
}
|
|
69
|
+
export {
|
|
70
|
+
formatCell,
|
|
71
|
+
formatTable,
|
|
72
|
+
pad,
|
|
73
|
+
table
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=format-CVLLK6GD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/format.ts"],"sourcesContent":["export function pad(str: string, width: number): string {\n return str.length >= width\n ? str.slice(0, width)\n : str + \" \".repeat(width - str.length);\n}\n\nexport function table(headers: string[], rows: string[][]): string {\n const widths = headers.map(\n (h, i) => Math.max(h.length, ...rows.map((r) => (r[i] || \"\").length)) + 2,\n );\n const headerLine = headers.map((h, i) => pad(h, widths[i])).join(\"\");\n const separator = widths.map((w) => \"-\".repeat(w)).join(\"\");\n const dataLines = rows.map((row) =>\n row.map((cell, i) => pad(cell, widths[i])).join(\"\"),\n );\n return [headerLine, separator, ...dataLines].join(\"\\n\");\n}\n\nconst LABEL_KEYS = [\"name\", \"title\", \"slug\", \"symbol\", \"label\", \"id\"];\n\nfunction pickLabel(obj: Record<string, unknown>): string | null {\n for (const k of LABEL_KEYS) {\n const v = obj[k];\n if (typeof v === \"string\" && v) return v;\n if (typeof v === \"number\" || typeof v === \"boolean\") return String(v);\n }\n return null;\n}\n\n/** Render any value to a compact cell string — avoids \"[object Object]\". */\nexport function formatCell(v: unknown): string {\n if (v == null) return \"\";\n if (typeof v === \"string\") return v;\n if (typeof v === \"number\" || typeof v === \"boolean\") return String(v);\n if (Array.isArray(v)) {\n if (v.length === 0) return \"\";\n if (v.every((x) => x == null || typeof x !== \"object\")) {\n return v.map((x) => (x == null ? \"\" : String(x))).join(\", \");\n }\n const labels = v\n .map((x) =>\n x && typeof x === \"object\"\n ? pickLabel(x as Record<string, unknown>)\n : null,\n )\n .filter((x): x is string => x !== null);\n if (labels.length === v.length) return labels.join(\", \");\n return `[${v.length} items]`;\n }\n if (typeof v === \"object\") {\n const label = pickLabel(v as Record<string, unknown>);\n if (label) return label;\n return `{${Object.keys(v as object).length} keys}`;\n }\n return String(v);\n}\n\n/** Auto-format an array of objects as a fixed-width table. */\nexport function formatTable(data: Record<string, unknown>[]): string {\n if (data.length === 0) return \"(empty result)\";\n\n const maxCols = 8;\n const maxWidth = 40;\n\n const allKeys = [...new Set(data.flatMap(Object.keys))];\n const cols = allKeys.slice(0, maxCols);\n\n const cells = data.map((row) =>\n cols.map((col) => formatCell(row[col]).slice(0, maxWidth)),\n );\n\n const widths = cols.map((col, i) =>\n Math.max(col.length, ...cells.map((r) => r[i].length)),\n );\n\n const header = cols.map((col, i) => col.padEnd(widths[i])).join(\" \");\n const separator = widths.map((w) => \"-\".repeat(w)).join(\" \");\n const rows = cells.map((row) =>\n row.map((cell, i) => cell.padEnd(widths[i])).join(\" \"),\n );\n\n return [header, separator, ...rows].join(\"\\n\");\n}\n"],"mappings":"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","names":[]}
|
|
@@ -94,9 +94,9 @@ Validating API key against ${baseUrl}...`);
|
|
|
94
94
|
}
|
|
95
95
|
writeFileSync(envPath, lines + "\n", "utf-8");
|
|
96
96
|
console.log(`.env written to ${envPath}`);
|
|
97
|
-
console.log("Run: hive
|
|
97
|
+
console.log("Run: hive doctor to verify connectivity\n");
|
|
98
98
|
}
|
|
99
99
|
export {
|
|
100
100
|
runInit
|
|
101
101
|
};
|
|
102
|
-
//# sourceMappingURL=init-
|
|
102
|
+
//# sourceMappingURL=init-CAVIFVSH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/init.ts"],"sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createInterface } from \"node:readline\";\n\nconst DEFAULT_API_URL =\n \"https://mcp.hiveintelligence.xyz\";\n\nconst rl = createInterface({ input: process.stdin, output: process.stdout });\nconst ask = (q: string): Promise<string> =>\n new Promise((resolve) => rl.question(q, resolve));\n\nexport async function runInit(opts: {\n minimal?: boolean;\n dryRun?: boolean;\n}): Promise<void> {\n console.log(\"\\nHive MCP Setup\\n\");\n\n const envPath = join(process.cwd(), \".env\");\n const existing: Record<string, string> = {};\n\n if (existsSync(envPath)) {\n const content = readFileSync(envPath, \"utf-8\");\n for (const line of content.split(\"\\n\")) {\n const match = line.match(/^([A-Z_][A-Z0-9_]*)=(.+)$/);\n if (match) existing[match[1]] = match[2];\n }\n console.log(\n `Found existing .env with ${Object.keys(existing).length} keys.\\n`,\n );\n }\n\n let apiKey = existing.HIVE_API_KEY || process.env.HIVE_API_KEY || \"\";\n let apiUrl = existing.HIVE_API_URL || process.env.HIVE_API_URL || \"\";\n\n if (opts.minimal) {\n // Minimal mode: just write defaults without prompts\n if (!apiKey) {\n console.log(\n \"Warning: HIVE_API_KEY not set. Set it manually or re-run without --minimal.\\n\",\n );\n }\n } else {\n // Interactive: ask for API key\n const currentKeyTag = apiKey ? ` [current: ${apiKey.slice(0, 6)}...]` : \"\";\n const keyInput = await ask(\n `HIVE_API_KEY${currentKeyTag}\\n Your Hive Intelligence API key: `,\n );\n if (keyInput.trim()) {\n apiKey = keyInput.trim();\n }\n\n // Ask for API URL (optional)\n const currentUrlTag = apiUrl\n ? ` [current: ${apiUrl}]`\n : ` [default: ${DEFAULT_API_URL}]`;\n const urlInput = await ask(\n `\\nHIVE_API_URL${currentUrlTag}\\n Server URL (press Enter for default): `,\n );\n if (urlInput.trim()) {\n apiUrl = urlInput.trim();\n }\n }\n\n rl.close();\n\n // Update env vars\n if (apiKey) existing.HIVE_API_KEY = apiKey;\n if (apiUrl) existing.HIVE_API_URL = apiUrl;\n\n // Validate the key by hitting the server health endpoint\n if (apiKey) {\n const baseUrl = apiUrl || DEFAULT_API_URL;\n console.log(`\\nValidating API key against ${baseUrl}...`);\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 10000);\n const resp = await fetch(`${baseUrl}/health`, {\n headers: { Authorization: `Bearer ${apiKey}` },\n signal: controller.signal,\n });\n clearTimeout(timer);\n\n if (resp.ok) {\n console.log(\"API key validated successfully.\\n\");\n } else if (resp.status === 401 || resp.status === 403) {\n console.log(\n `Warning: Server returned ${resp.status} — key may be invalid.\\n`,\n );\n } else {\n console.log(\n `Warning: Server returned ${resp.status} ${resp.statusText}.\\n`,\n );\n }\n } catch {\n console.log(\n `Warning: Could not reach ${baseUrl} — check the URL and try again.\\n`,\n );\n }\n }\n\n // Build env content\n const lines = Object.entries(existing)\n .map(([k, v]) => `${k}=${v}`)\n .join(\"\\n\");\n\n if (opts.dryRun) {\n console.log(\"Dry run — would write to .env:\\n\");\n console.log(lines);\n console.log(\"\");\n return;\n }\n\n writeFileSync(envPath, lines + \"\\n\", \"utf-8\");\n console.log(`.env written to ${envPath}`);\n console.log(\"Run: hive
|
|
1
|
+
{"version":3,"sources":["../src/cli/init.ts"],"sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createInterface } from \"node:readline\";\n\nconst DEFAULT_API_URL =\n \"https://mcp.hiveintelligence.xyz\";\n\nconst rl = createInterface({ input: process.stdin, output: process.stdout });\nconst ask = (q: string): Promise<string> =>\n new Promise((resolve) => rl.question(q, resolve));\n\nexport async function runInit(opts: {\n minimal?: boolean;\n dryRun?: boolean;\n}): Promise<void> {\n console.log(\"\\nHive MCP Setup\\n\");\n\n const envPath = join(process.cwd(), \".env\");\n const existing: Record<string, string> = {};\n\n if (existsSync(envPath)) {\n const content = readFileSync(envPath, \"utf-8\");\n for (const line of content.split(\"\\n\")) {\n const match = line.match(/^([A-Z_][A-Z0-9_]*)=(.+)$/);\n if (match) existing[match[1]] = match[2];\n }\n console.log(\n `Found existing .env with ${Object.keys(existing).length} keys.\\n`,\n );\n }\n\n let apiKey = existing.HIVE_API_KEY || process.env.HIVE_API_KEY || \"\";\n let apiUrl = existing.HIVE_API_URL || process.env.HIVE_API_URL || \"\";\n\n if (opts.minimal) {\n // Minimal mode: just write defaults without prompts\n if (!apiKey) {\n console.log(\n \"Warning: HIVE_API_KEY not set. Set it manually or re-run without --minimal.\\n\",\n );\n }\n } else {\n // Interactive: ask for API key\n const currentKeyTag = apiKey ? ` [current: ${apiKey.slice(0, 6)}...]` : \"\";\n const keyInput = await ask(\n `HIVE_API_KEY${currentKeyTag}\\n Your Hive Intelligence API key: `,\n );\n if (keyInput.trim()) {\n apiKey = keyInput.trim();\n }\n\n // Ask for API URL (optional)\n const currentUrlTag = apiUrl\n ? ` [current: ${apiUrl}]`\n : ` [default: ${DEFAULT_API_URL}]`;\n const urlInput = await ask(\n `\\nHIVE_API_URL${currentUrlTag}\\n Server URL (press Enter for default): `,\n );\n if (urlInput.trim()) {\n apiUrl = urlInput.trim();\n }\n }\n\n rl.close();\n\n // Update env vars\n if (apiKey) existing.HIVE_API_KEY = apiKey;\n if (apiUrl) existing.HIVE_API_URL = apiUrl;\n\n // Validate the key by hitting the server health endpoint\n if (apiKey) {\n const baseUrl = apiUrl || DEFAULT_API_URL;\n console.log(`\\nValidating API key against ${baseUrl}...`);\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 10000);\n const resp = await fetch(`${baseUrl}/health`, {\n headers: { Authorization: `Bearer ${apiKey}` },\n signal: controller.signal,\n });\n clearTimeout(timer);\n\n if (resp.ok) {\n console.log(\"API key validated successfully.\\n\");\n } else if (resp.status === 401 || resp.status === 403) {\n console.log(\n `Warning: Server returned ${resp.status} — key may be invalid.\\n`,\n );\n } else {\n console.log(\n `Warning: Server returned ${resp.status} ${resp.statusText}.\\n`,\n );\n }\n } catch {\n console.log(\n `Warning: Could not reach ${baseUrl} — check the URL and try again.\\n`,\n );\n }\n }\n\n // Build env content\n const lines = Object.entries(existing)\n .map(([k, v]) => `${k}=${v}`)\n .join(\"\\n\");\n\n if (opts.dryRun) {\n console.log(\"Dry run — would write to .env:\\n\");\n console.log(lines);\n console.log(\"\");\n return;\n }\n\n writeFileSync(envPath, lines + \"\\n\", \"utf-8\");\n console.log(`.env written to ${envPath}`);\n console.log(\"Run: hive doctor to verify connectivity\\n\");\n}\n"],"mappings":"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","names":[]}
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
successEnvelope,
|
|
18
18
|
writeOutput,
|
|
19
19
|
yellow
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-CP3FXEQA.js";
|
|
21
21
|
import "./chunk-QMRVH5ZP.js";
|
|
22
22
|
export {
|
|
23
23
|
bold,
|
|
@@ -38,4 +38,4 @@ export {
|
|
|
38
38
|
writeOutput,
|
|
39
39
|
yellow
|
|
40
40
|
};
|
|
41
|
-
//# sourceMappingURL=output-
|
|
41
|
+
//# sourceMappingURL=output-7PGQWJY2.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
shouldOutputJson,
|
|
8
8
|
successEnvelope,
|
|
9
9
|
writeOutput
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-CP3FXEQA.js";
|
|
11
11
|
import "./chunk-XQJ6PB2L.js";
|
|
12
12
|
import "./chunk-QMRVH5ZP.js";
|
|
13
13
|
|
|
@@ -19,10 +19,10 @@ async function loadToolCatalog() {
|
|
|
19
19
|
const response = await fetchToolCatalog();
|
|
20
20
|
if (!response.ok) {
|
|
21
21
|
const msg = response.error && typeof response.error === "object" && "message" in response.error ? String(response.error.message) : "Failed to fetch tool catalog";
|
|
22
|
-
const { CliError } = await import("./errors-
|
|
23
|
-
const { outputError } = await import("./output-
|
|
22
|
+
const { CliError } = await import("./errors-U6UZWVSD.js");
|
|
23
|
+
const { outputError } = await import("./output-7PGQWJY2.js");
|
|
24
24
|
await outputError(
|
|
25
|
-
new CliError("API_ERROR", msg, "Check: hive
|
|
25
|
+
new CliError("API_ERROR", msg, "Check: hive doctor"),
|
|
26
26
|
{}
|
|
27
27
|
);
|
|
28
28
|
return [];
|
|
@@ -73,7 +73,7 @@ async function listTools(opts) {
|
|
|
73
73
|
await writeOutput(successEnvelope(data, {}));
|
|
74
74
|
return;
|
|
75
75
|
}
|
|
76
|
-
const { table } = await import("./format-
|
|
76
|
+
const { table } = await import("./format-CVLLK6GD.js");
|
|
77
77
|
const rangeStart = totalFiltered === 0 ? 0 : offset + 1;
|
|
78
78
|
const rangeEnd = offset + items.length;
|
|
79
79
|
info(`
|
|
@@ -102,7 +102,7 @@ async function searchTools(query) {
|
|
|
102
102
|
await writeOutput(successEnvelope(data, {}));
|
|
103
103
|
return;
|
|
104
104
|
}
|
|
105
|
-
const { table } = await import("./format-
|
|
105
|
+
const { table } = await import("./format-CVLLK6GD.js");
|
|
106
106
|
info(`
|
|
107
107
|
${matches.length} matches for "${query}"
|
|
108
108
|
`);
|
|
@@ -121,13 +121,13 @@ async function toolInfo(name) {
|
|
|
121
121
|
const allTools = await loadToolCatalog();
|
|
122
122
|
const tool = allTools.find((t2) => t2.name === name);
|
|
123
123
|
if (!tool) {
|
|
124
|
-
const { CliError, suggestSimilarTools } = await import("./errors-
|
|
125
|
-
const { outputError } = await import("./output-
|
|
124
|
+
const { CliError, suggestSimilarTools } = await import("./errors-U6UZWVSD.js");
|
|
125
|
+
const { outputError } = await import("./output-7PGQWJY2.js");
|
|
126
126
|
const similar = suggestSimilarTools(
|
|
127
127
|
name,
|
|
128
128
|
allTools.map((t2) => t2.name)
|
|
129
129
|
);
|
|
130
|
-
const suggestion = similar.length > 0 ? `Did you mean: ${similar.join(", ")}?` : `Run: hive
|
|
130
|
+
const suggestion = similar.length > 0 ? `Did you mean: ${similar.join(", ")}?` : `Run: hive tools search "${name}"`;
|
|
131
131
|
await outputError(
|
|
132
132
|
new CliError("TOOL_NOT_FOUND", `Tool "${name}" not found`, suggestion),
|
|
133
133
|
{ tool: name }
|
|
@@ -162,7 +162,7 @@ ${t.description}
|
|
|
162
162
|
}
|
|
163
163
|
async function refreshTools() {
|
|
164
164
|
const { clearCache } = await import("./cache-US4LSZPI.js");
|
|
165
|
-
const { info: printInfo } = await import("./output-
|
|
165
|
+
const { info: printInfo } = await import("./output-7PGQWJY2.js");
|
|
166
166
|
clearCache();
|
|
167
167
|
printInfo("Cache cleared. Fetching fresh tool catalog...\n");
|
|
168
168
|
const tools = await loadToolCatalog();
|
|
@@ -175,4 +175,4 @@ export {
|
|
|
175
175
|
searchTools,
|
|
176
176
|
toolInfo
|
|
177
177
|
};
|
|
178
|
-
//# sourceMappingURL=tools-
|
|
178
|
+
//# sourceMappingURL=tools-XEGCLA4I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/tools.ts"],"sourcesContent":["import {\n shouldOutputJson,\n writeOutput,\n successEnvelope,\n info,\n} from \"./output.js\";\nimport { fetchToolCatalog } from \"./api-client.js\";\n\ninterface ToolEntry {\n name: string;\n title?: string;\n description?: string;\n inputSchema?: unknown;\n annotations?: Record<string, unknown>;\n provider?: string;\n}\n\nasync function loadToolCatalog(): Promise<ToolEntry[]> {\n const { getCachedTools, setCachedTools } = await import(\"./cache.js\");\n const cached = getCachedTools();\n if (cached) return cached as ToolEntry[];\n\n const response = await fetchToolCatalog();\n if (!response.ok) {\n const msg =\n response.error &&\n typeof response.error === \"object\" &&\n \"message\" in response.error\n ? String(response.error.message)\n : \"Failed to fetch tool catalog\";\n const { CliError } = await import(\"./errors.js\");\n const { outputError } = await import(\"./output.js\");\n await outputError(\n new CliError(\"API_ERROR\", msg, \"Check: hive doctor\"),\n {},\n );\n return [];\n }\n const data = response.data as\n | { totalCount?: number; tools?: ToolEntry[] }\n | ToolEntry[];\n const tools = Array.isArray(data)\n ? data\n : data &&\n typeof data === \"object\" &&\n \"tools\" in data &&\n Array.isArray(data.tools)\n ? data.tools\n : [];\n\n setCachedTools(tools);\n return tools;\n}\n\nexport async function listTools(opts: {\n category?: string;\n provider?: string;\n limit?: string;\n offset?: string;\n}): Promise<void> {\n let tools = await loadToolCatalog();\n\n if (opts.provider) {\n const prefix = opts.provider.toLowerCase();\n tools = tools.filter((t) => t.name.toLowerCase().startsWith(prefix + \"_\"));\n }\n\n if (opts.category) {\n const { NAMESPACE } = await import(\"./namespace.js\");\n const cat = opts.category.toLowerCase();\n const ns = NAMESPACE.find(\n (d) => d.name === cat || d.description.toLowerCase().includes(cat),\n );\n if (ns) {\n const categoryTools = new Set(ns.commands.map((cmd) => cmd.tool));\n tools = tools.filter((t) => categoryTools.has(t.name));\n } else {\n // Fallback: substring match on name/provider for unknown categories\n tools = tools.filter(\n (t) =>\n (t.provider ?? \"\").toLowerCase().includes(cat) ||\n (t.name ?? \"\").toLowerCase().includes(cat),\n );\n }\n }\n\n const totalFiltered = tools.length;\n const limit = Math.max(1, parseInt(opts.limit ?? \"50\", 10) || 50);\n const offset = Math.max(0, parseInt(opts.offset ?? \"0\", 10) || 0);\n tools = tools.slice(offset, offset + limit);\n\n const items = tools.map((t) => ({\n name: t.name,\n title: t.title,\n description:\n t.description && t.description.length > 120\n ? t.description.slice(0, 117) + \"...\"\n : t.description,\n }));\n\n const data = {\n totalCount: totalFiltered,\n offset,\n limit,\n showing: items.length,\n tools: items,\n };\n\n if (shouldOutputJson()) {\n await writeOutput(successEnvelope(data, {}));\n return;\n }\n\n const { table } = await import(\"./format.js\");\n const rangeStart = totalFiltered === 0 ? 0 : offset + 1;\n const rangeEnd = offset + items.length;\n info(`\\nShowing ${rangeStart}-${rangeEnd} of ${totalFiltered} tools\\n`);\n info(\n table(\n [\"Name\", \"Title\"],\n items.map((t) => [t.name, t.title ?? \"\"]),\n ),\n );\n}\n\nexport async function searchTools(query: string): Promise<void> {\n const allTools = await loadToolCatalog();\n const q = query.toLowerCase();\n\n const matches = allTools.filter(\n (t) =>\n t.name.toLowerCase().includes(q) ||\n (t.description ?? \"\").toLowerCase().includes(q) ||\n (t.title ?? \"\").toLowerCase().includes(q),\n );\n\n const items = matches.map((t) => ({\n name: t.name,\n title: t.title,\n description:\n t.description && t.description.length > 120\n ? t.description.slice(0, 117) + \"...\"\n : t.description,\n }));\n\n const data = { totalCount: items.length, query, tools: items };\n\n if (shouldOutputJson()) {\n await writeOutput(successEnvelope(data, {}));\n return;\n }\n\n const { table } = await import(\"./format.js\");\n info(`\\n${matches.length} matches for \"${query}\"\\n`);\n if (matches.length === 0) {\n info(\"No tools found. Try a broader search term.\\n\");\n return;\n }\n info(\n table(\n [\"Name\", \"Title\"],\n matches.map((t) => [t.name, t.title ?? \"\"]),\n ),\n );\n}\n\nexport async function toolInfo(name: string): Promise<void> {\n const allTools = await loadToolCatalog();\n const tool = allTools.find((t) => t.name === name);\n\n if (!tool) {\n const { CliError, suggestSimilarTools } = await import(\"./errors.js\");\n const { outputError } = await import(\"./output.js\");\n const similar = suggestSimilarTools(\n name,\n allTools.map((t) => t.name),\n );\n const suggestion =\n similar.length > 0\n ? `Did you mean: ${similar.join(\", \")}?`\n : `Run: hive tools search \"${name}\"`;\n await outputError(\n new CliError(\"TOOL_NOT_FOUND\", `Tool \"${name}\" not found`, suggestion),\n { tool: name },\n );\n }\n\n // After outputError (which calls process.exit), this is unreachable,\n // but TypeScript doesn't know that. The non-null assertion is safe.\n const t = tool!;\n\n const data = {\n name: t.name,\n title: t.title,\n provider: t.provider ?? null,\n readOnly: t.annotations?.readOnlyHint ?? null,\n description: t.description,\n inputSchema: t.inputSchema,\n };\n\n if (shouldOutputJson()) {\n await writeOutput(successEnvelope(data, { tool: name }));\n return;\n }\n\n info(`\\n${t.title ?? t.name}`);\n info(`Name: ${t.name}`);\n if (t.provider) info(`Provider: ${t.provider}`);\n info(`Read-only: ${t.annotations?.readOnlyHint ?? \"unknown\"}`);\n info(`\\nDescription:\\n${t.description}\\n`);\n if (t.inputSchema) {\n info(\"Input Schema:\");\n info(JSON.stringify(t.inputSchema, null, 2));\n }\n}\n\nexport async function refreshTools(): Promise<void> {\n const { clearCache } = await import(\"./cache.js\");\n const { info: printInfo } = await import(\"./output.js\");\n clearCache();\n printInfo(\"Cache cleared. Fetching fresh tool catalog...\\n\");\n const tools = await loadToolCatalog();\n printInfo(`${tools.length} tools loaded.\\n`);\n}\n"],"mappings":"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","names":["t"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
executeTool
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-DTUDM6HX.js";
|
|
5
5
|
import "./chunk-WKVZVQTG.js";
|
|
6
6
|
import "./chunk-LBTLYTZS.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-CP3FXEQA.js";
|
|
8
8
|
import "./chunk-XQJ6PB2L.js";
|
|
9
9
|
import "./chunk-QMRVH5ZP.js";
|
|
10
10
|
|
|
@@ -64,4 +64,4 @@ Aborting watch: ${MAX_CONSECUTIVE_FAILURES} consecutive failures.
|
|
|
64
64
|
export {
|
|
65
65
|
runWatch
|
|
66
66
|
};
|
|
67
|
-
//# sourceMappingURL=watch-
|
|
67
|
+
//# sourceMappingURL=watch-A75SVIQ6.js.map
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/jq.ts","../src/cli/output.ts"],"sourcesContent":["/**\n * Minimal jq-like evaluator for CLI --jq flag.\n * Supports: .field, .a.b, .[N], .[] | .field, .[] | select(.field op val)\n */\nexport function jqEval(data: unknown, expr: string): unknown {\n const trimmed = expr.trim();\n if (trimmed === \".\") return data;\n\n // Handle pipe: split on \" | \" and chain\n if (trimmed.includes(\" | \")) {\n const parts = trimmed.split(\" | \");\n let result = data;\n for (const part of parts) {\n result = jqEval(result, part.trim());\n }\n return result;\n }\n\n // Handle select(.field op value)\n const selectMatch = trimmed.match(\n /^select\\(\\.(\\w[\\w.]*)\\s*(>|<|>=|<=|==|!=)\\s*(.+)\\)$/,\n );\n if (selectMatch) {\n const [, field, op, rawVal] = selectMatch;\n if (!Array.isArray(data)) return data;\n const val = parseValue(rawVal);\n return data.filter((item) => {\n const fieldVal = extractPath(item, field);\n return compare(fieldVal, op, val);\n });\n }\n\n // If data is an array and expression is a plain field access, map over elements.\n // Exclude bracket expressions like .[1] or .[] to avoid false-positive mapping.\n if (\n Array.isArray(data) &&\n trimmed.startsWith(\".\") &&\n !trimmed.includes(\"[\")\n ) {\n const path = trimmed.slice(1);\n if (path && !path.includes(\" \")) {\n return data.map((item) => extractPath(item, path));\n }\n }\n\n // Handle .[] (iterate array)\n if (trimmed === \".[]\") {\n if (Array.isArray(data)) return data;\n if (typeof data === \"object\" && data !== null) return Object.values(data);\n return data;\n }\n\n // Handle .[N] (array index)\n const indexMatch = trimmed.match(/^\\.\\[(\\d+)\\]$/);\n if (indexMatch) {\n const idx = parseInt(indexMatch[1], 10);\n if (Array.isArray(data)) return data[idx];\n return undefined;\n }\n\n // Handle .field or .a.b.c — may include .[] in path\n if (trimmed.startsWith(\".\")) {\n const path = trimmed.slice(1);\n return extractPath(data, path);\n }\n\n return extractPath(data, trimmed);\n}\n\nfunction extractPath(data: unknown, path: string): unknown {\n if (!path) return data;\n\n const parts: string[] = [];\n let current = \"\";\n for (let i = 0; i < path.length; i++) {\n if (path[i] === \".\" && path[i + 1] === \"[\" && path[i + 2] === \"]\") {\n if (current) parts.push(current);\n parts.push(\"[]\");\n current = \"\";\n i += 2;\n } else if (path[i] === \".\" && current) {\n parts.push(current);\n current = \"\";\n } else if (path[i] !== \".\" || current) {\n current += path[i];\n }\n }\n if (current) parts.push(current);\n\n let result: unknown = data;\n for (const part of parts) {\n if (result == null) return undefined;\n if (part === \"[]\") {\n if (Array.isArray(result)) return result;\n return undefined;\n }\n if (typeof result === \"object\" && result !== null) {\n result = (result as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n return result;\n}\n\nfunction parseValue(raw: string): string | number | boolean {\n const trimmed = raw.trim();\n if (trimmed === \"true\") return true;\n if (trimmed === \"false\") return false;\n if (/^\".*\"$/.test(trimmed)) return trimmed.slice(1, -1);\n const num = Number(trimmed);\n if (!isNaN(num)) return num;\n return trimmed;\n}\n\nfunction compare(a: unknown, op: string, b: unknown): boolean {\n switch (op) {\n case \"==\":\n return a === b;\n case \"!=\":\n return a !== b;\n case \">\":\n return typeof a === \"number\" && typeof b === \"number\" && a > b;\n case \"<\":\n return typeof a === \"number\" && typeof b === \"number\" && a < b;\n case \">=\":\n return typeof a === \"number\" && typeof b === \"number\" && a >= b;\n case \"<=\":\n return typeof a === \"number\" && typeof b === \"number\" && a <= b;\n default:\n return false;\n }\n}\n","import { CliError, type ErrorCode, ExitCode } from \"./errors.js\";\nimport { jqEval } from \"./jq.js\";\n\n// SIGPIPE — clean exit when piping to `head`, `less`, etc.\nprocess.on(\"SIGPIPE\", () => process.exit(0));\n\n/** Global output options set from CLI flags. */\nexport interface OutputOptions {\n json?: boolean;\n pretty?: boolean;\n fields?: string;\n quiet?: boolean;\n verbose?: boolean;\n noColor?: boolean;\n jq?: string;\n csv?: boolean;\n}\n\nlet globalOpts: OutputOptions = {};\n\nexport function setOutputOptions(opts: OutputOptions): void {\n globalOpts = opts;\n}\n\n/** Whether to emit JSON (non-TTY default, or --json flag). */\nexport function shouldOutputJson(): boolean {\n if (globalOpts.json) return true;\n if (globalOpts.pretty) return false;\n return !process.stdout.isTTY;\n}\n\n/** Whether color is enabled. */\nexport function colorEnabled(): boolean {\n if (globalOpts.noColor) return false;\n if (process.env.NO_COLOR) return false;\n if (process.env.FORCE_COLOR) return true;\n return !!process.stdout.isTTY;\n}\n\n/** Apply ANSI color if enabled. */\nexport function red(s: string): string {\n return colorEnabled() ? `\\x1b[31m${s}\\x1b[0m` : s;\n}\nexport function green(s: string): string {\n return colorEnabled() ? `\\x1b[32m${s}\\x1b[0m` : s;\n}\nexport function yellow(s: string): string {\n return colorEnabled() ? `\\x1b[33m${s}\\x1b[0m` : s;\n}\nexport function dim(s: string): string {\n return colorEnabled() ? `\\x1b[2m${s}\\x1b[0m` : s;\n}\nexport function bold(s: string): string {\n return colorEnabled() ? `\\x1b[1m${s}\\x1b[0m` : s;\n}\n\n/** The standard envelope for all CLI output. */\nexport interface Envelope<T = unknown> {\n ok: boolean;\n data?: T;\n error?: {\n code: ErrorCode;\n message: string;\n suggestion?: string;\n };\n meta: {\n tool?: string;\n provider?: string;\n duration_ms?: number;\n };\n}\n\n/** Build a success envelope. */\nexport function successEnvelope<T>(\n data: T,\n meta: Envelope[\"meta\"],\n): Envelope<T> {\n return { ok: true, data, meta };\n}\n\n/** Build an error envelope. */\nexport function errorEnvelope(err: CliError, meta: Envelope[\"meta\"]): Envelope {\n return {\n ok: false,\n error: {\n code: err.code,\n message: err.message,\n ...(err.suggestion && { suggestion: err.suggestion }),\n },\n meta,\n };\n}\n\n/** Apply --fields filtering to data. */\nfunction applyFields<T>(data: T, fields: string | undefined): T {\n if (!fields) return data;\n const keys = fields.split(\",\").map((f) => f.trim());\n if (Array.isArray(data)) {\n return data.map((item) => pick(item, keys)) as T;\n }\n if (typeof data === \"object\" && data !== null) {\n return pick(data, keys) as T;\n }\n return data;\n}\n\nfunction pick(obj: unknown, keys: string[]): unknown {\n if (typeof obj !== \"object\" || obj === null) return obj;\n const result: Record<string, unknown> = {};\n for (const key of keys) {\n if (key in (obj as Record<string, unknown>)) {\n result[key] = (obj as Record<string, unknown>)[key];\n }\n }\n return result;\n}\n\n/** Write an envelope to stdout. Handles JSON vs human mode. */\nexport async function writeOutput(envelope: Envelope): Promise<void> {\n if (globalOpts.fields && envelope.data) {\n envelope = {\n ...envelope,\n data: applyFields(envelope.data, globalOpts.fields),\n };\n }\n\n // Apply --jq filter\n if (globalOpts.jq && envelope.data != null) {\n envelope = { ...envelope, data: jqEval(envelope.data, globalOpts.jq) };\n }\n\n // CSV output mode\n if (globalOpts.csv && envelope.ok && Array.isArray(envelope.data)) {\n process.stdout.write(\n formatCsv(envelope.data as Record<string, unknown>[]) + \"\\n\",\n );\n return;\n }\n\n if (shouldOutputJson()) {\n const output = JSON.stringify(envelope, null, 2);\n process.stdout.write(output + \"\\n\");\n return;\n }\n\n // Human-readable mode\n if (!globalOpts.quiet && envelope.meta.tool) {\n const status = envelope.ok\n ? green(`✓ ${envelope.meta.tool}`)\n : red(`✗ ${envelope.meta.tool}`);\n const provider = envelope.meta.provider\n ? dim(` (${envelope.meta.provider})`)\n : \"\";\n const timing =\n envelope.meta.duration_ms != null\n ? dim(` ${envelope.meta.duration_ms}ms`)\n : \"\";\n process.stderr.write(`${status}${provider}${timing}\\n\\n`);\n }\n\n if (envelope.ok && envelope.data != null) {\n // Auto-table: array of objects renders as a fixed-width table\n if (\n Array.isArray(envelope.data) &&\n envelope.data.length > 0 &&\n typeof envelope.data[0] === \"object\" &&\n envelope.data[0] !== null\n ) {\n const { formatTable } = await import(\"./format.js\");\n process.stdout.write(\n formatTable(envelope.data as Record<string, unknown>[]) + \"\\n\",\n );\n return;\n }\n\n const text =\n typeof envelope.data === \"string\"\n ? envelope.data\n : JSON.stringify(envelope.data, null, 2);\n process.stdout.write(text + \"\\n\");\n }\n\n if (!envelope.ok && envelope.error) {\n process.stderr.write(red(`Error: ${envelope.error.message}\\n`));\n if (envelope.error.suggestion) {\n process.stderr.write(\n yellow(` Suggestion: ${envelope.error.suggestion}\\n`),\n );\n }\n }\n}\n\n/** Write a data envelope and exit. */\nexport async function outputSuccess<T>(\n data: T,\n meta: Envelope[\"meta\"],\n): Promise<void> {\n await writeOutput(successEnvelope(data, meta));\n}\n\n/** Write an error envelope and exit with the appropriate code. */\nexport async function outputError(\n err: CliError,\n meta: Envelope[\"meta\"],\n): Promise<never> {\n await writeOutput(errorEnvelope(err, meta));\n process.exit(err.exitCode);\n}\n\n/** Log to stderr (only when not --quiet). */\nexport function info(msg: string): void {\n if (!globalOpts.quiet) {\n process.stderr.write(msg + \"\\n\");\n }\n}\n\n/** Log to stderr (only when --verbose). */\nexport function debug(msg: string): void {\n if (globalOpts.verbose) {\n process.stderr.write(dim(`[debug] ${msg}`) + \"\\n\");\n }\n}\n\n/** Detect CI environment. */\nexport function isCI(): boolean {\n return !!(\n process.env.CI ||\n process.env.GITHUB_ACTIONS ||\n process.env.GITLAB_CI ||\n process.env.JENKINS_URL ||\n process.env.HIVE_CI\n );\n}\n\n/** Format array of objects as RFC 4180 CSV. */\nexport function formatCsv(data: Record<string, unknown>[]): string {\n if (data.length === 0) return \"\";\n const keys = [...new Set(data.flatMap((row) => Object.keys(row)))];\n const escape = (val: unknown): string => {\n const str = val == null ? \"\" : String(val);\n return str.includes(\",\") || str.includes('\"') || str.includes(\"\\n\")\n ? `\"${str.replace(/\"/g, '\"\"')}\"`\n : str;\n };\n const header = keys.join(\",\");\n const rows = data.map((row) => keys.map((k) => escape(row[k])).join(\",\"));\n return [header, ...rows].join(\"\\n\");\n}\n"],"mappings":"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","names":[]}
|
package/build/format-4OIUGZKY.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import "./chunk-QMRVH5ZP.js";
|
|
3
|
-
|
|
4
|
-
// src/cli/format.ts
|
|
5
|
-
function pad(str, width) {
|
|
6
|
-
return str.length >= width ? str.slice(0, width) : str + " ".repeat(width - str.length);
|
|
7
|
-
}
|
|
8
|
-
function table(headers, rows) {
|
|
9
|
-
const widths = headers.map(
|
|
10
|
-
(h, i) => Math.max(h.length, ...rows.map((r) => (r[i] || "").length)) + 2
|
|
11
|
-
);
|
|
12
|
-
const headerLine = headers.map((h, i) => pad(h, widths[i])).join("");
|
|
13
|
-
const separator = widths.map((w) => "-".repeat(w)).join("");
|
|
14
|
-
const dataLines = rows.map(
|
|
15
|
-
(row) => row.map((cell, i) => pad(cell, widths[i])).join("")
|
|
16
|
-
);
|
|
17
|
-
return [headerLine, separator, ...dataLines].join("\n");
|
|
18
|
-
}
|
|
19
|
-
function formatTable(data) {
|
|
20
|
-
if (data.length === 0) return "(empty result)";
|
|
21
|
-
const maxCols = 8;
|
|
22
|
-
const maxWidth = 40;
|
|
23
|
-
const allKeys = [...new Set(data.flatMap(Object.keys))];
|
|
24
|
-
const cols = allKeys.slice(0, maxCols);
|
|
25
|
-
const widths = cols.map((col) => {
|
|
26
|
-
const values = data.map((row) => String(row[col] ?? "").slice(0, maxWidth));
|
|
27
|
-
return Math.max(col.length, ...values.map((v) => v.length));
|
|
28
|
-
});
|
|
29
|
-
const header = cols.map((col, i) => col.padEnd(widths[i])).join(" ");
|
|
30
|
-
const separator = widths.map((w) => "-".repeat(w)).join(" ");
|
|
31
|
-
const rows = data.map(
|
|
32
|
-
(row) => cols.map(
|
|
33
|
-
(col, i) => String(row[col] ?? "").slice(0, maxWidth).padEnd(widths[i])
|
|
34
|
-
).join(" ")
|
|
35
|
-
);
|
|
36
|
-
return [header, separator, ...rows].join("\n");
|
|
37
|
-
}
|
|
38
|
-
export {
|
|
39
|
-
formatTable,
|
|
40
|
-
pad,
|
|
41
|
-
table
|
|
42
|
-
};
|
|
43
|
-
//# sourceMappingURL=format-4OIUGZKY.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/format.ts"],"sourcesContent":["export function pad(str: string, width: number): string {\n return str.length >= width\n ? str.slice(0, width)\n : str + \" \".repeat(width - str.length);\n}\n\nexport function table(headers: string[], rows: string[][]): string {\n const widths = headers.map(\n (h, i) => Math.max(h.length, ...rows.map((r) => (r[i] || \"\").length)) + 2,\n );\n const headerLine = headers.map((h, i) => pad(h, widths[i])).join(\"\");\n const separator = widths.map((w) => \"-\".repeat(w)).join(\"\");\n const dataLines = rows.map((row) =>\n row.map((cell, i) => pad(cell, widths[i])).join(\"\"),\n );\n return [headerLine, separator, ...dataLines].join(\"\\n\");\n}\n\n/** Auto-format an array of objects as a fixed-width table. */\nexport function formatTable(data: Record<string, unknown>[]): string {\n if (data.length === 0) return \"(empty result)\";\n\n const maxCols = 8;\n const maxWidth = 40;\n\n const allKeys = [...new Set(data.flatMap(Object.keys))];\n const cols = allKeys.slice(0, maxCols);\n\n const widths = cols.map((col) => {\n const values = data.map((row) => String(row[col] ?? \"\").slice(0, maxWidth));\n return Math.max(col.length, ...values.map((v) => v.length));\n });\n\n const header = cols.map((col, i) => col.padEnd(widths[i])).join(\" \");\n const separator = widths.map((w) => \"-\".repeat(w)).join(\" \");\n const rows = data.map((row) =>\n cols\n .map((col, i) =>\n String(row[col] ?? \"\")\n .slice(0, maxWidth)\n .padEnd(widths[i]),\n )\n .join(\" \"),\n );\n\n return [header, separator, ...rows].join(\"\\n\");\n}\n"],"mappings":";;;;AAAO,SAAS,IAAI,KAAa,OAAuB;AACtD,SAAO,IAAI,UAAU,QACjB,IAAI,MAAM,GAAG,KAAK,IAClB,MAAM,IAAI,OAAO,QAAQ,IAAI,MAAM;AACzC;AAEO,SAAS,MAAM,SAAmB,MAA0B;AACjE,QAAM,SAAS,QAAQ;AAAA,IACrB,CAAC,GAAG,MAAM,KAAK,IAAI,EAAE,QAAQ,GAAG,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI;AAAA,EAC1E;AACA,QAAM,aAAa,QAAQ,IAAI,CAAC,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;AACnE,QAAM,YAAY,OAAO,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE;AAC1D,QAAM,YAAY,KAAK;AAAA,IAAI,CAAC,QAC1B,IAAI,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;AAAA,EACpD;AACA,SAAO,CAAC,YAAY,WAAW,GAAG,SAAS,EAAE,KAAK,IAAI;AACxD;AAGO,SAAS,YAAY,MAAyC;AACnE,MAAI,KAAK,WAAW,EAAG,QAAO;AAE9B,QAAM,UAAU;AAChB,QAAM,WAAW;AAEjB,QAAM,UAAU,CAAC,GAAG,IAAI,IAAI,KAAK,QAAQ,OAAO,IAAI,CAAC,CAAC;AACtD,QAAM,OAAO,QAAQ,MAAM,GAAG,OAAO;AAErC,QAAM,SAAS,KAAK,IAAI,CAAC,QAAQ;AAC/B,UAAM,SAAS,KAAK,IAAI,CAAC,QAAQ,OAAO,IAAI,GAAG,KAAK,EAAE,EAAE,MAAM,GAAG,QAAQ,CAAC;AAC1E,WAAO,KAAK,IAAI,IAAI,QAAQ,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AAAA,EAC5D,CAAC;AAED,QAAM,SAAS,KAAK,IAAI,CAAC,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI;AACpE,QAAM,YAAY,OAAO,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI;AAC5D,QAAM,OAAO,KAAK;AAAA,IAAI,CAAC,QACrB,KACG;AAAA,MAAI,CAAC,KAAK,MACT,OAAO,IAAI,GAAG,KAAK,EAAE,EAClB,MAAM,GAAG,QAAQ,EACjB,OAAO,OAAO,CAAC,CAAC;AAAA,IACrB,EACC,KAAK,IAAI;AAAA,EACd;AAEA,SAAO,CAAC,QAAQ,WAAW,GAAG,IAAI,EAAE,KAAK,IAAI;AAC/C;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/tools.ts"],"sourcesContent":["import {\n shouldOutputJson,\n writeOutput,\n successEnvelope,\n info,\n} from \"./output.js\";\nimport { fetchToolCatalog } from \"./api-client.js\";\n\ninterface ToolEntry {\n name: string;\n title?: string;\n description?: string;\n inputSchema?: unknown;\n annotations?: Record<string, unknown>;\n provider?: string;\n}\n\nasync function loadToolCatalog(): Promise<ToolEntry[]> {\n const { getCachedTools, setCachedTools } = await import(\"./cache.js\");\n const cached = getCachedTools();\n if (cached) return cached as ToolEntry[];\n\n const response = await fetchToolCatalog();\n if (!response.ok) {\n const msg =\n response.error &&\n typeof response.error === \"object\" &&\n \"message\" in response.error\n ? String(response.error.message)\n : \"Failed to fetch tool catalog\";\n const { CliError } = await import(\"./errors.js\");\n const { outputError } = await import(\"./output.js\");\n await outputError(\n new CliError(\"API_ERROR\", msg, \"Check: hive-mcp doctor\"),\n {},\n );\n return [];\n }\n const data = response.data as\n | { totalCount?: number; tools?: ToolEntry[] }\n | ToolEntry[];\n const tools = Array.isArray(data)\n ? data\n : data &&\n typeof data === \"object\" &&\n \"tools\" in data &&\n Array.isArray(data.tools)\n ? data.tools\n : [];\n\n setCachedTools(tools);\n return tools;\n}\n\nexport async function listTools(opts: {\n category?: string;\n provider?: string;\n limit?: string;\n offset?: string;\n}): Promise<void> {\n let tools = await loadToolCatalog();\n\n if (opts.provider) {\n const prefix = opts.provider.toLowerCase();\n tools = tools.filter((t) => t.name.toLowerCase().startsWith(prefix + \"_\"));\n }\n\n if (opts.category) {\n const { NAMESPACE } = await import(\"./namespace.js\");\n const cat = opts.category.toLowerCase();\n const ns = NAMESPACE.find(\n (d) => d.name === cat || d.description.toLowerCase().includes(cat),\n );\n if (ns) {\n const categoryTools = new Set(ns.commands.map((cmd) => cmd.tool));\n tools = tools.filter((t) => categoryTools.has(t.name));\n } else {\n // Fallback: substring match on name/provider for unknown categories\n tools = tools.filter(\n (t) =>\n (t.provider ?? \"\").toLowerCase().includes(cat) ||\n (t.name ?? \"\").toLowerCase().includes(cat),\n );\n }\n }\n\n const totalFiltered = tools.length;\n const limit = Math.max(1, parseInt(opts.limit ?? \"50\", 10) || 50);\n const offset = Math.max(0, parseInt(opts.offset ?? \"0\", 10) || 0);\n tools = tools.slice(offset, offset + limit);\n\n const items = tools.map((t) => ({\n name: t.name,\n title: t.title,\n description:\n t.description && t.description.length > 120\n ? t.description.slice(0, 117) + \"...\"\n : t.description,\n }));\n\n const data = {\n totalCount: totalFiltered,\n offset,\n limit,\n showing: items.length,\n tools: items,\n };\n\n if (shouldOutputJson()) {\n await writeOutput(successEnvelope(data, {}));\n return;\n }\n\n const { table } = await import(\"./format.js\");\n const rangeStart = totalFiltered === 0 ? 0 : offset + 1;\n const rangeEnd = offset + items.length;\n info(`\\nShowing ${rangeStart}-${rangeEnd} of ${totalFiltered} tools\\n`);\n info(\n table(\n [\"Name\", \"Title\"],\n items.map((t) => [t.name, t.title ?? \"\"]),\n ),\n );\n}\n\nexport async function searchTools(query: string): Promise<void> {\n const allTools = await loadToolCatalog();\n const q = query.toLowerCase();\n\n const matches = allTools.filter(\n (t) =>\n t.name.toLowerCase().includes(q) ||\n (t.description ?? \"\").toLowerCase().includes(q) ||\n (t.title ?? \"\").toLowerCase().includes(q),\n );\n\n const items = matches.map((t) => ({\n name: t.name,\n title: t.title,\n description:\n t.description && t.description.length > 120\n ? t.description.slice(0, 117) + \"...\"\n : t.description,\n }));\n\n const data = { totalCount: items.length, query, tools: items };\n\n if (shouldOutputJson()) {\n await writeOutput(successEnvelope(data, {}));\n return;\n }\n\n const { table } = await import(\"./format.js\");\n info(`\\n${matches.length} matches for \"${query}\"\\n`);\n if (matches.length === 0) {\n info(\"No tools found. Try a broader search term.\\n\");\n return;\n }\n info(\n table(\n [\"Name\", \"Title\"],\n matches.map((t) => [t.name, t.title ?? \"\"]),\n ),\n );\n}\n\nexport async function toolInfo(name: string): Promise<void> {\n const allTools = await loadToolCatalog();\n const tool = allTools.find((t) => t.name === name);\n\n if (!tool) {\n const { CliError, suggestSimilarTools } = await import(\"./errors.js\");\n const { outputError } = await import(\"./output.js\");\n const similar = suggestSimilarTools(\n name,\n allTools.map((t) => t.name),\n );\n const suggestion =\n similar.length > 0\n ? `Did you mean: ${similar.join(\", \")}?`\n : `Run: hive-mcp tools search \"${name}\"`;\n await outputError(\n new CliError(\"TOOL_NOT_FOUND\", `Tool \"${name}\" not found`, suggestion),\n { tool: name },\n );\n }\n\n // After outputError (which calls process.exit), this is unreachable,\n // but TypeScript doesn't know that. The non-null assertion is safe.\n const t = tool!;\n\n const data = {\n name: t.name,\n title: t.title,\n provider: t.provider ?? null,\n readOnly: t.annotations?.readOnlyHint ?? null,\n description: t.description,\n inputSchema: t.inputSchema,\n };\n\n if (shouldOutputJson()) {\n await writeOutput(successEnvelope(data, { tool: name }));\n return;\n }\n\n info(`\\n${t.title ?? t.name}`);\n info(`Name: ${t.name}`);\n if (t.provider) info(`Provider: ${t.provider}`);\n info(`Read-only: ${t.annotations?.readOnlyHint ?? \"unknown\"}`);\n info(`\\nDescription:\\n${t.description}\\n`);\n if (t.inputSchema) {\n info(\"Input Schema:\");\n info(JSON.stringify(t.inputSchema, null, 2));\n }\n}\n\nexport async function refreshTools(): Promise<void> {\n const { clearCache } = await import(\"./cache.js\");\n const { info: printInfo } = await import(\"./output.js\");\n clearCache();\n printInfo(\"Cache cleared. Fetching fresh tool catalog...\\n\");\n const tools = await loadToolCatalog();\n printInfo(`${tools.length} tools loaded.\\n`);\n}\n"],"mappings":"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","names":["t"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|