@wirecat/zoom-cli 0.7.3 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +59 -56
  2. package/dist/api.d.ts +4 -2
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +4 -3
  5. package/dist/api.js.map +1 -1
  6. package/dist/archive-commands.d.ts.map +1 -1
  7. package/dist/archive-commands.js +37 -48
  8. package/dist/archive-commands.js.map +1 -1
  9. package/dist/archive-import.d.ts +1 -1
  10. package/dist/archive-import.d.ts.map +1 -1
  11. package/dist/archive-import.js +2 -2
  12. package/dist/archive-import.js.map +1 -1
  13. package/dist/archive-transcripts.d.ts +1 -1
  14. package/dist/archive-transcripts.d.ts.map +1 -1
  15. package/dist/archive-transcripts.js +1 -1
  16. package/dist/archive-transcripts.js.map +1 -1
  17. package/dist/bin/zm.js +14 -9
  18. package/dist/bin/zm.js.map +1 -1
  19. package/dist/commands.d.ts.map +1 -1
  20. package/dist/commands.js +41 -14
  21. package/dist/commands.js.map +1 -1
  22. package/dist/errors.d.ts.map +1 -1
  23. package/dist/errors.js +2 -2
  24. package/dist/errors.js.map +1 -1
  25. package/dist/execution.js +2 -2
  26. package/dist/execution.js.map +1 -1
  27. package/dist/files.d.ts +4 -2
  28. package/dist/files.d.ts.map +1 -1
  29. package/dist/files.js +16 -6
  30. package/dist/files.js.map +1 -1
  31. package/dist/folders.js +1 -1
  32. package/dist/folders.js.map +1 -1
  33. package/dist/index.d.ts +1 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/ingestion-search-commands.d.ts.map +1 -1
  36. package/dist/ingestion-search-commands.js +12 -11
  37. package/dist/ingestion-search-commands.js.map +1 -1
  38. package/dist/keys.d.ts +3 -0
  39. package/dist/keys.d.ts.map +1 -0
  40. package/dist/keys.js +16 -0
  41. package/dist/keys.js.map +1 -0
  42. package/dist/local-transcription-commands.js +8 -8
  43. package/dist/local-transcription-commands.js.map +1 -1
  44. package/dist/local-transcription.d.ts +2 -2
  45. package/dist/local-transcription.d.ts.map +1 -1
  46. package/dist/local-transcription.js +2 -2
  47. package/dist/local-transcription.js.map +1 -1
  48. package/dist/mcp-server.d.ts +1 -1
  49. package/dist/mcp-server.d.ts.map +1 -1
  50. package/dist/mcp-server.js +59 -54
  51. package/dist/mcp-server.js.map +1 -1
  52. package/dist/meeting-context-commands.d.ts.map +1 -1
  53. package/dist/meeting-context-commands.js +22 -20
  54. package/dist/meeting-context-commands.js.map +1 -1
  55. package/dist/meeting-context.d.ts +6 -3
  56. package/dist/meeting-context.d.ts.map +1 -1
  57. package/dist/meeting-context.js +12 -4
  58. package/dist/meeting-context.js.map +1 -1
  59. package/dist/meeting-integration-commands.js +9 -9
  60. package/dist/meeting-integration-commands.js.map +1 -1
  61. package/dist/meeting-integration.d.ts +2 -2
  62. package/dist/meeting-integration.d.ts.map +1 -1
  63. package/dist/meeting-integration.js +1 -1
  64. package/dist/meeting-integration.js.map +1 -1
  65. package/dist/meeting-search-commands.d.ts +10 -20
  66. package/dist/meeting-search-commands.d.ts.map +1 -1
  67. package/dist/meeting-search-commands.js +123 -27
  68. package/dist/meeting-search-commands.js.map +1 -1
  69. package/dist/meeting-semantic-commands.d.ts +3 -1
  70. package/dist/meeting-semantic-commands.d.ts.map +1 -1
  71. package/dist/meeting-semantic-commands.js +11 -30
  72. package/dist/meeting-semantic-commands.js.map +1 -1
  73. package/dist/meeting-semantic.d.ts +2 -2
  74. package/dist/meeting-semantic.d.ts.map +1 -1
  75. package/dist/meeting-semantic.js +28 -1
  76. package/dist/meeting-semantic.js.map +1 -1
  77. package/dist/ordinary-file.js +3 -3
  78. package/dist/ordinary-file.js.map +1 -1
  79. package/dist/output-file.js +2 -2
  80. package/dist/output-file.js.map +1 -1
  81. package/dist/program.d.ts +4 -5
  82. package/dist/program.d.ts.map +1 -1
  83. package/dist/program.js +160 -133
  84. package/dist/program.js.map +1 -1
  85. package/dist/recording-archive.d.ts.map +1 -1
  86. package/dist/recording-archive.js +1 -1
  87. package/dist/recording-archive.js.map +1 -1
  88. package/dist/recording-partial-store.d.ts +1 -1
  89. package/dist/recording-partial-store.d.ts.map +1 -1
  90. package/dist/recording-promotion-store.d.ts +1 -1
  91. package/dist/recording-promotion-store.d.ts.map +1 -1
  92. package/dist/recording-promotion-store.js +1 -1
  93. package/dist/recording-promotion-store.js.map +1 -1
  94. package/dist/recording-schedule-commands.js +11 -11
  95. package/dist/recording-schedule-commands.js.map +1 -1
  96. package/dist/recording-schedule.d.ts +1 -1
  97. package/dist/recording-schedule.d.ts.map +1 -1
  98. package/dist/recording-schedule.js +1 -1
  99. package/dist/recording-schedule.js.map +1 -1
  100. package/dist/recording-sync-store.d.ts +1 -1
  101. package/dist/recording-sync-store.d.ts.map +1 -1
  102. package/dist/recording-sync-store.js +1 -1
  103. package/dist/recording-sync-store.js.map +1 -1
  104. package/dist/recording-sync.d.ts +1 -1
  105. package/dist/recording-sync.d.ts.map +1 -1
  106. package/dist/recording-sync.js +1 -1
  107. package/dist/recording-sync.js.map +1 -1
  108. package/dist/recordings.d.ts +1 -1
  109. package/dist/recordings.d.ts.map +1 -1
  110. package/dist/remote-http.js +2 -2
  111. package/dist/remote-http.js.map +1 -1
  112. package/dist/remote-meetings.d.ts +8 -8
  113. package/dist/remote-meetings.d.ts.map +1 -1
  114. package/dist/remote-meetings.js +1 -1
  115. package/dist/remote-meetings.js.map +1 -1
  116. package/dist/store-connection.d.ts +4 -4
  117. package/dist/store-connection.d.ts.map +1 -1
  118. package/dist/store-connection.js +13 -36
  119. package/dist/store-connection.js.map +1 -1
  120. package/dist/tokens.d.ts.map +1 -1
  121. package/dist/tokens.js +6 -6
  122. package/dist/tokens.js.map +1 -1
  123. package/dist/unified-search.d.ts +1 -1
  124. package/dist/unified-search.d.ts.map +1 -1
  125. package/dist/unified-search.js.map +1 -1
  126. package/dist/watch-commands.d.ts +4 -4
  127. package/dist/watch-commands.d.ts.map +1 -1
  128. package/dist/watch-commands.js +10 -10
  129. package/dist/watch-commands.js.map +1 -1
  130. package/dist/wav-audio.d.ts +1 -1
  131. package/dist/wav-audio.d.ts.map +1 -1
  132. package/dist/wav-audio.js +1 -1
  133. package/dist/wav-audio.js.map +1 -1
  134. package/package.json +4 -3
  135. package/skills/zoom-cli/SKILL.md +30 -22
