@wirecat/zoom-cli 0.4.0 → 0.5.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/README.md +76 -2
- package/dist/archive-import.d.ts +6 -2
- package/dist/archive-import.d.ts.map +1 -1
- package/dist/archive-import.js +32 -8
- package/dist/archive-import.js.map +1 -1
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +1 -0
- package/dist/execution.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/local-transcription-commands.d.ts +9 -0
- package/dist/local-transcription-commands.d.ts.map +1 -0
- package/dist/local-transcription-commands.js +51 -0
- package/dist/local-transcription-commands.js.map +1 -0
- package/dist/local-transcription.d.ts +52 -0
- package/dist/local-transcription.d.ts.map +1 -0
- package/dist/local-transcription.js +161 -0
- package/dist/local-transcription.js.map +1 -0
- package/dist/meeting-integration-commands.d.ts +9 -0
- package/dist/meeting-integration-commands.d.ts.map +1 -0
- package/dist/meeting-integration-commands.js +64 -0
- package/dist/meeting-integration-commands.js.map +1 -0
- package/dist/meeting-integration.d.ts +12 -0
- package/dist/meeting-integration.d.ts.map +1 -0
- package/dist/meeting-integration.js +9 -0
- package/dist/meeting-integration.js.map +1 -0
- package/dist/meeting-search-commands.d.ts +33 -0
- package/dist/meeting-search-commands.d.ts.map +1 -0
- package/dist/meeting-search-commands.js +85 -0
- package/dist/meeting-search-commands.js.map +1 -0
- package/dist/program.d.ts +15 -3
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +93 -4
- package/dist/program.js.map +1 -1
- package/dist/store-connection.d.ts +5 -1
- package/dist/store-connection.d.ts.map +1 -1
- package/dist/store-connection.js +145 -9
- package/dist/store-connection.js.map +1 -1
- package/dist/wav-audio.d.ts +28 -0
- package/dist/wav-audio.d.ts.map +1 -0
- package/dist/wav-audio.js +191 -0
- package/dist/wav-audio.js.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -47,6 +47,9 @@ is an error; tokens are never written to a config file.
|
|
|
47
47
|
| `meetings summary <meeting>` | read stored summaries |
|
|
48
48
|
| `meetings export <meeting> --format markdown\|vtt` | export stored meeting content |
|
|
49
49
|
| `meetings search <query>`, `meetings people <query>` | find stored text or participants |
|
|
50
|
+
| `meetings search-page <query>`, `meetings search-index` | bounded hit continuation and explicit keyword indexing |
|
|
51
|
+
| `meetings link-event <reference>`, `meetings link-person <reference>` | preview or apply owner-selected stored links |
|
|
52
|
+
| `meetings transcribe <meeting> <file> --model <model>` | preview or locally recognize a WAV file into an independent transcript |
|
|
50
53
|
| `meetings evidence <reference>`, `meetings context <person>` | read bounded evidence or identity-linked person context |
|
|
51
54
|
| `meetings task-proposal <reference> --kind <kind>` | preview a task with meeting provenance |
|
|
52
55
|
| `meetings semantic <query> --model <id>` | rank scanned stored vectors with an explicit query model |
|
|
@@ -150,7 +153,9 @@ occurrence with `--uuid`, or assets with comma-separated `--file-ids`. Each occu
|
|
|
150
153
|
atomically by its raw Zoom UUID, preserving other transcripts, summaries, participants and the
|
|
151
154
|
pull cursor. Corrected content retains earlier revisions; identical asset hashes are idempotent.
|
|
152
155
|
An occurrence with no known start time can receive transcripts only if it already exists. Receipts
|
|
153
|
-
report acknowledged or unavailable occurrences
|
|
156
|
+
report acknowledged or unavailable occurrences. When the exact receipt capability is available,
|
|
157
|
+
they also report meeting creation and inserted, replayed and superseded transcript counts from the
|
|
158
|
+
same transaction. Older adapters keep the acknowledgement without guessed counts.
|
|
154
159
|
Earlier acknowledged occurrences can remain committed if a later append fails.
|
|
155
160
|
|
|
156
161
|
Read or search archived transcripts directly:
|
|
@@ -254,9 +259,78 @@ credentials. Running a saved job requires its captured profile and client to rem
|
|
|
254
259
|
Saved status describes the last acknowledged operation; list/show do not query live timer state.
|
|
255
260
|
Disabling stops the timer and preserves job definitions and archived files.
|
|
256
261
|
|
|
262
|
+
## Link meetings to shared context
|
|
263
|
+
|
|
264
|
+
Create an independent local transcript from an audio file for an existing stored meeting:
|
|
265
|
+
|
|
266
|
+
```sh
|
|
267
|
+
zm meetings transcribe 1 ./AliceExample.wav --model parakeet-v3 --json
|
|
268
|
+
zm meetings transcribe 1 ./AliceExample.wav --model parakeet-v3 --yes --json
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Preview verifies the input and describes the chosen model without loading it. `--yes` recognizes
|
|
272
|
+
with an already installed local model and atomically appends the completed transcript; `--dry-run`
|
|
273
|
+
overrides it. No model is automatically installed. Input currently accepts PCM16 WAV, mono or stereo,
|
|
274
|
+
at 16 or 48 kHz. `--models-dir` selects an absolute installed model directory. Media, duration,
|
|
275
|
+
segment count and transcript text have explicit bounds through `--max-bytes`, `--max-duration`,
|
|
276
|
+
`--max-segments` and `--max-text-bytes`. Recognition uses fixed windows of up to 30 seconds, so
|
|
277
|
+
timestamps describe those windows. Speakers remain unknown. Provider transcripts and historical
|
|
278
|
+
revisions are preserved; the applied receipt gives transaction counts and provenance.
|
|
279
|
+
|
|
280
|
+
Stored meeting references use `meeting:<accountId>/<meetingId>`. A retained transcript appends its
|
|
281
|
+
revision id, and a cue appends its position. Event and person linking accept root references:
|
|
282
|
+
|
|
283
|
+
```sh
|
|
284
|
+
zm meetings link-event meeting:1/1 --event-id 1 --expected-event-id none --json
|
|
285
|
+
zm meetings link-event meeting:1/1 --event-id 1 --expected-event-id none --yes --json
|
|
286
|
+
zm meetings link-person meeting:1/1 --participant-id 1 --person 1 --expected-person none --yes --json
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
These local changes preview by default; `--yes` applies once and `--dry-run` overrides it. Expected
|
|
290
|
+
link options reject a stale decision. Use `--event-id none` to unlink an event. Person linking moves
|
|
291
|
+
only the selected participant's identity; it never guesses a person from a speaker name. Target
|
|
292
|
+
people must have authorized account observations. Explicit `--target-accounts <ids>` adds account
|
|
293
|
+
ids for that lookup. Profile labels group local data and do not authenticate a remote identity.
|
|
294
|
+
|
|
295
|
+
Use [memo](https://github.com/WireCatLabs/cli-memo) for the existing shared notes, tags and memories
|
|
296
|
+
interface. Both tools use the same store; point `MESSAGING_STORE` at the same file if it is overridden.
|
|
297
|
+
For a Zoom profile named `AliceExample`, its provider account key is `zm-profile:AliceExample`:
|
|
298
|
+
|
|
299
|
+
```sh
|
|
300
|
+
memo tags add planning --meeting 1 --provider zoom --account zm-profile:AliceExample --json
|
|
301
|
+
memo tags remove planning --meeting 1 --provider zoom --account zm-profile:AliceExample --json
|
|
302
|
+
memo notes add --text "Alice Example follow-up" --about meeting:1/1 --json
|
|
303
|
+
memo notes list --about meeting:1/1 --json
|
|
304
|
+
memo memories add "Alice Example will review" --kind fact --scope work --subject meeting:1/1 --evidence meeting:1/1/1/0 --json
|
|
305
|
+
memo memories list --subject meeting:1/1 --scope work --json
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
Memo's add/remove commands write directly to the local store. Owner-authored memories are confirmed;
|
|
309
|
+
agent-authored memories stay proposed until confirmed. Meeting revision and cue evidence remains
|
|
310
|
+
addressable after corrections. The references and ids above are invented examples; use ids from
|
|
311
|
+
your stored meetings and selected account.
|
|
312
|
+
|
|
257
313
|
## Search and read evidence
|
|
258
314
|
|
|
259
|
-
|
|
315
|
+
For bounded text search, first index queued meeting records explicitly, then page through hits:
|
|
316
|
+
|
|
317
|
+
```sh
|
|
318
|
+
zm meetings search-index --limit 100 --max-read-bytes 4194304 --json
|
|
319
|
+
zm meetings search-index --limit 100 --yes --json
|
|
320
|
+
zm meetings search-page "example plan" --limit 20 --json
|
|
321
|
+
zm meetings search-page "example plan" --limit 20 --after <nextCursor> --json
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
Indexing previews by default; `--yes` applies one bounded batch and `--dry-run` overrides it.
|
|
325
|
+
Repeat until the applied receipt reports `remaining: 0`. A search read never processes indexing
|
|
326
|
+
work. Its coverage reports pending indexing and unknown index/archive completeness. All normalized
|
|
327
|
+
query words must match, through literal prefixes or the stored stemming configuration. The default
|
|
328
|
+
configuration adds English, Russian and Spanish word stems; a store can disable or customize it.
|
|
329
|
+
This is keyword search, with no semantic model or query operators. `--meeting-id`, `--since` and `--until`
|
|
330
|
+
narrow the selected account. The opaque cursor belongs to that account, query and filters; it can
|
|
331
|
+
continue inside a large transcript. JSONL preserves the complete page, including `nextCursor`.
|
|
332
|
+
|
|
333
|
+
`meetings search` keeps its existing literal prefix transcript search. `search all` uses the shared search
|
|
260
334
|
service and searches only meetings by default:
|
|
261
335
|
|
|
262
336
|
```sh
|
package/dist/archive-import.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MeetingTranscriptStore } from "@wirecat/cli-meetings";
|
|
1
|
+
import type { MeetingTranscriptReceiptStore, MeetingTranscriptStore } from "@wirecat/cli-meetings";
|
|
2
2
|
import { type ArchiveTranscriptOptions } from "./archive-transcripts.js";
|
|
3
3
|
export interface ArchiveImportOptions extends ArchiveTranscriptOptions {
|
|
4
4
|
maxTotalBytes?: number;
|
|
@@ -13,13 +13,17 @@ export interface ArchiveImportReceipt {
|
|
|
13
13
|
assetIds: string[];
|
|
14
14
|
status: "acknowledged" | "unavailable";
|
|
15
15
|
meetingId?: number;
|
|
16
|
+
created?: boolean;
|
|
17
|
+
insertedTranscripts?: number;
|
|
18
|
+
replayedTranscripts?: number;
|
|
19
|
+
supersededTranscripts?: number;
|
|
16
20
|
/** The append port does not distinguish a missing occurrence from a deleted one. */
|
|
17
21
|
reason?: "missing_or_deleted";
|
|
18
22
|
}
|
|
19
23
|
/** Complete verification and bounded preparation before the caller opens or registers an account. */
|
|
20
24
|
export declare const preflightArchiveImport: (destination: string, options?: ArchiveImportOptions) => Promise<ArchiveImportPlan>;
|
|
21
25
|
/** Atomic per occurrence, preserving an acknowledged receipt even when cancellation arrives during append. */
|
|
22
|
-
export declare function applyArchiveImport(plan: ArchiveImportPlan, store: MeetingTranscriptStore
|
|
26
|
+
export declare function applyArchiveImport(plan: ArchiveImportPlan, store: Partial<MeetingTranscriptStore & MeetingTranscriptReceiptStore>, options: {
|
|
23
27
|
accountId: number;
|
|
24
28
|
now?: number;
|
|
25
29
|
signal?: AbortSignal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive-import.d.ts","sourceRoot":"","sources":["../src/archive-import.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"archive-import.d.ts","sourceRoot":"","sources":["../src/archive-import.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,6BAA6B,EAAE,sBAAsB,EAAoB,MAAM,uBAAuB,CAAA;AACpH,OAAO,EAAE,KAAK,wBAAwB,EAA0B,MAAM,0BAA0B,CAAA;AAGhG,MAAM,WAAW,oBAAqB,SAAQ,wBAAwB;IACpE,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AACD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AACD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,EAAE,cAAc,GAAG,aAAa,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,oFAAoF;IACpF,MAAM,CAAC,EAAE,oBAAoB,CAAA;CAC9B;AASD,qGAAqG;AACrG,eAAO,MAAM,sBAAsB,gBACpB,MAAM,YACV,oBAAoB,KAC5B,OAAO,CAAC,iBAAiB,CAyE3B,CAAA;AAED,8GAA8G;AAC9G,wBAAuB,kBAAkB,CACvC,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,OAAO,CAAC,sBAAsB,GAAG,6BAA6B,CAAC,EACtE,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACjE,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,CAmFlD"}
|
package/dist/archive-import.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { CliError } from "@wirecat/cli-core";
|
|
2
3
|
import { readArchiveTranscripts } from "./archive-transcripts.js";
|
|
3
4
|
import { checkCancelled, ZoomError } from "./errors.js";
|
|
4
5
|
const plans = new WeakMap();
|
|
@@ -74,37 +75,60 @@ export const preflightArchiveImport = async (destination, options = {}) => {
|
|
|
74
75
|
/** Atomic per occurrence, preserving an acknowledged receipt even when cancellation arrives during append. */
|
|
75
76
|
export async function* applyArchiveImport(plan, store, options) {
|
|
76
77
|
const prepared = plans.get(plan);
|
|
78
|
+
const { accountId, signal } = options;
|
|
77
79
|
const now = options.now ?? Date.now();
|
|
78
|
-
|
|
80
|
+
const appendExact = store?.appendTranscriptsWithReceipt;
|
|
81
|
+
const appendLegacy = store?.appendTranscripts;
|
|
82
|
+
const useExact = typeof appendExact === "function";
|
|
83
|
+
if (!prepared || !Number.isSafeInteger(accountId) || accountId < 1 || !Number.isSafeInteger(now))
|
|
79
84
|
throw new ZoomError("validation_error", "expected a verified archive plan, selected account and integer timestamp");
|
|
80
|
-
if (typeof
|
|
85
|
+
if (typeof appendLegacy !== "function" && !useExact)
|
|
81
86
|
throw new ZoomError("configuration_error", "the installed meeting store does not support transcript append");
|
|
82
87
|
for (const group of prepared) {
|
|
83
|
-
checkCancelled(
|
|
88
|
+
checkCancelled(signal);
|
|
84
89
|
let receipt;
|
|
85
90
|
try {
|
|
86
|
-
const
|
|
87
|
-
accountId:
|
|
91
|
+
const input = {
|
|
92
|
+
accountId: accountId,
|
|
88
93
|
externalId: group.uuid,
|
|
89
94
|
create: group.create,
|
|
90
95
|
transcripts: structuredClone(group.transcripts),
|
|
91
96
|
now,
|
|
92
|
-
}
|
|
97
|
+
};
|
|
98
|
+
const exact = useExact ? await appendExact.call(store, input) : undefined;
|
|
99
|
+
const details = useExact ? exact?.meeting : await appendLegacy?.call(store, input);
|
|
93
100
|
if (!details?.meeting ||
|
|
94
|
-
details.meeting.accountId !==
|
|
101
|
+
details.meeting.accountId !== accountId ||
|
|
95
102
|
details.meeting.externalId !== group.uuid ||
|
|
96
103
|
!Number.isSafeInteger(details.meeting.id) ||
|
|
97
104
|
details.meeting.id < 1 ||
|
|
98
105
|
details.meeting.deletedAt !== null)
|
|
99
106
|
throw new ZoomError("outcome_unknown", "archive append returned inconsistent ownership; verify stored state before retrying");
|
|
107
|
+
if (exact &&
|
|
108
|
+
(typeof exact.created !== "boolean" ||
|
|
109
|
+
exact.insertedTranscripts + exact.replayedTranscripts !== group.transcripts.length ||
|
|
110
|
+
[exact.insertedTranscripts, exact.replayedTranscripts, exact.supersededTranscripts].some((count) => !Number.isSafeInteger(count) || count < 0)))
|
|
111
|
+
throw new ZoomError("outcome_unknown", "archive append returned invalid counts; verify stored state before retrying");
|
|
100
112
|
receipt = {
|
|
101
113
|
uuid: group.uuid,
|
|
102
114
|
assetIds: [...group.assetIds],
|
|
103
115
|
status: "acknowledged",
|
|
104
116
|
meetingId: details.meeting.id,
|
|
117
|
+
...(exact
|
|
118
|
+
? {
|
|
119
|
+
created: exact.created,
|
|
120
|
+
insertedTranscripts: exact.insertedTranscripts,
|
|
121
|
+
replayedTranscripts: exact.replayedTranscripts,
|
|
122
|
+
supersededTranscripts: exact.supersededTranscripts,
|
|
123
|
+
}
|
|
124
|
+
: {}),
|
|
105
125
|
};
|
|
106
126
|
}
|
|
107
127
|
catch (error) {
|
|
128
|
+
if (error instanceof CliError && (error.code === "timeout" || error.code === "cancelled")) {
|
|
129
|
+
checkCancelled(signal);
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
108
132
|
if (error instanceof Error && "code" in error && error.code === "outcome_unknown")
|
|
109
133
|
throw new ZoomError("outcome_unknown", "archive append outcome is unknown; verify stored state before retrying");
|
|
110
134
|
if (error instanceof Error && "code" in error && error.code === "not_found")
|
|
@@ -115,7 +139,7 @@ export async function* applyArchiveImport(plan, store, options) {
|
|
|
115
139
|
reason: "missing_or_deleted",
|
|
116
140
|
};
|
|
117
141
|
else {
|
|
118
|
-
checkCancelled(
|
|
142
|
+
checkCancelled(signal);
|
|
119
143
|
throw new ZoomError("provider_error", "archive transcript append failed; earlier occurrences may be committed");
|
|
120
144
|
}
|
|
121
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive-import.js","sourceRoot":"","sources":["../src/archive-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"archive-import.js","sourceRoot":"","sources":["../src/archive-import.ts"],"names":[],"mappings":"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"}
|
package/dist/execution.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,eAAO,MAAM,QAAQ,SAAU,MAAM,KAAG,MAOvC,CAAA;AACD,eAAO,MAAM,KAAK,SAAU,MAAM,KAAG,MAIpC,CAAA;AACD,eAAO,MAAM,eAAe,WAAY,OAAO,KAAG,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,eAAO,MAAM,QAAQ,SAAU,MAAM,KAAG,MAOvC,CAAA;AACD,eAAO,MAAM,KAAK,SAAU,MAAM,KAAG,MAIpC,CAAA;AACD,eAAO,MAAM,eAAe,WAAY,OAAO,KAAG,MAAM,GAAG,SAc1D,CAAA;AACD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AACD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,YAAY,CAAA;CACrB;AACD,eAAO,MAAM,cAAc,WAAY,OAAO,WAAW,gBAAgB,KAAG,cAU3E,CAAA;AAED,eAAO,MAAM,eAAe,SAAU,OAAO,KAAG,IAS/C,CAAA"}
|
package/dist/execution.js
CHANGED
|
@@ -20,6 +20,7 @@ export const commandDeadline = (action) => {
|
|
|
20
20
|
return 300000;
|
|
21
21
|
if (action.name() === "download" ||
|
|
22
22
|
action.name() === "sync" ||
|
|
23
|
+
(action.name() === "transcribe" && action.parent?.name() === "meetings") ||
|
|
23
24
|
(action.name() === "run" &&
|
|
24
25
|
action.parent?.name() === "schedule" &&
|
|
25
26
|
action.parent.parent?.name() === "recordings") ||
|
package/dist/execution.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,9 +4,12 @@ export { type ArchiveTranscript, type ArchiveTranscriptMatch, type ArchiveTransc
|
|
|
4
4
|
export { profileAccountKey, readConfig, setConfig, type ZoomConfig } from "./config.js";
|
|
5
5
|
export { ZoomError } from "./errors.js";
|
|
6
6
|
export { type DownloadedFile, FilesSource, fileMeeting, importFile, readDownloadedFiles, validateDownloadedFiles, } from "./files.js";
|
|
7
|
+
export { createLocalTranscriptionCapabilities, createWavTranscriptionSource, type LocalSpeechPort, type LocalTranscriptionCapabilities, type LocalTranscriptionOptions, type LocalTranscriptionTarget, } from "./local-transcription.js";
|
|
7
8
|
export { type LoginOptions, login, REDIRECT } from "./login.js";
|
|
8
9
|
export { createMeetingMcpServer, type MeetingMcpOptions, serveMeetingMcp } from "./mcp-server.js";
|
|
9
10
|
export { createMeetingContextCapabilities, type EvidenceOptions, type MeetingContextCapabilities, type MeetingTaskKind, type PersonContextOptions, } from "./meeting-context.js";
|
|
11
|
+
export type { MeetingIntegrationCapabilities, MeetingLinkChange } from "./meeting-integration.js";
|
|
12
|
+
export type { MeetingHitSearch, MeetingHitSearchOptions, MeetingSearchIndex } from "./meeting-search-commands.js";
|
|
10
13
|
export { createMeetingSemanticCapabilities } from "./meeting-semantic.js";
|
|
11
14
|
export type { MeetingEmbeddingOptions, MeetingModelOptions, MeetingSemanticCapabilities, MeetingSemanticOptions, } from "./meeting-semantic-commands.js";
|
|
12
15
|
export { createProgram, type ProgramDeps, run, type StoreConnection, type StoreConnectRequest } from "./program.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EACL,KAAK,cAAc,EACnB,WAAW,EACX,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,oCAAoC,EACpC,4BAA4B,EAC5B,KAAK,eAAe,EACpB,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjG,OAAO,EACL,gCAAgC,EAChC,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACjG,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjH,OAAO,EAAE,iCAAiC,EAAE,MAAM,uBAAuB,CAAA;AACzE,YAAY,EACV,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,GAAG,EAAE,KAAK,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACnH,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,gCAAgC,EAChC,2BAA2B,GAC5B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,sCAAsC,EAAE,KAAK,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AACxH,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC5G,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,mBAAmB,EACnB,aAAa,EACb,KAAK,WAAW,EAChB,cAAc,GACf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,2BAA2B,EAC3B,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AACzF,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AAE1E,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export { readArchiveTranscripts, searchArchiveTranscripts, } from "./archive-tra
|
|
|
4
4
|
export { profileAccountKey, readConfig, setConfig } from "./config.js";
|
|
5
5
|
export { ZoomError } from "./errors.js";
|
|
6
6
|
export { FilesSource, fileMeeting, importFile, readDownloadedFiles, validateDownloadedFiles, } from "./files.js";
|
|
7
|
+
export { createLocalTranscriptionCapabilities, createWavTranscriptionSource, } from "./local-transcription.js";
|
|
7
8
|
export { login, REDIRECT } from "./login.js";
|
|
8
9
|
export { createMeetingMcpServer, serveMeetingMcp } from "./mcp-server.js";
|
|
9
10
|
export { createMeetingContextCapabilities, } from "./meeting-context.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAIL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAML,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAEL,WAAW,EACX,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAqB,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAA0B,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjG,OAAO,EACL,gCAAgC,GAKjC,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAIL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAML,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAEL,WAAW,EACX,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,oCAAoC,EACpC,4BAA4B,GAK7B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAqB,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAA0B,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjG,OAAO,EACL,gCAAgC,GAKjC,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EAAE,iCAAiC,EAAE,MAAM,uBAAuB,CAAA;AAOzE,OAAO,EAAE,aAAa,EAAoB,GAAG,EAAkD,MAAM,cAAc,CAAA;AACnH,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,EASzB,gCAAgC,EAChC,2BAA2B,GAC5B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,sCAAsC,EAAkC,MAAM,iCAAiC,CAAA;AACxH,OAAO,EAAoD,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC5G,OAAO,EAOL,cAAc,EACd,cAAc,EACd,mBAAmB,EAInB,mBAAmB,EACnB,aAAa,EAEb,cAAc,GACf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,2BAA2B,EAK3B,kBAAkB,GACnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,oBAAoB,EAA+B,MAAM,uBAAuB,CAAA;AACzF,OAAO,EAAE,YAAY,EAAkC,MAAM,aAAa,CAAA;AAE1E,OAAO,EAAE,gBAAgB,EAAiD,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import { type LocalTranscriptionCapabilities } from "./local-transcription.js";
|
|
3
|
+
export declare const addLocalTranscriptionCommands: (program: Command, deps: {
|
|
4
|
+
capabilities: () => Promise<LocalTranscriptionCapabilities>;
|
|
5
|
+
signal: () => AbortSignal | undefined;
|
|
6
|
+
output: (value: unknown) => void;
|
|
7
|
+
receipt: (value: unknown) => Promise<void>;
|
|
8
|
+
}) => void;
|
|
9
|
+
//# sourceMappingURL=local-transcription-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-transcription-commands.d.ts","sourceRoot":"","sources":["../src/local-transcription-commands.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,EAEL,KAAK,8BAA8B,EAGpC,MAAM,0BAA0B,CAAA;AAEjC,eAAO,MAAM,6BAA6B,YAC/B,OAAO,QACV;IACJ,YAAY,EAAE,MAAM,OAAO,CAAC,8BAA8B,CAAC,CAAA;IAC3D,MAAM,EAAE,MAAM,WAAW,GAAG,SAAS,CAAA;IACrC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAChC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3C,KACA,IAsDF,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { annotate } from "@wirecat/cli-core/commands";
|
|
2
|
+
import { speechModel } from "@wirecat/cli-messaging/speech";
|
|
3
|
+
import { ZoomError } from "./errors.js";
|
|
4
|
+
import { bytes, duration } from "./execution.js";
|
|
5
|
+
import { compactLocalTranscriptionReceipt, validateLocalTranscriptionOptions, } from "./local-transcription.js";
|
|
6
|
+
export const addLocalTranscriptionCommands = (program, deps) => {
|
|
7
|
+
const meetings = program.commands.find((command) => command.name() === "meetings");
|
|
8
|
+
if (!meetings)
|
|
9
|
+
throw new ZoomError("configuration_error", "meeting command group is unavailable");
|
|
10
|
+
annotate(meetings
|
|
11
|
+
.command("transcribe")
|
|
12
|
+
.description("preview local PCM WAV transcription; --yes recognizes and appends an independent transcript")
|
|
13
|
+
.argument("<meeting>", "selected-account stored meeting id or meeting reference")
|
|
14
|
+
.argument("<file>", "local PCM16 WAV file (16 or 48 kHz, mono/stereo)")
|
|
15
|
+
.requiredOption("--model <model>", "explicit installed speech model")
|
|
16
|
+
.option("--models-dir <directory>", "shared installed speech-model directory")
|
|
17
|
+
.option("--max-bytes <bytes>", "bounded media input bytes (default 1 GiB)", bytes)
|
|
18
|
+
.option("--max-duration <duration>", "bounded audio duration (default 4h)", duration)
|
|
19
|
+
.option("--max-segments <count>", "recognized segment limit (default 10000)", bytes)
|
|
20
|
+
.option("--max-text-bytes <bytes>", "aggregate transcript text limit (default 4 MiB)", bytes)
|
|
21
|
+
.option("--yes", "recognize locally and append to the existing meeting")
|
|
22
|
+
.option("--dry-run", "preview even when --yes is present")
|
|
23
|
+
.action(async (reference, file, options) => {
|
|
24
|
+
const request = validateLocalTranscriptionOptions({
|
|
25
|
+
model: options.model,
|
|
26
|
+
modelsDirectory: options.modelsDir,
|
|
27
|
+
maxBytes: options.maxBytes,
|
|
28
|
+
maxDurationMs: options.maxDuration,
|
|
29
|
+
maxSegments: options.maxSegments,
|
|
30
|
+
maxTextBytes: options.maxTextBytes,
|
|
31
|
+
apply: options.yes,
|
|
32
|
+
dryRun: options.dryRun,
|
|
33
|
+
signal: deps.signal(),
|
|
34
|
+
});
|
|
35
|
+
speechModel(request.model);
|
|
36
|
+
if (typeof file !== "string" || !file.trim() || file.includes("\0"))
|
|
37
|
+
throw new ZoomError("validation_error", "local audio file is required");
|
|
38
|
+
const capabilities = await deps.capabilities();
|
|
39
|
+
const receipt = await capabilities.transcribe(reference, file, request);
|
|
40
|
+
if (receipt.applied)
|
|
41
|
+
await deps.receipt(compactLocalTranscriptionReceipt(receipt));
|
|
42
|
+
else
|
|
43
|
+
deps.output(receipt);
|
|
44
|
+
}), {
|
|
45
|
+
origin: "handwritten",
|
|
46
|
+
mutates: true,
|
|
47
|
+
local: true,
|
|
48
|
+
examples: ["zm meetings transcribe meeting:3/12 ./AliceExample.wav --model parakeet-v3 --json"],
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=local-transcription-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-transcription-commands.js","sourceRoot":"","sources":["../src/local-transcription-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EACL,gCAAgC,EAGhC,iCAAiC,GAClC,MAAM,0BAA0B,CAAA;AAEjC,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,OAAgB,EAChB,IAKC,EACK,EAAE;IACR,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,UAAU,CAAC,CAAA;IAClF,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,SAAS,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAA;IACjG,QAAQ,CACN,QAAQ;SACL,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,6FAA6F,CAAC;SAC1G,QAAQ,CAAC,WAAW,EAAE,yDAAyD,CAAC;SAChF,QAAQ,CAAC,QAAQ,EAAE,kDAAkD,CAAC;SACtE,cAAc,CAAC,iBAAiB,EAAE,iCAAiC,CAAC;SACpE,MAAM,CAAC,0BAA0B,EAAE,yCAAyC,CAAC;SAC7E,MAAM,CAAC,qBAAqB,EAAE,2CAA2C,EAAE,KAAK,CAAC;SACjF,MAAM,CAAC,2BAA2B,EAAE,qCAAqC,EAAE,QAAQ,CAAC;SACpF,MAAM,CAAC,wBAAwB,EAAE,0CAA0C,EAAE,KAAK,CAAC;SACnF,MAAM,CAAC,0BAA0B,EAAE,iDAAiD,EAAE,KAAK,CAAC;SAC5F,MAAM,CAAC,OAAO,EAAE,sDAAsD,CAAC;SACvE,MAAM,CAAC,WAAW,EAAE,oCAAoC,CAAC;SACzD,MAAM,CACL,KAAK,EACH,SAAiB,EACjB,IAAY,EACZ,OAIC,EACD,EAAE;QACF,MAAM,OAAO,GAAG,iCAAiC,CAAC;YAChD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,eAAe,EAAE,OAAO,CAAC,SAAS;YAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,aAAa,EAAE,OAAO,CAAC,WAAW;YAClC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,KAAK,EAAE,OAAO,CAAC,GAAG;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;SACtB,CAAC,CAAA;QACF,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,8BAA8B,CAAC,CAAA;QACzE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;QAC9C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACvE,IAAI,OAAO,CAAC,OAAO;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAA;;YAC7E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC,CACF,EACH;QACE,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,CAAC,mFAAmF,CAAC;KAChG,CACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { MeetingMediaDescriptor, MeetingTranscriptionOptions, MeetingTranscriptionReceipt, MeetingTranscriptionSource, MeetingTranscriptReceiptStore } from "@wirecat/cli-meetings";
|
|
2
|
+
import type { LocalSpeechRecognitionModel, LocalSpeechRecognizer, LocalSpeechRecognizerOptions } from "@wirecat/cli-messaging/speech";
|
|
3
|
+
export interface LocalSpeechPort {
|
|
4
|
+
describe(model: string): Readonly<LocalSpeechRecognitionModel>;
|
|
5
|
+
open(model: string, options: LocalSpeechRecognizerOptions): Promise<LocalSpeechRecognizer>;
|
|
6
|
+
}
|
|
7
|
+
export interface LocalTranscriptionOptions extends MeetingTranscriptionOptions {
|
|
8
|
+
model: string;
|
|
9
|
+
modelsDirectory?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface LocalTranscriptionTarget {
|
|
12
|
+
accountId: number;
|
|
13
|
+
meetingId: number;
|
|
14
|
+
externalId: string;
|
|
15
|
+
}
|
|
16
|
+
export interface LocalTranscriptionCapabilities {
|
|
17
|
+
transcribe(reference: string, file: string, options: LocalTranscriptionOptions): Promise<MeetingTranscriptionReceipt>;
|
|
18
|
+
}
|
|
19
|
+
export declare const validateLocalTranscriptionOptions: (input: LocalTranscriptionOptions) => LocalTranscriptionOptions;
|
|
20
|
+
export declare const compactLocalTranscriptionReceipt: (receipt: MeetingTranscriptionReceipt) => {
|
|
21
|
+
applied: true;
|
|
22
|
+
accountId: number;
|
|
23
|
+
externalId: string;
|
|
24
|
+
meetingId: number;
|
|
25
|
+
created: boolean;
|
|
26
|
+
insertedTranscripts: number;
|
|
27
|
+
replayedTranscripts: number;
|
|
28
|
+
supersededTranscripts: number;
|
|
29
|
+
segments: number;
|
|
30
|
+
mediaSha256: string;
|
|
31
|
+
engine: string;
|
|
32
|
+
model: string;
|
|
33
|
+
modelVersion: string | null;
|
|
34
|
+
timing: "fixed-windows" | "recognition-segments";
|
|
35
|
+
};
|
|
36
|
+
export declare const createWavTranscriptionSource: (file: string, options: {
|
|
37
|
+
model: string;
|
|
38
|
+
modelsDirectory?: string;
|
|
39
|
+
env?: NodeJS.ProcessEnv;
|
|
40
|
+
speech?: () => Promise<LocalSpeechPort>;
|
|
41
|
+
}) => MeetingTranscriptionSource;
|
|
42
|
+
export declare const createLocalTranscriptionCapabilities: (store: {
|
|
43
|
+
accountId: number;
|
|
44
|
+
resolveMeeting(reference: string, signal?: AbortSignal): Promise<LocalTranscriptionTarget | null>;
|
|
45
|
+
appendTranscriptsWithReceipt: MeetingTranscriptReceiptStore["appendTranscriptsWithReceipt"];
|
|
46
|
+
}, input?: {
|
|
47
|
+
env?: NodeJS.ProcessEnv;
|
|
48
|
+
now?: () => number;
|
|
49
|
+
speech?: () => Promise<LocalSpeechPort>;
|
|
50
|
+
}) => LocalTranscriptionCapabilities;
|
|
51
|
+
export type { MeetingMediaDescriptor };
|
|
52
|
+
//# sourceMappingURL=local-transcription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-transcription.d.ts","sourceRoot":"","sources":["../src/local-transcription.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC9B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EACV,2BAA2B,EAC3B,qBAAqB,EACrB,4BAA4B,EAC7B,MAAM,+BAA+B,CAAA;AAItC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,2BAA2B,CAAC,CAAA;IAC9D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;CAC3F;AACD,MAAM,WAAW,yBAA0B,SAAQ,2BAA2B;IAC5E,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AACD,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB;AACD,MAAM,WAAW,8BAA8B;IAC7C,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAA;CACtH;AACD,eAAO,MAAM,iCAAiC,UAAW,yBAAyB,KAAG,yBA6BpF,CAAA;AACD,eAAO,MAAM,gCAAgC,YAAa,2BAA2B;IAKjF,OAAO;IACP,SAAS;IACT,UAAU;IACV,SAAS;IACT,OAAO;IACP,mBAAmB;IACnB,mBAAmB;IACnB,qBAAqB;IACrB,QAAQ;IACR,WAAW;IACX,MAAM;IACN,KAAK;IACL,YAAY;IACZ,MAAM;CAET,CAAA;AAKD,eAAO,MAAM,4BAA4B,SACjC,MAAM,WACH;IACP,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAA;CACxC,KACA,0BAoEF,CAAA;AACD,eAAO,MAAM,oCAAoC,UACxC;IACL,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAA;IACjG,4BAA4B,EAAE,6BAA6B,CAAC,8BAA8B,CAAC,CAAA;CAC5F,UACM;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAA;CAAE,KAC9F,8BAgDF,CAAA;AACD,YAAY,EAAE,sBAAsB,EAAE,CAAA"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { isAbsolute } from "node:path";
|
|
2
|
+
import { checkCancelled, ZoomError } from "./errors.js";
|
|
3
|
+
import { openWavAudio, preflightWavAudio } from "./wav-audio.js";
|
|
4
|
+
export const validateLocalTranscriptionOptions = (input) => {
|
|
5
|
+
const options = { ...input };
|
|
6
|
+
if (typeof options.model !== "string" ||
|
|
7
|
+
!options.model.trim() ||
|
|
8
|
+
options.model.length > 200 ||
|
|
9
|
+
/[\0\r\n]/.test(options.model))
|
|
10
|
+
throw new ZoomError("validation_error", "local transcription requires an explicit speech model");
|
|
11
|
+
if (options.modelsDirectory !== undefined &&
|
|
12
|
+
(typeof options.modelsDirectory !== "string" ||
|
|
13
|
+
!isAbsolute(options.modelsDirectory) ||
|
|
14
|
+
options.modelsDirectory.length > 4096 ||
|
|
15
|
+
/[\0\r\n]/.test(options.modelsDirectory)))
|
|
16
|
+
throw new ZoomError("validation_error", "speech model directory must be an absolute bounded path");
|
|
17
|
+
for (const [value, max, label] of [
|
|
18
|
+
[options.maxBytes, 4 * 1024 ** 3, "media bytes"],
|
|
19
|
+
[options.maxDurationMs, 24 * 3600_000, "media duration"],
|
|
20
|
+
[options.maxSegments, 100000, "segment count"],
|
|
21
|
+
[options.maxTextBytes, 64 * 1024 ** 2, "transcript text bytes"],
|
|
22
|
+
])
|
|
23
|
+
if (value !== undefined && (!Number.isSafeInteger(value) || value < 1 || value > max))
|
|
24
|
+
throw new ZoomError("validation_error", `invalid ${label} budget`);
|
|
25
|
+
for (const value of [options.apply, options.dryRun])
|
|
26
|
+
if (value !== undefined && typeof value !== "boolean")
|
|
27
|
+
throw new ZoomError("validation_error", "transcription apply and dry-run options must be booleans");
|
|
28
|
+
return options;
|
|
29
|
+
};
|
|
30
|
+
export const compactLocalTranscriptionReceipt = (receipt) => {
|
|
31
|
+
const append = receipt.append;
|
|
32
|
+
if (!receipt.applied || !append || !Number.isSafeInteger(append.meeting.meeting.id) || append.meeting.meeting.id < 1)
|
|
33
|
+
throw new ZoomError("outcome_unknown", "transcription did not return a usable committed acknowledgement");
|
|
34
|
+
return {
|
|
35
|
+
applied: true,
|
|
36
|
+
accountId: receipt.accountId,
|
|
37
|
+
externalId: receipt.externalId,
|
|
38
|
+
meetingId: append.meeting.meeting.id,
|
|
39
|
+
created: append.created,
|
|
40
|
+
insertedTranscripts: append.insertedTranscripts,
|
|
41
|
+
replayedTranscripts: append.replayedTranscripts,
|
|
42
|
+
supersededTranscripts: append.supersededTranscripts,
|
|
43
|
+
segments: receipt.segments,
|
|
44
|
+
mediaSha256: receipt.media.contentHash,
|
|
45
|
+
engine: receipt.media.recognition.engine,
|
|
46
|
+
model: receipt.media.recognition.model,
|
|
47
|
+
modelVersion: receipt.media.recognition.version ?? null,
|
|
48
|
+
timing: receipt.media.recognition.timing ?? "recognition-segments",
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
const loadSpeech = async () => {
|
|
52
|
+
const speech = await import("@wirecat/cli-messaging/speech");
|
|
53
|
+
return { describe: speech.localSpeechRecognitionModel, open: speech.openLocalSpeechRecognizer };
|
|
54
|
+
};
|
|
55
|
+
export const createWavTranscriptionSource = (file, options) => {
|
|
56
|
+
const selected = { ...options, ...(options.env ? { env: { ...options.env } } : {}) };
|
|
57
|
+
let plan;
|
|
58
|
+
let recognition;
|
|
59
|
+
let speech;
|
|
60
|
+
return {
|
|
61
|
+
async describe(context) {
|
|
62
|
+
checkCancelled(context.signal);
|
|
63
|
+
speech = await (selected.speech ?? loadSpeech)();
|
|
64
|
+
recognition = Object.freeze({ ...speech.describe(selected.model) });
|
|
65
|
+
plan = await preflightWavAudio(file, context);
|
|
66
|
+
return Object.freeze({
|
|
67
|
+
...plan.media,
|
|
68
|
+
recognition: Object.freeze({
|
|
69
|
+
engine: recognition.engine,
|
|
70
|
+
model: recognition.model,
|
|
71
|
+
version: recognition.version,
|
|
72
|
+
timing: "fixed-windows",
|
|
73
|
+
}),
|
|
74
|
+
});
|
|
75
|
+
},
|
|
76
|
+
async *segments(media, context) {
|
|
77
|
+
if (!plan ||
|
|
78
|
+
!recognition ||
|
|
79
|
+
!speech ||
|
|
80
|
+
media.contentHash !== plan.media.contentHash ||
|
|
81
|
+
media.id !== plan.media.id ||
|
|
82
|
+
media.size !== plan.media.size ||
|
|
83
|
+
media.durationMs !== plan.media.durationMs ||
|
|
84
|
+
media.recognition.engine !== recognition.engine ||
|
|
85
|
+
media.recognition.model !== recognition.model ||
|
|
86
|
+
media.recognition.version !== recognition.version)
|
|
87
|
+
throw new ZoomError("validation_error", "transcription media descriptor does not match its prepared audio and model");
|
|
88
|
+
const audio = await openWavAudio(plan, context);
|
|
89
|
+
let model;
|
|
90
|
+
try {
|
|
91
|
+
checkCancelled(context.signal);
|
|
92
|
+
model = await speech.open(recognition.model, {
|
|
93
|
+
directory: selected.modelsDirectory,
|
|
94
|
+
env: selected.env,
|
|
95
|
+
signal: context.signal,
|
|
96
|
+
});
|
|
97
|
+
if (model.engine !== recognition.engine ||
|
|
98
|
+
model.model !== recognition.model ||
|
|
99
|
+
model.version !== recognition.version)
|
|
100
|
+
throw new ZoomError("validation_error", "installed speech recognizer changed after the media preview");
|
|
101
|
+
for await (const window of audio.windows()) {
|
|
102
|
+
checkCancelled(context.signal);
|
|
103
|
+
const text = await model.recognize(window.samples, { signal: context.signal });
|
|
104
|
+
checkCancelled(context.signal);
|
|
105
|
+
yield { startMs: window.startMs, endMs: window.endMs, text };
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
try {
|
|
110
|
+
await model?.close();
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
await audio.close();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
export const createLocalTranscriptionCapabilities = (store, input = {}) => {
|
|
120
|
+
const accountId = store.accountId;
|
|
121
|
+
if (!Number.isSafeInteger(accountId) || accountId < 1)
|
|
122
|
+
throw new ZoomError("validation_error", "local transcription requires a selected existing account");
|
|
123
|
+
const options = { ...input, ...(input.env ? { env: { ...input.env } } : {}) };
|
|
124
|
+
const resolveMeeting = store.resolveMeeting.bind(store);
|
|
125
|
+
const appendTranscriptsWithReceipt = store.appendTranscriptsWithReceipt.bind(store);
|
|
126
|
+
return {
|
|
127
|
+
async transcribe(reference, file, raw) {
|
|
128
|
+
const request = validateLocalTranscriptionOptions(raw);
|
|
129
|
+
checkCancelled(request.signal);
|
|
130
|
+
const resolved = await resolveMeeting(reference, request.signal);
|
|
131
|
+
const found = resolved && {
|
|
132
|
+
accountId: resolved.accountId,
|
|
133
|
+
meetingId: resolved.meetingId,
|
|
134
|
+
externalId: resolved.externalId,
|
|
135
|
+
};
|
|
136
|
+
if (!found ||
|
|
137
|
+
found.accountId !== accountId ||
|
|
138
|
+
!Number.isSafeInteger(found.meetingId) ||
|
|
139
|
+
found.meetingId < 1 ||
|
|
140
|
+
typeof found.externalId !== "string" ||
|
|
141
|
+
!found.externalId.trim())
|
|
142
|
+
throw new ZoomError("not_found", "meeting was not found in the selected account");
|
|
143
|
+
const target = Object.freeze({ accountId, externalId: found.externalId, now: options.now?.() ?? Date.now() });
|
|
144
|
+
const source = createWavTranscriptionSource(file, {
|
|
145
|
+
model: request.model,
|
|
146
|
+
modelsDirectory: request.modelsDirectory,
|
|
147
|
+
env: options.env,
|
|
148
|
+
speech: options.speech,
|
|
149
|
+
});
|
|
150
|
+
const { transcribeMeeting } = await import("@wirecat/cli-meetings");
|
|
151
|
+
return transcribeMeeting(source, {
|
|
152
|
+
appendTranscriptsWithReceipt(value) {
|
|
153
|
+
if (value.accountId !== accountId || value.externalId !== target.externalId)
|
|
154
|
+
throw new ZoomError("validation_error", "transcription append must retain its selected target");
|
|
155
|
+
return appendTranscriptsWithReceipt(value);
|
|
156
|
+
},
|
|
157
|
+
}, target, request);
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
//# sourceMappingURL=local-transcription.js.map
|