@wirecat/cli-core 0.406.0 → 0.407.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/CHANGELOG.md CHANGED
@@ -5,6 +5,18 @@ Notable changes to `@wirecat/cli-core` (`@wirecat/cli-messaging` up to 0.261.0,
5
5
  minor version may break callers, and says how under "Changed — may break callers". `pnpm docs:check` checks the
6
6
  shape of this file.
7
7
 
8
+ ## 0.407.0 — 24.10.2026
9
+
10
+ ### Added
11
+
12
+ - The `contact` entity has optional `email` and `phones` (number and label), for a source that knows them, such as zm's Zoom contacts.
13
+
14
+ - Command discovery projections preserve the CLI document and command identities while selecting fields inside its command tree.
15
+
16
+ - Portable ingestion, export, association, transcription and embedding receipts have shared entities and `meetingResultItem` serializers. Public IDs are strings; stored numeric IDs remain internal.
17
+
18
+ - Meeting batch results declare their correlated success/error schemas. `answerEntity` can name a separate typed projection payload, preserving batch field selection inside each answer without weakening its outer result contract.
19
+
8
20
  ## 0.406.0 — 24.10.2026
9
21
 
10
22
  ### Added
@@ -1,5 +1,8 @@
1
1
  import type { Command } from "commander";
2
2
  import type * as v from "valibot";
3
3
  /** Provider-specific wire fields must not redefine an entity shared by every CLI. */
4
- export declare const answerEntity: (command: Command, name: string, schema: v.GenericSchema) => Command;
4
+ export declare const answerEntity: (command: Command, name: string, schema: v.GenericSchema, options?: {
5
+ project?: v.GenericSchema;
6
+ }) => Command;
5
7
  export declare const answerEntitySchema: (command: Command | undefined) => v.GenericSchema | undefined;
8
+ export declare const answerProjectionSchema: (command: Command | undefined) => v.GenericSchema | undefined;
@@ -2,14 +2,16 @@ import { annotate, metaOf } from "@wirecat/cli-base/commands";
2
2
  import { ENTITIES } from "../entities/index.js";
3
3
  const schemas = new WeakMap();
4
4
  /** Provider-specific wire fields must not redefine an entity shared by every CLI. */
5
- export const answerEntity = (command, name, schema) => {
5
+ export const answerEntity = (command, name, schema, options = {}) => {
6
6
  if (Object.hasOwn(ENTITIES, name))
7
7
  throw new Error(`${name} is a shared entity; use its existing schema`);
8
8
  if (!/^[a-z][a-z0-9_]*$/.test(name))
9
9
  throw new Error("an answer entity needs a lowercase name");
10
10
  if (!("entries" in schema) && schema.type !== "union")
11
11
  throw new Error("an answer entity needs an object schema or a union of object schemas");
12
- schemas.set(command, { name, schema });
12
+ if (options.project && !("entries" in options.project) && options.project.type !== "union")
13
+ throw new Error("projection needs an object schema or a union of object schemas");
14
+ schemas.set(command, { name, schema, ...options });
13
15
  return annotate(command, { output: { entity: name } });
14
16
  };
15
17
  export const answerEntitySchema = (command) => {
@@ -23,3 +25,7 @@ export const answerEntitySchema = (command) => {
23
25
  const own = schemas.get(command);
24
26
  return own?.name === name ? own.schema : undefined;
25
27
  };
28
+ export const answerProjectionSchema = (command) => {
29
+ const own = command && schemas.get(command);
30
+ return own && metaOf(command).output?.entity === own.name ? own.project : undefined;
31
+ };
@@ -2,7 +2,7 @@ import { CliError } from "@wirecat/cli-base";
2
2
  import { describeOptions, metaOf } from "@wirecat/cli-base/commands";
3
3
  import { jsonSchemaOf } from "@wirecat/cli-base/standards";
4
4
  import { keyForCommand } from "../sends/permissions.js";
5
- import { answerEntitySchema } from "./answer-entity.js";
5
+ import { answerEntitySchema, answerProjectionSchema } from "./answer-entity.js";
6
6
  import { answerSchema } from "./envelope.js";
7
7
  export const SCHEMA_DIALECT = "https://json-schema.org/draft/2020-12/schema";
8
8
  /**
@@ -97,7 +97,9 @@ export const commandContract = (command) => {
97
97
  outputSchemaCoverage: output.coverage,
98
98
  jsonlSchema: { $schema: SCHEMA_DIALECT, ...output.item },
99
99
  jsonlSchemaCoverage: output.coverage,
100
- projection: "--json=<fields> may omit item/object members; present members retain their types and envelopes are preserved",
100
+ projection: answerProjectionSchema(command)
101
+ ? "--json=<fields> selects inside each nested answer; correlation and envelopes are preserved"
102
+ : "--json=<fields> may omit item/object members; present members retain their types and envelopes are preserved",
101
103
  validation: {
102
104
  syntax: "declared",
103
105
  semantic: "command-and-provider-validation",
@@ -1,5 +1,6 @@
1
1
  export { AI_ENTRIES, AI_SETTING_KEYS, type AISettings, resolveAISettings } from "../analysis/settings.js";
2
2
  export { parseDuration } from "../domain/duration.js";
3
+ export { syncProgress } from "../entities/store-records.js";
3
4
  export { isCliFailure, isCommanderFailure } from "../errors/failures.js";
4
5
  export { type AppErrors, failureContext } from "../errors/reasons.js";
5
6
  export { botInstructions } from "../mcp/bot/instructions.js";
@@ -10,6 +11,7 @@ export { callMeetingProjectCandidatesTool, meetingProjectCandidatesTool } from "
10
11
  export { callMeetingSeriesInventoryTool, meetingSeriesInventoryTool } from "../mcp/meeting-series-inventory.js";
11
12
  export { registerLinkConversationsPrompt } from "../mcp/prompts.js";
12
13
  export { agentBody, agentJson, agentResult, UNTRUSTED, UNTRUSTED_INSTRUCTION } from "../mcp/text.js";
14
+ export { MEETING_RESULT_ENTITIES } from "../meetings/index.js";
13
15
  export { type AppIdentity, envName, readOnlyLockOf, readOnlyRefusal } from "../ports/app.js";
14
16
  export type { AccountEditing, AccountHealth, AccountRecords, AccountSettings, AccountStanding, AccountTools, After, BotChats, ChannelComments, ChatDeletion, ChatFolders, ChatReading, ContactBook, Download, ForumControl, ForumState, GroupAdmin, GroupModeration, HistoryBatch, HistoryChatEvent, HistoryReaction, HistoryStar, HistoryVote, InviteLinks, JoinRequests, LiveUpdates, MessageButtons, MessageEditing, MessageMedia, MessagePermalinks, MessagePins, MessagePolls, MessageReactions, MessageSearch, MessageStars, MessengerAdapter, MessengerCore, NewPoll, OfficialStats, PassiveUpdates, PersonProfiles, ProfileChange, ProfilePhotos, PushedHistory, ReadState, RemoteFile, ScheduledMessages, SenderIdentities, SenderSearch, SendOptions, Sent, ServerQuery, ServerReads, ThreadAddressing, TopicEditing, TopicHistory, TopicReadState, Transcript, } from "../ports/messenger.js";
15
17
  export type { Fetching, MediaOption, MessengerTraits } from "../ports/traits.js";
@@ -54,8 +56,8 @@ export { loadSnakeCaseConfig } from "./config-keys.js";
54
56
  export { type AgentRun, type BaseContext, type BaseEnvironment, baseContext, environmentOf, outputFor, provide, secretInputOf, } from "./context.js";
55
57
  export { type Closeable, withDeadline } from "./deadline.js";
56
58
  export { DEFAULT_CONFIG, ensureDefaultConfig } from "./default-config.js";
57
- export { changesAuthority, changesAuthorityAt, destroysNothing, FETCH, grantsAuthority, isLogin, isOtherServiceCall, isStoreChange, judgedEffects, judgedTargets, LOCAL_READ, LOCAL_WRITE, logsInOrOut, NO_EFFECTS, ownerOnlyOption, REMOTE_READ, REMOTE_WRITE, reachesOtherService, refuseUnderReadOnly, } from "./effects.js";
58
- export { type AnswerOutput, answerSchema, type Body, type ItemBody, itemAnswer, itemOf, jsonlRecords, judgedAnswer, type ListBody, type ListInput, listOf, metaNow, printItem, renderAnswer, sealed, snakeKeys, snakeKeysKeeping, } from "./envelope.js";
59
+ export { changesAuthority, changesAuthorityAt, changesAuthorityNow, destroysNothing, FETCH, grantsAuthority, isLogin, isOtherServiceCall, isStoreChange, judgedEffects, judgedTargets, LOCAL_READ, LOCAL_WRITE, logsInOrOut, NO_EFFECTS, ownerOnlyOption, REMOTE_READ, REMOTE_WRITE, reachesOtherService, refuseUnderReadOnly, } from "./effects.js";
60
+ export { type AnswerOutput, answerSchema, type Body, type ItemBody, isBody, itemAnswer, itemOf, jsonlRecords, judgedAnswer, type ListBody, type ListInput, listOf, metaNow, printItem, renderAnswer, sealed, snakeKeys, snakeKeysKeeping, } from "./envelope.js";
59
61
  export { withAbort } from "./execution.js";
60
62
  export { askSetupQuestions, asksAtStart, type FirstRun, type FirstRunIo, LANGUAGES, setupAtStart, systemLanguage, } from "./first-run.js";
61
63
  export { checkGuide, checkStep, type GuideOptions, type GuideReference, type GuideStep, guideCommand, loadScenarios, MEMO_SCENARIOS, type Scenario, shellProblems, } from "./guide.js";
@@ -74,6 +76,7 @@ export { addMeetingPreparationCommand } from "./meeting-preparation-command.js";
74
76
  export { type MeetingPreparationReader, meetingPreparationInput, readMeetingPreparation, } from "./meeting-preparation-read.js";
75
77
  export { addMeetingProjectCandidatesCommand } from "./meeting-project-candidates-command.js";
76
78
  export { readMeetingProjectCandidates } from "./meeting-project-candidates-read.js";
79
+ export { meetingResultItem } from "./meeting-results.js";
77
80
  export { addMeetingSeriesInventoryCommand } from "./meeting-series-inventory-command.js";
78
81
  export { type MeetingSeriesInventoryReader, readMeetingSeriesInventory } from "./meeting-series-inventory-read.js";
79
82
  export { accountCommand } from "./messenger/account-command.js";
package/dist/cli/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { AI_ENTRIES, AI_SETTING_KEYS, resolveAISettings } from "../analysis/settings.js";
2
2
  export { parseDuration } from "../domain/duration.js";
3
+ export { syncProgress } from "../entities/store-records.js";
3
4
  export { isCliFailure, isCommanderFailure } from "../errors/failures.js";
4
5
  export { failureContext } from "../errors/reasons.js";
5
6
  export { botInstructions } from "../mcp/bot/instructions.js";
@@ -8,6 +9,7 @@ export { callMeetingProjectCandidatesTool, meetingProjectCandidatesTool } from "
8
9
  export { callMeetingSeriesInventoryTool, meetingSeriesInventoryTool } from "../mcp/meeting-series-inventory.js";
9
10
  export { registerLinkConversationsPrompt } from "../mcp/prompts.js";
10
11
  export { agentBody, agentJson, agentResult, UNTRUSTED, UNTRUSTED_INSTRUCTION } from "../mcp/text.js";
12
+ export { MEETING_RESULT_ENTITIES } from "../meetings/index.js";
11
13
  export { envName, readOnlyLockOf, readOnlyRefusal } from "../ports/app.js";
12
14
  export { senderFacts } from "../replies/dry-run.js";
13
15
  export { replyRenderer } from "../replies/rendering.js";
@@ -49,8 +51,8 @@ export { loadSnakeCaseConfig } from "./config-keys.js";
49
51
  export { baseContext, environmentOf, outputFor, provide, secretInputOf, } from "./context.js";
50
52
  export { withDeadline } from "./deadline.js";
51
53
  export { DEFAULT_CONFIG, ensureDefaultConfig } from "./default-config.js";
52
- export { changesAuthority, changesAuthorityAt, destroysNothing, FETCH, grantsAuthority, isLogin, isOtherServiceCall, isStoreChange, judgedEffects, judgedTargets, LOCAL_READ, LOCAL_WRITE, logsInOrOut, NO_EFFECTS, ownerOnlyOption, REMOTE_READ, REMOTE_WRITE, reachesOtherService, refuseUnderReadOnly, } from "./effects.js";
53
- export { answerSchema, itemAnswer, itemOf, jsonlRecords, judgedAnswer, listOf, metaNow, printItem, renderAnswer, sealed, snakeKeys, snakeKeysKeeping, } from "./envelope.js";
54
+ export { changesAuthority, changesAuthorityAt, changesAuthorityNow, destroysNothing, FETCH, grantsAuthority, isLogin, isOtherServiceCall, isStoreChange, judgedEffects, judgedTargets, LOCAL_READ, LOCAL_WRITE, logsInOrOut, NO_EFFECTS, ownerOnlyOption, REMOTE_READ, REMOTE_WRITE, reachesOtherService, refuseUnderReadOnly, } from "./effects.js";
55
+ export { answerSchema, isBody, itemAnswer, itemOf, jsonlRecords, judgedAnswer, listOf, metaNow, printItem, renderAnswer, sealed, snakeKeys, snakeKeysKeeping, } from "./envelope.js";
54
56
  export { withAbort } from "./execution.js";
55
57
  export { askSetupQuestions, asksAtStart, LANGUAGES, setupAtStart, systemLanguage, } from "./first-run.js";
56
58
  export { checkGuide, checkStep, guideCommand, loadScenarios, MEMO_SCENARIOS, shellProblems, } from "./guide.js";
@@ -69,6 +71,7 @@ export { addMeetingPreparationCommand } from "./meeting-preparation-command.js";
69
71
  export { meetingPreparationInput, readMeetingPreparation, } from "./meeting-preparation-read.js";
70
72
  export { addMeetingProjectCandidatesCommand } from "./meeting-project-candidates-command.js";
71
73
  export { readMeetingProjectCandidates } from "./meeting-project-candidates-read.js";
74
+ export { meetingResultItem } from "./meeting-results.js";
72
75
  export { addMeetingSeriesInventoryCommand } from "./meeting-series-inventory-command.js";
73
76
  export { readMeetingSeriesInventory } from "./meeting-series-inventory-read.js";
74
77
  export { accountCommand } from "./messenger/account-command.js";
@@ -1,7 +1,7 @@
1
1
  import { CliError } from "@wirecat/cli-base";
2
2
  import { metaOf } from "@wirecat/cli-base/commands";
3
3
  import { ENTITIES } from "../entities/index.js";
4
- import { answerEntitySchema } from "./answer-entity.js";
4
+ import { answerEntitySchema, answerProjectionSchema } from "./answer-entity.js";
5
5
  const declaredEntity = (command) => {
6
6
  const output = command ? metaOf(command).output : undefined;
7
7
  return output && (output.view ? `${output.entity}.${output.view}` : output.entity);
@@ -38,7 +38,7 @@ export const answerFields = (command, resolve) => {
38
38
  const own = resolve?.(command);
39
39
  if (own !== undefined)
40
40
  return [...own];
41
- const schema = answerEntitySchema(command);
41
+ const schema = answerProjectionSchema(command) ?? answerEntitySchema(command);
42
42
  return schemaFields(schema);
43
43
  };
44
44
  const PATHS = /^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*(,[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*)*$/;
@@ -1,5 +1,5 @@
1
1
  import { type BatchReport } from "@wirecat/cli-base";
2
- import type { Meta } from "@wirecat/cli-base/standards";
2
+ import { type Meta } from "@wirecat/cli-base/standards";
3
3
  import { Command } from "commander";
4
4
  import { type MeetingBatchReader, type MeetingPassageOutputFormat } from "../meetings/index.js";
5
5
  import { type Body } from "./envelope.js";
@@ -1,11 +1,16 @@
1
1
  import { BATCH_LIMITS, CliError, prepareBatch, runBatch, } from "@wirecat/cli-base";
2
2
  import { annotate } from "@wirecat/cli-base/commands";
3
+ import { errorObjectSchema } from "@wirecat/cli-base/standards";
3
4
  import { Command, Option } from "commander";
5
+ import * as v from "valibot";
6
+ import { ENTITIES } from "../entities/index.js";
4
7
  import { failureContext } from "../errors/reasons.js";
5
8
  import { createMeetingPassageCommand, createMeetingSearchCommand, meetingHitSearchRequest, meetingPassageRequest, meetingSearchArguments, meetingSearchMeta, } from "../meetings/cli/index.js";
6
9
  import { meetingHitsList, parseMeetingReference, } from "../meetings/index.js";
7
10
  import { formatMeetingEvidenceText, formatMeetingPassage } from "../services/meeting-passage-format.js";
8
- import { itemOf, listOf } from "./envelope.js";
11
+ import { answerEntity } from "./answer-entity.js";
12
+ import { destroysNothing } from "./effects.js";
13
+ import { answerSchema, itemOf, listOf } from "./envelope.js";
9
14
  const INDEX_BYTES = 4194304;
10
15
  const parse = (command, args) => {
11
16
  command
@@ -162,10 +167,23 @@ export const addMeetingBatchCommand = (program, deps) => {
162
167
  },
163
168
  }), report, format);
164
169
  });
165
- return annotate(command, {
170
+ destroysNothing(command);
171
+ annotate(command, {
166
172
  origin: "handwritten",
167
173
  partial: true,
168
174
  effects: { remote: "none", local: "write" },
169
175
  examples: [`${program.name()} batch requests.json --json`],
170
176
  });
177
+ return answerEntity(command, "meeting_batch_result", batchResult, { project: batchPayload });
171
178
  };
179
+ const batchPayload = v.union([ENTITIES.meeting_hit, ENTITIES.meeting_passage]);
180
+ const correlated = { id: v.string(), command: v.array(v.string()) };
181
+ const batchResult = v.union([
182
+ v.strictObject({ ...correlated, status: v.literal("ok"), answer: answerSchema(batchPayload), complete: v.boolean() }),
183
+ v.strictObject({
184
+ ...correlated,
185
+ status: v.picklist(["error", "not_run"]),
186
+ error: errorObjectSchema.entries.error,
187
+ complete: v.literal(false),
188
+ }),
189
+ ]);
@@ -0,0 +1,3 @@
1
+ import { MEETING_RESULT_ENTITIES } from "../meetings/index.js";
2
+ /** Store IDs stay numeric below the CLI; public receipts use the shared string IDs and validated wire fields. */
3
+ export declare const meetingResultItem: (entity: keyof typeof MEETING_RESULT_ENTITIES, value: unknown) => unknown;
@@ -0,0 +1,31 @@
1
+ import { CliError } from "@wirecat/cli-base";
2
+ import * as v from "valibot";
3
+ import { MEETING_RESULT_ENTITIES } from "../meetings/index.js";
4
+ import { snakeKeys } from "./envelope.js";
5
+ const ids = new Set([
6
+ "meeting_id",
7
+ "account_id",
8
+ "participant_id",
9
+ "event_id",
10
+ "previous_event_id",
11
+ "expected_event_id",
12
+ "next_transcript_id",
13
+ ]);
14
+ const publicValue = (value, key = "") => {
15
+ if (typeof value === "number" && ids.has(key))
16
+ return String(value);
17
+ if (Array.isArray(value))
18
+ return value.map((item) => publicValue(item, key === "target_account_ids" ? "account_id" : ""));
19
+ if (value && typeof value === "object")
20
+ return Object.fromEntries(Object.entries(value).map(([name, item]) => [name, publicValue(item, name)]));
21
+ return value;
22
+ };
23
+ /** Store IDs stay numeric below the CLI; public receipts use the shared string IDs and validated wire fields. */
24
+ export const meetingResultItem = (entity, value) => {
25
+ const parsed = v.safeParse(MEETING_RESULT_ENTITIES[entity], publicValue(snakeKeys(value)));
26
+ if (!parsed.success) {
27
+ const applied = value && typeof value === "object" && "applied" in value && value.applied === true;
28
+ throw new CliError(applied ? "outcome_unknown" : "invalid_response", `the command returned an invalid ${entity} answer`);
29
+ }
30
+ return parsed.output;
31
+ };
@@ -3,9 +3,9 @@ import type { CacheDatabase } from "../../store/driver.js";
3
3
  import type { Messenger } from "./context.js";
4
4
  /** `doctor`'s short summary of the store. Must answer for a broken file, so an error is a field. */
5
5
  export declare const storeSummary: (env: NodeJS.ProcessEnv) => Promise<{
6
- error?: undefined;
7
6
  path: string;
8
7
  exists: boolean;
8
+ error?: undefined;
9
9
  } | {
10
10
  path: string;
11
11
  exists: boolean;
@@ -12,4 +12,22 @@ const named = (work) => {
12
12
  }
13
13
  };
14
14
  export const fieldsOf = (value) => named(() => coreFieldsOf(value));
15
- export const projectFields = (value, fields) => named(() => coreProjectFields(value, fields));
15
+ const projectCommands = (commands, fields) => commands.map((command) => ({
16
+ ...coreProjectFields(command, fields),
17
+ path: command.path,
18
+ name: command.name,
19
+ origin: command.origin,
20
+ effects: command.effects,
21
+ commands: projectCommands(command.commands, fields),
22
+ }));
23
+ export const projectFields = (value, fields) => named(() => {
24
+ if (value &&
25
+ typeof value === "object" &&
26
+ "cli" in value &&
27
+ typeof value.cli === "string" &&
28
+ "contract" in value &&
29
+ "commands" in value &&
30
+ Array.isArray(value.commands))
31
+ return { ...value, commands: projectCommands(value.commands, fields) };
32
+ return coreProjectFields(value, fields);
33
+ });
@@ -11,6 +11,12 @@ export declare const contact: v.StrictObjectSchema<{
11
11
  readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
12
12
  /** The newest message in a one-to-one chat with them. */
13
13
  readonly last_messaged_at: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.IsoTimestampAction<string, "an ISO 8601 time in UTC">, v.EndsWithAction<string, "Z", "an ISO 8601 time in UTC, ending in `Z`">]>, undefined>;
14
+ /** For a source that knows it, such as a Zoom contact. */
15
+ readonly email: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
16
+ readonly phones: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
17
+ readonly number: v.StringSchema<undefined>;
18
+ readonly label: v.NullableSchema<v.StringSchema<undefined>, undefined>;
19
+ }, undefined>, undefined>, undefined>;
14
20
  /** `contacts show`: the chats shared with them. */
15
21
  readonly chats: v.OptionalSchema<v.ArraySchema<Omit<v.StrictObjectSchema<{
16
22
  readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
@@ -13,6 +13,9 @@ export const contact = v.strictObject({
13
13
  description: v.nullable(text),
14
14
  /** The newest message in a one-to-one chat with them. */
15
15
  last_messaged_at: v.nullable(time),
16
+ /** For a source that knows it, such as a Zoom contact. */
17
+ email: v.optional(v.nullable(text)),
18
+ phones: v.optional(v.array(v.strictObject({ number: text, label: v.nullable(text) }))),
16
19
  /** `contacts show`: the chats shared with them. */
17
20
  chats: v.optional(v.array(v.pick(chat, ["ref", "id", "title", "kind", "last_message_at"]))),
18
21
  /** `contacts show --with-notes`: the owner's private notes about them. */
@@ -86,6 +86,140 @@ import { topic } from "./topic.js";
86
86
  */
87
87
  export { account, accountChange, accountPrivacy, accountPrivacyChange, accountProfile, accountSession, adminReport, agenda, analysisConsent, analysisConsentRevocation, attachment, attachmentBytes, attachmentExtraction, attachmentTextChange, automaticTags, cachedChatMetadata, chart, chat, chatAdminChange, chatArchive, chatEvent, chatFolderChange, chatFolderOrder, chatFolderRemoval, chatGroupChange, chatInspection, chatInvite, chatInviteChange, chatMembersChange, chatMembersFetch, chatMetadata, chatMetadataRefresh, chatModeration, chatMuting, chatPin, chatRead, chatRemoval, chatRequestChange, chatRules, chatSender, chatStats, chatTracking, chatUnread, contact, contactActivity, contactAlias, contactCheck, contactContext, contactImport, contactLookup, contactNote, contactNoteRemoval, contactPreparation, contactProfile, contactStateChange, contactSync, contactUpdate, conversation, conversationBatch, conversationBatchStatus, conversationBuildResult, conversationChange, conversationDetails, conversationEmbedding, conversationEmbeddingStatus, conversationHit, conversationPreparation, conversationReadiness, counterRefresh, counters, document, documentLink, endedAccountSessions, evidence, evidencePacket, fact, folder, hit, identity, imageEmbedding, inviteLink, job, joinRequest, linkedPerson, mediaArchive, mediaArchiveCheck, mediaArchiveMove, mediaArchiveTimer, meeting, meetingProjectCandidates, meetingSeriesInventory, member, memory, mention, mentionDecision, mentionDetails, mentionDomain, mentionRebuild, message, messageContext, messageCounts, messageDeletion, messageDownload, messageEvent, messageLink, messageLinks, messagePin, messageStar, messageSync, messageTranscript, messageWrite, model, modelKey, note, officialStats, person, place, poll, pollChange, pollVote, ranking, reactionChange, recipient, recipientAdded, recipientChange, recipientOff, recipientRemoved, recordedRun, reference, relationship, removedModelKey, retention, runDetails, runHit, runLocation, savedSearch, searchHistoryClear, sendAttempt, serveSummary, storeBackup, storeChatStatus, storeCheck, storeClear, storeCopyRemoval, storeDecrypt, storedModelKey, storeExport, storeGapPlan, storeGapRepair, storeInfo, storeJobCancel, storeJobClear, storeJobDetails, storeJobRetry, storeMigration, storeReindex, storeRepair, storeReset, storeRestore, tagChange, tagging, task, taskCard, taskCategories, taskClosed, taskCreated, taskLinks, taskMerge, taskPair, taskScan, taskSimilar, taskStats, taskUnmerge, topic, trackedChat, trackedChatHistory, watchedMessage, watchItem, };
88
88
  export declare const ENTITIES: {
89
+ readonly meeting_ingestion: v.StrictObjectSchema<{
90
+ readonly meetings: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
91
+ readonly participants: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
92
+ readonly transcript_rows: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
93
+ readonly summaries: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
94
+ readonly warnings: v.ArraySchema<v.StrictObjectSchema<{
95
+ readonly external_id: v.StringSchema<undefined>;
96
+ readonly message: v.StringSchema<undefined>;
97
+ }, undefined>, undefined>;
98
+ readonly timezone: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
99
+ }, undefined>;
100
+ readonly meeting_export: v.UnionSchema<[v.StrictObjectSchema<{
101
+ readonly meeting_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
102
+ readonly format: v.PicklistSchema<["markdown", "vtt"], undefined>;
103
+ readonly filename: v.StringSchema<undefined>;
104
+ readonly content: v.StringSchema<undefined>;
105
+ }, undefined>, v.StrictObjectSchema<{
106
+ readonly meeting_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
107
+ readonly format: v.PicklistSchema<["markdown", "vtt"], undefined>;
108
+ readonly output: v.StringSchema<undefined>;
109
+ }, undefined>], undefined>;
110
+ readonly meeting_association: v.StrictObjectSchema<{
111
+ readonly scope: v.StrictObjectSchema<{
112
+ readonly provider: v.StringSchema<undefined>;
113
+ readonly account: v.StringSchema<undefined>;
114
+ }, undefined>;
115
+ readonly account_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
116
+ readonly meeting_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
117
+ readonly change: v.UnionSchema<[v.StrictObjectSchema<{
118
+ readonly action: v.LiteralSchema<"event.link", undefined>;
119
+ readonly event_id: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
120
+ readonly expected_event_id: v.OptionalSchema<v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, undefined>;
121
+ }, undefined>, v.StrictObjectSchema<{
122
+ readonly action: v.LiteralSchema<"person.link", undefined>;
123
+ readonly participant_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
124
+ readonly person_uid: v.StringSchema<undefined>;
125
+ readonly expected_person_uid: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
126
+ readonly target_account_ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, undefined>;
127
+ }, undefined>], undefined>;
128
+ readonly applied: v.BooleanSchema<undefined>;
129
+ readonly result: v.OptionalSchema<v.UnionSchema<[v.StrictObjectSchema<{
130
+ readonly meeting_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
131
+ readonly event_id: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
132
+ readonly previous_event_id: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
133
+ readonly changed: v.BooleanSchema<undefined>;
134
+ }, undefined>, v.StrictObjectSchema<{
135
+ readonly meeting_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
136
+ readonly participant_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
137
+ readonly person_uid: v.StringSchema<undefined>;
138
+ readonly previous_person_uid: v.NullableSchema<v.StringSchema<undefined>, undefined>;
139
+ readonly changed: v.BooleanSchema<undefined>;
140
+ }, undefined>], undefined>, undefined>;
141
+ }, undefined>;
142
+ readonly meeting_transcription: v.UnionSchema<[v.StrictObjectSchema<{
143
+ readonly applied: v.LiteralSchema<false, undefined>;
144
+ readonly account_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
145
+ readonly external_id: v.StringSchema<undefined>;
146
+ readonly segments: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
147
+ readonly media: v.StrictObjectSchema<{
148
+ readonly id: v.StringSchema<undefined>;
149
+ readonly content_hash: v.StringSchema<undefined>;
150
+ readonly size: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
151
+ readonly duration_ms: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
152
+ readonly format: v.StringSchema<undefined>;
153
+ readonly sample_rate: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
154
+ readonly channels: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
155
+ readonly recognition: v.StrictObjectSchema<{
156
+ readonly engine: v.StringSchema<undefined>;
157
+ readonly model: v.StringSchema<undefined>;
158
+ readonly version: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
159
+ readonly timing: v.OptionalSchema<v.PicklistSchema<["fixed-windows", "recognition-segments"], undefined>, undefined>;
160
+ }, undefined>;
161
+ }, undefined>;
162
+ }, undefined>, v.StrictObjectSchema<{
163
+ readonly applied: v.LiteralSchema<true, undefined>;
164
+ readonly account_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
165
+ readonly external_id: v.StringSchema<undefined>;
166
+ readonly meeting_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
167
+ readonly created: v.BooleanSchema<undefined>;
168
+ readonly inserted_transcripts: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
169
+ readonly replayed_transcripts: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
170
+ readonly superseded_transcripts: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
171
+ readonly segments: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
172
+ readonly media_sha256: v.StringSchema<undefined>;
173
+ readonly engine: v.StringSchema<undefined>;
174
+ readonly model: v.StringSchema<undefined>;
175
+ readonly model_version: v.NullableSchema<v.StringSchema<undefined>, undefined>;
176
+ readonly timing: v.PicklistSchema<["fixed-windows", "recognition-segments"], undefined>;
177
+ }, undefined>], undefined>;
178
+ readonly meeting_embedding: v.UnionSchema<[v.StrictObjectSchema<{
179
+ readonly account_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
180
+ readonly model: v.StrictObjectSchema<{
181
+ readonly key: v.StringSchema<undefined>;
182
+ readonly dims: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
183
+ readonly kind: v.PicklistSchema<["local", "remote"], undefined>;
184
+ readonly model: v.StringSchema<undefined>;
185
+ }, undefined>;
186
+ readonly status: v.StrictObjectSchema<{
187
+ readonly chunks: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
188
+ readonly embedded: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
189
+ }, undefined>;
190
+ readonly applied: v.LiteralSchema<false, undefined>;
191
+ readonly scope: v.LiteralSchema<"existing-current-chunks", undefined>;
192
+ readonly rebuild_required: v.LiteralSchema<"explicit", undefined>;
193
+ }, undefined>, v.StrictObjectSchema<{
194
+ readonly account_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
195
+ readonly model: v.StrictObjectSchema<{
196
+ readonly key: v.StringSchema<undefined>;
197
+ readonly dims: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
198
+ readonly kind: v.PicklistSchema<["local", "remote"], undefined>;
199
+ readonly model: v.StringSchema<undefined>;
200
+ }, undefined>;
201
+ readonly saved: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
202
+ readonly skipped: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
203
+ readonly has_more: v.BooleanSchema<undefined>;
204
+ readonly next_hash: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
205
+ readonly applied: v.LiteralSchema<true, undefined>;
206
+ readonly rebuild: v.StrictObjectSchema<{
207
+ readonly transcripts: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
208
+ readonly chunks: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
209
+ readonly has_more: v.BooleanSchema<undefined>;
210
+ readonly next_transcript_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
211
+ }, undefined>;
212
+ }, undefined>], undefined>;
213
+ readonly sync_progress: v.StrictObjectSchema<{
214
+ readonly job: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
215
+ readonly profile: v.StringSchema<undefined>;
216
+ readonly done: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
217
+ readonly total: v.NullableSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
218
+ readonly remaining: v.NullableSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
219
+ readonly state: v.PicklistSchema<["partial", "complete"], undefined>;
220
+ readonly updated_at: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.IsoTimestampAction<string, "an ISO 8601 time in UTC">, v.EndsWithAction<string, "Z", "an ISO 8601 time in UTC, ending in `Z`">]>, undefined>;
221
+ readonly cursor_age_ms: v.NullableSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
222
+ }, undefined>;
89
223
  readonly message: v.StrictObjectSchema<{
90
224
  readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
91
225
  readonly id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
@@ -4190,6 +4324,11 @@ export declare const ENTITIES: {
4190
4324
  readonly display_name: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4191
4325
  readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
4192
4326
  readonly last_messaged_at: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.IsoTimestampAction<string, "an ISO 8601 time in UTC">, v.EndsWithAction<string, "Z", "an ISO 8601 time in UTC, ending in `Z`">]>, undefined>;
4327
+ readonly email: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
4328
+ readonly phones: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
4329
+ readonly number: v.StringSchema<undefined>;
4330
+ readonly label: v.NullableSchema<v.StringSchema<undefined>, undefined>;
4331
+ }, undefined>, undefined>, undefined>;
4193
4332
  readonly chats: v.OptionalSchema<v.ArraySchema<Omit<v.StrictObjectSchema<{
4194
4333
  readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
4195
4334
  readonly id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
@@ -1,5 +1,6 @@
1
1
  import { jsonSchemaOf } from "@wirecat/cli-base/standards";
2
2
  import * as v from "valibot";
3
+ import { MEETING_RESULT_ENTITIES } from "../meetings/index.js";
3
4
  import { account } from "./account.js";
4
5
  import { accountChange, accountPrivacy, accountPrivacyChange, endedAccountSessions } from "./account-change.js";
5
6
  import { accountProfile } from "./account-profile.js";
@@ -77,7 +78,7 @@ import { retention } from "./retention.js";
77
78
  import { savedSearch, searchHistoryClear } from "./saved-search.js";
78
79
  import { sendAttempt } from "./send-attempt.js";
79
80
  import { storeBackup, storeCheck, storeCopyRemoval, storeDecrypt, storeInfo, storeMigration, storeReindex, storeRepair, storeReset, storeRestore, } from "./store-maintenance.js";
80
- import { storeChatStatus, storeClear, storeExport, storeGapPlan, storeGapRepair, storeJobCancel, storeJobClear, storeJobDetails, storeJobRetry, } from "./store-records.js";
81
+ import { storeChatStatus, storeClear, storeExport, storeGapPlan, storeGapRepair, storeJobCancel, storeJobClear, storeJobDetails, storeJobRetry, syncProgress, } from "./store-records.js";
81
82
  import { automaticTags, tagChange } from "./tag-change.js";
82
83
  import { tagging } from "./tagging.js";
83
84
  import { task } from "./task.js";
@@ -91,6 +92,8 @@ import { topic } from "./topic.js";
91
92
  */
92
93
  export { account, accountChange, accountPrivacy, accountPrivacyChange, accountProfile, accountSession, adminReport, agenda, analysisConsent, analysisConsentRevocation, attachment, attachmentBytes, attachmentExtraction, attachmentTextChange, automaticTags, cachedChatMetadata, chart, chat, chatAdminChange, chatArchive, chatEvent, chatFolderChange, chatFolderOrder, chatFolderRemoval, chatGroupChange, chatInspection, chatInvite, chatInviteChange, chatMembersChange, chatMembersFetch, chatMetadata, chatMetadataRefresh, chatModeration, chatMuting, chatPin, chatRead, chatRemoval, chatRequestChange, chatRules, chatSender, chatStats, chatTracking, chatUnread, contact, contactActivity, contactAlias, contactCheck, contactContext, contactImport, contactLookup, contactNote, contactNoteRemoval, contactPreparation, contactProfile, contactStateChange, contactSync, contactUpdate, conversation, conversationBatch, conversationBatchStatus, conversationBuildResult, conversationChange, conversationDetails, conversationEmbedding, conversationEmbeddingStatus, conversationHit, conversationPreparation, conversationReadiness, counterRefresh, counters, document, documentLink, endedAccountSessions, evidence, evidencePacket, fact, folder, hit, identity, imageEmbedding, inviteLink, job, joinRequest, linkedPerson, mediaArchive, mediaArchiveCheck, mediaArchiveMove, mediaArchiveTimer, meeting, meetingProjectCandidates, meetingSeriesInventory, member, memory, mention, mentionDecision, mentionDetails, mentionDomain, mentionRebuild, message, messageContext, messageCounts, messageDeletion, messageDownload, messageEvent, messageLink, messageLinks, messagePin, messageStar, messageSync, messageTranscript, messageWrite, model, modelKey, note, officialStats, person, place, poll, pollChange, pollVote, ranking, reactionChange, recipient, recipientAdded, recipientChange, recipientOff, recipientRemoved, recordedRun, reference, relationship, removedModelKey, retention, runDetails, runHit, runLocation, savedSearch, searchHistoryClear, sendAttempt, serveSummary, storeBackup, storeChatStatus, storeCheck, storeClear, storeCopyRemoval, storeDecrypt, storedModelKey, storeExport, storeGapPlan, storeGapRepair, storeInfo, storeJobCancel, storeJobClear, storeJobDetails, storeJobRetry, storeMigration, storeReindex, storeRepair, storeReset, storeRestore, tagChange, tagging, task, taskCard, taskCategories, taskClosed, taskCreated, taskLinks, taskMerge, taskPair, taskScan, taskSimilar, taskStats, taskUnmerge, topic, trackedChat, trackedChatHistory, watchedMessage, watchItem, };
93
94
  export const ENTITIES = {
95
+ sync_progress: syncProgress,
96
+ ...MEETING_RESULT_ENTITIES,
94
97
  message,
95
98
  message_context: messageContext,
96
99
  message_download: messageDownload,
@@ -356,6 +356,16 @@ export declare const storeGapRepair: v.UnionSchema<[v.StrictObjectSchema<{
356
356
  }, undefined>, undefined>;
357
357
  readonly stopped: v.OptionalSchema<v.PicklistSchema<["bound", "partial_or_inaccessible", "fetch_failed"], undefined>, undefined>;
358
358
  }, undefined>], undefined>;
359
+ declare const progress: v.StrictObjectSchema<{
360
+ readonly job: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
361
+ readonly profile: v.StringSchema<undefined>;
362
+ readonly done: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
363
+ readonly total: v.NullableSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
364
+ readonly remaining: v.NullableSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
365
+ readonly state: v.PicklistSchema<["partial", "complete"], undefined>;
366
+ readonly updated_at: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.IsoTimestampAction<string, "an ISO 8601 time in UTC">, v.EndsWithAction<string, "Z", "an ISO 8601 time in UTC, ending in `Z`">]>, undefined>;
367
+ readonly cursor_age_ms: v.NullableSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, undefined>;
368
+ }, undefined>;
359
369
  export declare const storeJobDetails: v.StrictObjectSchema<{
360
370
  readonly chat: v.StringSchema<undefined>;
361
371
  readonly state: v.PicklistSchema<readonly ["running", "done", "partial", "failed", "cancelled", "died"], undefined>;
@@ -440,3 +450,4 @@ export declare const storeJobRetry: v.UnionSchema<[v.StrictObjectSchema<{
440
450
  export declare const storeJobClear: v.StrictObjectSchema<{
441
451
  readonly cleared: v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
442
452
  }, undefined>;
453
+ export { progress as syncProgress };
@@ -97,3 +97,4 @@ export const storeJobRetry = v.union([
97
97
  v.strictObject({ retried: id, chat: text, error: v.strictObject({ code: text, message: text }) }),
98
98
  ]);
99
99
  export const storeJobClear = v.strictObject({ cleared: v.array(id) });
100
+ export { progress as syncProgress };
@@ -73,7 +73,7 @@ export const addMeetingCommands = (program, deps) => {
73
73
  .argument("<meeting>", "stored meeting id", integer)).action(async (id, _opts, command) => {
74
74
  print(await meetingSummaryAnswer(deps.store, id, deps.accountId), command);
75
75
  });
76
- output(annotate(group.command("export"), { effects: LOCAL_WRITE })
76
+ output(annotate(group.command("export"), { effects: LOCAL_WRITE, output: { entity: "meeting_export" } })
77
77
  .description("export a meeting as Markdown or one transcript as WebVTT")
78
78
  .argument("<meeting>", "stored meeting id", integer)
79
79
  .addOption(new Option("--format <format>", "export format").choices(["markdown", "vtt"]).default("markdown"))
@@ -110,7 +110,11 @@ export const addMeetingCommands = (program, deps) => {
110
110
  cursor: opts.cursor,
111
111
  }), command);
112
112
  });
113
- output(annotate(group.command("sync"), { effects: FETCH, offline: false }).description("bring the stored meetings up to date from the connected account"))
113
+ output(annotate(group.command("sync"), {
114
+ effects: FETCH,
115
+ offline: false,
116
+ output: { entity: "meeting_ingestion" },
117
+ }).description("bring the stored meetings up to date from the connected account"))
114
118
  .option("--since-time <time>", "fetch meetings starting at or after this ISO 8601 date or time", date)
115
119
  .option("--lookback-days <days>", "revisit recent occurrences for late transcripts (0–31)", lookbackDays, 0)
116
120
  .action(async (opts, command) => {
@@ -123,7 +127,10 @@ export const addMeetingCommands = (program, deps) => {
123
127
  lookbackMs: opts.lookbackDays * 86400000,
124
128
  }), command);
125
129
  });
126
- const importCommand = annotate(group.command("import"), { effects: LOCAL_WRITE })
130
+ const importCommand = annotate(group.command("import"), {
131
+ effects: LOCAL_WRITE,
132
+ output: { entity: "meeting_ingestion" },
133
+ })
127
134
  .description("import downloaded meeting transcripts")
128
135
  .argument("<folder>", "folder of transcripts downloaded from the provider");
129
136
  if (deps.importHelp)
@@ -34,6 +34,7 @@ export { parseRecordingSyncCheckpoint, type RecordingSyncCheckpoint, type Record
34
34
  export { type RecordingPartial, RecordingTransferError, type RecordingTransferResponse, type RecordingTransferSource, type RecordingTransferStorage, type RecordingTransferWriter, strongRecordingValidator, transferRecording, } from "./recording-transfer.js";
35
35
  export { canonicalMeetingReference, formatMeetingReference, type MeetingReference, parseMeetingReference, } from "./reference.js";
36
36
  export { type MeetingRelatedHistoryEntry, type MeetingRelatedHistoryRequest, type MeetingRelatedHistoryStore, validateMeetingRelatedHistory, } from "./related-history.js";
37
+ export { MEETING_RESULT_ENTITIES } from "./result-items.js";
37
38
  export { type MeetingReview, type MeetingReviewInput, type MeetingReviewItem, type MeetingReviewSpeaker, type MeetingReviewStore, REVIEW_LIMIT, } from "./review.js";
38
39
  export { SAVE_HELP, SAVE_INSTRUCTION } from "./save-hints.js";
39
40
  export type { MeetingHitSearchRequest, MeetingSearchIndexInput, MeetingSearchIndexReceipt, MeetingSearchIndexStore, MeetingSearchOptions, MeetingSearchPage, MeetingSearchStore, } from "./search-store.js";
@@ -25,6 +25,7 @@ export { parseRecordingSyncCheckpoint, RecordingSyncError, recordingAssetFingerp
25
25
  export { RecordingTransferError, strongRecordingValidator, transferRecording, } from "./recording-transfer.js";
26
26
  export { canonicalMeetingReference, formatMeetingReference, parseMeetingReference, } from "./reference.js";
27
27
  export { validateMeetingRelatedHistory, } from "./related-history.js";
28
+ export { MEETING_RESULT_ENTITIES } from "./result-items.js";
28
29
  export { REVIEW_LIMIT, } from "./review.js";
29
30
  export { SAVE_HELP, SAVE_INSTRUCTION } from "./save-hints.js";
30
31
  export { validateMeetingHitSearch } from "./search-validation.js";
@@ -38,6 +38,7 @@ export declare const meetingTools: ({
38
38
  max_read_bytes?: undefined;
39
39
  cursor?: undefined;
40
40
  } | {
41
+ limit?: undefined;
41
42
  event_id?: undefined;
42
43
  series_id?: undefined;
43
44
  page?: undefined;
@@ -53,11 +54,11 @@ export declare const meetingTools: ({
53
54
  format?: undefined;
54
55
  transcript_id?: undefined;
55
56
  query?: undefined;
56
- limit?: undefined;
57
57
  scan_limit?: undefined;
58
58
  max_read_bytes?: undefined;
59
59
  cursor?: undefined;
60
60
  } | {
61
+ limit?: undefined;
61
62
  event_id?: undefined;
62
63
  series_id?: undefined;
63
64
  page?: undefined;
@@ -75,11 +76,11 @@ export declare const meetingTools: ({
75
76
  format?: undefined;
76
77
  transcript_id?: undefined;
77
78
  query?: undefined;
78
- limit?: undefined;
79
79
  scan_limit?: undefined;
80
80
  max_read_bytes?: undefined;
81
81
  cursor?: undefined;
82
82
  } | {
83
+ limit?: undefined;
83
84
  event_id?: undefined;
84
85
  series_id?: undefined;
85
86
  page?: undefined;
@@ -101,7 +102,6 @@ export declare const meetingTools: ({
101
102
  minimum: number;
102
103
  };
103
104
  query?: undefined;
104
- limit?: undefined;
105
105
  scan_limit?: undefined;
106
106
  max_read_bytes?: undefined;
107
107
  cursor?: undefined;
@@ -188,6 +188,7 @@ export declare const meetingTools: ({
188
188
  max_read_bytes?: undefined;
189
189
  cursor?: undefined;
190
190
  } | {
191
+ limit?: undefined;
191
192
  event_id?: undefined;
192
193
  series_id?: undefined;
193
194
  page?: undefined;
@@ -203,11 +204,11 @@ export declare const meetingTools: ({
203
204
  format?: undefined;
204
205
  transcript_id?: undefined;
205
206
  query?: undefined;
206
- limit?: undefined;
207
207
  scan_limit?: undefined;
208
208
  max_read_bytes?: undefined;
209
209
  cursor?: undefined;
210
210
  } | {
211
+ limit?: undefined;
211
212
  event_id?: undefined;
212
213
  series_id?: undefined;
213
214
  page?: undefined;
@@ -225,11 +226,11 @@ export declare const meetingTools: ({
225
226
  format?: undefined;
226
227
  transcript_id?: undefined;
227
228
  query?: undefined;
228
- limit?: undefined;
229
229
  scan_limit?: undefined;
230
230
  max_read_bytes?: undefined;
231
231
  cursor?: undefined;
232
232
  } | {
233
+ limit?: undefined;
233
234
  event_id?: undefined;
234
235
  series_id?: undefined;
235
236
  page?: undefined;
@@ -251,7 +252,6 @@ export declare const meetingTools: ({
251
252
  minimum: number;
252
253
  };
253
254
  query?: undefined;
254
- limit?: undefined;
255
255
  scan_limit?: undefined;
256
256
  max_read_bytes?: undefined;
257
257
  cursor?: undefined;
@@ -338,6 +338,7 @@ export declare const meetingTools: ({
338
338
  max_read_bytes?: undefined;
339
339
  cursor?: undefined;
340
340
  } | {
341
+ limit?: undefined;
341
342
  event_id?: undefined;
342
343
  series_id?: undefined;
343
344
  page?: undefined;
@@ -353,11 +354,11 @@ export declare const meetingTools: ({
353
354
  format?: undefined;
354
355
  transcript_id?: undefined;
355
356
  query?: undefined;
356
- limit?: undefined;
357
357
  scan_limit?: undefined;
358
358
  max_read_bytes?: undefined;
359
359
  cursor?: undefined;
360
360
  } | {
361
+ limit?: undefined;
361
362
  event_id?: undefined;
362
363
  series_id?: undefined;
363
364
  page?: undefined;
@@ -375,11 +376,11 @@ export declare const meetingTools: ({
375
376
  format?: undefined;
376
377
  transcript_id?: undefined;
377
378
  query?: undefined;
378
- limit?: undefined;
379
379
  scan_limit?: undefined;
380
380
  max_read_bytes?: undefined;
381
381
  cursor?: undefined;
382
382
  } | {
383
+ limit?: undefined;
383
384
  event_id?: undefined;
384
385
  series_id?: undefined;
385
386
  page?: undefined;
@@ -401,7 +402,6 @@ export declare const meetingTools: ({
401
402
  minimum: number;
402
403
  };
403
404
  query?: undefined;
404
- limit?: undefined;
405
405
  scan_limit?: undefined;
406
406
  max_read_bytes?: undefined;
407
407
  cursor?: undefined;
@@ -488,6 +488,7 @@ export declare const meetingTools: ({
488
488
  max_read_bytes?: undefined;
489
489
  cursor?: undefined;
490
490
  } | {
491
+ limit?: undefined;
491
492
  event_id?: undefined;
492
493
  series_id?: undefined;
493
494
  page?: undefined;
@@ -503,11 +504,11 @@ export declare const meetingTools: ({
503
504
  format?: undefined;
504
505
  transcript_id?: undefined;
505
506
  query?: undefined;
506
- limit?: undefined;
507
507
  scan_limit?: undefined;
508
508
  max_read_bytes?: undefined;
509
509
  cursor?: undefined;
510
510
  } | {
511
+ limit?: undefined;
511
512
  event_id?: undefined;
512
513
  series_id?: undefined;
513
514
  page?: undefined;
@@ -525,11 +526,11 @@ export declare const meetingTools: ({
525
526
  format?: undefined;
526
527
  transcript_id?: undefined;
527
528
  query?: undefined;
528
- limit?: undefined;
529
529
  scan_limit?: undefined;
530
530
  max_read_bytes?: undefined;
531
531
  cursor?: undefined;
532
532
  } | {
533
+ limit?: undefined;
533
534
  event_id?: undefined;
534
535
  series_id?: undefined;
535
536
  page?: undefined;
@@ -551,7 +552,6 @@ export declare const meetingTools: ({
551
552
  minimum: number;
552
553
  };
553
554
  query?: undefined;
554
- limit?: undefined;
555
555
  scan_limit?: undefined;
556
556
  max_read_bytes?: undefined;
557
557
  cursor?: undefined;
@@ -638,6 +638,7 @@ export declare const meetingTools: ({
638
638
  max_read_bytes?: undefined;
639
639
  cursor?: undefined;
640
640
  } | {
641
+ limit?: undefined;
641
642
  event_id?: undefined;
642
643
  series_id?: undefined;
643
644
  page?: undefined;
@@ -653,11 +654,11 @@ export declare const meetingTools: ({
653
654
  format?: undefined;
654
655
  transcript_id?: undefined;
655
656
  query?: undefined;
656
- limit?: undefined;
657
657
  scan_limit?: undefined;
658
658
  max_read_bytes?: undefined;
659
659
  cursor?: undefined;
660
660
  } | {
661
+ limit?: undefined;
661
662
  event_id?: undefined;
662
663
  series_id?: undefined;
663
664
  page?: undefined;
@@ -675,11 +676,11 @@ export declare const meetingTools: ({
675
676
  format?: undefined;
676
677
  transcript_id?: undefined;
677
678
  query?: undefined;
678
- limit?: undefined;
679
679
  scan_limit?: undefined;
680
680
  max_read_bytes?: undefined;
681
681
  cursor?: undefined;
682
682
  } | {
683
+ limit?: undefined;
683
684
  event_id?: undefined;
684
685
  series_id?: undefined;
685
686
  page?: undefined;
@@ -701,7 +702,6 @@ export declare const meetingTools: ({
701
702
  minimum: number;
702
703
  };
703
704
  query?: undefined;
704
- limit?: undefined;
705
705
  scan_limit?: undefined;
706
706
  max_read_bytes?: undefined;
707
707
  cursor?: undefined;
@@ -0,0 +1,127 @@
1
+ import * as v from "valibot";
2
+ export declare const MEETING_RESULT_ENTITIES: {
3
+ readonly meeting_ingestion: v.StrictObjectSchema<{
4
+ readonly meetings: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
5
+ readonly participants: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
6
+ readonly transcript_rows: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
7
+ readonly summaries: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
8
+ readonly warnings: v.ArraySchema<v.StrictObjectSchema<{
9
+ readonly external_id: v.StringSchema<undefined>;
10
+ readonly message: v.StringSchema<undefined>;
11
+ }, undefined>, undefined>;
12
+ readonly timezone: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
13
+ }, undefined>;
14
+ readonly meeting_export: v.UnionSchema<[v.StrictObjectSchema<{
15
+ readonly meeting_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
16
+ readonly format: v.PicklistSchema<["markdown", "vtt"], undefined>;
17
+ readonly filename: v.StringSchema<undefined>;
18
+ readonly content: v.StringSchema<undefined>;
19
+ }, undefined>, v.StrictObjectSchema<{
20
+ readonly meeting_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
21
+ readonly format: v.PicklistSchema<["markdown", "vtt"], undefined>;
22
+ readonly output: v.StringSchema<undefined>;
23
+ }, undefined>], undefined>;
24
+ readonly meeting_association: v.StrictObjectSchema<{
25
+ readonly scope: v.StrictObjectSchema<{
26
+ readonly provider: v.StringSchema<undefined>;
27
+ readonly account: v.StringSchema<undefined>;
28
+ }, undefined>;
29
+ readonly account_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
30
+ readonly meeting_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
31
+ readonly change: v.UnionSchema<[v.StrictObjectSchema<{
32
+ readonly action: v.LiteralSchema<"event.link", undefined>;
33
+ readonly event_id: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
34
+ readonly expected_event_id: v.OptionalSchema<v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, undefined>;
35
+ }, undefined>, v.StrictObjectSchema<{
36
+ readonly action: v.LiteralSchema<"person.link", undefined>;
37
+ readonly participant_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
38
+ readonly person_uid: v.StringSchema<undefined>;
39
+ readonly expected_person_uid: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
40
+ readonly target_account_ids: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, undefined>;
41
+ }, undefined>], undefined>;
42
+ readonly applied: v.BooleanSchema<undefined>;
43
+ readonly result: v.OptionalSchema<v.UnionSchema<[v.StrictObjectSchema<{
44
+ readonly meeting_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
45
+ readonly event_id: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
46
+ readonly previous_event_id: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
47
+ readonly changed: v.BooleanSchema<undefined>;
48
+ }, undefined>, v.StrictObjectSchema<{
49
+ readonly meeting_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
50
+ readonly participant_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
51
+ readonly person_uid: v.StringSchema<undefined>;
52
+ readonly previous_person_uid: v.NullableSchema<v.StringSchema<undefined>, undefined>;
53
+ readonly changed: v.BooleanSchema<undefined>;
54
+ }, undefined>], undefined>, undefined>;
55
+ }, undefined>;
56
+ readonly meeting_transcription: v.UnionSchema<[v.StrictObjectSchema<{
57
+ readonly applied: v.LiteralSchema<false, undefined>;
58
+ readonly account_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
59
+ readonly external_id: v.StringSchema<undefined>;
60
+ readonly segments: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
61
+ readonly media: v.StrictObjectSchema<{
62
+ readonly id: v.StringSchema<undefined>;
63
+ readonly content_hash: v.StringSchema<undefined>;
64
+ readonly size: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
65
+ readonly duration_ms: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
66
+ readonly format: v.StringSchema<undefined>;
67
+ readonly sample_rate: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
68
+ readonly channels: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
69
+ readonly recognition: v.StrictObjectSchema<{
70
+ readonly engine: v.StringSchema<undefined>;
71
+ readonly model: v.StringSchema<undefined>;
72
+ readonly version: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
73
+ readonly timing: v.OptionalSchema<v.PicklistSchema<["fixed-windows", "recognition-segments"], undefined>, undefined>;
74
+ }, undefined>;
75
+ }, undefined>;
76
+ }, undefined>, v.StrictObjectSchema<{
77
+ readonly applied: v.LiteralSchema<true, undefined>;
78
+ readonly account_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
79
+ readonly external_id: v.StringSchema<undefined>;
80
+ readonly meeting_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
81
+ readonly created: v.BooleanSchema<undefined>;
82
+ readonly inserted_transcripts: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
83
+ readonly replayed_transcripts: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
84
+ readonly superseded_transcripts: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
85
+ readonly segments: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
86
+ readonly media_sha256: v.StringSchema<undefined>;
87
+ readonly engine: v.StringSchema<undefined>;
88
+ readonly model: v.StringSchema<undefined>;
89
+ readonly model_version: v.NullableSchema<v.StringSchema<undefined>, undefined>;
90
+ readonly timing: v.PicklistSchema<["fixed-windows", "recognition-segments"], undefined>;
91
+ }, undefined>], undefined>;
92
+ readonly meeting_embedding: v.UnionSchema<[v.StrictObjectSchema<{
93
+ readonly account_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
94
+ readonly model: v.StrictObjectSchema<{
95
+ readonly key: v.StringSchema<undefined>;
96
+ readonly dims: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
97
+ readonly kind: v.PicklistSchema<["local", "remote"], undefined>;
98
+ readonly model: v.StringSchema<undefined>;
99
+ }, undefined>;
100
+ readonly status: v.StrictObjectSchema<{
101
+ readonly chunks: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
102
+ readonly embedded: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
103
+ }, undefined>;
104
+ readonly applied: v.LiteralSchema<false, undefined>;
105
+ readonly scope: v.LiteralSchema<"existing-current-chunks", undefined>;
106
+ readonly rebuild_required: v.LiteralSchema<"explicit", undefined>;
107
+ }, undefined>, v.StrictObjectSchema<{
108
+ readonly account_id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
109
+ readonly model: v.StrictObjectSchema<{
110
+ readonly key: v.StringSchema<undefined>;
111
+ readonly dims: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
112
+ readonly kind: v.PicklistSchema<["local", "remote"], undefined>;
113
+ readonly model: v.StringSchema<undefined>;
114
+ }, undefined>;
115
+ readonly saved: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
116
+ readonly skipped: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
117
+ readonly has_more: v.BooleanSchema<undefined>;
118
+ readonly next_hash: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
119
+ readonly applied: v.LiteralSchema<true, undefined>;
120
+ readonly rebuild: v.StrictObjectSchema<{
121
+ readonly transcripts: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
122
+ readonly chunks: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
123
+ readonly has_more: v.BooleanSchema<undefined>;
124
+ readonly next_transcript_id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>;
125
+ }, undefined>;
126
+ }, undefined>], undefined>;
127
+ };
@@ -0,0 +1,125 @@
1
+ import * as v from "valibot";
2
+ const text = v.string();
3
+ const identifier = v.pipe(text, v.minLength(1));
4
+ const nullableText = v.nullable(text);
5
+ const count = v.pipe(v.number(), v.integer(), v.minValue(0));
6
+ const flag = v.boolean();
7
+ const scope = v.strictObject({ provider: text, account: text });
8
+ const run = v.strictObject({
9
+ meetings: count,
10
+ participants: count,
11
+ transcript_rows: count,
12
+ summaries: count,
13
+ warnings: v.array(v.strictObject({ external_id: text, message: text })),
14
+ timezone: v.optional(text),
15
+ });
16
+ const exported = v.union([
17
+ v.strictObject({ meeting_id: identifier, format: v.picklist(["markdown", "vtt"]), filename: text, content: text }),
18
+ v.strictObject({ meeting_id: identifier, format: v.picklist(["markdown", "vtt"]), output: text }),
19
+ ]);
20
+ const eventChange = v.strictObject({
21
+ action: v.literal("event.link"),
22
+ event_id: v.nullable(identifier),
23
+ expected_event_id: v.optional(v.nullable(identifier)),
24
+ });
25
+ const personChange = v.strictObject({
26
+ action: v.literal("person.link"),
27
+ participant_id: identifier,
28
+ person_uid: text,
29
+ expected_person_uid: v.optional(nullableText),
30
+ target_account_ids: v.optional(v.array(identifier)),
31
+ });
32
+ const eventResult = v.strictObject({
33
+ meeting_id: identifier,
34
+ event_id: v.nullable(identifier),
35
+ previous_event_id: v.nullable(identifier),
36
+ changed: flag,
37
+ });
38
+ const personResult = v.strictObject({
39
+ meeting_id: identifier,
40
+ participant_id: identifier,
41
+ person_uid: text,
42
+ previous_person_uid: nullableText,
43
+ changed: flag,
44
+ });
45
+ const meetingChange = v.strictObject({
46
+ scope,
47
+ account_id: identifier,
48
+ meeting_id: identifier,
49
+ change: v.union([eventChange, personChange]),
50
+ applied: flag,
51
+ result: v.optional(v.union([eventResult, personResult])),
52
+ });
53
+ const recognition = v.strictObject({
54
+ engine: text,
55
+ model: text,
56
+ version: v.optional(text),
57
+ timing: v.optional(v.picklist(["fixed-windows", "recognition-segments"])),
58
+ });
59
+ const transcription = v.union([
60
+ v.strictObject({
61
+ applied: v.literal(false),
62
+ account_id: identifier,
63
+ external_id: text,
64
+ segments: count,
65
+ media: v.strictObject({
66
+ id: text,
67
+ content_hash: text,
68
+ size: count,
69
+ duration_ms: count,
70
+ format: text,
71
+ sample_rate: count,
72
+ channels: count,
73
+ recognition,
74
+ }),
75
+ }),
76
+ v.strictObject({
77
+ applied: v.literal(true),
78
+ account_id: identifier,
79
+ external_id: text,
80
+ meeting_id: identifier,
81
+ created: flag,
82
+ inserted_transcripts: count,
83
+ replayed_transcripts: count,
84
+ superseded_transcripts: count,
85
+ segments: count,
86
+ media_sha256: text,
87
+ engine: text,
88
+ model: text,
89
+ model_version: nullableText,
90
+ timing: v.picklist(["fixed-windows", "recognition-segments"]),
91
+ }),
92
+ ]);
93
+ const embeddingModel = v.strictObject({ key: text, dims: count, kind: v.picklist(["local", "remote"]), model: text });
94
+ const embedding = v.union([
95
+ v.strictObject({
96
+ account_id: identifier,
97
+ model: embeddingModel,
98
+ status: v.strictObject({ chunks: count, embedded: count }),
99
+ applied: v.literal(false),
100
+ scope: v.literal("existing-current-chunks"),
101
+ rebuild_required: v.literal("explicit"),
102
+ }),
103
+ v.strictObject({
104
+ account_id: identifier,
105
+ model: embeddingModel,
106
+ saved: count,
107
+ skipped: count,
108
+ has_more: flag,
109
+ next_hash: v.optional(text),
110
+ applied: v.literal(true),
111
+ rebuild: v.strictObject({
112
+ transcripts: count,
113
+ chunks: count,
114
+ has_more: flag,
115
+ next_transcript_id: v.optional(identifier),
116
+ }),
117
+ }),
118
+ ]);
119
+ export const MEETING_RESULT_ENTITIES = {
120
+ meeting_ingestion: run,
121
+ meeting_export: exported,
122
+ meeting_association: meetingChange,
123
+ meeting_transcription: transcription,
124
+ meeting_embedding: embedding,
125
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wirecat/cli-core",
3
- "version": "0.406.0",
3
+ "version": "0.407.0",
4
4
  "description": "The messenger-neutral half of a messaging CLI: domain model, message locators, rendering, name resolution, the SQLite seam, the command skeleton and shared read commands, the send guard, run records and the message store",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Viacheslav Ptsarev",