@@ -13,24 +13,24 @@ on stderr; use `--fields` to limit returned content. `zm doctor --json` checks l
13
13
 
14
14
  ## Recording archives
15
15
 
16
- Use `recordings sync --from <date> --to <date> --destination <directory> --jsonl` to archive history
16
+ Use `recordings sync --since-time <date> --until-time <date> --destination <directory> --jsonl` to archive history
17
17
  across months. It emits serial occurrence receipts and accepts up to ten calendar years.
18
18
  Use `recordings list` to find cloud recording occurrences, then `recordings show <id-or-uuid>` to
19
19
  inspect assets. Download with `recordings download <id-or-uuid> --destination <directory>`.
20
20
  Prefer occurrence UUIDs for recurring meetings. Download access depends on Zoom scopes and the
21
21
  signed-in account; attending a meeting does not imply access to its recording API.
22
22
 
23
- Re-run against the same destination to skip verified manifest entries. Use `recordings archive verify`
23
+ Re-run against the same destination to skip verified manifest entries. Use `recordings archive check`
24
24
  for local checksums; it works with `--offline`. The receipt distinguishes downloaded, skipped and
25
25
  unavailable assets. A failed transfer can leave earlier completed files; retry starts the incomplete
26
26
  file again. Existing files are never overwritten. Do not infer HTTP byte-range resume.
27
27
 
28
28
  Read cues with `recordings archive transcript <directory>` or search their text with
29
- `recordings archive search <directory> <query> --limit 100`. Both work offline without configuration,
29
+ `search meetings <query> --archive <directory> --limit 100`. Both work offline without configuration,
30
30
  login or a database and verify each WebVTT file they read before returning results. Search can stop
