@h-ear/openclaw 1.0.17 → 1.1.5-dev.202604290216

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 (42) hide show
  1. package/SKILL.md +26 -10
  2. package/dist/cli.d.ts +10 -12
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +245 -110
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/classify-batch.d.ts +2 -0
  7. package/dist/commands/classify-batch.d.ts.map +1 -1
  8. package/dist/commands/classify-batch.js +4 -0
  9. package/dist/commands/classify-batch.js.map +1 -1
  10. package/dist/commands/classify.d.ts +17 -5
  11. package/dist/commands/classify.d.ts.map +1 -1
  12. package/dist/commands/classify.js +93 -3
  13. package/dist/commands/classify.js.map +1 -1
  14. package/dist/commands/job-events.d.ts +6 -0
  15. package/dist/commands/job-events.d.ts.map +1 -1
  16. package/dist/commands/job-events.js +6 -0
  17. package/dist/commands/job-events.js.map +1 -1
  18. package/dist/commands/job-report.d.ts +3 -0
  19. package/dist/commands/job-report.d.ts.map +1 -0
  20. package/dist/commands/job-report.js +6 -0
  21. package/dist/commands/job-report.js.map +1 -0
  22. package/dist/commands/sounds.d.ts +1 -0
  23. package/dist/commands/sounds.d.ts.map +1 -1
  24. package/dist/commands/sounds.js +1 -0
  25. package/dist/commands/sounds.js.map +1 -1
  26. package/dist/commands/webhooks.d.ts +3 -1
  27. package/dist/commands/webhooks.d.ts.map +1 -1
  28. package/dist/commands/webhooks.js +9 -1
  29. package/dist/commands/webhooks.js.map +1 -1
  30. package/dist/formatter.d.ts +4 -1
  31. package/dist/formatter.d.ts.map +1 -1
  32. package/dist/formatter.js +35 -11
  33. package/dist/formatter.js.map +1 -1
  34. package/dist/index.d.ts +7 -3
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +9 -4
  37. package/dist/index.js.map +1 -1
  38. package/dist/manifest.d.ts +67 -0
  39. package/dist/manifest.d.ts.map +1 -0
  40. package/dist/manifest.js +331 -0
  41. package/dist/manifest.js.map +1 -0
  42. package/package.json +1 -1
package/SKILL.md CHANGED
@@ -1,29 +1,45 @@
1
1
  ---
2
2
  name: h-ear
3
3
  description: "H-ear.world transforms sound into an actionable, meaningful translation layer of the world around you. Describe, share and act upon environmental audio as a machine sensor that empowers you, your business and your AI flow."
4
- version: 0.1.0
4
+ version: 1.1.5
5
5
  author: H-ear World
6
6
  homepage: https://h-ear.world
7
7
  metadata: {"openclaw": {"requires": {"env": ["HEAR_API_KEY", "HEAR_ENV"], "bins": []}, "primaryEnv": "HEAR_API_KEY"}}
8
8
  ---
9
9
 
10
+ <!-- Version: keep in sync with package.json. Runtime code reads from package.json
11
+ via createRequire — this header is the static manifest the OpenClaw gateway
12
+ parses at install/registration time. Bump both together. -->
13
+
10
14
  # H-ear — Sound Intelligence for AI Agents
11
15
 
12
16
  H-ear.world transforms sound into an actionable, meaningful translation layer of the world around you. Describe, share and act upon environmental audio as a machine sensor that empowers you, your business and your AI flow.
13
17
 
14
18
  ## Commands
15
19
 
20
+ <!-- @doc-sync-ref gen:#openclaw-commands -->
16
21
  | Command | Description |
17
22
  |---------|-------------|
