@wirecat/cli-core 0.553.0 → 0.555.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 (55) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/cli/messenger/catch-up-answers.d.ts +50 -1
  3. package/dist/cli/messenger/catch-up-answers.js +2 -1
  4. package/dist/cli/messenger/catch-up.d.ts +6 -2
  5. package/dist/cli/messenger/catch-up.js +11 -2
  6. package/dist/cli/messenger/conversation-answers.d.ts +3 -0
  7. package/dist/cli/messenger/inbox.js +1 -1
  8. package/dist/cli/messenger/message-answers.d.ts +3 -0
  9. package/dist/cli/messenger/message-writes.d.ts +6 -0
  10. package/dist/cli/messenger/points.d.ts +9 -4
  11. package/dist/cli/messenger/points.js +10 -4
  12. package/dist/cli/messenger/review.js +1 -1
  13. package/dist/cli/schedule/schedule-command.d.ts +0 -1
  14. package/dist/cli/schedule/schedule-command.js +6 -1
  15. package/dist/domain/models.d.ts +4 -0
  16. package/dist/entities/contact-context.d.ts +6 -0
  17. package/dist/entities/conversation-results.d.ts +6 -0
  18. package/dist/entities/evidence.d.ts +24 -0
  19. package/dist/entities/index.d.ts +263 -3
  20. package/dist/entities/index.js +1 -0
  21. package/dist/entities/listener.d.ts +12 -0
  22. package/dist/entities/message-context.d.ts +9 -0
  23. package/dist/entities/message-write.d.ts +12 -0
  24. package/dist/entities/message.d.ts +6 -0
  25. package/dist/entities/message.js +6 -0
  26. package/dist/entities/store-records.d.ts +3 -0
  27. package/dist/mail/cli/index.d.ts +2 -1
  28. package/dist/mail/cli/index.js +4 -1
  29. package/dist/mail/cli/review.d.ts +24 -0
  30. package/dist/mail/cli/review.js +204 -0
  31. package/dist/mail/email-input.d.ts +2 -0
  32. package/dist/mail/email-input.js +6 -1
  33. package/dist/mail/index.d.ts +2 -0
  34. package/dist/mail/index.js +2 -0
  35. package/dist/mail/owed.d.ts +11 -0
  36. package/dist/mail/owed.js +14 -0
  37. package/dist/mail/retry.js +2 -1
  38. package/dist/mail/review.d.ts +37 -0
  39. package/dist/mail/review.js +118 -0
  40. package/dist/mail/sync.js +5 -1
  41. package/dist/mail/testing/fake.d.ts +2 -0
  42. package/dist/mail/testing/fake.js +1 -1
  43. package/dist/services/agenda-mail.d.ts +15 -0
  44. package/dist/services/agenda-mail.js +66 -0
  45. package/dist/services/agenda.d.ts +4 -0
  46. package/dist/services/agenda.js +17 -7
  47. package/dist/store/exports.d.ts +1 -0
  48. package/dist/store/exports.js +1 -0
  49. package/dist/store/sqlite/email-activity.d.ts +62 -0
  50. package/dist/store/sqlite/email-activity.js +71 -0
  51. package/dist/store/sqlite/email-locations.d.ts +1 -0
  52. package/dist/store/sqlite/email-locations.js +4 -0
  53. package/dist/store/sqlite/emails.d.ts +9 -3
  54. package/dist/store/sqlite/emails.js +7 -14
  55. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,38 @@ shape of this file.
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## 0.555.0 — 02.11.2026
11
+
12
+ ### Added
13
+
14
+ - **`review` for mail CLIs** (`mailReadCommands`): every stored email, both sides, in threads that changed since a
15
+ point, in messenger `review`'s item shape plus `email` (people, labels, sender score and the marks `bulk`,
16
+ `list_id`, `rule_id`); `--new` keeps a point per mailbox, `--unanswered [duration]` keeps threads whose newest email
17
+ came to the owner in To or Cc with no answer, `--waiting [duration]` threads where the owner wrote last;
18
+ `bulk:false` leaves out mail sent to many. It reads the store only, cuts at the last finished sync and opens no
19
+ task. `reviewMail`, `mailTurn`, `isBulk`, `MAIL_REVIEW_STEPS`, `store.mail.threadActivity` and
20
+ `store.mail.emailMarks` are exported; `store.mail.threadHits` takes a received-time window; the `message` entity's
21
+ `email` gains optional `bulk`, `list_id` and `rule_id`, and its `summary` view may carry `email`.
22
+ - **`tasks agenda` over an email account fills `owed`, `waiting` and `stale`** from its threads, with the same rule
23
+ of whose turn a thread is as mail `review`; before, they were empty and `stale` true.
24
+
25
+ ### Fixed
26
+
27
+ - **A scheduled run's `inbox --new` and `review --new` keep their own point** (`schedule-<name>-review`), so a
28
+ schedule no longer moves the owner's. An agent over MCP keeps its own, as before.
29
+
30
+ ## 0.554.0 — 02.11.2026
31
+
32
+ ### Fixed
33
+
34
+ - **`schedule agent` help no longer shows `skill show follow-ups` to a CLI without that skill.** The prompt example is
35
+ the follow-up review for a messenger and a read-only `search messages` summary for a CLI with `messenger: false`
36
+ (mail).
37
+ - **Mail sync stores `sent_at`.** It is the Date header, or the server's internal date when the header is missing or
38
+ unreadable; `received_at` is unchanged. Each sync also gives up to 5,000 emails stored without `sent_at` the internal
39
+ date (`MailStore.backfillSentAt`), so the `emails_by_time` index becomes useful and an account fills in about a day.
40
+ No schema change.
41
+
10
42
  ## 0.553.0 — 02.11.2026