31
31
  before reading later files once it proves another match beyond the limit. Select `--uuid` or
32
32
  comma-separated `--file-ids`; `--max-bytes` defaults to 8 MiB per file. Search is literal, normalized
33
- and case-insensitive, with a maximum of 1000 matches. When `hasMore` is true, increase the limit or
33
+ and case-insensitive, with a maximum of 1000 matches. When `has_more` is true, increase the limit or
34
34
  narrow the occurrence, file or query selection;
35
35
  there is no continuation cursor. These reads do not import archive assets into the database.
36
36
 
@@ -49,32 +49,32 @@ adopt untracked files. Keep active and foreign locks intact.
49
49
  ## Stored meeting content
50
50
 
51
51
  Stored `meetings` ids are local database ids, different from remote Zoom ids. Use `meetings show`,
52
- `transcript`, `summary` and `search` for local reads. `transcript --history` includes retained versions.
52
+ `transcript`, `summary` and `search meetings` for local reads. `transcript --history` includes retained versions.
53
53
  Export Markdown or VTT with `meetings export <id> --format markdown|vtt`; file output requires an
54
54
  explicit `--output` path and never overwrites an existing file. VTT export requires an unambiguous
55
55
  current transcript or an explicit transcript id.
56
56
 
57
57
  Store commands use the shared SQLite database; `MESSAGING_STORE` selects an explicit path. Select a
58
- local profile before import or pull. Reads require existing profile data; they do not register it. `pull --lookback-days` revisits late
58
+ local profile before import or pull. Reads require existing profile data; they do not register it. `meetings sync --lookback-days` revisits late
59
59
  transcripts. File imports preserve the API pull cursor. Serialize ingestion for the same account.
60
60
  Local profile labels group stored data and do not select a different OAuth account.
61
61
 
62
- `zm watch <folder> --jsonl` rescans legacy transcript files in the foreground; each cycle closes its
62
+ `zm watch files <folder> --jsonl` rescans legacy transcript files in the foreground; each cycle closes its
63
63
  connection before emitting a receipt. Stop with Ctrl-C. Fully completed late receipts have at most
64
64
  one second to flush; cancellation never starts another cycle. Hashed cloud archive VTT assets use
65
65
  `recordings archive import`, separately from legacy folder import.
66
66
 
67
- Use `zm watch --source api --lookback-days 7 --jsonl` for repeated online pulls that revisit late
68
- transcripts. Without a folder or explicit source, watch uses the configured source; files can use
69
- the configured folder. `--since` and `--lookback-days` apply only to API watching. Configuration is
67
+ Use `zm watch api --lookback-days 7 --jsonl` for repeated online pulls that revisit late
68
+ transcripts. Without `api` or `files`, watch uses the configured source; `files` without a folder
69
+ uses the configured folder. `--since-time` and `--lookback-days` apply only to API watching. Configuration is
70
70
  captured before the first cycle, so restart to change profiles or source settings.
71
- `--since` is the initial bound until a cursor write succeeds; later cycles use cursor plus overlap.
71
+ `--since-time` is the initial bound until a cursor write succeeds; later cycles use cursor plus overlap.
72
72
  The selected overlap also subtracts from the initial bound.
73
73
 
74
74
  `zm serve --mcp` provides seven read-only stored meeting tools. Discovery opens no database; reads
75
- use the selected account. MCP uses its own framing, so omit JSON/JSONL/field-selection flags. `--meeting-context` adds three
75
+ use the selected account. MCP uses its own framing, so omit JSON/JSONL/field-selection flags. `--meeting-context` adds four
76
76
  read-only context tools; `--unified-search` adds one meetings-only shared search tool;
77
- `--semantic --model <id>` adds one vector query tool. Remote model selection also requires
77
+ `--semantic --model <model>` lets `search_meetings` rank existing vectors with `by_meaning`. Remote model selection also requires
78
78
  `--base-url` and `--dims`. The server fixes the model at startup and the profile on its first read.
79
79
  Clients cannot select another model or account. Generation and task creation are not MCP tools.
80
80
 
@@ -84,23 +84,29 @@ database held open by another process is kept until a later default-path open ca
84
84
 
85
85
  ## Evidence, context and shared search
86
86
 
87
+ Transcript word-search hits include a retained cue `ref`. Use `meetings passage <ref> --before-n 3
88
+ --after-n 3 --format markdown` to inspect nearby lines, or `--json` for structured cues. Context has
89
+ explicit boundaries and byte clipping; inclusive `before_ref`/`after_ref` anchors overlap. Historical
90
+ revisions remain readable and are marked superseded. `meeting_passage` is available with the
91
+ MCP `--meeting-context` option; it cannot select another account.
92
+
87
93
  Use `meetings evidence meeting:<account>/<meeting>[/<transcript>[/<cue-position>]]` for bounded