18
- | `classify <url>` | Classify audio from a URL. Returns detected sound classes with confidence scores. |
19
- | `classify batch <url1> <url2>...` | Batch classify multiple audio URLs. Results delivered asynchronously via the gateway's webhook endpoint. |
20
- | `sounds [search]` | List supported sound classes (521+ across 3 taxonomies). |
21
- | `usage` | Show API usage statistics (minutes, calls, quota). |
22
- | `jobs [last N]` | List recent classification jobs with status. |
23
- | `job <id>` | Show detailed job results with classifications. |
24
- | `alerts on <sound>` | Enable real-time alerts for a sound class. Notifications delivered to your connected channel via the gateway. |
25
- | `alerts off <sound>` | Disable alerts for a sound class. |
26
- | `health` | Check API status. |
23
+ | `h-ear health` | Check H-ear API health and liveness (no auth required). |
24
+ | `h-ear usage` | Show API usage statistics (minutes, calls, quota). |
25
+ | `h-ear sounds <search>` | List supported sound classes (521+ across 3 taxonomies). |
26
+ | `h-ear jobs` | List recent classification jobs (paginated). |
27
+ | `h-ear job <jobId>` | Get detail for one job: status, fileName, eventCount, timestamps. |
28
+ | `h-ear job events <jobId>` | Get noise events for a completed job (timeline order, filterable). |
29
+ | `h-ear job audio <jobId>` | Get a 1-hour SAS URL to stream the source audio of a job. |
30
+ | `h-ear job waveform <jobId>` | Get pre-computed peaks.js waveform + audio URL. |
31
+ | `h-ear job report <jobId>` | Get a 7-day SAS URL to download the Excel analysis report. |
32
+ | `h-ear classify <fileOrUrl>` | Classify audio (URL or local file). Polls until complete. |
33
+ | `h-ear webhook list` | List enterprise webhook registrations. |
34
+ | `h-ear webhook get <webhookId>` | Show one webhook (URL, events, filter config, delivery stats). |
35
+ | `h-ear webhook create <url>` | Create an enterprise webhook (returns signing secret ONCE). |
36
+ | `h-ear webhook update <webhookId>` | Update webhook URL, status (active/paused), or filters. |
37
+ | `h-ear webhook delete <webhookId>` | Permanently delete a webhook (cannot be undone). |
38
+ | `h-ear webhook ping <webhookId>` | Send a test ping to a webhook (verify connectivity + signing). |
39
+ | `h-ear webhook deliveries <webhookId>` | Audit trail: recent delivery attempts for a webhook. |
40
+ <!-- @end-doc-ref -->
41
+
42
+ For per-command help with all flags and examples, run `h-ear <command> --help`. For machine-readable schemas (LLM-friendly introspection): `h-ear --list-tools --json`.
27
43
 
28
44
  ## Setup
29
45
 
package/dist/cli.d.ts CHANGED
@@ -1,19 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * h-ear CLI — OpenClaw-friendly command-line interface for H-ear audio classification.
3
+ * h-ear CLI — manifest-driven dispatcher for the H-ear OpenClaw skill.
4
4
  *
5
- * Usage:
6
- * h-ear health Check API status
7
- * h-ear sounds [search] List sound classes
8
- * h-ear usage Show API usage
9
- * h-ear classify <file-or-url> Classify audio (sync, polls for results)
10
- * h-ear capture [--duration 15] Capture audio from RTSP camera and classify
11
- * h-ear jobs [--limit 5] List recent jobs
5
+ * The command surface (commands, flags, positionals, descriptions, examples)
6
+ * is declared exactly once in [manifest.ts]. This file only:
7
+ * 1. Parses argv into { positionals, flags, bools }
8
+ * 2. Resolves the manifest entry for the user's path
9
+ * 3. Calls its handler, prints the formatted result
10
+ * 4. Emits help (top-level, per-subcommand) and `--list-tools --json` from
11
+ * the same manifest
12
12
  *
13
- * Environment:
14
- * HEAR_API_KEY API key (required)
15
- * HEAR_ENV Environment: dev, staging, prod (default: prod)
16
- * LISTEN_RTSP_URL RTSP source URL (for capture command)
13
+ * If a flag is missing or wrong, the LLM (or human) sees a "did you mean"
14
+ * pointer at the next-likely subcommand instead of a stack trace.
17
15
  */
18
16
  export {};
19
17
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}
package/dist/cli.js CHANGED
@@ -1,42 +1,158 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * h-ear CLI — OpenClaw-friendly command-line interface for H-ear audio classification.
3
+ * h-ear CLI — manifest-driven dispatcher for the H-ear OpenClaw skill.
4
4
  *
