@zenalexa/unicli 0.207.1 → 0.208.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 +53 -2
- package/dist/cli.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/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/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/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 +100 -6
- package/dist/discovery/loader.js.map +1 -1
- 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 +35 -1
- 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 +117 -1
- package/dist/mcp/server.d.ts +19 -6
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +401 -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/cua/bench-list.yaml +20 -0
- package/src/adapters/cua/bench-run.yaml +32 -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/motion-studio/component-get.yaml +35 -0
- package/src/adapters/openharness/memory-read.yaml +51 -0
- package/src/adapters/openharness/skills-list.yaml +28 -0
- package/src/adapters/renderdoc/capture-list.yaml +42 -0
- package/src/adapters/renderdoc/frame-export.yaml +32 -0
- package/src/adapters/stagehand/wrap-observe.yaml +42 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills export command — generate Anthropic SKILL.md frontmatter for every adapter.
|
|
3
|
+
*
|
|
4
|
+
* unicli skills export [--out skills/]
|
|
5
|
+
* unicli skills publish [--to ~/.claude/skills/uni-cli/]
|
|
6
|
+
* unicli skills catalog [--out docs/adapters-catalog.json]
|
|
7
|
+
*
|
|
8
|
+
* Why this exists:
|
|
9
|
+
* The Anthropic SKILL.md spec is becoming the de-facto standard for agent
|
|
10
|
+
* capability discovery (Claude Code, Codex, Cursor, Cline, Windsurf all read
|
|
11
|
+
* it). CLI-Anything ships an automatic skill generator per harness — that's
|
|
12
|
+
* their #1 distribution moat. This command closes the gap by emitting one
|
|
13
|
+
* SKILL.md per adapter command from the existing YAML/TS metadata.
|
|
14
|
+
*
|
|
15
|
+
* Output shape (per adapter command):
|
|
16
|
+
* skills/<site>/<command>.md
|
|
17
|
+
* ---
|
|
18
|
+
* name: <site>-<command>
|
|
19
|
+
* description: <one-line, from adapter description>
|
|
20
|
+
* when_to_use: <heuristic from command name + columns>
|
|
21
|
+
* source: unicli@<version>
|
|
22
|
+
* command: unicli <site> <command>
|
|
23
|
+
* ---
|
|
24
|
+
* <2-paragraph body>
|
|
25
|
+
*/
|
|
26
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
27
|
+
import { join, resolve } from "node:path";
|
|
28
|
+
import { homedir } from "node:os";
|
|
29
|
+
import chalk from "chalk";
|
|
30
|
+
import { getAllAdapters } from "../registry.js";
|
|
31
|
+
import { VERSION } from "../constants.js";
|
|
32
|
+
/**
|
|
33
|
+
* Build a SKILL.md file for one adapter command.
|
|
34
|
+
*
|
|
35
|
+
* The frontmatter is intentionally narrow — Anthropic's spec asks for just
|
|
36
|
+
* `name` and `description` plus optional fields that consumers may use for
|
|
37
|
+
* filtering. The body keeps the file useful for humans browsing the directory.
|
|
38
|
+
*/
|
|
39
|
+
export function buildSkillForCommand(adapter, cmdName, cmd) {
|
|
40
|
+
const name = `${adapter.name}-${cmdName}`;
|
|
41
|
+
const description = cmd.description?.trim() ||
|
|
42
|
+
adapter.description?.trim() ||
|
|
43
|
+
`${cmdName} command for ${adapter.name}`;
|
|
44
|
+
const whenToUse = inferWhenToUse(adapter, cmdName, cmd);
|
|
45
|
+
const command = `unicli ${adapter.name} ${cmdName}`;
|
|
46
|
+
// Build a usage hint that includes positional + most useful option args.
|
|
47
|
+
const args = cmd.adapterArgs ?? [];
|
|
48
|
+
const usageBits = [`unicli ${adapter.name} ${cmdName}`];
|
|
49
|
+
for (const a of args) {
|
|
50
|
+
if (a.positional) {
|
|
51
|
+
usageBits.push(a.required ? `<${a.name}>` : `[${a.name}]`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const optionFlags = args
|
|
55
|
+
.filter((a) => !a.positional)
|
|
56
|
+
.slice(0, 4)
|
|
57
|
+
.map((a) => `[--${a.name}${a.default !== undefined ? ` ${a.default}` : ""}]`);
|
|
58
|
+
const usageLine = [...usageBits, ...optionFlags].join(" ");
|
|
59
|
+
const columnsLine = cmd.columns && cmd.columns.length > 0
|
|
60
|
+
? `Returns columns: \`${cmd.columns.join("`, `")}\`.`
|
|
61
|
+
: "Returns JSON results.";
|
|
62
|
+
const authNote = adapter.strategy && adapter.strategy !== "public"
|
|
63
|
+
? `\n\n**Auth required.** Run \`unicli auth setup ${adapter.name}\` once before invoking — the strategy is \`${adapter.strategy}\`.`
|
|
64
|
+
: "";
|
|
65
|
+
const body = `## What it does
|
|
66
|
+
|
|
67
|
+
${description}. ${columnsLine}${authNote}
|
|
68
|
+
|
|
69
|
+
## How to call it
|
|
70
|
+
|
|
71
|
+
\`\`\`bash
|
|
72
|
+
${usageLine}
|
|
73
|
+
\`\`\`
|
|
74
|
+
|
|
75
|
+
Add \`--format json\` for piped output (auto-detected when stdout is not a TTY) and \`--limit N\` to cap result count. All Uni-CLI commands return structured JSON errors on stderr with the failing pipeline step and a repair suggestion.
|
|
76
|
+
`;
|
|
77
|
+
return {
|
|
78
|
+
name,
|
|
79
|
+
description,
|
|
80
|
+
whenToUse,
|
|
81
|
+
command,
|
|
82
|
+
source: `unicli@${VERSION}`,
|
|
83
|
+
body,
|
|
84
|
+
relativePath: `${adapter.name}/${cmdName}.md`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Infer a "when to use" hint from the command name + adapter category.
|
|
89
|
+
*
|
|
90
|
+
* Pure heuristic — designed to be helpful without making things up. The
|
|
91
|
+
* patterns reflect the most common command-name verbs across the adapter
|
|
92
|
+
* catalog (search, top, list, get, download, post, ...).
|
|
93
|
+
*/
|
|
94
|
+
function inferWhenToUse(adapter, cmdName, cmd) {
|
|
95
|
+
const verb = cmdName.toLowerCase();
|
|
96
|
+
const site = adapter.displayName ?? adapter.name;
|
|
97
|
+
if (verb === "top" ||
|
|
98
|
+
verb === "trending" ||
|
|
99
|
+
verb === "hot" ||
|
|
100
|
+
verb === "rank")
|
|
101
|
+
return `When you need the current ${verb} items from ${site}.`;
|
|
102
|
+
if (verb === "search" || verb.startsWith("search"))
|
|
103
|
+
return `When you need to search ${site} for a specific query.`;
|
|
104
|
+
if (verb === "list" || verb.startsWith("list"))
|
|
105
|
+
return `When you need to list items from ${site}.`;
|
|
106
|
+
if (verb === "get" ||
|
|
107
|
+
verb.startsWith("get") ||
|
|
108
|
+
verb === "info" ||
|
|
109
|
+
verb === "detail")
|
|
110
|
+
return `When you need details about a specific item on ${site}.`;
|
|
111
|
+
if (verb === "download" || verb.startsWith("download"))
|
|
112
|
+
return `When you need to download media or files from ${site}.`;
|
|
113
|
+
if (verb === "post" || verb === "send" || verb === "create")
|
|
114
|
+
return `When you need to post content to ${site}.`;
|
|
115
|
+
if (verb === "comments" || verb === "replies")
|
|
116
|
+
return `When you need to read comments/replies from ${site}.`;
|
|
117
|
+
if (verb === "user" || verb === "profile")
|
|
118
|
+
return `When you need user/profile info from ${site}.`;
|
|
119
|
+
// Fall back to the description if it exists, otherwise generic.
|
|
120
|
+
if (cmd.description)
|
|
121
|
+
return cmd.description.trim();
|
|
122
|
+
return `When you need the ${cmdName} capability from ${site}.`;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Render a SkillFile to its on-disk markdown form (frontmatter + body).
|
|
126
|
+
*/
|
|
127
|
+
export function renderSkillMarkdown(skill) {
|
|
128
|
+
const fm = [
|
|
129
|
+
"---",
|
|
130
|
+
`name: ${skill.name}`,
|
|
131
|
+
`description: ${escapeYamlValue(skill.description)}`,
|
|
132
|
+
`when_to_use: ${escapeYamlValue(skill.whenToUse)}`,
|
|
133
|
+
`command: ${skill.command}`,
|
|
134
|
+
`source: ${skill.source}`,
|
|
135
|
+
"---",
|
|
136
|
+
"",
|
|
137
|
+
].join("\n");
|
|
138
|
+
return fm + skill.body;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Quote any YAML scalar that contains characters needing escaping. Keeps the
|
|
142
|
+
* frontmatter parser-friendly without depending on a yaml library at write
|
|
143
|
+
* time (read time uses js-yaml; write time keeps the surface area small).
|
|
144
|
+
*/
|
|
145
|
+
function escapeYamlValue(v) {
|
|
146
|
+
// Single line — strip newlines defensively
|
|
147
|
+
const oneLine = v.replace(/\r?\n/g, " ").trim();
|
|
148
|
+
if (/[:#&*!|>'"%@`,\[\]{}]/.test(oneLine) || /^\s|\s$/.test(oneLine)) {
|
|
149
|
+
return `"${oneLine.replace(/"/g, '\\"')}"`;
|
|
150
|
+
}
|
|
151
|
+
return oneLine;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Walk every loaded adapter and emit a SKILL.md per command into `outDir`.
|
|
155
|
+
* Returns the count of files written.
|
|
156
|
+
*/
|
|
157
|
+
export function exportSkills(outDir) {
|
|
158
|
+
const adapters = getAllAdapters();
|
|
159
|
+
let written = 0;
|
|
160
|
+
for (const adapter of adapters) {
|
|
161
|
+
for (const [cmdName, cmd] of Object.entries(adapter.commands)) {
|
|
162
|
+
const skill = buildSkillForCommand(adapter, cmdName, cmd);
|
|
163
|
+
const dest = join(outDir, skill.relativePath);
|
|
164
|
+
mkdirSync(join(outDir, adapter.name), { recursive: true });
|
|
165
|
+
writeFileSync(dest, renderSkillMarkdown(skill), "utf-8");
|
|
166
|
+
written++;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return written;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Build the catalog object — the single-source-of-truth machine-readable view
|
|
173
|
+
* of every adapter command. Embeds the same fields agents need to decide which
|
|
174
|
+
* command to call: name, description, when_to_use, columns, args, auth state.
|
|
175
|
+
*/
|
|
176
|
+
export function buildCatalog() {
|
|
177
|
+
const adapters = getAllAdapters();
|
|
178
|
+
let totalCommands = 0;
|
|
179
|
+
const adapterRows = adapters.map((adapter) => {
|
|
180
|
+
const commands = Object.entries(adapter.commands).map(([cmdName, cmd]) => {
|
|
181
|
+
totalCommands++;
|
|
182
|
+
const skill = buildSkillForCommand(adapter, cmdName, cmd);
|
|
183
|
+
return {
|
|
184
|
+
name: cmdName,
|
|
185
|
+
description: skill.description,
|
|
186
|
+
when_to_use: skill.whenToUse,
|
|
187
|
+
command: skill.command,
|
|
188
|
+
columns: cmd.columns,
|
|
189
|
+
args: cmd.adapterArgs?.map((a) => ({
|
|
190
|
+
name: a.name,
|
|
191
|
+
type: a.type,
|
|
192
|
+
required: a.required ?? false,
|
|
193
|
+
positional: a.positional ?? false,
|
|
194
|
+
description: a.description,
|
|
195
|
+
})),
|
|
196
|
+
};
|
|
197
|
+
});
|
|
198
|
+
return {
|
|
199
|
+
site: adapter.name,
|
|
200
|
+
type: adapter.type,
|
|
201
|
+
description: adapter.description,
|
|
202
|
+
domain: adapter.domain,
|
|
203
|
+
auth: adapter.strategy !== undefined && adapter.strategy !== "public",
|
|
204
|
+
strategy: adapter.strategy,
|
|
205
|
+
commands,
|
|
206
|
+
};
|
|
207
|
+
});
|
|
208
|
+
return {
|
|
209
|
+
source: `unicli@${VERSION}`,
|
|
210
|
+
generated: new Date().toISOString(),
|
|
211
|
+
total_sites: adapterRows.length,
|
|
212
|
+
total_commands: totalCommands,
|
|
213
|
+
adapters: adapterRows,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
export function registerSkillsCommand(program) {
|
|
217
|
+
const skills = program
|
|
218
|
+
.command("skills")
|
|
219
|
+
.description("Export adapter capabilities as Anthropic SKILL.md files");
|
|
220
|
+
skills
|
|
221
|
+
.command("export")
|
|
222
|
+
.description("Generate one SKILL.md per adapter command into an output directory")
|
|
223
|
+
.option("--out <dir>", "Output directory", "skills")
|
|
224
|
+
.option("--json", "Print summary as JSON")
|
|
225
|
+
.action((opts) => {
|
|
226
|
+
const outDir = resolve(opts.out ?? "skills");
|
|
227
|
+
mkdirSync(outDir, { recursive: true });
|
|
228
|
+
const written = exportSkills(outDir);
|
|
229
|
+
if (opts.json) {
|
|
230
|
+
console.log(JSON.stringify({ written, out: outDir }, null, 2));
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
console.log(chalk.green(`✓ wrote ${written} SKILL.md files to ${outDir}`));
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
skills
|
|
237
|
+
.command("publish")
|
|
238
|
+
.description("Publish generated SKILL.md files into a Claude skills directory")
|
|
239
|
+
.option("--to <dir>", "Target directory (default: ~/.claude/skills/uni-cli/)")
|
|
240
|
+
.option("--json", "Print summary as JSON")
|
|
241
|
+
.action((opts) => {
|
|
242
|
+
const target = opts.to ?? join(homedir(), ".claude", "skills", "uni-cli");
|
|
243
|
+
const resolved = resolve(target.replace(/^~(?=$|\/)/, homedir()));
|
|
244
|
+
mkdirSync(resolved, { recursive: true });
|
|
245
|
+
const written = exportSkills(resolved);
|
|
246
|
+
if (opts.json) {
|
|
247
|
+
console.log(JSON.stringify({ written, to: resolved }, null, 2));
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
console.log(chalk.green(`✓ published ${written} SKILL.md files to ${resolved}`));
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
skills
|
|
254
|
+
.command("catalog")
|
|
255
|
+
.description("Build a JSON catalog of every adapter command")
|
|
256
|
+
.option("--out <file>", "Output file", "docs/adapters-catalog.json")
|
|
257
|
+
.action((opts) => {
|
|
258
|
+
const out = resolve(opts.out ?? "docs/adapters-catalog.json");
|
|
259
|
+
const dirOf = out.replace(/\/[^/]+$/, "");
|
|
260
|
+
mkdirSync(dirOf, { recursive: true });
|
|
261
|
+
const catalog = buildCatalog();
|
|
262
|
+
writeFileSync(out, JSON.stringify(catalog, null, 2), "utf-8");
|
|
263
|
+
console.log(chalk.green(`✓ wrote catalog (${catalog.total_sites} sites, ${catalog.total_commands} commands) to ${out}`));
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AA6B1C;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAwB,EACxB,OAAe,EACf,GAAmB;IAEnB,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;IAC1C,MAAM,WAAW,GACf,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE;QACvB,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE;QAC3B,GAAG,OAAO,gBAAgB,OAAO,CAAC,IAAI,EAAE,CAAC;IAE3C,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,UAAU,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;IAEpD,yEAAyE;IACzE,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IACnC,MAAM,SAAS,GAAa,CAAC,UAAU,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;IAClE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACjB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAG,IAAI;SACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;SAC5B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CACxE,CAAC;IACJ,MAAM,SAAS,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE3D,MAAM,WAAW,GACf,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QACnC,CAAC,CAAC,sBAAsB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;QACrD,CAAC,CAAC,uBAAuB,CAAC;IAE9B,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC/C,CAAC,CAAC,kDAAkD,OAAO,CAAC,IAAI,+CAA+C,OAAO,CAAC,QAAQ,KAAK;QACpI,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,IAAI,GAAG;;EAEb,WAAW,KAAK,WAAW,GAAG,QAAQ;;;;;EAKtC,SAAS;;;;CAIV,CAAC;IAEA,OAAO;QACL,IAAI;QACJ,WAAW;QACX,SAAS;QACT,OAAO;QACP,MAAM,EAAE,UAAU,OAAO,EAAE;QAC3B,IAAI;QACJ,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,KAAK;KAC9C,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CACrB,OAAwB,EACxB,OAAe,EACf,GAAmB;IAEnB,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAEjD,IACE,IAAI,KAAK,KAAK;QACd,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,KAAK;QACd,IAAI,KAAK,MAAM;QAEf,OAAO,6BAA6B,IAAI,eAAe,IAAI,GAAG,CAAC;IACjE,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAChD,OAAO,2BAA2B,IAAI,wBAAwB,CAAC;IACjE,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAC5C,OAAO,oCAAoC,IAAI,GAAG,CAAC;IACrD,IACE,IAAI,KAAK,KAAK;QACd,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACtB,IAAI,KAAK,MAAM;QACf,IAAI,KAAK,QAAQ;QAEjB,OAAO,kDAAkD,IAAI,GAAG,CAAC;IACnE,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QACpD,OAAO,iDAAiD,IAAI,GAAG,CAAC;IAClE,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ;QACzD,OAAO,oCAAoC,IAAI,GAAG,CAAC;IACrD,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,SAAS;QAC3C,OAAO,+CAA+C,IAAI,GAAG,CAAC;IAChE,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,SAAS;QACvC,OAAO,wCAAwC,IAAI,GAAG,CAAC;IAEzD,gEAAgE;IAChE,IAAI,GAAG,CAAC,WAAW;QAAE,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACnD,OAAO,qBAAqB,OAAO,oBAAoB,IAAI,GAAG,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAgB;IAClD,MAAM,EAAE,GAAG;QACT,KAAK;QACL,SAAS,KAAK,CAAC,IAAI,EAAE;QACrB,gBAAgB,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;QACpD,gBAAgB,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QAClD,YAAY,KAAK,CAAC,OAAO,EAAE;QAC3B,WAAW,KAAK,CAAC,MAAM,EAAE;QACzB,KAAK;QACL,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,CAAS;IAChC,2CAA2C;IAC3C,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACrE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IAC7C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YAC9C,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,aAAa,CAAC,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;YACzD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IA4B1B,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE;YACvE,aAAa,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAC1D,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,WAAW,EAAE,KAAK,CAAC,SAAS;gBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACjC,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,KAAK;oBAC7B,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,KAAK;oBACjC,WAAW,EAAE,CAAC,CAAC,WAAW;iBAC3B,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;YACrE,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ;SACT,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,UAAU,OAAO,EAAE;QAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,WAAW,EAAE,WAAW,CAAC,MAAM;QAC/B,cAAc,EAAE,aAAa;QAC7B,QAAQ,EAAE,WAAW;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,yDAAyD,CAAC,CAAC;IAE1E,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CACV,oEAAoE,CACrE;SACA,MAAM,CAAC,aAAa,EAAE,kBAAkB,EAAE,QAAQ,CAAC;SACnD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,CAAC,IAAmB,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC;QAC7C,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,WAAW,OAAO,sBAAsB,MAAM,EAAE,CAAC,CAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CACV,iEAAiE,CAClE;SACA,MAAM,CACL,YAAY,EACZ,uDAAuD,CACxD;SACA,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,CAAC,IAAoB,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAClE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,eAAe,OAAO,sBAAsB,QAAQ,EAAE,CAAC,CACpE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,cAAc,EAAE,aAAa,EAAE,4BAA4B,CAAC;SACnE,MAAM,CAAC,CAAC,IAAoB,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,4BAA4B,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC1C,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,oBAAoB,OAAO,CAAC,WAAW,WAAW,OAAO,CAAC,cAAc,iBAAiB,GAAG,EAAE,CAC/F,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -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":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,SAAS,EAET,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAY9D,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,mDAAmD,CAAC,CAAC;IAEpE,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,kBAAkB,EAAE,4CAA4C,CAAC;SACxE,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACnD,MAAM,CAAC,WAAW,EAAE,qCAAqC,CAAC;SAC1D,MAAM,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC;SACzC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,mBAAmB,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,CAAC,IAAmB,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,mBAAmB,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,4BAA4B,IAAI,CAAC,MAAM,IAAI,mBAAmB,GAAG,CAClE,CACF,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,8DAA8D,CAC/D,CACF,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE/B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,qBAAqB,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,sBAAsB,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAE5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;gBACE,OAAO,EAAE,QAAQ,CAAC,MAAM;gBACxB,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK;gBAC3B,IAAI;aACL,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAiB,YAAY,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC;YACjD,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,CAAC,EAAE,CAAC,CAAC,KAAK;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;YACrC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;YAC/B,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACzC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;SAChC,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,GAAG,CACT,MAAM,CACJ,SAAS,EACT,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EACrD,GAAG,CACJ,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,KAAK,QAAQ,CAAC,MAAM,6BAA6B,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,CACvE,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,IAAI,CAAC,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC;IAC7B,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC"}
|
|
@@ -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;AAqHH,yCAAyC;AACzC,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4FvD;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) {
|
|
@@ -108,11 +159,34 @@ export function loadAdaptersFromDir(dir) {
|
|
|
108
159
|
}
|
|
109
160
|
return count;
|
|
110
161
|
}
|
|
111
|
-
/**
|
|
162
|
+
/**
|
|
163
|
+
* Collect adapter entry-point files for dynamic import.
|
|
164
|
+
*
|
|
165
|
+
* In dev (src/adapters) we want `.ts` files. In prod (dist/adapters) we want
|
|
166
|
+
* `.js` files. Critically we MUST exclude `.d.ts` declaration files:
|
|
167
|
+
* `extname('foo.d.ts')` returns `.ts`, so a naive check catches them and
|
|
168
|
+
* imports them as empty ES modules — silently inflating the "loaded
|
|
169
|
+
* adapters" count while registering nothing.
|
|
170
|
+
*/
|
|
112
171
|
function collectTsFiles(dir) {
|
|
113
172
|
if (!existsSync(dir))
|
|
114
173
|
return [];
|
|
115
174
|
const files = [];
|
|
175
|
+
// Pick the entry-point extension by probing the first site directory.
|
|
176
|
+
// If we find `.js` files, we're in prod (dist/adapters); otherwise use `.ts`.
|
|
177
|
+
let entryExt = ".ts";
|
|
178
|
+
for (const probe of readdirSync(dir)) {
|
|
179
|
+
if (probe.startsWith("_") || probe.startsWith("."))
|
|
180
|
+
continue;
|
|
181
|
+
const probeDir = join(dir, probe);
|
|
182
|
+
if (!statSync(probeDir).isDirectory())
|
|
183
|
+
continue;
|
|
184
|
+
const hasJs = readdirSync(probeDir).some((f) => f.endsWith(".js") && !f.endsWith(".d.ts") && !f.endsWith(".test.js"));
|
|
185
|
+
if (hasJs) {
|
|
186
|
+
entryExt = ".js";
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
116
190
|
for (const site of readdirSync(dir)) {
|
|
117
191
|
if (site.startsWith("_") || site.startsWith("."))
|
|
118
192
|
continue;
|
|
@@ -120,7 +194,18 @@ function collectTsFiles(dir) {
|
|
|
120
194
|
if (!statSync(siteDir).isDirectory())
|
|
121
195
|
continue;
|
|
122
196
|
for (const file of readdirSync(siteDir)) {
|
|
123
|
-
|
|
197
|
+
// Always skip declaration files and sourcemaps
|
|
198
|
+
if (file.endsWith(".d.ts"))
|
|
199
|
+
continue;
|
|
200
|
+
if (file.endsWith(".d.ts.map"))
|
|
201
|
+
continue;
|
|
202
|
+
if (file.endsWith(".js.map"))
|
|
203
|
+
continue;
|
|
204
|
+
if (file.endsWith(".test.ts"))
|
|
205
|
+
continue;
|
|
206
|
+
if (file.endsWith(".test.js"))
|
|
207
|
+
continue;
|
|
208
|
+
if (extname(file) === entryExt) {
|
|
124
209
|
files.push(join(siteDir, file));
|
|
125
210
|
}
|
|
126
211
|
}
|
|
@@ -130,13 +215,16 @@ function collectTsFiles(dir) {
|
|
|
130
215
|
/** Load all adapters: built-in YAML → user YAML → TS adapters (async) */
|
|
131
216
|
export function loadAllAdapters() {
|
|
132
217
|
let total = 0;
|
|
133
|
-
total += loadAdaptersFromDir(
|
|
218
|
+
total += loadAdaptersFromDir(BUILTIN_YAML_DIR);
|
|
134
219
|
total += loadAdaptersFromDir(USER_DIR);
|
|
135
220
|
return total;
|
|
136
221
|
}
|
|
137
|
-
/** Load TS adapters that self-register via cli() */
|
|
222
|
+
/** Load TS/JS adapters that self-register via cli() */
|
|
138
223
|
export async function loadTsAdapters() {
|
|
139
|
-
const files = [
|
|
224
|
+
const files = [
|
|
225
|
+
...collectTsFiles(BUILTIN_TS_DIR),
|
|
226
|
+
...collectTsFiles(USER_DIR),
|
|
227
|
+
];
|
|
140
228
|
let count = 0;
|
|
141
229
|
for (const file of files) {
|
|
142
230
|
try {
|
|
@@ -152,4 +240,10 @@ export async function loadTsAdapters() {
|
|
|
152
240
|
}
|
|
153
241
|
return count;
|
|
154
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Exposed for diagnostics / tests: resolved built-in adapter directories.
|
|
245
|
+
*/
|
|
246
|
+
export function getBuiltinDirs() {
|
|
247
|
+
return { yamlDir: BUILTIN_YAML_DIR, tsDir: BUILTIN_TS_DIR };
|
|
248
|
+
}
|
|
155
249
|
//# 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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"}
|
|
@@ -78,7 +78,7 @@ function registerExitMessage(latest) {
|
|
|
78
78
|
_registered = true;
|
|
79
79
|
process.on("exit", (code) => {
|
|
80
80
|
if (code === 0) {
|
|
81
|
-
process.stderr.write(`\n${chalk.yellow(`Update available: ${VERSION} → ${latest}`)} — run ${chalk.cyan("npm i -g unicli")} to upgrade\n`);
|
|
81
|
+
process.stderr.write(`\n${chalk.yellow(`Update available: ${VERSION} → ${latest}`)} — run ${chalk.cyan("npm i -g @zenalexa/unicli")} to upgrade\n`);
|
|
82
82
|
}
|
|
83
83
|
});
|
|
84
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/engine/update-check.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/engine/update-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-runner.d.ts","sourceRoot":"","sources":["../../src/engine/yaml-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAYH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"yaml-runner.d.ts","sourceRoot":"","sources":["../../src/engine/yaml-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAYH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAmBtD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,KAAK;aAGpB,MAAM,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EACL,YAAY,GACZ,eAAe,GACf,cAAc,GACd,aAAa,GACb,SAAS,GACT,kBAAkB,GAClB,kBAAkB,CAAC;QACvB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;KACpB;gBAjBD,OAAO,EAAE,MAAM,EACC,MAAM,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EACL,YAAY,GACZ,eAAe,GACf,cAAc,GACd,aAAa,GACb,SAAS,GACT,kBAAkB,GAClB,kBAAkB,CAAC;QACvB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;KACpB;IAMH,4EAA4E;IAC5E,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM;cAtBtB,MAAM;gBACJ,MAAM;gBACN,OAAO;mBAEX,YAAY,GACZ,eAAe,GACf,cAAc,GACd,aAAa,GACb,SAAS,GACT,kBAAkB,GAClB,kBAAkB;cAChB,MAAM;qBACC,MAAM;0BACD,MAAM;oBACZ,MAAM;;;;CAevB;AAmID,wBAAsB,WAAW,CAC/B,KAAK,EAAE,YAAY,EAAE,EACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,OAAO,EAAE,CAAC,CAqPpB;AA6rBD,iBAAS,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBjE;AAwOD;;;;;GAKG;AACH,QAAA,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAyFjE,CAAC;AA0GF;;;;;;;GAOG;AACH,iBAAS,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CA6D7E;AAqwBD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC"}
|