@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.
Files changed (155) hide show
  1. package/AGENTS.md +4 -4
  2. package/README.md +30 -17
  3. package/dist/browser/observe.d.ts +80 -0
  4. package/dist/browser/observe.d.ts.map +1 -0
  5. package/dist/browser/observe.js +144 -0
  6. package/dist/browser/observe.js.map +1 -0
  7. package/dist/browser/snapshot.d.ts.map +1 -1
  8. package/dist/browser/snapshot.js +29 -9
  9. package/dist/browser/snapshot.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +59 -2
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/agents.d.ts.map +1 -1
  14. package/dist/commands/agents.js +82 -2
  15. package/dist/commands/agents.js.map +1 -1
  16. package/dist/commands/eval.d.ts +112 -0
  17. package/dist/commands/eval.d.ts.map +1 -0
  18. package/dist/commands/eval.js +485 -0
  19. package/dist/commands/eval.js.map +1 -0
  20. package/dist/commands/generate.d.ts.map +1 -1
  21. package/dist/commands/generate.js +20 -1
  22. package/dist/commands/generate.js.map +1 -1
  23. package/dist/commands/hub.d.ts +13 -0
  24. package/dist/commands/hub.d.ts.map +1 -0
  25. package/dist/commands/hub.js +232 -0
  26. package/dist/commands/hub.js.map +1 -0
  27. package/dist/commands/mcp.d.ts +16 -0
  28. package/dist/commands/mcp.d.ts.map +1 -0
  29. package/dist/commands/mcp.js +135 -0
  30. package/dist/commands/mcp.js.map +1 -0
  31. package/dist/commands/operate.d.ts.map +1 -1
  32. package/dist/commands/operate.js +66 -1
  33. package/dist/commands/operate.js.map +1 -1
  34. package/dist/commands/research.d.ts +17 -0
  35. package/dist/commands/research.d.ts.map +1 -0
  36. package/dist/commands/research.js +257 -0
  37. package/dist/commands/research.js.map +1 -0
  38. package/dist/commands/skills.d.ts +91 -0
  39. package/dist/commands/skills.d.ts.map +1 -0
  40. package/dist/commands/skills.js +266 -0
  41. package/dist/commands/skills.js.map +1 -0
  42. package/dist/commands/test-gen.d.ts +10 -0
  43. package/dist/commands/test-gen.d.ts.map +1 -0
  44. package/dist/commands/test-gen.js +124 -0
  45. package/dist/commands/test-gen.js.map +1 -0
  46. package/dist/commands/usage.d.ts +17 -0
  47. package/dist/commands/usage.d.ts.map +1 -0
  48. package/dist/commands/usage.js +87 -0
  49. package/dist/commands/usage.js.map +1 -0
  50. package/dist/discovery/loader.d.ts +8 -1
  51. package/dist/discovery/loader.d.ts.map +1 -1
  52. package/dist/discovery/loader.js +103 -6
  53. package/dist/discovery/loader.js.map +1 -1
  54. package/dist/engine/capability.d.ts +40 -0
  55. package/dist/engine/capability.d.ts.map +1 -0
  56. package/dist/engine/capability.js +191 -0
  57. package/dist/engine/capability.js.map +1 -0
  58. package/dist/engine/endpoint.d.ts +47 -0
  59. package/dist/engine/endpoint.d.ts.map +1 -0
  60. package/dist/engine/endpoint.js +295 -0
  61. package/dist/engine/endpoint.js.map +1 -0
  62. package/dist/engine/framework.d.ts +28 -0
  63. package/dist/engine/framework.d.ts.map +1 -0
  64. package/dist/engine/framework.js +66 -0
  65. package/dist/engine/framework.js.map +1 -0
  66. package/dist/engine/probe.d.ts +19 -0
  67. package/dist/engine/probe.d.ts.map +1 -0
  68. package/dist/engine/probe.js +85 -0
  69. package/dist/engine/probe.js.map +1 -0
  70. package/dist/engine/research.d.ts +38 -0
  71. package/dist/engine/research.d.ts.map +1 -0
  72. package/dist/engine/research.js +414 -0
  73. package/dist/engine/research.js.map +1 -0
  74. package/dist/engine/update-check.js +1 -1
  75. package/dist/engine/update-check.js.map +1 -1
  76. package/dist/engine/yaml-runner.d.ts.map +1 -1
  77. package/dist/engine/yaml-runner.js +115 -6
  78. package/dist/engine/yaml-runner.js.map +1 -1
  79. package/dist/main.d.ts +1 -4
  80. package/dist/main.d.ts.map +1 -1
  81. package/dist/main.js +1 -4
  82. package/dist/main.js.map +1 -1
  83. package/dist/manifest.json +519 -1
  84. package/dist/mcp/server.d.ts +19 -6
  85. package/dist/mcp/server.d.ts.map +1 -1
  86. package/dist/mcp/server.js +459 -115
  87. package/dist/mcp/server.js.map +1 -1
  88. package/dist/permissions/sensitive-paths.d.ts +92 -0
  89. package/dist/permissions/sensitive-paths.d.ts.map +1 -0
  90. package/dist/permissions/sensitive-paths.js +174 -0
  91. package/dist/permissions/sensitive-paths.js.map +1 -0
  92. package/dist/runtime/usage-ledger.d.ts +86 -0
  93. package/dist/runtime/usage-ledger.d.ts.map +1 -0
  94. package/dist/runtime/usage-ledger.js +173 -0
  95. package/dist/runtime/usage-ledger.js.map +1 -0
  96. package/package.json +8 -7
  97. package/src/adapters/autoagent/eval-run.yaml +36 -0
  98. package/src/adapters/cnn/top.yaml +21 -0
  99. package/src/adapters/cocoapods/search.yaml +16 -0
  100. package/src/adapters/crates-io/search.yaml +27 -0
  101. package/src/adapters/cua/bench-list.yaml +20 -0
  102. package/src/adapters/cua/bench-run.yaml +32 -0
  103. package/src/adapters/docker-hub/search.yaml +26 -0
  104. package/src/adapters/eastmoney/hot.yaml +23 -0
  105. package/src/adapters/eastmoney/search.yaml +25 -0
  106. package/src/adapters/exchangerate/convert.yaml +19 -0
  107. package/src/adapters/feishu/calendar.yaml +24 -0
  108. package/src/adapters/feishu/docs.yaml +17 -0
  109. package/src/adapters/feishu/send.yaml +29 -0
  110. package/src/adapters/feishu/tasks.yaml +24 -0
  111. package/src/adapters/gitee/search.yaml +25 -0
  112. package/src/adapters/gitee/trending.yaml +22 -0
  113. package/src/adapters/gitlab/search.yaml +24 -0
  114. package/src/adapters/gitlab/trending.yaml +22 -0
  115. package/src/adapters/godot/project-run.yaml +31 -0
  116. package/src/adapters/godot/scene-export.yaml +39 -0
  117. package/src/adapters/hermes/sessions-search.yaml +61 -0
  118. package/src/adapters/hermes/skills-list.yaml +30 -0
  119. package/src/adapters/hermes/skills-read.yaml +46 -0
  120. package/src/adapters/homebrew/info.yaml +15 -0
  121. package/src/adapters/huggingface-papers/daily.yaml +21 -0
  122. package/src/adapters/infoq/articles.yaml +29 -0
  123. package/src/adapters/ip-info/lookup.yaml +15 -0
  124. package/src/adapters/itch-io/popular.yaml +22 -0
  125. package/src/adapters/ithome/news.yaml +21 -0
  126. package/src/adapters/mastodon/search.yaml +29 -0
  127. package/src/adapters/mastodon/trending.yaml +27 -0
  128. package/src/adapters/meituan/search.yaml +30 -0
  129. package/src/adapters/minimax/chat.yaml +33 -0
  130. package/src/adapters/minimax/models.yaml +18 -0
  131. package/src/adapters/minimax/tts.yaml +33 -0
  132. package/src/adapters/motion-studio/component-get.yaml +35 -0
  133. package/src/adapters/netease-music/hot.yaml +24 -0
  134. package/src/adapters/netease-music/search.yaml +29 -0
  135. package/src/adapters/npm-trends/compare.yaml +19 -0
  136. package/src/adapters/nytimes/top.yaml +26 -0
  137. package/src/adapters/openharness/memory-read.yaml +51 -0
  138. package/src/adapters/openharness/skills-list.yaml +28 -0
  139. package/src/adapters/openrouter/models.yaml +22 -0
  140. package/src/adapters/pexels/search.yaml +28 -0
  141. package/src/adapters/pinduoduo/hot.yaml +20 -0
  142. package/src/adapters/pypi/info.yaml +16 -0
  143. package/src/adapters/qweather/now.yaml +16 -0
  144. package/src/adapters/renderdoc/capture-list.yaml +42 -0
  145. package/src/adapters/renderdoc/frame-export.yaml +32 -0
  146. package/src/adapters/replicate/search.yaml +25 -0
  147. package/src/adapters/replicate/trending.yaml +22 -0
  148. package/src/adapters/sspai/hot.yaml +21 -0
  149. package/src/adapters/sspai/latest.yaml +22 -0
  150. package/src/adapters/stagehand/wrap-observe.yaml +42 -0
  151. package/src/adapters/techcrunch/latest.yaml +22 -0
  152. package/src/adapters/theverge/latest.yaml +21 -0
  153. package/src/adapters/twitch/top.yaml +26 -0
  154. package/src/adapters/unsplash/search.yaml +28 -0
  155. 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;AA6DH,yCAAyC;AACzC,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4FvD;AAmBD,yEAAyE;AACzE,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED,oDAAoD;AACpD,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAetD"}
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"}
@@ -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
- const BUILTIN_DIR = join(__dirname, "..", "adapters");
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
- /** Collect TS adapter files from a directory for dynamic import */
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
- if (extname(file) === ".ts" && !file.endsWith(".test.ts")) {
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(BUILTIN_DIR);
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 = [...collectTsFiles(BUILTIN_DIR), ...collectTsFiles(USER_DIR)];
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":"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"}
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"}