88
94
  stored evidence. Historical transcript references remain stable. Follow returned coverage and
89
- continuation fields; use `--after` for a cue reference or `--after-transcript-id` for revision scans,
95
+ continuation fields; use `--cursor` for a cue reference or `--after-transcript-id` for revision scans,
90
96
  never both. Bound content with `--cues` and `--bytes`, and work with `--max-read-bytes` and
91
97
  `--max-transcript-pages`. Do not treat a bounded page as complete history.
92
98
 
93
99
  Use `meetings context person:<id>` for identity-linked context in the selected account. It does not
94
100
  match speakers by name or prove that a linked participant spoke. Pending indexes and scan limits
95
- can leave context incomplete. `meetings task-proposal <reference> --kind question|request|mention|promise`
101
+ can leave context incomplete. `meetings task-proposal <reference> --type question|request|mention|promise`
96
102
  is read-only: `applied: false` and `persistence: "proposal-only"` do not mean a task was created.
97
103
 
98
104
  `search all <query>` searches meetings by default. Broader `--only messages,mail,notes,meetings`
99
105
  is explicit. Messages use the selected local account, mail includes stored email accounts, and
100
106
  notes are store-global. Meetings use word prefixes; unsupported syntax or exact queries
101
- are reported as skipped. Resume meetings-only results using the returned `meetings.nextCursor` as
107
+ are reported as skipped. Resume meetings-only results using the returned `meetings.next_cursor` as
102
108
  `--meeting-cursor '<json>'`, bound to account and query. JSONL retains the entire report, including
103
- coverage, skips and cursors. Existing `meetings search` remains literal transcript search.
109
+ coverage, skips and cursors.
104
110
 
105
111
  ## Explicit vector work
106
112
 
@@ -111,10 +117,12 @@ models require explicit `--base-url` and `--dims`; OpenAI uses `OPENAI_API_KEY`.
111
117
  is refused with `--offline`. Keep credentials out of endpoint URLs and output.
112
118
 
113
119
  `--after-transcript-id` resumes chunk rebuilding; `--after-hash` resumes missing vectors. Current
114
- revision hashes are rechecked before save. `meetings semantic <query> --model <id>` embeds only
115
- the query and reads existing vectors; it never generates stored vectors or rebuilds chunks. Ranking
116
- covers scanned candidates, not all history. `--after-chunk-id` continues candidate scanning rather
117
- than globally ranked pagination. Index and archive completeness remain unknown. Use returned
120
+ revision hashes are rechecked before save. `search meetings <query> --model <model>` searches by
121
+ meaning: it first splits current transcripts again and embeds passages without a vector for that
122
+ model (with a remote model, those passages are sent to it), then ranks. Store filters do not apply.
123
+ Ranking covers scanned candidates, not all history. `--cursor` continues candidate scanning rather
124
+ than globally ranked pagination. The MCP `search_meetings` tool with `by_meaning` only reads
125
+ existing vectors. Index and archive completeness remain unknown. Use returned
118
126
  candidate coverage and the explicit row/text byte bounds.
119
127
 
120
128
  ## Remote meeting changes
@@ -137,4 +145,4 @@ bounded by `--max-output-bytes`, separate from the download's per-file `--max-by
137
145
 
138
146
  ## Bounded context-filtered search
139
147
 
140
- Use `meetings search-page <query>` with `--since`/`--until` and optionally `--identity-id`, `--person-id`, `--project`, `--tag` or `--topic`. Identity IDs come from observed participant results; person IDs follow explicit identity links. Filters select meetings, never attribute cue speech. Project names, keys and aliases resolve existing vocabulary and require confirmed membership; labels require explicit meeting taggings. Do not silently infer membership from matching words or merge similar participant names. Missing or ambiguous names fail. Inspect pending indexing and unknown archive coverage even for empty pages. `meeting_search_page` exposes the same selected-account MCP read.
148
+ Use `search meetings <query>` with `--since-time`/`--until-time` and optionally `--identity-id`, `--person-id`, `--event-id`, `--series-id`, `--project`, `--tag` or `--topic`. It indexes newly stored meetings before reading; there is no separate index step. Identity IDs come from observed participant results; person IDs follow explicit identity links. Filters select meetings, never attribute cue speech. Project names, keys and aliases resolve existing vocabulary and require confirmed membership; labels require explicit meeting taggings. Do not silently infer membership from matching words or merge similar participant names. Missing or ambiguous names fail. Inspect pending indexing and unknown archive coverage even for empty pages. `search_meetings` exposes the same selected-account MCP read.