5
- * Usage:
6
- * h-ear health Check API status
7
- * h-ear sounds [search] List sound classes
8
- * h-ear usage Show API usage
9
- * h-ear classify <file-or-url> Classify audio (sync, polls for results)
10
- * h-ear capture [--duration 15] Capture audio from RTSP camera and classify
11
- * h-ear jobs [--limit 5] List recent jobs
5
+ * The command surface (commands, flags, positionals, descriptions, examples)
6
+ * is declared exactly once in [manifest.ts]. This file only:
7
+ * 1. Parses argv into { positionals, flags, bools }
8
+ * 2. Resolves the manifest entry for the user's path
9
+ * 3. Calls its handler, prints the formatted result
10
+ * 4. Emits help (top-level, per-subcommand) and `--list-tools --json` from
11
+ * the same manifest
12
12
  *
13
- * Environment:
14
- * HEAR_API_KEY API key (required)
15
- * HEAR_ENV Environment: dev, staging, prod (default: prod)
16
- * LISTEN_RTSP_URL RTSP source URL (for capture command)
13
+ * If a flag is missing or wrong, the LLM (or human) sees a "did you mean"
14
+ * pointer at the next-likely subcommand instead of a stack trace.
17
15
  */
18
- import { readFileSync, unlinkSync, existsSync, mkdirSync } from 'fs';
16
+ import { readFileSync, unlinkSync, existsSync, mkdirSync, writeFileSync } from 'fs';
19
17
  import { spawnSync } from 'child_process';
20
18
  import { join } from 'path';
21
19
  import { tmpdir } from 'os';
20
+ import { toolDescriptions, toolShapes } from '@h-ear/core';
22
21
  import { createSkill } from './index.js';