11
43
 
12
44
  ### Added
@@ -1,5 +1,5 @@
1
1
  import type { Meta } from "@wirecat/cli-base/standards";
2
- import type { ChatKind, Inbox, Review } from "../../domain/models.js";
2
+ import type { ChatKind, Inbox, Message, Review } from "../../domain/models.js";
3
3
  import { type Hearing } from "../../speech/hearing.js";
4
4
  import type { AccountKey } from "../../store/store.js";
5
5
  import { type QueryWords } from "../list-query.js";
@@ -14,6 +14,54 @@ export declare const catchUpQuery: (words: QueryWords, registry: typeof INBOX_QU
14
14
  kinds?: ChatKind[];
15
15
  meta?: Partial<Meta>;
16
16
  };
17
+ type Read = Message & {
18
+ chatTitle?: string | null;
19
+ };
20
+ /** One message of a catch-up answer: the fields `inbox` and `review` show, for every messenger and for mail. */
21
+ export declare const summaryOf: (message: Read, reader: AccountKey) => {
22
+ ref: string;
23
+ chat_id: string;
24
+ chat_title: string | null | undefined;
25
+ timestamp: string;
26
+ sender_name: string | null;
27
+ sender_is_me: boolean;
28
+ outgoing: boolean | null;
29
+ text: string;
30
+ transcript?: string | undefined;
31
+ attachments: {
32
+ message?: string | undefined;
33
+ kind: string;
34
+ position?: number | undefined;
35
+ url?: string | undefined;
36
+ name?: string | undefined;
37
+ title?: string | undefined;
38
+ mime?: string | undefined;
39
+ size?: number | undefined;
40
+ width?: number | undefined;
41
+ height?: number | undefined;
42
+ duration?: number | undefined;
43
+ text?: string | undefined;
44
+ extraction?: {
45
+ origin: string;
46
+ extractor: string;
47
+ chars: number;
48
+ error?: string | undefined;
49
+ } | undefined;
50
+ local_path?: string | undefined;
51
+ contact?: {
52
+ name: string;
53
+ first_name?: string | undefined;
54
+ last_name?: string | undefined;
55
+ phone?: string | undefined;
56
+ user_id?: string | undefined;
57
+ } | undefined;
58
+ buttons?: {
59
+ kind: "app" | "callback" | "chat" | "clipboard" | "contact" | "link" | "location" | "message" | "other";
60
+ text: string;
61
+ url?: string | undefined;
62
+ }[][] | undefined;
63
+ }[];
64
+ };
17
65
  export declare const inboxAnswer: (inbox: Inbox, hearing: Hearing | undefined, reader: AccountKey, transcribe: boolean, meta?: Partial<Meta>) => import("../envelope.js").ListBody<{
18
66
  ref: string;
19
67
  chat_id: string;
@@ -113,3 +161,4 @@ export declare const reviewAnswer: (found: Review, hearing: Hearing | undefined,
113
161
  }[][] | undefined;
114
162
  }[];
