@zenalexa/unicli 0.207.1 → 0.209.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/AGENTS.md +4 -4
- package/README.md +30 -17
- package/dist/browser/observe.d.ts +80 -0
- package/dist/browser/observe.d.ts.map +1 -0
- package/dist/browser/observe.js +144 -0
- package/dist/browser/observe.js.map +1 -0
- package/dist/browser/snapshot.d.ts.map +1 -1
- package/dist/browser/snapshot.js +29 -9
- package/dist/browser/snapshot.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +59 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +82 -2
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/eval.d.ts +112 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +485 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +20 -1
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/hub.d.ts +13 -0
- package/dist/commands/hub.d.ts.map +1 -0
- package/dist/commands/hub.js +232 -0
- package/dist/commands/hub.js.map +1 -0
- package/dist/commands/mcp.d.ts +16 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +135 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/operate.d.ts.map +1 -1
- package/dist/commands/operate.js +66 -1
- package/dist/commands/operate.js.map +1 -1
- package/dist/commands/research.d.ts +17 -0
- package/dist/commands/research.d.ts.map +1 -0
- package/dist/commands/research.js +257 -0
- package/dist/commands/research.js.map +1 -0
- package/dist/commands/skills.d.ts +91 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +266 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/test-gen.d.ts +10 -0
- package/dist/commands/test-gen.d.ts.map +1 -0
- package/dist/commands/test-gen.js +124 -0
- package/dist/commands/test-gen.js.map +1 -0
- package/dist/commands/usage.d.ts +17 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +87 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/discovery/loader.d.ts +8 -1
- package/dist/discovery/loader.d.ts.map +1 -1
- package/dist/discovery/loader.js +103 -6
- package/dist/discovery/loader.js.map +1 -1
- package/dist/engine/capability.d.ts +40 -0
- package/dist/engine/capability.d.ts.map +1 -0
- package/dist/engine/capability.js +191 -0
- package/dist/engine/capability.js.map +1 -0
- package/dist/engine/endpoint.d.ts +47 -0
- package/dist/engine/endpoint.d.ts.map +1 -0
- package/dist/engine/endpoint.js +295 -0
- package/dist/engine/endpoint.js.map +1 -0
- package/dist/engine/framework.d.ts +28 -0
- package/dist/engine/framework.d.ts.map +1 -0
- package/dist/engine/framework.js +66 -0
- package/dist/engine/framework.js.map +1 -0
- package/dist/engine/probe.d.ts +19 -0
- package/dist/engine/probe.d.ts.map +1 -0
- package/dist/engine/probe.js +85 -0
- package/dist/engine/probe.js.map +1 -0
- package/dist/engine/research.d.ts +38 -0
- package/dist/engine/research.d.ts.map +1 -0
- package/dist/engine/research.js +414 -0
- package/dist/engine/research.js.map +1 -0
- package/dist/engine/update-check.js +1 -1
- package/dist/engine/update-check.js.map +1 -1
- package/dist/engine/yaml-runner.d.ts.map +1 -1
- package/dist/engine/yaml-runner.js +115 -6
- package/dist/engine/yaml-runner.js.map +1 -1
- package/dist/main.d.ts +1 -4
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -4
- package/dist/main.js.map +1 -1
- package/dist/manifest.json +519 -1
- package/dist/mcp/server.d.ts +19 -6
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +459 -115
- package/dist/mcp/server.js.map +1 -1
- package/dist/permissions/sensitive-paths.d.ts +92 -0
- package/dist/permissions/sensitive-paths.d.ts.map +1 -0
- package/dist/permissions/sensitive-paths.js +174 -0
- package/dist/permissions/sensitive-paths.js.map +1 -0
- package/dist/runtime/usage-ledger.d.ts +86 -0
- package/dist/runtime/usage-ledger.d.ts.map +1 -0
- package/dist/runtime/usage-ledger.js +173 -0
- package/dist/runtime/usage-ledger.js.map +1 -0
- package/package.json +8 -7
- package/src/adapters/autoagent/eval-run.yaml +36 -0
- package/src/adapters/cnn/top.yaml +21 -0
- package/src/adapters/cocoapods/search.yaml +16 -0
- package/src/adapters/crates-io/search.yaml +27 -0
- package/src/adapters/cua/bench-list.yaml +20 -0
- package/src/adapters/cua/bench-run.yaml +32 -0
- package/src/adapters/docker-hub/search.yaml +26 -0
- package/src/adapters/eastmoney/hot.yaml +23 -0
- package/src/adapters/eastmoney/search.yaml +25 -0
- package/src/adapters/exchangerate/convert.yaml +19 -0
- package/src/adapters/feishu/calendar.yaml +24 -0
- package/src/adapters/feishu/docs.yaml +17 -0
- package/src/adapters/feishu/send.yaml +29 -0
- package/src/adapters/feishu/tasks.yaml +24 -0
- package/src/adapters/gitee/search.yaml +25 -0
- package/src/adapters/gitee/trending.yaml +22 -0
- package/src/adapters/gitlab/search.yaml +24 -0
- package/src/adapters/gitlab/trending.yaml +22 -0
- package/src/adapters/godot/project-run.yaml +31 -0
- package/src/adapters/godot/scene-export.yaml +39 -0
- package/src/adapters/hermes/sessions-search.yaml +61 -0
- package/src/adapters/hermes/skills-list.yaml +30 -0
- package/src/adapters/hermes/skills-read.yaml +46 -0
- package/src/adapters/homebrew/info.yaml +15 -0
- package/src/adapters/huggingface-papers/daily.yaml +21 -0
- package/src/adapters/infoq/articles.yaml +29 -0
- package/src/adapters/ip-info/lookup.yaml +15 -0
- package/src/adapters/itch-io/popular.yaml +22 -0
- package/src/adapters/ithome/news.yaml +21 -0
- package/src/adapters/mastodon/search.yaml +29 -0
- package/src/adapters/mastodon/trending.yaml +27 -0
- package/src/adapters/meituan/search.yaml +30 -0
- package/src/adapters/minimax/chat.yaml +33 -0
- package/src/adapters/minimax/models.yaml +18 -0
- package/src/adapters/minimax/tts.yaml +33 -0
- package/src/adapters/motion-studio/component-get.yaml +35 -0
- package/src/adapters/netease-music/hot.yaml +24 -0
- package/src/adapters/netease-music/search.yaml +29 -0
- package/src/adapters/npm-trends/compare.yaml +19 -0
- package/src/adapters/nytimes/top.yaml +26 -0
- package/src/adapters/openharness/memory-read.yaml +51 -0
- package/src/adapters/openharness/skills-list.yaml +28 -0
- package/src/adapters/openrouter/models.yaml +22 -0
- package/src/adapters/pexels/search.yaml +28 -0
- package/src/adapters/pinduoduo/hot.yaml +20 -0
- package/src/adapters/pypi/info.yaml +16 -0
- package/src/adapters/qweather/now.yaml +16 -0
- package/src/adapters/renderdoc/capture-list.yaml +42 -0
- package/src/adapters/renderdoc/frame-export.yaml +32 -0
- package/src/adapters/replicate/search.yaml +25 -0
- package/src/adapters/replicate/trending.yaml +22 -0
- package/src/adapters/sspai/hot.yaml +21 -0
- package/src/adapters/sspai/latest.yaml +22 -0
- package/src/adapters/stagehand/wrap-observe.yaml +42 -0
- package/src/adapters/techcrunch/latest.yaml +22 -0
- package/src/adapters/theverge/latest.yaml +21 -0
- package/src/adapters/twitch/top.yaml +26 -0
- package/src/adapters/unsplash/search.yaml +28 -0
- package/src/adapters/ycombinator/launches.yaml +20 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test generation command — auto-generate Vitest tests from evals.
|
|
3
|
+
*
|
|
4
|
+
* Commands:
|
|
5
|
+
* unicli test generate <site> — auto-generate test from eval + current output
|
|
6
|
+
* unicli test ci --changed — test only adapters changed in current commit
|
|
7
|
+
*/
|
|
8
|
+
import chalk from "chalk";
|
|
9
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { execFileSync } from "node:child_process";
|
|
12
|
+
export function registerTestGenCommand(program) {
|
|
13
|
+
const testCmd = program
|
|
14
|
+
.command("test-gen")
|
|
15
|
+
.description("Auto-generate adapter tests");
|
|
16
|
+
testCmd
|
|
17
|
+
.command("generate <site>")
|
|
18
|
+
.description("Generate Vitest test from eval file and current output")
|
|
19
|
+
.option("--output <dir>", "output directory", "tests/adapters")
|
|
20
|
+
.action((site, opts) => {
|
|
21
|
+
// Find eval files for this site
|
|
22
|
+
const evalDirs = ["evals/smoke", "evals/regression"];
|
|
23
|
+
let evalFile;
|
|
24
|
+
for (const dir of evalDirs) {
|
|
25
|
+
const candidate = join(dir, `${site}.yaml`);
|
|
26
|
+
if (existsSync(candidate)) {
|
|
27
|
+
evalFile = candidate;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (!evalFile) {
|
|
32
|
+
console.error(chalk.yellow(`No eval file found for ${site}. Create one at evals/smoke/${site}.yaml first.`));
|
|
33
|
+
process.exitCode = 1;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const evalContent = readFileSync(evalFile, "utf-8");
|
|
37
|
+
// Extract command names from eval file
|
|
38
|
+
const cmdMatches = evalContent.match(/command:\s*unicli\s+(\S+)\s+(\S+)/g);
|
|
39
|
+
if (!cmdMatches || cmdMatches.length === 0) {
|
|
40
|
+
console.error(chalk.yellow(`No commands found in ${evalFile}`));
|
|
41
|
+
process.exitCode = 1;
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const commands = [];
|
|
45
|
+
for (const match of cmdMatches) {
|
|
46
|
+
const parts = match.match(/unicli\s+(\S+)\s+(\S+)/);
|
|
47
|
+
if (parts) {
|
|
48
|
+
commands.push({ site: parts[1], cmd: parts[2] });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Generate Vitest test file
|
|
52
|
+
mkdirSync(opts.output, { recursive: true });
|
|
53
|
+
const testPath = join(opts.output, `${site}.test.ts`);
|
|
54
|
+
const testLines = [
|
|
55
|
+
`// Auto-generated adapter test for ${site}`,
|
|
56
|
+
`// Source eval: ${evalFile}`,
|
|
57
|
+
`import { describe, it, expect } from "vitest";`,
|
|
58
|
+
`import { execFileSync } from "node:child_process";`,
|
|
59
|
+
``,
|
|
60
|
+
`describe("${site} adapters", () => {`,
|
|
61
|
+
];
|
|
62
|
+
for (const { site: s, cmd } of commands) {
|
|
63
|
+
testLines.push(` it("${cmd} returns non-empty data", () => {`);
|
|
64
|
+
testLines.push(` const result = execFileSync(`);
|
|
65
|
+
testLines.push(` "node", ["dist/main.js", "${s}", "${cmd}", "--json"],`);
|
|
66
|
+
testLines.push(` { encoding: "utf-8", timeout: 30_000 },`);
|
|
67
|
+
testLines.push(` );`);
|
|
68
|
+
testLines.push(` const data = JSON.parse(result);`);
|
|
69
|
+
testLines.push(` expect(data).toBeTruthy();`);
|
|
70
|
+
testLines.push(` if (Array.isArray(data)) {`);
|
|
71
|
+
testLines.push(` expect(data.length).toBeGreaterThan(0);`);
|
|
72
|
+
testLines.push(` }`);
|
|
73
|
+
testLines.push(` });`);
|
|
74
|
+
testLines.push(``);
|
|
75
|
+
}
|
|
76
|
+
testLines.push(`});`);
|
|
77
|
+
testLines.push(``);
|
|
78
|
+
writeFileSync(testPath, testLines.join("\n"), "utf-8");
|
|
79
|
+
console.log(chalk.green(`Generated ${testPath} (${commands.length} test cases)`));
|
|
80
|
+
});
|
|
81
|
+
testCmd
|
|
82
|
+
.command("ci")
|
|
83
|
+
.description("Test only adapters changed in current commit")
|
|
84
|
+
.option("--changed", "test changed adapters only", true)
|
|
85
|
+
.action((_opts) => {
|
|
86
|
+
// Find changed adapter files
|
|
87
|
+
let changedFiles;
|
|
88
|
+
try {
|
|
89
|
+
const diff = execFileSync("git", ["diff", "--name-only", "HEAD~1"], {
|
|
90
|
+
encoding: "utf-8",
|
|
91
|
+
});
|
|
92
|
+
changedFiles = diff.trim().split("\n").filter(Boolean);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
console.error(chalk.yellow("Cannot determine changed files"));
|
|
96
|
+
process.exitCode = 1;
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// Extract site names from changed adapter paths
|
|
100
|
+
const sites = new Set();
|
|
101
|
+
for (const file of changedFiles) {
|
|
102
|
+
const match = file.match(/src\/adapters\/([^/]+)\//);
|
|
103
|
+
if (match)
|
|
104
|
+
sites.add(match[1]);
|
|
105
|
+
}
|
|
106
|
+
if (sites.size === 0) {
|
|
107
|
+
console.log(chalk.dim("No adapter changes detected."));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
console.log(chalk.cyan(`Testing ${sites.size} changed adapter(s): ${[...sites].join(", ")}`));
|
|
111
|
+
for (const site of sites) {
|
|
112
|
+
try {
|
|
113
|
+
const result = execFileSync("sh", ["-c", `unicli eval run ${site} 2>&1`], { encoding: "utf-8", timeout: 60_000 });
|
|
114
|
+
console.log(` ${chalk.green("✓")} ${site}: ${result.trim()}`);
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
118
|
+
console.log(` ${chalk.red("✗")} ${site}: ${msg}`);
|
|
119
|
+
process.exitCode = 1;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=test-gen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-gen.js","sourceRoot":"","sources":["../../src/commands/test-gen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Usage report command — read ~/.unicli/usage.jsonl and summarize.
|
|
3
|
+
*
|
|
4
|
+
* unicli usage report # all-time top by call count
|
|
5
|
+
* unicli usage report --since 7d # last 7 days only
|
|
6
|
+
* unicli usage report --slow # only commands with p95 > 5000ms
|
|
7
|
+
* unicli usage report --failing # only commands with > 10% error rate
|
|
8
|
+
* unicli usage report --json # machine-readable
|
|
9
|
+
*
|
|
10
|
+
* Why this exists:
|
|
11
|
+
* The ledger captures every call, but agents and humans need a way to
|
|
12
|
+
* ask "what's slow" / "what's broken" without writing a custom script.
|
|
13
|
+
* This command is the canonical reader.
|
|
14
|
+
*/
|
|
15
|
+
import type { Command } from "commander";
|
|
16
|
+
export declare function registerUsageCommands(program: Command): void;
|
|
17
|
+
//# sourceMappingURL=usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsF5D"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Usage report command — read ~/.unicli/usage.jsonl and summarize.
|
|
3
|
+
*
|
|
4
|
+
* unicli usage report # all-time top by call count
|
|
5
|
+
* unicli usage report --since 7d # last 7 days only
|
|
6
|
+
* unicli usage report --slow # only commands with p95 > 5000ms
|
|
7
|
+
* unicli usage report --failing # only commands with > 10% error rate
|
|
8
|
+
* unicli usage report --json # machine-readable
|
|
9
|
+
*
|
|
10
|
+
* Why this exists:
|
|
11
|
+
* The ledger captures every call, but agents and humans need a way to
|
|
12
|
+
* ask "what's slow" / "what's broken" without writing a custom script.
|
|
13
|
+
* This command is the canonical reader.
|
|
14
|
+
*/
|
|
15
|
+
import chalk from "chalk";
|
|
16
|
+
import { loadUsage, filterSince, parseSinceArg, aggregate, DEFAULT_LEDGER_PATH, } from "../runtime/usage-ledger.js";
|
|
17
|
+
import { format, detectFormat } from "../output/formatter.js";
|
|
18
|
+
const SLOW_P95_THRESHOLD_MS = 5000;
|
|
19
|
+
const FAILING_RATE_THRESHOLD = 0.1;
|
|
20
|
+
export function registerUsageCommands(program) {
|
|
21
|
+
const usage = program
|
|
22
|
+
.command("usage")
|
|
23
|
+
.description("Report on adapter call usage from the cost ledger");
|
|
24
|
+
usage
|
|
25
|
+
.command("report")
|
|
26
|
+
.description("Aggregate ledger entries (median/p95 ms, error rate, bytes)")
|
|
27
|
+
.option("--since <window>", "Limit to recent window (e.g. 24h, 7d, 30m)")
|
|
28
|
+
.option("--slow", "Only commands with p95 > 5000ms")
|
|
29
|
+
.option("--failing", "Only commands with error rate > 10%")
|
|
30
|
+
.option("--limit <n>", "Top N rows", "20")
|
|
31
|
+
.option("--ledger <path>", "Override ledger path", DEFAULT_LEDGER_PATH)
|
|
32
|
+
.option("--json", "Output as JSON")
|
|
33
|
+
.action((opts) => {
|
|
34
|
+
const records = loadUsage(opts.ledger ?? DEFAULT_LEDGER_PATH);
|
|
35
|
+
if (records.length === 0) {
|
|
36
|
+
if (opts.json) {
|
|
37
|
+
console.log(JSON.stringify({ records: 0, rows: [] }));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(chalk.dim(`No ledger entries yet at ${opts.ledger ?? DEFAULT_LEDGER_PATH}.`));
|
|
41
|
+
console.log(chalk.dim("Run any unicli command and the ledger will start populating."));
|
|
42
|
+
}
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const windowMs = parseSinceArg(opts.since);
|
|
46
|
+
const filtered = filterSince(records, windowMs);
|
|
47
|
+
let rows = aggregate(filtered);
|
|
48
|
+
if (opts.slow) {
|
|
49
|
+
rows = rows.filter((r) => r.p95Ms > SLOW_P95_THRESHOLD_MS);
|
|
50
|
+
}
|
|
51
|
+
if (opts.failing) {
|
|
52
|
+
rows = rows.filter((r) => r.errorRate > FAILING_RATE_THRESHOLD);
|
|
53
|
+
}
|
|
54
|
+
const limit = parseInt(opts.limit ?? "20", 10) || 20;
|
|
55
|
+
rows = rows.slice(0, limit);
|
|
56
|
+
if (opts.json) {
|
|
57
|
+
console.log(JSON.stringify({
|
|
58
|
+
records: filtered.length,
|
|
59
|
+
window: opts.since ?? "all",
|
|
60
|
+
rows,
|
|
61
|
+
}, null, 2));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const fmt = detectFormat(undefined);
|
|
65
|
+
const tableRows = rows.map((r) => ({
|
|
66
|
+
site: r.site,
|
|
67
|
+
cmd: r.cmd,
|
|
68
|
+
n: r.count,
|
|
69
|
+
median: `${Math.round(r.medianMs)}ms`,
|
|
70
|
+
p95: `${Math.round(r.p95Ms)}ms`,
|
|
71
|
+
err: `${(r.errorRate * 100).toFixed(0)}%`,
|
|
72
|
+
bytes: humanBytes(r.totalBytes),
|
|
73
|
+
}));
|
|
74
|
+
console.log(format(tableRows, ["site", "cmd", "n", "median", "p95", "err", "bytes"], fmt));
|
|
75
|
+
console.log(chalk.dim(`\n${filtered.length} ledger entries · window: ${opts.since ?? "all"}`));
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function humanBytes(n) {
|
|
79
|
+
if (n < 1024)
|
|
80
|
+
return `${n}B`;
|
|
81
|
+
if (n < 1024 * 1024)
|
|
82
|
+
return `${(n / 1024).toFixed(1)}KB`;
|
|
83
|
+
if (n < 1024 * 1024 * 1024)
|
|
84
|
+
return `${(n / 1024 / 1024).toFixed(1)}MB`;
|
|
85
|
+
return `${(n / 1024 / 1024 / 1024).toFixed(2)}GB`;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,13 @@
|
|
|
10
10
|
export declare function loadAdaptersFromDir(dir: string): number;
|
|
11
11
|
/** Load all adapters: built-in YAML → user YAML → TS adapters (async) */
|
|
12
12
|
export declare function loadAllAdapters(): number;
|
|
13
|
-
/** Load TS adapters that self-register via cli() */
|
|
13
|
+
/** Load TS/JS adapters that self-register via cli() */
|
|
14
14
|
export declare function loadTsAdapters(): Promise<number>;
|
|
15
|
+
/**
|
|
16
|
+
* Exposed for diagnostics / tests: resolved built-in adapter directories.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getBuiltinDirs(): {
|
|
19
|
+
yamlDir: string;
|
|
20
|
+
tsDir: string;
|
|
21
|
+
};
|
|
15
22
|
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/discovery/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/discovery/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0HH,yCAAyC;AACzC,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgGvD;AAkDD,yEAAyE;AACzE,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED,uDAAuD;AACvD,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAkBtD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAEnE"}
|
package/dist/discovery/loader.js
CHANGED
|
@@ -12,7 +12,58 @@ import { fileURLToPath, pathToFileURL } from "node:url";
|
|
|
12
12
|
import yaml from "js-yaml";
|
|
13
13
|
import { registerAdapter } from "../registry.js";
|
|
14
14
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Directory resolution — two different concerns:
|
|
17
|
+
*
|
|
18
|
+
* 1. YAML adapters are source-only assets. They ship in `src/adapters/`
|
|
19
|
+
* per the package.json `files` field, NOT in `dist/`, because `tsc`
|
|
20
|
+
* does not copy YAML files. We therefore prefer `src/adapters/`
|
|
21
|
+
* whenever it exists, which works both in dev (running from the repo)
|
|
22
|
+
* and in a globally installed package (`node_modules/@zenalexa/unicli/src/adapters/`).
|
|
23
|
+
*
|
|
24
|
+
* 2. TS adapters need to be imported as ES modules. In dev the source
|
|
25
|
+
* lives at `src/adapters/*.ts` and is loaded via tsx. In production
|
|
26
|
+
* the compiled `.js` files live at `dist/adapters/*.js`. We pick
|
|
27
|
+
* whichever directory has the matching extension available.
|
|
28
|
+
*
|
|
29
|
+
* The `__dirname` trick: in dev, `import.meta.url` resolves inside
|
|
30
|
+
* `src/discovery/`; in prod it resolves inside `dist/discovery/`. We
|
|
31
|
+
* climb out to the package root and look for siblings.
|
|
32
|
+
*/
|
|
33
|
+
function findAdapterDirs() {
|
|
34
|
+
// Dev layout: <pkg>/src/discovery → <pkg>/src/adapters
|
|
35
|
+
// Prod layout: <pkg>/dist/discovery → <pkg>/src/adapters (for yaml)
|
|
36
|
+
// → <pkg>/dist/adapters (for js)
|
|
37
|
+
const candidates = [
|
|
38
|
+
join(__dirname, "..", "adapters"), // dev: src/adapters OR prod: dist/adapters
|
|
39
|
+
join(__dirname, "..", "..", "src", "adapters"), // prod: src/adapters sibling
|
|
40
|
+
];
|
|
41
|
+
// YAML dir: prefer whichever candidate actually contains yaml files.
|
|
42
|
+
let yamlDir = candidates[0];
|
|
43
|
+
for (const dir of candidates) {
|
|
44
|
+
if (!existsSync(dir))
|
|
45
|
+
continue;
|
|
46
|
+
const hasYaml = readdirSync(dir, { withFileTypes: true }).some((e) => {
|
|
47
|
+
if (!e.isDirectory() || e.name.startsWith("_") || e.name.startsWith("."))
|
|
48
|
+
return false;
|
|
49
|
+
try {
|
|
50
|
+
return readdirSync(join(dir, e.name)).some((f) => f.endsWith(".yaml") || f.endsWith(".yml"));
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
if (hasYaml) {
|
|
57
|
+
yamlDir = dir;
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// TS/JS dir: first candidate that exists. This is the same as dev for both
|
|
62
|
+
// paths and becomes `dist/adapters` in prod builds.
|
|
63
|
+
const tsDir = candidates.find((d) => existsSync(d)) ?? candidates[0];
|
|
64
|
+
return { yamlDir, tsDir };
|
|
65
|
+
}
|
|
66
|
+
const { yamlDir: BUILTIN_YAML_DIR, tsDir: BUILTIN_TS_DIR } = findAdapterDirs();
|
|
16
67
|
const USER_DIR = join(process.env.HOME ?? "~", ".unicli", "adapters");
|
|
17
68
|
/** Load all adapters from a directory */
|
|
18
69
|
export function loadAdaptersFromDir(dir) {
|
|
@@ -44,6 +95,9 @@ export function loadAdaptersFromDir(dir) {
|
|
|
44
95
|
}
|
|
45
96
|
continue;
|
|
46
97
|
}
|
|
98
|
+
// detect: field is stored on the adapter manifest for runtime checks,
|
|
99
|
+
// but does NOT gate registration. All adapters are always visible.
|
|
100
|
+
// Runtime exec step checks binary availability and gives clear errors.
|
|
47
101
|
if (parsed.type)
|
|
48
102
|
siteType = parsed.type;
|
|
49
103
|
if (parsed.domain)
|
|
@@ -108,11 +162,34 @@ export function loadAdaptersFromDir(dir) {
|
|
|
108
162
|
}
|
|
109
163
|
return count;
|
|
110
164
|
}
|
|
111
|
-
/**
|
|
165
|
+
/**
|
|
166
|
+
* Collect adapter entry-point files for dynamic import.
|
|
167
|
+
*
|
|
168
|
+
* In dev (src/adapters) we want `.ts` files. In prod (dist/adapters) we want
|
|
169
|
+
* `.js` files. Critically we MUST exclude `.d.ts` declaration files:
|
|
170
|
+
* `extname('foo.d.ts')` returns `.ts`, so a naive check catches them and
|
|
171
|
+
* imports them as empty ES modules — silently inflating the "loaded
|
|
172
|
+
* adapters" count while registering nothing.
|
|
173
|
+
*/
|
|
112
174
|
function collectTsFiles(dir) {
|
|
113
175
|
if (!existsSync(dir))
|
|
114
176
|
return [];
|
|
115
177
|
const files = [];
|
|
178
|
+
// Pick the entry-point extension by probing the first site directory.
|
|
179
|
+
// If we find `.js` files, we're in prod (dist/adapters); otherwise use `.ts`.
|
|
180
|
+
let entryExt = ".ts";
|
|
181
|
+
for (const probe of readdirSync(dir)) {
|
|
182
|
+
if (probe.startsWith("_") || probe.startsWith("."))
|
|
183
|
+
continue;
|
|
184
|
+
const probeDir = join(dir, probe);
|
|
185
|
+
if (!statSync(probeDir).isDirectory())
|
|
186
|
+
continue;
|
|
187
|
+
const hasJs = readdirSync(probeDir).some((f) => f.endsWith(".js") && !f.endsWith(".d.ts") && !f.endsWith(".test.js"));
|
|
188
|
+
if (hasJs) {
|
|
189
|
+
entryExt = ".js";
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
116
193
|
for (const site of readdirSync(dir)) {
|
|
117
194
|
if (site.startsWith("_") || site.startsWith("."))
|
|
118
195
|
continue;
|
|
@@ -120,7 +197,18 @@ function collectTsFiles(dir) {
|
|
|
120
197
|
if (!statSync(siteDir).isDirectory())
|
|
121
198
|
continue;
|
|
122
199
|
for (const file of readdirSync(siteDir)) {
|
|
123
|
-
|
|
200
|
+
// Always skip declaration files and sourcemaps
|
|
201
|
+
if (file.endsWith(".d.ts"))
|
|
202
|
+
continue;
|
|
203
|
+
if (file.endsWith(".d.ts.map"))
|
|
204
|
+
continue;
|
|
205
|
+
if (file.endsWith(".js.map"))
|
|
206
|
+
continue;
|
|
207
|
+
if (file.endsWith(".test.ts"))
|
|
208
|
+
continue;
|
|
209
|
+
if (file.endsWith(".test.js"))
|
|
210
|
+
continue;
|
|
211
|
+
if (extname(file) === entryExt) {
|
|
124
212
|
files.push(join(siteDir, file));
|
|
125
213
|
}
|
|
126
214
|
}
|
|
@@ -130,13 +218,16 @@ function collectTsFiles(dir) {
|
|
|
130
218
|
/** Load all adapters: built-in YAML → user YAML → TS adapters (async) */
|
|
131
219
|
export function loadAllAdapters() {
|
|
132
220
|
let total = 0;
|
|
133
|
-
total += loadAdaptersFromDir(
|
|
221
|
+
total += loadAdaptersFromDir(BUILTIN_YAML_DIR);
|
|
134
222
|
total += loadAdaptersFromDir(USER_DIR);
|
|
135
223
|
return total;
|
|
136
224
|
}
|
|
137
|
-
/** Load TS adapters that self-register via cli() */
|
|
225
|
+
/** Load TS/JS adapters that self-register via cli() */
|
|
138
226
|
export async function loadTsAdapters() {
|
|
139
|
-
const files = [
|
|
227
|
+
const files = [
|
|
228
|
+
...collectTsFiles(BUILTIN_TS_DIR),
|
|
229
|
+
...collectTsFiles(USER_DIR),
|
|
230
|
+
];
|
|
140
231
|
let count = 0;
|
|
141
232
|
for (const file of files) {
|
|
142
233
|
try {
|
|
@@ -152,4 +243,10 @@ export async function loadTsAdapters() {
|
|
|
152
243
|
}
|
|
153
244
|
return count;
|
|
154
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Exposed for diagnostics / tests: resolved built-in adapter directories.
|
|
248
|
+
*/
|
|
249
|
+
export function getBuiltinDirs() {
|
|
250
|
+
return { yamlDir: BUILTIN_YAML_DIR, tsDir: BUILTIN_TS_DIR };
|
|
251
|
+
}
|
|
155
252
|
//# sourceMappingURL=loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/discovery/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AASjD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/discovery/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability Inference — map analyzed endpoints to CLI capabilities.
|
|
3
|
+
*
|
|
4
|
+
* Determines what a site can do (search, hot, feed, detail, etc.),
|
|
5
|
+
* what columns to display, what arguments to accept, and which
|
|
6
|
+
* pipeline pattern to use for adapter generation.
|
|
7
|
+
*/
|
|
8
|
+
import type { AnalyzedEndpoint } from "./endpoint.js";
|
|
9
|
+
import type { StoreInfo } from "./framework.js";
|
|
10
|
+
export type PipelinePattern = "public-fetch" | "cookie-fetch" | "browser-evaluate" | "intercept" | "store-action";
|
|
11
|
+
export interface ArgDefinition {
|
|
12
|
+
name: string;
|
|
13
|
+
type: "string" | "int";
|
|
14
|
+
required: boolean;
|
|
15
|
+
default?: unknown;
|
|
16
|
+
positional?: boolean;
|
|
17
|
+
description?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface InferredCapability {
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
strategy: string;
|
|
23
|
+
endpoint: AnalyzedEndpoint;
|
|
24
|
+
itemPath: string | null;
|
|
25
|
+
columns: string[];
|
|
26
|
+
args: ArgDefinition[];
|
|
27
|
+
storeHint?: {
|
|
28
|
+
store: string;
|
|
29
|
+
action: string;
|
|
30
|
+
};
|
|
31
|
+
pipelinePattern: PipelinePattern;
|
|
32
|
+
}
|
|
33
|
+
export declare function normalizeGoal(goal?: string | null): string | null;
|
|
34
|
+
export declare function selectBestCapability(capabilities: InferredCapability[], goal?: string | null): InferredCapability | null;
|
|
35
|
+
export declare function inferCapabilities(endpoints: AnalyzedEndpoint[], stores: StoreInfo[], options: {
|
|
36
|
+
site: string;
|
|
37
|
+
goal?: string;
|
|
38
|
+
url: string;
|
|
39
|
+
}): InferredCapability[];
|
|
40
|
+
//# sourceMappingURL=capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/engine/capability.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,cAAc,GACd,kBAAkB,GAClB,WAAW,GACX,cAAc,CAAC;AAEnB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,eAAe,EAAE,eAAe,CAAC;CAClC;AA+BD,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAQjE;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,kBAAkB,EAAE,EAClC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GACnB,kBAAkB,GAAG,IAAI,CAkB3B;AA2CD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,gBAAgB,EAAE,EAC7B,MAAM,EAAE,SAAS,EAAE,EACnB,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACpD,kBAAkB,EAAE,CAyGtB"}
|