23
- import { healthCommand } from './commands/health.js';
24
- import { soundsCommand } from './commands/sounds.js';
25
- import { usageCommand } from './commands/usage.js';
26
- import { classifySyncCommand } from './commands/classify.js';
27
- import { jobsCommand } from './commands/jobs.js';
28
- import { formatClassifyResult } from './formatter.js';
29
- // --- Arg parsing -------------------------------------------------------------
30
- const args = process.argv.slice(2);
31
- const command = args[0] ?? 'help';
32
- function getFlag(flag) {
33
- const idx = args.indexOf(flag);
34
- return idx >= 0 && args[idx + 1] ? args[idx + 1] : null;
22
+ import { COMMANDS, findCommand, listToolsJson } from './manifest.js';
23
+ import { classifyFileCommand } from './commands/classify.js';
24
+ /** Split argv into path tokens + flag/positional buckets. */
25
+ function parseArgv(argv, spec) {
26
+ const flags = {};
27
+ const bools = {};
28
+ const positionalValues = [];
29
+ let wantsHelp = false;
30
+ // First, pull out the path tokens for the matched spec — they are NOT positionals.
31
+ const pathLen = spec?.cliPath.length ?? 0;
32
+ const rest = argv.slice(pathLen);
33
+ for (let i = 0; i < rest.length; i++) {
34
+ const tok = rest[i];
35
+ if (tok === '--help' || tok === '-h') {
36
+ wantsHelp = true;
37
+ continue;
38
+ }
39
+ if (tok.startsWith('--')) {
40
+ const name = tok.slice(2);
41
+ const next = rest[i + 1];
42
+ if (next !== undefined && !next.startsWith('-')) {
43
+ flags[name] = next;
44
+ i++;
45
+ }
46
+ else {
47
+ bools[name] = true;
48
+ }
49
+ }
50
+ else {
51
+ positionalValues.push(tok);
52
+ }
53
+ }
54
+ // Bind positional values to their declared names in spec order.
55
+ const positionals = {};
56
+ if (spec?.positionals) {
57
+ spec.positionals.forEach((p, idx) => {
58
+ positionals[p.name] = positionalValues[idx];
59
+ });
60
+ }
61
+ return {
62
+ pathTokens: argv.slice(0, pathLen),
63
+ parsed: { positionals, flags, bools },
64
+ wantsHelp,
65
+ };
66
+ }
67
+ // ─── Help renderers ──────────────────────────────────────────────────────────
68
+ const HEADER = `h-ear — Sound Intelligence CLI for the H-ear API
69
+ Documentation: https://h-ear.world · Skill: @h-ear/openclaw
70
+
71
+ Usage:
72
+ h-ear <command> [args] [flags]
73
+ h-ear <command> --help Show flags + examples for one command
74
+ h-ear --list-tools --json Emit MCP-style schemas for all commands
75
+ h-ear --version Print the skill version`;
76
+ const ENV_DOCS = `Environment variables:
77
+ HEAR_API_KEY H-ear Enterprise API key (required for most commands)
78
+ HEAR_BEARER_TOKEN OAuth bearer (alternative to HEAR_API_KEY)
79
+ HEAR_ENV dev | staging | prod (default: prod)
80
+ HEAR_BASE_URL Override base URL (advanced)
81
+ LISTEN_RTSP_URL RTSP source (only for h-ear capture)`;
82
+ function pad(s, n) { return s.length >= n ? s : s + ' '.repeat(n - s.length); }
83
+ function renderTopLevelHelp() {
84
+ const lines = [HEADER, '', 'Commands:'];
85
+ // Group by first path token so multi-level commands cluster nicely.
86
+ const groups = new Map();
87
+ for (const spec of COMMANDS) {
88
+ const head = spec.cliPath[0];
89
+ const existing = groups.get(head);
90
+ if (existing)
91
+ existing.push(spec);
92
+ else
93
+ groups.set(head, [spec]);
94
+ }
95
+ // Stable group order: alphabetical.
96
+ const groupNames = [...groups.keys()].sort();
97
+ for (const name of groupNames) {
98
+ const specs = groups.get(name) ?? [];
99
+ for (const spec of specs) {
100
+ const path = spec.cliPath.join(' ');
101
+ const positionalStr = spec.positionals?.map(p => `<${p.name}>`).join(' ') ?? '';
102
+ const sig = `${path}${positionalStr ? ' ' + positionalStr : ''}`;
103
+ lines.push(` ${pad(sig, 32)}${spec.summary}`);
104
+ }
105
+ }
106
+ lines.push('', ENV_DOCS);
107
+ return lines.join('\n');
35
108
  }
36
- function hasFlag(flag) {
37
- return args.includes(flag);
109
+ function renderCommandHelp(spec) {
110
+ const path = spec.cliPath.join(' ');
111
+ const positionalStr = spec.positionals?.map(p => `<${p.name}>`).join(' ') ?? '';
112
+ const lines = [
113
+ `h-ear ${path}${positionalStr ? ' ' + positionalStr : ''}`,
114
+ '',
115
+ spec.summary,
116
+ '',
117
+ toolDescriptions[spec.schemaName] ?? '',
118
+ '',
119
+ ];
120
+ if (spec.positionals?.length) {
121
+ lines.push('Positional arguments:');
122
+ for (const p of spec.positionals) {
123
+ const shape = toolShapes[spec.schemaName];
124
+ const zod = shape?.[p.schemaKey];
125
+ const desc = zod?._def?.description ?? '';
126
+ lines.push(` ${pad(`<${p.name}>`, 24)}${desc}`);
127
+ }
128
+ lines.push('');
129
+ }
130
+ if (spec.flags?.length) {
131
+ lines.push('Flags:');
132
+ for (const f of spec.flags) {
133
+ const shape = toolShapes[spec.schemaName];
134
+ const zod = shape?.[f.schemaKey];
135
+ const desc = zod?._def?.description ?? '';
136
+ lines.push(` ${pad(`--${f.name}`, 24)}${desc}`);
137
+ }
138
+ lines.push('');
139
+ }
140
+ lines.push('Examples:');
141
+ for (const ex of spec.examples)
142
+ lines.push(` ${ex}`);
143
+ return lines.join('\n');
38
144
  }
39
- // --- Capture -----------------------------------------------------------------
145
+ /**
146
+ * Find the most plausible commands given an unrecognised CLI path.
147
+ * Used to suggest "did you mean..." instead of failing opaquely.
148
+ */
149
+ function suggestNear(tokens) {
150
+ if (tokens.length === 0)
151
+ return [];
152
+ const head = tokens[0];
153
+ return COMMANDS.filter(c => c.cliPath[0] === head).slice(0, 5);
154
+ }
155
+ // ─── Capture (RTSP audio) — lives in CLI; not in manifest because it does I/O ──
40
156
  function captureAudio(sourceUrl, durationSec) {
41
157
  const tmpDir = join(tmpdir(), 'h-ear-listen');
42
158
  if (!existsSync(tmpDir))
@@ -65,101 +181,120 @@ function captureAudio(sourceUrl, durationSec) {
65
181
  }
66
182
  return { buffer: Buffer.from(buffer), fileName: `capture_${timestamp}_${durationSec}s.wav` };
67
183
  }
68
- // --- Main --------------------------------------------------------------------
184
+ // ─── Main ────────────────────────────────────────────────────────────────────
69
185
  async function main() {
70
- if (command === 'help' || command === '--help' || command === '-h') {
71
- console.log(`h-ear Sound Intelligence CLI
72
-
73
- Usage:
74
- h-ear health Check API status
75
- h-ear sounds [search] List sound classes (521+)
76
- h-ear usage Show API usage stats
77
- h-ear classify <file-or-url> Classify audio (waits for results)
78
- h-ear capture [--duration 15] Capture from RTSP camera and classify
79
- h-ear jobs [--limit 5] List recent jobs
80
-
81
- Environment:
82
- HEAR_API_KEY H-ear API key (required)
83
- HEAR_ENV dev | staging | prod (default: prod)
84
- LISTEN_RTSP_URL RTSP camera URL (for capture command)`);
186
+ const argv = process.argv.slice(2);
187
+ // Top-level switches that don't need a skill instance:
188
+ if (argv.length === 0 || argv[0] === 'help' || argv[0] === '--help' || argv[0] === '-h') {
189
+ console.log(renderTopLevelHelp());
85
190
  return;
86
191
  }
87
- const { client } = createSkill();
88
- switch (command) {
89
- case 'health': {
90
- console.log(await healthCommand(client));
91
- break;
192
+ if (argv[0] === '--version' || argv[0] === '-v') {
193
+ const { version } = createSkillSafe();
194
+ console.log(version);
195
+ return;
196
+ }
197
+ if (argv[0] === '--list-tools') {
198
+ if (argv.includes('--json')) {
199
+ console.log(JSON.stringify(listToolsJson(), null, 2));
92
200
  }
93
- case 'sounds': {
94
- const search = args[1] && !args[1].startsWith('-') ? args[1] : undefined;
95
- const limit = parseInt(getFlag('--limit') ?? '20', 10);
96
- console.log(await soundsCommand(client, search, { limit }));
97
- break;
201
+ else {
202
+ // Human-readable enumeration for terminal users.
203
+ for (const spec of COMMANDS) {
204
+ console.log(`${spec.cliPath.join(' ').padEnd(28)}${spec.summary}`);
205
+ }
98
206
  }
99
- case 'usage': {
100
- console.log(await usageCommand(client));
101
- break;
207
+ return;
208
+ }
209
+ // Manifest-driven commands first.
210
+ const matched = findCommand(argv);
211
+ if (matched) {
212
+ const { spec } = matched;
213
+ const parsed = parseArgv(argv, spec);
214
+ if (parsed.wantsHelp) {
215
+ console.log(renderCommandHelp(spec));
216
+ return;
102
217
  }
103
- case 'classify': {
104
- const target = args[1];
105
- if (!target) {
106
- console.error('Error: h-ear classify <file-or-url>');
107
- process.exit(1);
108
- }
109
- if (target.startsWith('http://') || target.startsWith('https://')) {
110
- // URL mode use existing sync command
111
- console.log(await classifySyncCommand(client, target, undefined, (msg) => console.error(` ${msg}`)));
112
- }
113
- else {
114
- // File mode — read and upload
115
- if (!existsSync(target)) {
116
- console.error(`Error: file not found: ${target}`);
117
- process.exit(1);
118
- }
119
- const buffer = readFileSync(target);
120
- const fileName = target.split(/[/\\]/).pop() ?? 'audio.wav';
121
- console.error(` Uploading ${fileName} (${(buffer.length / 1024).toFixed(0)} KB)...`);
122
- const accepted = await client.submitClassifyFile(buffer, fileName, { threshold: 0.3 });
123
- console.error(` Job ${accepted.requestId} queued, polling...`);
124
- const result = await client.pollJob(accepted.requestId, (msg) => console.error(` ${msg}`));
125
- console.log(formatClassifyResult(result));
126
- }
127
- break;
218
+ const { client } = createSkill();
219
+ const out = await spec.handler(client, parsed.parsed);
220
+ console.log(out);
221
+ return;
222
+ }
223
+ // Special-case: capture stays imperative (does ffmpeg I/O before classifying).
224
+ if (argv[0] === 'listen' || argv[0] === 'capture') {
225
+ const parsed = parseArgv(argv, null);
226
+ if (parsed.wantsHelp) {
227
+ console.log([
228
+ 'h-ear capture [--rtsp <url>] [--duration 15] [--no-classify]',
229
+ '',
230
+ 'Capture audio from an RTSP camera and (by default) classify it.',
231
+ '',
232
+ 'Flags:',
233
+ ` ${pad('--rtsp <url>', 24)}RTSP source URL (or set LISTEN_RTSP_URL).`,
234
+ ` ${pad('--duration <sec>', 24)}Capture length in seconds (default 15).`,
235
+ ` ${pad('--no-classify', 24)}Capture only, do not submit for classification.`,
236
+ '',
237
+ 'Examples:',
238
+ ' h-ear capture --duration 30',
239
+ ' LISTEN_RTSP_URL=rtsp://cam:554/stream h-ear capture',
240
+ ].join('\n'));
241
+ return;
128
242
  }
129
- case 'listen':
130
- case 'capture': {
131
- const rtspUrl = getFlag('--rtsp') ?? process.env.LISTEN_RTSP_URL;
132
- if (!rtspUrl) {
133
- console.error('Error: RTSP URL required. Pass --rtsp <url> or set LISTEN_RTSP_URL');
134
- process.exit(1);
135
- }
136
- const duration = parseInt(getFlag('--duration') ?? '15', 10);
137
- const classifyAfter = !hasFlag('--no-classify');
138
- console.error(` Capturing ${duration}s audio from ${rtspUrl}...`);
139
- const { buffer, fileName } = captureAudio(rtspUrl, duration);
140
- console.error(` Captured ${(buffer.length / 1024).toFixed(0)} KB`);
141
- if (classifyAfter) {
142
- console.error(` Uploading ${fileName}...`);
143
- const accepted = await client.submitClassifyFile(buffer, fileName, { threshold: 0.3 });
144
- console.error(` Job ${accepted.requestId} queued, polling...`);
145
- const result = await client.pollJob(accepted.requestId, (msg) => console.error(` ${msg}`));
146
- console.log(formatClassifyResult(result));
243
+ const rtspUrl = parsed.parsed.flags.rtsp ?? process.env.LISTEN_RTSP_URL;
244
+ if (!rtspUrl) {
245
+ console.error('Error: RTSP URL required. Pass --rtsp <url> or set LISTEN_RTSP_URL');
246
+ process.exit(1);
247
+ }
248
+ const duration = parseInt(parsed.parsed.flags.duration ?? '15', 10);
249
+ const classifyAfter = !parsed.parsed.bools['no-classify'];
250
+ console.error(` Capturing ${duration}s audio from ${rtspUrl}...`);
251
+ const { buffer, fileName } = captureAudio(rtspUrl, duration);
252
+ console.error(` Captured ${(buffer.length / 1024).toFixed(0)} KB`);
253
+ if (classifyAfter) {
254
+ const { client } = createSkill();
255
+ const tmpFile = join(tmpdir(), 'h-ear-listen', fileName);
256
+ writeFileSync(tmpFile, buffer);
257
+ try {
258
+ console.log(await classifyFileCommand(client, tmpFile, { threshold: 0.3, waitForResult: true }, (msg) => console.error(` ${msg}`)));
147
259
  }
148
- else {
149
- console.log(`Captured: ${fileName} (${(buffer.length / 1024).toFixed(0)} KB)`);
260
+ finally {
261
+ try {
262
+ unlinkSync(tmpFile);
263
+ }
264
+ catch { /* best effort */ }
150
265
  }
151
- break;
152
266
  }
153
- case 'jobs': {
154
- const limit = parseInt(getFlag('--limit') ?? '5', 10);
155
- console.log(await jobsCommand(client, { limit }));
156
- break;
267
+ else {
268
+ console.log(`Captured: ${fileName} (${(buffer.length / 1024).toFixed(0)} KB)`);
157
269
  }
158
- default: {
159
- console.error(`Unknown command: ${command}. Run 'h-ear help' for usage.`);
160
- process.exit(1);
270
+ return;
271
+ }
272
+ // Unknown — give the LLM (or human) a useful pointer instead of a stack trace.
273
+ const suggestions = suggestNear(argv);
274
+ console.error(`Unknown command: ${argv.join(' ')}`);
275
+ if (suggestions.length > 0) {
276
+ console.error('');
277
+ console.error('Did you mean:');
278
+ for (const s of suggestions) {
279
+ console.error(` h-ear ${s.cliPath.join(' ')} ${s.summary}`);
161
280
  }
162
281
  }
282
+ else {
283
+ console.error('');
284
+ console.error("Run 'h-ear help' or 'h-ear --list-tools' to see all commands.");
285
+ }
286
+ process.exit(1);
287
+ }
288
+ /** Like createSkill, but tolerant of missing API key (we may just want --version). */
289
+ function createSkillSafe() {
290
+ try {
291
+ return createSkill();
292
+ }
293
+ catch {
294
+ // Resolve version directly from package.json without instantiating the client.
295
+ const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
296
+ return { version: pkg.version };
297
+ }
163
298
  }
164
299
  main().catch((err) => {
165
300
  console.error(`Error: ${err.message}`);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,gFAAgF;AAEhF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;AAElC,SAAS,OAAO,CAAC,IAAY;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,gFAAgF;AAEhF,SAAS,YAAY,CAAC,SAAiB,EAAE,WAAmB;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChG,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,SAAS,IAAI,WAAW,OAAO,CAAC,CAAC;IAEzE,MAAM,UAAU,GAAa,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAC/E,UAAU,CAAC,IAAI,CACX,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EACzD,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAClD,CAAC;IAEF,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE;QAC3C,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QAC/B,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,IAAI;KACrC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,MAAM,MAAM,MAAM,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC;QAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,iDAAiD,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IAAC,CAAC;IAC5H,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,WAAW,SAAS,IAAI,WAAW,OAAO,EAAE,CAAC;AACjG,CAAC;AAED,gFAAgF;AAEhF,KAAK,UAAU,IAAI;IACf,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;0DAasC,CAAC,CAAC;QACpD,OAAO;IACX,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAEjC,QAAQ,OAAO,EAAE,CAAC;QACd,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;YACzC,MAAM;QACV,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5D,MAAM;QACV,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YACxC,MAAM;QACV,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAEvF,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChE,uCAAuC;gBACvC,OAAO,CAAC,GAAG,CAAC,MAAM,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1G,CAAC;iBAAM,CAAC;gBACJ,8BAA8B;gBAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAChG,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC;gBAC5D,OAAO,CAAC,KAAK,CAAC,eAAe,QAAQ,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBACtF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvF,OAAO,CAAC,KAAK,CAAC,SAAS,QAAQ,CAAC,SAAS,qBAAqB,CAAC,CAAC;gBAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC5F,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM;QACV,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YACjE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;gBACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7D,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAEhD,OAAO,CAAC,KAAK,CAAC,eAAe,QAAQ,gBAAgB,OAAO,KAAK,CAAC,CAAC;YACnE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAEpE,IAAI,aAAa,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,eAAe,QAAQ,KAAK,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvF,OAAO,CAAC,KAAK,CAAC,SAAS,QAAQ,CAAC,SAAS,qBAAqB,CAAC,CAAC;gBAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC5F,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACnF,CAAC;YACD,MAAM;QACV,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAClD,MAAM;QACV,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,+BAA+B,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,7 @@ import type { HearApiClient } from '@h-ear/core';
2
2
  export declare function classifyBatchCommand(client: HearApiClient, urls: string[], options?: {
3
3
  threshold?: number;
4
4
  callbackUrl?: string;
5
+ callbackSecret?: string;
6
+ filterMinDurationSeconds?: number;
5
7
  }): Promise<string>;
6
8
  //# sourceMappingURL=classify-batch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"classify-batch.d.ts","sourceRoot":"","sources":["../../src/commands/classify-batch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAsB,oBAAoB,CACtC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD,OAAO,CAAC,MAAM,CAAC,CAejB"}
1
+ {"version":3,"file":"classify-batch.d.ts","sourceRoot":"","sources":["../../src/commands/classify-batch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAsB,oBAAoB,CACtC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IACN,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACrC,GACF,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
@@ -1,9 +1,13 @@
1
1
  export async function classifyBatchCommand(client, urls, options) {
2
+ // Note: BatchRequest does not currently accept GPS — apply per-file via classifyFileCommand
3
+ // if you need to tag local recordings with location.
2
4
  const files = urls.map((url, i) => ({ url, id: `file-${i + 1}` }));
3
5
  const result = await client.classifyBatch({
4
6
  files,
5
7
  callbackUrl: options?.callbackUrl ?? '',
8
+ callbackSecret: options?.callbackSecret,
6
9
  threshold: options?.threshold ?? 0.3,
10
+ filterMinDurationSeconds: options?.filterMinDurationSeconds,
7
11
  });
8
12
  return [
9
13
  `**Batch Submitted**`,
@@ -1 +1 @@
1
- {"version":3,"file":"classify-batch.js","sourceRoot":"","sources":["../../src/commands/classify-batch.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,MAAqB,EACrB,IAAc,EACd,OAAsD;IAEtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;QACtC,KAAK;QACL,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,EAAE;QACvC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,GAAG;KACvC,CAAC,CAAC;IAEH,OAAO;QACH,qBAAqB;QACrB,aAAa,MAAM,CAAC,OAAO,EAAE;QAC7B,UAAU,MAAM,CAAC,SAAS,EAAE;QAC5B,eAAe,MAAM,CAAC,0BAA0B,MAAM;QACtD,WAAW,MAAM,CAAC,MAAM,EAAE;KAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"classify-batch.js","sourceRoot":"","sources":["../../src/commands/classify-batch.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,MAAqB,EACrB,IAAc,EACd,OAKC;IAED,4FAA4F;IAC5F,qDAAqD;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;QACtC,KAAK;QACL,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,EAAE;QACvC,cAAc,EAAE,OAAO,EAAE,cAAc;QACvC,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,GAAG;QACpC,wBAAwB,EAAE,OAAO,EAAE,wBAAwB;KAC9D,CAAC,CAAC;IAEH,OAAO;QACH,qBAAqB;QACrB,aAAa,MAAM,CAAC,OAAO,EAAE;QAC7B,UAAU,MAAM,CAAC,SAAS,EAAE;QAC5B,eAAe,MAAM,CAAC,0BAA0B,MAAM;QACtD,WAAW,MAAM,CAAC,MAAM,EAAE;KAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC"}
@@ -1,11 +1,23 @@
1
1
  import type { HearApiClient } from '@h-ear/core';
2
- /** Async submit — returns immediately with job ID. callbackUrl is optional; client defaults to noop. */
3
- export declare function classifyCommand(client: HearApiClient, url: string, options?: {
2
+ interface ClassifyOpts {
4
3
  threshold?: number;
5
4
  callbackUrl?: string;
6
- }): Promise<string>;
5
+ callbackSecret?: string;
6
+ filterMinDurationSeconds?: number;
7
+ latitude?: number;
8
+ longitude?: number;
9
+ fileName?: string;
10
+ }
11
+ /** Async submit — returns immediately with job ID. callbackUrl is optional. */
12
+ export declare function classifyCommand(client: HearApiClient, url: string, options?: ClassifyOpts): Promise<string>;
7
13
  /** Sync classify — submits, polls until complete, returns formatted result. */
8
- export declare function classifySyncCommand(client: HearApiClient, url: string, options?: {
9
- threshold?: number;
14
+ export declare function classifySyncCommand(client: HearApiClient, url: string, options?: ClassifyOpts, onProgress?: (msg: string) => void): Promise<string>;
15
+ /**
16
+ * Local-file classify — reads file from disk, picks small-file or chunked-upload
17
+ * path based on size + duration, optionally polls. Mirrors mcp-server's classifyAudio.
18
+ */
19
+ export declare function classifyFileCommand(client: HearApiClient, filePath: string, options?: ClassifyOpts & {
20
+ waitForResult?: boolean;
10
21
  }, onProgress?: (msg: string) => void): Promise<string>;
22
+ export {};
11
23
  //# sourceMappingURL=classify.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/commands/classify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wGAAwG;AACxG,wBAAsB,eAAe,CACjC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,+EAA+E;AAC/E,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAChC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACnC,OAAO,CAAC,MAAM,CAAC,CAMjB"}
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/commands/classify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAgC,MAAM,aAAa,CAAC;AAI/E,UAAU,YAAY;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAqBD,+EAA+E;AAC/E,wBAAsB,eAAe,CACjC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,YAAY,GACvB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,+EAA+E;AAC/E,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,YAAY,EACtB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACnC,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,YAAY,GAAG;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,EACpD,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACnC,OAAO,CAAC,MAAM,CAAC,CAiDjB"}