115
163
  }>;
164
+ export {};
@@ -33,7 +33,8 @@ export const catchUpQuery = (words, registry, command) => {
33
33
  ...(meta === undefined ? {} : { meta }),
34
34
  };
35
35
  };
36
- const summaryOf = (message, reader) => {
36
+ /** One message of a catch-up answer: the fields `inbox` and `review` show, for every messenger and for mail. */
37
+ export const summaryOf = (message, reader) => {
37
38
  const { ref, chat_id, chat_title, timestamp, sender_name, sender_is_me, outgoing, text, transcript, attachments } = messageItem(message, reader);
38
39
  return {
39
40
  ref,
@@ -1,3 +1,7 @@
1
1
  import type { Command } from "commander";
2
- /** Whose `--new` points a run moves: an agent's are its own, so the owner's `inbox --new` still shows everything. */
3
- export declare const pointsOf: <N extends "inbox" | "review">(command: Command, name: N) => N | `mcp-${N}`;
2
+ import type { AppIdentity } from "../../ports/app.js";
3
+ /**
4
+ * Whose `--new` points a run moves. A scheduled run (`<PREFIX>_SCHEDULED`) keeps one per schedule, an agent over MCP
5
+ * one of its own, and the owner the plain one: no reader moves another's point past what it never showed.
6
+ */
7
+ export declare const pointsOf: (command: Command, name: string, app: Pick<AppIdentity, "envPrefix">) => string;
@@ -1,3 +1,12 @@
1
1
  import { environmentOf } from "../context.js";
2
- /** Whose `--new` points a run moves: an agent's are its own, so the owner's `inbox --new` still shows everything. */
3
- export const pointsOf = (command, name) => environmentOf(command).agent ? `mcp-${name}` : name;
2
+ /**
3
+ * Whose `--new` points a run moves. A scheduled run (`<PREFIX>_SCHEDULED`) keeps one per schedule, an agent over MCP
4
+ * one of its own, and the owner the plain one: no reader moves another's point past what it never showed.
5
+ */
6
+ export const pointsOf = (command, name, app) => {
7
+ const { agent, env } = environmentOf(command);
8
+ const scheduled = (env ?? process.env)[`${app.envPrefix}_SCHEDULED`]?.trim();
9
+ if (scheduled)
10
+ return `schedule-${scheduled.replace(/[^a-z0-9-]/gi, "_")}-${name}`;
11
+ return agent ? `mcp-${name}` : name;
12
+ };
@@ -248,6 +248,9 @@ export declare const conversationShown: (account: AccountKey, { summary, message
248
248
  signals: string[];
249
249
  demoted?: true | undefined;
250
250
  } | undefined;
251
+ bulk?: boolean | undefined;
252
+ list_id?: string | null | undefined;
253
+ rule_id?: number | null | undefined;
251
254
  } | undefined;
252
255
  provider_metadata?: {
253
256
  [x: string]: unknown;
@@ -53,7 +53,7 @@ export const inboxCommand = (messenger) => annotate(new Command("inbox"), {
53
53
  throw new CliError("validation_error", "--new keeps its own point — not with a date in the query");
54
54
  const saved = fresh && since === undefined
55
55
  ? checkPoints(app, {
56
- command: pointsOf(this, "inbox"),
56
+ command: pointsOf(this, "inbox", app),
57
57
  profile: settings.profile,
58
58
  env,
59
59
  firstLookMs: FIRST_LOOK_MS,
@@ -225,6 +225,9 @@ export declare const threadAnswer: ({ items, ...thread }: ThreadContext, reader:
225
225
  signals: string[];
226
226
  demoted?: true | undefined;
227
227
  } | undefined;
228
+ bulk?: boolean | undefined;
229
+ list_id?: string | null | undefined;
230
+ rule_id?: number | null | undefined;
228
231
  } | undefined;
229
232
  provider_metadata?: {
230
233
  [x: string]: unknown;
@@ -229,6 +229,9 @@ export declare const writtenAnswer: ({ operationId, sendId, message, messages, s
229
229
  signals: string[];
230
230
  demoted?: true | undefined;
231
231
  } | undefined;
232
+ bulk?: boolean | undefined;
233
+ list_id?: string | null | undefined;
234
+ rule_id?: number | null | undefined;
232
235
  } | undefined;
233
236
  provider_metadata?: {
234
237
  [x: string]: unknown;
@@ -448,6 +451,9 @@ export declare const writtenAnswer: ({ operationId, sendId, message, messages, s
448
451
  signals: string[];
449
452
  demoted?: true | undefined;
450
453
  } | undefined;
454
+ bulk?: boolean | undefined;
455
+ list_id?: string | null | undefined;
456
+ rule_id?: number | null | undefined;
451
457
  } | undefined;
452
458
  provider_metadata?: {
453
459
  [x: string]: unknown;
@@ -5,16 +5,21 @@ export interface CheckPoints {
5
5
  first: number;
6
6
  /** ms, per chat: where its next check starts. */
7
7
  chats: ReadonlyMap<Id, number>;
8
- /** Moves the chats checked; the rest keep their point. */
9
- save(checked: Record<Id, string>): void;
8
+ /**
9
+ * Moves the chats checked; the rest keep their point. With `through`, everything up to it was read: the start for
10
+ * a chat never checked moves there, and the points it passes are dropped, so the file stays small.
11
+ */
12
+ save(checked: Record<Id, string>, options?: {
13
+ through?: string;
14
+ }): void;
10
15
  }
11
16
  /**
12
17
  * Where `<command> --new` stopped, per chat and profile, beside the remembered account. `inbox` and
13
18
  * `review` keep a file each: sharing one, an `inbox` run would move `review` past what it never showed.
14
- * The MCP tools keep their own too, so an agent's run never moves the owner's `--new`.
19
+ * Each reader keeps its own too (`pointsOf`), so an agent's or a schedule's run never moves the owner's `--new`.
15
20
  */
16
21
  export declare const checkPoints: (app: AppIdentity, { command, profile, env, firstLookMs, }: {
17
- command: "inbox" | "review" | "mcp-inbox" | "mcp-review";
22
+ command: string;
18
23
  profile: string;
19
24
  env: NodeJS.ProcessEnv;
20
25
  firstLookMs: number;
@@ -4,7 +4,7 @@ import { resolvePaths, writeSecurely } from "@wirecat/cli-base";
4
4
  /**
5
5
  * Where `<command> --new` stopped, per chat and profile, beside the remembered account. `inbox` and
6
6
  * `review` keep a file each: sharing one, an `inbox` run would move `review` past what it never showed.
7
- * The MCP tools keep their own too, so an agent's run never moves the owner's `--new`.
7
+ * Each reader keeps its own too (`pointsOf`), so an agent's or a schedule's run never moves the owner's `--new`.
8
8
  */
9
9
  export const checkPoints = (app, { command, profile, env, firstLookMs, }) => {
10
10
  const file = join(resolvePaths({ appName: app.appName, prefix: app.envPrefix, env }).state, command, `${profile}.json`);
@@ -13,10 +13,16 @@ export const checkPoints = (app, { command, profile, env, firstLookMs, }) => {
13
13
  return {
14
14
  first: Date.parse(first),
15
15
  chats: new Map(Object.entries(saved.chats ?? {}).map(([chat, at]) => [chat, Date.parse(at)])),
16
- save: (checked) => {
17
- if (Object.keys(checked).length === 0)
16
+ save: (checked, { through } = {}) => {
17
+ if (Object.keys(checked).length === 0 && through === undefined)
18
18
  return;
19
- const kept = { lastCheckAt: first, chats: { ...saved.chats, ...checked } };
19
+ const chats = { ...saved.chats, ...checked };
20
+ const kept = through === undefined
21
+ ? { lastCheckAt: first, chats }
22
+ : {
23
+ lastCheckAt: through,
24
+ chats: Object.fromEntries(Object.entries(chats).filter(([, at]) => Date.parse(at) > Date.parse(through))),
25
+ };
20
26
  writeSecurely(file, `${JSON.stringify(kept)}\n`, 0o600);
21
27
  },
22
28
  };
@@ -52,7 +52,7 @@ export const reviewCommand = (messenger) => annotate(new Command("review"), {
52
52
  }
53
53
  const saved = options.new
54
54
  ? checkPoints(messenger.app, {
55
- command: pointsOf(this, "review"),
55
+ command: pointsOf(this, "review", messenger.app),
56
56
  profile: settings.profile,
57
57
  env,
58
58
  firstLookMs: REVIEW_DAYS * 86_400_000,
@@ -1,7 +1,6 @@
1
1
  import { Command } from "commander";
2
2
  import { type AppIdentity } from "../../ports/app.js";
3
3
  import { type AnswerOutput } from "../envelope.js";
4
- /** What the schedule command needs of a CLI: who it is and, per command, where it prints and which profile runs. */
5
4
  export interface ScheduleHost {
6
5
  app: AppIdentity;
7
6
  context(command: Command, resolving?: {
@@ -68,6 +68,11 @@ const withWhen = (command) => command
68
68
  .option("--every <duration>", "repeat: 30m, 2h, 1d")
69
69
  .option("--at <HH:MM>", "every day at this local time")
70
70
  .option("--at-time <time>", "one run: 30m, 2d from now, or an ISO time; the schedule removes itself after it");
71
+ /** What the schedule command needs of a CLI: who it is and, per command, where it prints and which profile runs. */
72
+ /** `skill show follow-ups` exists only for messenger CLIs; any other CLI gets a read-only summary it can run. */
73
+ const promptExample = (app) => app.messenger === false
74
+ ? `summarize what came in during the last day: ${app.command} personal search messages 'date>1d' --newest --limit 20`
75
+ : `run the daily follow-up review: ${app.command} skill show follow-ups`;
71
76
  /**
72
77
  * Runs the CLI's own commands, or an agent, later or on a timer — through systemd (Linux), launchd
73
78
  * (macOS) or Task Scheduler (Windows). Every timer runs `schedule exec <file>`; the schedule file holds
@@ -142,7 +147,7 @@ export const scheduleCommandFor = ({ app, context: contextOf }) => {
142
147
  .description(`start an agent (claude or codex) with a prompt on a timer; it runs with ${app.envPrefix}_READ_ONLY=1, so it reads and drafts and cannot send — its answer is kept and you are notified`)
143
148
  .argument("<name>", "lowercase letters, digits and dashes")
144
149
  .addArgument(new Argument("<harness>", "the agent to start").choices(HARNESSES))
145
- .argument("<prompt>", `what to do, e.g. "run the daily follow-up review: ${app.command} skill show follow-ups"`)
150
+ .argument("<prompt>", `what to do, e.g. "${promptExample(app)}"`)
146
151
  .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) {
147
152
  const { context, system, environment, save } = prepare(this);
148
153
  const options = this.opts();
@@ -519,6 +519,10 @@ export interface Review {
519
519
  unanswered?: {
520
520
  olderThanHours: number;
521
521
  };
522
+ /** `--waiting` (mail): only threads where the owner wrote last and nobody answered for this many hours. */
523
+ waiting?: {
524
+ olderThanHours: number;
525
+ };
522
526
  /** With saved points: each chat read whole, and the time its next check starts from. */
523
527
  checked?: Record<Id, string>;
524
528
  /** Tasks the review opened and closed in the store, by the rules; absent when the store was not open. */
@@ -346,6 +346,9 @@ export declare const contactMessages: v.StrictObjectSchema<{
346
346
  readonly signals: v.ArraySchema<v.StringSchema<undefined>, undefined>;
347
347
  readonly demoted: v.OptionalSchema<v.LiteralSchema<true, undefined>, undefined>;
348
348
  }, undefined>, undefined>;
349
+ readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
350
+ readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
351
+ readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
349
352
  readonly reply_to: v.ArraySchema<v.StrictObjectSchema<{
350
353
  readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
351
354
  readonly address: v.StringSchema<undefined>;
@@ -1118,6 +1121,9 @@ export declare const contactContext: v.UnionSchema<[v.StrictObjectSchema<{
1118
1121
  readonly signals: v.ArraySchema<v.StringSchema<undefined>, undefined>;
1119
1122
  readonly demoted: v.OptionalSchema<v.LiteralSchema<true, undefined>, undefined>;
1120
1123
  }, undefined>, undefined>;
1124
+ readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1125
+ readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1126
+ readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1121
1127
  readonly reply_to: v.ArraySchema<v.StrictObjectSchema<{
1122
1128
  readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
1123
1129
  readonly address: v.StringSchema<undefined>;
@@ -224,6 +224,9 @@ export declare const conversationDetails: v.UnionSchema<[v.StrictObjectSchema<{
224
224
  readonly signals: v.ArraySchema<v.StringSchema<undefined>, undefined>;
225
225
  readonly demoted: v.OptionalSchema<v.LiteralSchema<true, undefined>, undefined>;
226
226
  }, undefined>, undefined>;
227
+ readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
228
+ readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
229
+ readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
227
230
  }, undefined>, undefined>;
228
231
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
229
232
  }, undefined>, undefined>;
@@ -441,6 +444,9 @@ export declare const conversationDetails: v.UnionSchema<[v.StrictObjectSchema<{
441
444
  readonly signals: v.ArraySchema<v.StringSchema<undefined>, undefined>;
442
445
  readonly demoted: v.OptionalSchema<v.LiteralSchema<true, undefined>, undefined>;
443
446
  }, undefined>, undefined>;
447
+ readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
448
+ readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
449
+ readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
444
450
  }, undefined>, undefined>;
445
451
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
446
452
  }, undefined>], undefined>;
@@ -215,6 +215,9 @@ export declare const contribution: v.StrictObjectSchema<{
215
215
  readonly signals: v.ArraySchema<v.StringSchema<undefined>, undefined>;
216
216
  readonly demoted: v.OptionalSchema<v.LiteralSchema<true, undefined>, undefined>;
217
217
  }, undefined>, undefined>;
218
+ readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
219
+ readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
220
+ readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
218
221
  }, undefined>, undefined>;
219
222
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
220
223
  }, undefined>, "entries" | "~run" | "~standard" | "~types"> & {
@@ -432,6 +435,9 @@ export declare const contribution: v.StrictObjectSchema<{
432
435
  readonly signals: v.ArraySchema<v.StringSchema<undefined>, undefined>;
433
436
  readonly demoted: v.OptionalSchema<v.LiteralSchema<true, undefined>, undefined>;
434
437
  }, undefined>, undefined>;
438
+ readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
439
+ readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
440
+ readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
435
441
  }, undefined>, undefined>;
436
442
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
437
443
  }, "chat_title" | "ref" | "sender_name" | "text" | "timestamp">;
@@ -687,6 +693,9 @@ export declare const contribution: v.StrictObjectSchema<{
687
693
  readonly signals: v.ArraySchema<v.StringSchema<undefined>, undefined>;
688
694
  readonly demoted: v.OptionalSchema<v.LiteralSchema<true, undefined>, undefined>;
689
695
  }, undefined>, undefined>;
696
+ readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
697
+ readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
698
+ readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
690
699
  }, undefined>, undefined>;
691
700
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
692
701
  }, undefined>, "entries" | "~run" | "~standard" | "~types"> & {
@@ -904,6 +913,9 @@ export declare const contribution: v.StrictObjectSchema<{
904
913
  readonly signals: v.ArraySchema<v.StringSchema<undefined>, undefined>;
905
914
  readonly demoted: v.OptionalSchema<v.LiteralSchema<true, undefined>, undefined>;
906
915
  }, undefined>, undefined>;
916
+ readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
917
+ readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
918
+ readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
907
919
  }, undefined>, undefined>;
908
920
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
909
921
  }, "chat_title" | "ref" | "sender_name" | "text" | "timestamp">;
@@ -1195,6 +1207,9 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
1195
1207
  readonly signals: v.ArraySchema<v.StringSchema<undefined>, undefined>;
1196
1208
  readonly demoted: v.OptionalSchema<v.LiteralSchema<true, undefined>, undefined>;
1197
1209
  }, undefined>, undefined>;
1210
+ readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1211
+ readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1212
+ readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1198
1213
  }, undefined>, undefined>;
1199
1214
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
1200
1215
  }, undefined>, "entries" | "~run" | "~standard" | "~types"> & {
@@ -1412,6 +1427,9 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
1412
1427
  readonly signals: v.ArraySchema<v.StringSchema<undefined>, undefined>;
1413
1428
  readonly demoted: v.OptionalSchema<v.LiteralSchema<true, undefined>, undefined>;
1414
1429
  }, undefined>, undefined>;
1430
+ readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1431
+ readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1432
+ readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1415
1433
  }, undefined>, undefined>;
1416
1434
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
1417
1435
  }, "chat_title" | "ref" | "sender_name" | "text" | "timestamp">;
@@ -1667,6 +1685,9 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
1667
1685
  readonly signals: v.ArraySchema<v.StringSchema<undefined>, undefined>;
1668
1686
  readonly demoted: v.OptionalSchema<v.LiteralSchema<true, undefined>, undefined>;
1669
1687
  }, undefined>, undefined>;
1688
+ readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1689
+ readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1690
+ readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1670
1691
  }, undefined>, undefined>;
1671
1692
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
1672
1693
  }, undefined>, "entries" | "~run" | "~standard" | "~types"> & {
@@ -1884,6 +1905,9 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
1884
1905
  readonly signals: v.ArraySchema<v.StringSchema<undefined>, undefined>;
1885
1906
  readonly demoted: v.OptionalSchema<v.LiteralSchema<true, undefined>, undefined>;
1886
1907
  }, undefined>, undefined>;
1908
+ readonly bulk: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
1909
+ readonly list_id: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
1910
+ readonly rule_id: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
1887
1911
  }, undefined>, undefined>;
1888
1912
  readonly provider_metadata: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, undefined>;
1889
1913
  }, "chat_title" | "ref" | "sender_name" | "text" | "timestamp">;