@wirecat/cli-core 0.559.0 → 0.561.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 (89) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/dist/background/schedules.d.ts +2 -0
  3. package/dist/calendar/busy.d.ts +11 -0
  4. package/dist/calendar/busy.js +14 -1
  5. package/dist/calendar/cli/index.d.ts +9 -3
  6. package/dist/calendar/cli/index.js +14 -7
  7. package/dist/calendar/cli/local-times.d.ts +5 -0
  8. package/dist/calendar/cli/local-times.js +39 -0
  9. package/dist/calendar/mcp/index.js +1 -1
  10. package/dist/calendar/reads.d.ts +11 -2
  11. package/dist/calendar/reads.js +34 -18
  12. package/dist/calendar/writes.js +3 -44
  13. package/dist/cli/effects.d.ts +13 -2
  14. package/dist/cli/effects.js +23 -2
  15. package/dist/cli/index.d.ts +2 -2
  16. package/dist/cli/index.js +2 -2
  17. package/dist/cli/meeting-findings-input.d.ts +3 -0
  18. package/dist/cli/meeting-findings-input.js +4 -0
  19. package/dist/cli/messenger/conversation-answers.d.ts +3 -0
  20. package/dist/cli/messenger/message-answers.d.ts +3 -0
  21. package/dist/cli/messenger/message-writes.d.ts +6 -0
  22. package/dist/cli/schedule/schedule-command.d.ts +6 -1
  23. package/dist/cli/schedule/schedule-command.js +24 -2
  24. package/dist/entities/contact-context.d.ts +6 -0
  25. package/dist/entities/conversation-results.d.ts +6 -0
  26. package/dist/entities/evidence.d.ts +24 -0
  27. package/dist/entities/index.d.ts +190 -0
  28. package/dist/entities/index.js +3 -0
  29. package/dist/entities/listener.d.ts +12 -0
  30. package/dist/entities/mail-findings.d.ts +116 -0
  31. package/dist/entities/mail-findings.js +68 -0
  32. package/dist/entities/message-context.d.ts +9 -0
  33. package/dist/entities/message-write.d.ts +12 -0
  34. package/dist/entities/message.d.ts +6 -0
  35. package/dist/entities/message.js +6 -0
  36. package/dist/entities/store-records.d.ts +3 -0
  37. package/dist/errors/reasons.js +3 -0
  38. package/dist/mail/cli/marks.d.ts +1 -0
  39. package/dist/mail/cli/marks.js +11 -4
  40. package/dist/mail/cli/review.js +10 -2
  41. package/dist/mail/findings.d.ts +55 -0
  42. package/dist/mail/findings.js +140 -0
  43. package/dist/mail/index.d.ts +2 -1
  44. package/dist/mail/index.js +2 -1
  45. package/dist/mail/marks.d.ts +10 -3
  46. package/dist/mail/marks.js +34 -5
  47. package/dist/meetings/findings-rules.d.ts +24 -0
  48. package/dist/meetings/findings-rules.js +136 -116
  49. package/dist/meetings/index.d.ts +2 -1
  50. package/dist/meetings/index.js +2 -1
  51. package/dist/sends/index.d.ts +1 -0
  52. package/dist/sends/index.js +1 -0
  53. package/dist/sends/keyed-guard.d.ts +12 -0
  54. package/dist/sends/keyed-guard.js +49 -0
  55. package/dist/services/proposals/kinds/mail-findings.d.ts +8 -0
  56. package/dist/services/proposals/kinds/mail-findings.js +87 -0
  57. package/dist/services/proposals/registry.js +3 -1
  58. package/dist/services/proposals/types.d.ts +2 -0
  59. package/dist/store/decisions.d.ts +1 -1
  60. package/dist/store/decisions.js +1 -1
  61. package/dist/store/index.d.ts +1 -0
  62. package/dist/store/index.js +1 -0
  63. package/dist/store/mail-findings.d.ts +51 -0
  64. package/dist/store/mail-findings.js +1 -0
  65. package/dist/store/path.d.ts +2 -0
  66. package/dist/store/path.js +21 -1
  67. package/dist/store/sqlite/email-activity.d.ts +8 -0
  68. package/dist/store/sqlite/email-activity.js +31 -5
  69. package/dist/store/sqlite/findings-core.d.ts +1 -0
  70. package/dist/store/sqlite/findings-core.js +1 -1
  71. package/dist/store/sqlite/mail-findings.d.ts +3 -0
  72. package/dist/store/sqlite/mail-findings.js +333 -0
  73. package/dist/store/sqlite/manifest.js +1 -0
  74. package/dist/store/sqlite/memories.d.ts +4 -1
  75. package/dist/store/sqlite/memories.js +48 -43
  76. package/dist/store/sqlite/migrations.generated.js +6 -0
  77. package/dist/store/sqlite/open-store.d.ts +1 -1
  78. package/dist/store/sqlite/open-store.js +4 -1
  79. package/dist/store/sqlite/open.js +2 -1
  80. package/dist/store/sqlite/proposed-actions.js +2 -1
  81. package/dist/store/sqlite/tasks.d.ts +2 -0
  82. package/dist/store/sqlite/tasks.js +26 -24
  83. package/dist/store/sqlite/test-accounts.d.ts +8 -0
  84. package/dist/store/sqlite/test-accounts.js +31 -0
  85. package/dist/store/sqlite/work-tasks.d.ts +1 -0
  86. package/dist/store/sqlite/work-tasks.js +6 -0
  87. package/dist/store/store.d.ts +3 -0
  88. package/dist/store/store.js +5 -0
  89. package/package.json +1 -1
@@ -232,6 +232,9 @@ export declare const writtenAnswer: ({ operationId, sendId, message, messages, s
232
232
  bulk?: boolean | undefined;
233
233
  list_id?: string | null | undefined;
234
234
  rule_id?: number | null | undefined;
235
+ fingerprint?: string | undefined;
236
+ new_sender?: boolean | undefined;
237
+ sender_identities?: number | undefined;
235
238
  } | undefined;
236
239
  provider_metadata?: {
237
240
  [x: string]: unknown;
@@ -454,6 +457,9 @@ export declare const writtenAnswer: ({ operationId, sendId, message, messages, s
454
457
  bulk?: boolean | undefined;
455
458
  list_id?: string | null | undefined;
456
459
  rule_id?: number | null | undefined;
460
+ fingerprint?: string | undefined;
461
+ new_sender?: boolean | undefined;
462
+ sender_identities?: number | undefined;
457
463
  } | undefined;
458
464
  provider_metadata?: {
459
465
  [x: string]: unknown;
@@ -9,10 +9,15 @@ export interface ScheduleHost {
9
9
  env: NodeJS.ProcessEnv;
10
10
  profile: string;
11
11
  };
12
+ /**
13
+ * Whether mail is stored past the holder's mark (`holderHasMail`). Given, `schedule agent` takes `--on-new-mail`:
14
+ * the agent then runs only after a sync stored mail it has not processed.
15
+ */
16
+ newMail?: (command: Command, holder: string) => Promise<boolean>;
12
17
  }
13
18
  /**
14
19
  * Runs the CLI's own commands, or an agent, later or on a timer — through systemd (Linux), launchd
15
20
  * (macOS) or Task Scheduler (Windows). Every timer runs `schedule exec <file>`; the schedule file holds
16
21
  * the rest, so what runs and with which variables is the same on all three.
17
22
  */
18
- export declare const scheduleCommandFor: ({ app, context: contextOf }: ScheduleHost) => Command;
23
+ export declare const scheduleCommandFor: ({ app, context: contextOf, newMail }: ScheduleHost) => Command;
@@ -7,6 +7,7 @@ import { describeWhen, findProgram, lastRun, listSchedules, readSchedule, runSch
7
7
  import { thisMachine } from "../../background/system.js";
8
8
  import { locationVariables } from "../../background/units.js";
9
9
  import { parseDuration } from "../../domain/duration.js";
10
+ import { HOLDER } from "../../mail/marks.js";
10
11
  import { readOnlyLockOf } from "../../ports/app.js";
11
12
  import { aheadOf } from "../../services/moment.js";
12
13
  import { storePath } from "../../store/path.js";
@@ -18,6 +19,8 @@ import { SCHEDULES_QUERY, scheduleFilter } from "../messenger/list-result-querie
18
19
  import { lineOf } from "../steps.js";
19
20
  /** Each run of an agent is a paid model call that reads chats; keeping the store current is `serve`'s job. */
20
21
  const AGENT_MINIMUM_MINUTES = 60;
22
+ /** A run gated on new mail costs a store read when nothing came, so it may check as often as mail syncs. */
23
+ const GATED_AGENT_MINIMUM_MINUTES = 5;
21
24
  const COMMAND_MINIMUM_MINUTES = 1;
22
25
  const HARNESSES = ["claude", "codex"];
23
26
  const whenOf = ({ every, at, atTime }, minimum) => {
@@ -78,7 +81,7 @@ const promptExample = (app) => app.messenger === false
78
81
  * (macOS) or Task Scheduler (Windows). Every timer runs `schedule exec <file>`; the schedule file holds
79
82
  * the rest, so what runs and with which variables is the same on all three.
80
83
  */
81
- export const scheduleCommandFor = ({ app, context: contextOf }) => {
84
+ export const scheduleCommandFor = ({ app, context: contextOf, newMail }) => {
82
85
  const command = new Command("schedule").description(`run a ${app.command} command or an agent later or on a timer (systemd, launchd, Task Scheduler); an agent cannot send`);
83
86
  const prepare = (self, resolving = {}) => {
84
87
  const context = contextOf(self, resolving);
@@ -114,6 +117,13 @@ export const scheduleCommandFor = ({ app, context: contextOf }) => {
114
117
  };
115
118
  return { context, system, state, say, timer, environment, save };
116
119
  };
120
+ /** A schedule gated on new mail waits while nothing is stored past its holder's mark. */
121
+ const waits = async (self, file) => {
122
+ const holder = existsSync(file) ? readSchedule(file).onNewMail : undefined;
123
+ if (holder === undefined || !newMail || (await newMail(self, holder)))
124
+ return undefined;
125
+ return holder;
126
+ };
117
127
  withWhen(grantsAuthority(annotate(command.command("command"), {
118
128
  literal_after_dashes: true,
119
129
  effects: LOCAL_WRITE,
@@ -151,6 +161,8 @@ export const scheduleCommandFor = ({ app, context: contextOf }) => {
151
161
  .addOption(new Option("--max-cost <usd>", "claude only: stop a run that costs more than this, in US dollars").argParser(Number))).action(async function (name, harness, prompt) {
152
162
  const { context, system, environment, save } = prepare(this);
153
163
  const options = this.opts();
164
+ if (options.onNewMail !== undefined && !HOLDER.test(options.onNewMail))
165
+ throw new CliError("validation_error", `--on-new-mail takes a holder: lower-case letters, digits and dashes`);
154
166
  const program = findProgram(harness, context.env, system.platform);
155
167
  if (!program)
156
168
  throw new CliError("not_found", `${harness} is not on PATH`);
@@ -188,11 +200,16 @@ export const scheduleCommandFor = ({ app, context: contextOf }) => {
188
200
  name: scheduleName(name),
189
201
  kind: "agent",
190
202
  argv,
191
- when: whenOf(options, AGENT_MINIMUM_MINUTES),
203
+ when: whenOf(options, options.onNewMail ? GATED_AGENT_MINIMUM_MINUTES : AGENT_MINIMUM_MINUTES),
192
204
  environment: environment(),
193
205
  createdAt: new Date().toISOString(),
206
+ ...(options.onNewMail ? { onNewMail: options.onNewMail } : {}),
194
207
  });
195
208
  });
209
+ if (newMail)
210
+ command.commands
211
+ .find((one) => one.name() === "agent")
212
+ ?.option("--on-new-mail <holder>", `run only when mail is stored past this holder's mark — after a sync brought new mail; may check every ${GATED_AGENT_MINIMUM_MINUTES}m`);
196
213
  withQuery(annotate(command.command("list"), {
197
214
  effects: LOCAL_READ,
198
215
  examples: [`${app.command} personal schedule list`, `${app.command} personal schedule list kind:agent`],
@@ -241,6 +258,9 @@ export const scheduleCommandFor = ({ app, context: contextOf }) => {
241
258
  .argument("<name>", "the schedule's name, as `schedule list` shows it")
242
259
  .action(async function (name) {
243
260
  const { context, system, state, say, timer } = prepare(this);
261
+ const holder = await waits(this, scheduleFile(state, scheduleName(name)));
262
+ if (holder !== undefined)
263
+ return say({ name, skipped: true, holder }, [`${name}: skipped — no mail stored past ${holder}'s mark`]);
244
264
  const last = await untilChildEnds(this, (signal) => runSchedule(app, system, context.env, scheduleFile(state, scheduleName(name)), {
245
265
  timer: timer(),
246
266
  ...(signal ? { signal } : {}),
@@ -273,6 +293,8 @@ export const scheduleCommandFor = ({ app, context: contextOf }) => {
273
293
  .action(async function (file) {
274
294
  // A timer starts it with no profile named; the schedule's own environment carries the profile.
275
295
  const { context, system, timer } = prepare(this, { needsProfile: false });
296
+ if ((await waits(this, file)) !== undefined)
297
+ return;
276
298
  const last = await untilChildEnds(this, (signal) => runSchedule(app, system, context.env, file, {
277
299
  timer: timer(),
278
300
  untilUnlocked: true,
@@ -349,6 +349,9 @@ export declare const contactMessages: v.StrictObjectSchema<{
349
349
  readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
350
350
  readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
351
351
  readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
352
+ readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
353
+ readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
354
+ readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
352
355
  readonly reply_to: v.ArraySchema<v.StrictObjectSchema<{
353
356
  readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
354
357
  readonly address: v.StringSchema<undefined>;
@@ -1124,6 +1127,9 @@ export declare const contactContext: v.UnionSchema<[v.StrictObjectSchema<{
1124
1127
  readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1125
1128
  readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1126
1129
  readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1130
+ readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
1131
+ readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1132
+ readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1127
1133
  readonly reply_to: v.ArraySchema<v.StrictObjectSchema<{
1128
1134
  readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
1129
1135
  readonly address: v.StringSchema<undefined>;
@@ -227,6 +227,9 @@ export declare const conversationDetails: v.UnionSchema<[v.StrictObjectSchema<{
227
227
  readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
228
228
  readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
229
229
  readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
230
+ readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
231
+ readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
232
+ readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
230
233
  }, undefined>, undefined>;
231
234
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
232
235
  }, undefined>, undefined>;
@@ -447,6 +450,9 @@ export declare const conversationDetails: v.UnionSchema<[v.StrictObjectSchema<{
447
450
  readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
448
451
  readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
449
452
  readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
453
+ readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
454
+ readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
455
+ readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
450
456
  }, undefined>, undefined>;
451
457
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
452
458
  }, undefined>], undefined>;
@@ -218,6 +218,9 @@ export declare const contribution: v.StrictObjectSchema<{
218
218
  readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
219
219
  readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
220
220
  readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
221
+ readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
222
+ readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
223
+ readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
221
224
  }, undefined>, undefined>;
222
225
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
223
226
  }, undefined>, "entries" | "~run" | "~standard" | "~types"> & {
@@ -438,6 +441,9 @@ export declare const contribution: v.StrictObjectSchema<{
438
441
  readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
439
442
  readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
440
443
  readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
444
+ readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
445
+ readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
446
+ readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
441
447
  }, undefined>, undefined>;
442
448
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
443
449
  }, "chat_title" | "ref" | "sender_name" | "text" | "timestamp">;
@@ -696,6 +702,9 @@ export declare const contribution: v.StrictObjectSchema<{
696
702
  readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
697
703
  readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
698
704
  readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
705
+ readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
706
+ readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
707
+ readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
699
708
  }, undefined>, undefined>;
700
709
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
701
710
  }, undefined>, "entries" | "~run" | "~standard" | "~types"> & {
@@ -916,6 +925,9 @@ export declare const contribution: v.StrictObjectSchema<{
916
925
  readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
917
926
  readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
918
927
  readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
928
+ readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
929
+ readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
930
+ readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
919
931
  }, undefined>, undefined>;
920
932
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
921
933
  }, "chat_title" | "ref" | "sender_name" | "text" | "timestamp">;
@@ -1210,6 +1222,9 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
1210
1222
  readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1211
1223
  readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1212
1224
  readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1225
+ readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
1226
+ readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1227
+ readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1213
1228
  }, undefined>, undefined>;
1214
1229
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
1215
1230
  }, undefined>, "entries" | "~run" | "~standard" | "~types"> & {
@@ -1430,6 +1445,9 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
1430
1445
  readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1431
1446
  readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1432
1447
  readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1448
+ readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
1449
+ readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1450
+ readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1433
1451
  }, undefined>, undefined>;
1434
1452
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
1435
1453
  }, "chat_title" | "ref" | "sender_name" | "text" | "timestamp">;
@@ -1688,6 +1706,9 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
1688
1706
  readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1689
1707
  readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1690
1708
  readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1709
+ readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
1710
+ readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1711
+ readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1691
1712
  }, undefined>, undefined>;
1692
1713
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
1693
1714
  }, undefined>, "entries" | "~run" | "~standard" | "~types"> & {
@@ -1908,6 +1929,9 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
1908
1929
  readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1909
1930
  readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1910
1931
  readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1932
+ readonly fingerprint: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>]>, undefined>;
1933
+ readonly new_sender: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1934
+ readonly sender_identities: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
1911
1935
  }, undefined>, undefined>;
1912
1936
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
1913
1937
  }, "chat_title" | "ref" | "sender_name" | "text" | "timestamp">;