@leemour/cli-messaging 0.164.0 → 0.166.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.
@@ -76,7 +76,7 @@ export const fetchCommand = (messenger) => {
76
76
  }
77
77
  if (prepare) {
78
78
  validateCatchUpBounds(preparation);
79
- refuseLocalWrite(context, messenger.app.command, "conversations.build");
79
+ refuseLocalWrite(context, messenger.app.command, "conversations.links");
80
80
  refuseLocalWrite(context, messenger.app.command, "conversations.embed");
81
81
  }
82
82
  if (background) {
@@ -68,7 +68,7 @@ export const gapsCommand = (messenger) => {
68
68
  throw new CliError("validation_error", "catch-up budgets need --catch-up or searchCatchUp true");
69
69
  if (prepare) {
70
70
  validateCatchUpBounds(preparation);
71
- refuseLocalWrite(context, messenger.app.command, "conversations.build");
71
+ refuseLocalWrite(context, messenger.app.command, "conversations.links");
72
72
  refuseLocalWrite(context, messenger.app.command, "conversations.embed");
73
73
  }
74
74
  if (args.background) {
@@ -1 +1 @@
1
- {"version":3,"file":"messages-send-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/messages-send-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,cAAc,CAAA;AAI/D;;;GAGG;AACH,eAAO,MAAM,WAAW,cAAe,SAAS,KAAG,OAyB7C,CAAA"}
1
+ {"version":3,"file":"messages-send-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/messages-send-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,cAAc,CAAA;AAI/D;;;GAGG;AACH,eAAO,MAAM,WAAW,cAAe,SAAS,KAAG,OA8BlD,CAAA"}
@@ -11,28 +11,34 @@ import { threadIdOf } from "./thread.js";
11
11
  * **Asked before it goes, told after, on every outcome** — the guard's journal is the only record
12
12
  * of what this profile tried to send, and it never holds the text.
13
13
  */
14
- export const sendCommand = (messenger) => annotate(new Command("send"), { mutates: true })
15
- .description("send a text message; without [text], the text is read from stdin")
16
- .argument("<chat>", messenger.chatArgument)
17
- .argument("[text]", "the message")
18
- .option("--topic <id>", "send to this forum topic; unsupported by messengers without topics")
19
- .option("--reply-to <message>", "answer this message, by its id in the same chat")
20
- .option("--send-as <id>", "post as one of the identities `chats send-as` lists")
21
- .option("--send-id <id>", "repeat a send whose outcome was unknown, without risking a second copy")
22
- .option("--silent", "deliver without a notification")
23
- .option("--no-preview", "no preview card for a link in the text")
24
- .option("--md", "read this messenger's Markdown; see its formatting guide for supported syntax")
25
- .option("--file <file>", "attach a file; the text becomes its caption")
26
- .option("--photo <file>", "attach a .jpg, .png or .webp as a photo; the text becomes its caption")
27
- .option("--as-file", "send the --file as a file to download, a video included")
28
- .option("--spoiler", "hide the --photo or video behind a spoiler until tapped")
29
- .option("--caption-above", "show the text above the --photo or --file, not below it")
30
- .option("--voice <file>", "send an Ogg Opus file as a voice message, alone, with no text")
31
- .option("--allow-any-file", "send a file even from a hidden folder, ~/.ssh or this CLI's own folders")
32
- .option("--at-time <time>", "let the messenger send it later, even with this machine off: 2026-09-25T09:00 (local time), or 30m, 2h, 1d from now")
33
- .action(async function (chat, text) {
34
- await sendText(this, messenger, chat, text);
35
- });
14
+ export const sendCommand = (messenger) => {
15
+ const send = annotate(new Command("send"), { mutates: true })
16
+ .description("send a text message; without [text], the text is read from stdin")
17
+ .argument("<chat>", messenger.chatArgument)
18
+ .argument("[text]", "the message")
19
+ .option("--topic <id>", "send to this forum topic; unsupported by messengers without topics")
20
+ .option("--reply-to <message>", "answer this message, by its id in the same chat")
21
+ .option("--send-as <id>", "post as one of the identities `chats send-as` lists")
22
+ .option("--send-id <id>", "repeat a send whose outcome was unknown, without risking a second copy")
23
+ .option("--silent", "deliver without a notification")
24
+ .option("--no-preview", "no preview card for a link in the text")
25
+ .option("--md", "read this messenger's Markdown; see its formatting guide for supported syntax")
26
+ .option("--file <file>", "attach a file; the text becomes its caption")
27
+ .option("--photo <file>", "attach a .jpg, .png or .webp as a photo; the text becomes its caption")
28
+ .option("--as-file", "send the --file as a file to download, a video included")
29
+ .option("--voice <file>", "send an Ogg Opus file as a voice message, alone, with no text")
30
+ .option("--allow-any-file", "send a file even from a hidden folder, ~/.ssh or this CLI's own folders")
31
+ .option("--at-time <time>", "let the messenger send it later, even with this machine off: 2026-09-25T09:00 (local time), or 30m, 2h, 1d from now")
32
+ .action(async function (chat, text) {
33
+ await sendText(this, messenger, chat, text);
34
+ });
35
+ // Offered only where the messenger lists them, so a CLI never shows a flag it would refuse.
36
+ if (messenger.mediaOptions?.includes("spoiler"))
37
+ send.option("--spoiler", "hide the --photo or video behind a spoiler until tapped");
38
+ if (messenger.mediaOptions?.includes("captionAbove"))
39
+ send.option("--caption-above", "show the text above the --photo or --file, not below it");
40
+ return send;
41
+ };
36
42
  const sendText = async (command, messenger, chat, text) => {
37
43
  const context = messengerContext(command, messenger);
38
44
  const { topic, replyTo: typedReplyTo, sendAs: givenSendAs, sendId, silent, preview, md: markdown, atTime: at, file, photo, voice, asFile, allowAnyFile, spoiler, captionAbove, } = command.opts();
@@ -1 +1 @@
1
- {"version":3,"file":"messages-send-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/messages-send-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages-send-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/messages-send-command.ts"],"names":[],"mappings":"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"}
@@ -66,7 +66,7 @@ export const storeTools = (messenger) => ({
66
66
  (args.catch_up_chunks !== undefined || args.catch_up_messages !== undefined || args.catch_up_time !== undefined))
67
67
  throw new CliError("validation_error", "catch-up budgets need catch_up or searchCatchUp true");
68
68
  if (prepare) {
69
- for (const key of ["conversations.build", "conversations.embed"]) {
69
+ for (const key of ["conversations.links", "conversations.embed"]) {
70
70
  const level = levelFor(defaults.settings.permissions ?? {}, key).level;
71
71
  if (level === "deny" || level === "readonly")
72
72
  throw new CliError("permission_error", `profile does not let ${key} prepare search`, { permission: key });
@@ -12,7 +12,7 @@ export const validateCatchUpBounds = (options) => {
12
12
  };
13
13
  export const validateCatchUp = (deps, options) => {
14
14
  validateCatchUpBounds(options);
15
- for (const key of ["conversations.build", "conversations.embed"])
15
+ for (const key of ["conversations.links", "conversations.embed"])
16
16
  deps.guard.check({ chatId: null, key }, { reserve: false });
17
17
  };
18
18
  export const catchUpSearch = async (deps, chat, options, signal, clock = Date.now) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leemour/cli-messaging",
3
- "version": "0.164.0",
3
+ "version": "0.166.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": "MIT",
6
6
  "author": "Viacheslav Ptsarev",
package/parity.json CHANGED
@@ -189,6 +189,10 @@
189
189
  "value": "<on|off>",
190
190
  "meaning": "on closes a forum topic to new messages, off reopens it"
191
191
  },
192
+ "--component": {
193
+ "value": "<name>",
194
+ "meaning": "the ranking component whose contributing messages or answer pairs to read"
195
+ },
192
196
  "--concurrency": {
193
197
  "value": "<n>",
194
198
  "meaning": "remote: requests at once (default: 4)"
@@ -210,7 +214,7 @@
210
214
  },
211
215
  "--cursor": {
212
216
  "value": "<cursor>",
213
- "meaning": "continue from the extraction cursor"
217
+ "meaning": "continue from the extraction or ranking-evidence cursor"
214
218
  },
215
219
  "--days": {
216
220
  "meaning": "days of the working window, such as mon-fri or sat,sun",
@@ -424,6 +428,10 @@
424
428
  "--md": {
425
429
  "meaning": "read this messenger's Markdown; see its formatting guide for supported syntax"
426
430
  },
431
+ "--measure": {
432
+ "value": "<name>",
433
+ "meaning": "the metric used to order a ranking; not with --score or --weights"
434
+ },
427
435
  "--members-see-link": {
428
436
  "value": "<on|off>",
429
437
  "meaning": "members may see the invite link"
@@ -435,10 +443,20 @@
435
443
  "value": "<message>",
436
444
  "meaning": "the message to tag or untag: its id in --chat, or a msg: locator alone"
437
445
  },
446
+ "--message-kind": {
447
+ "value": "<all|posts|comments>",
448
+ "meaning": "the proven kind of messages selected before ranking",
449
+ "default": "all"
450
+ },
438
451
  "--method": {
439
452
  "value": "<method>",
440
453
  "meaning": "how to log in when there is no session"
441
454
  },
455
+ "--min-messages": {
456
+ "value": "<n>",
457
+ "meaning": "minimum selected messages for a ranked author",
458
+ "default": "1; 5 for engaging unless explicitly set"
459
+ },
442
460
  "--min-score": {
443
461
  "value": "<n>",
444
462
  "meaning": "only rows scoring at least this"
@@ -673,6 +691,10 @@
673
691
  "value": "<name|id>",
674
692
  "meaning": "run a saved search, or an earlier run by its id; options typed with it replace its own, more words are AND-ed"
675
693
  },
694
+ "--score": {
695
+ "value": "<helpful|active|engaging>",
696
+ "meaning": "the named ranking score preset; not with an explicit --measure"
697
+ },
676
698
  "--search": {
677
699
  "value": "<text>",
678
700
  "meaning": "only chats whose name contains this; at least 3 characters"
@@ -680,6 +702,10 @@
680
702
  "--secret-stdin": {
681
703
  "meaning": "a secret MAX sends back in X-Max-Bot-Api-Secret \u2014 asked for, or read from a pipe"
682
704
  },
705
+ "--selection": {
706
+ "value": "<json>",
707
+ "meaning": "the versioned resolved ranking selection returned by drilldown; authorisation is checked again"
708
+ },
683
709
  "--send-as": {
684
710
  "value": "<id>",
685
711
  "meaning": "send as one of the identities `chats send-as` lists for the chat; refused where the messenger has none"
@@ -784,7 +810,7 @@
784
810
  },
785
811
  "--title": {
786
812
  "value": "<title>",
787
- "meaning": "the new name — of a chat, a folder or a forum topic"
813
+ "meaning": "the new name \u2014 of a chat, a folder or a forum topic"
788
814
  },
789
815
  "--to": {
790
816
  "value": "<chat>",
@@ -843,6 +869,10 @@
843
869
  "value": "<file>",
844
870
  "meaning": "send an Ogg Opus file as a voice message, alone, with no text"
845
871
  },
872
+ "--weights": {
873
+ "value": "<json>",
874
+ "meaning": "the complete ranking component weights; replaces preset weights when --score is given"
875
+ },
846
876
  "--words": {
847
877
  "meaning": "match any of these whole words, comma-separated; empty clears",
848
878
  "value": "<words>"
@@ -1533,7 +1563,9 @@
1533
1563
  "chats send-as": {
1534
1564
  "in": [],
1535
1565
  "reason": "MAX has no identities to post as other than the account itself",
1536
- "planned": { "tg": "G1 feat/send-as-identities" }
1566
+ "planned": {
1567
+ "tg": "G1 feat/send-as-identities"
1568
+ }
1537
1569
  },
1538
1570
  "chats show": {
1539
1571
  "in": "all"
@@ -2265,7 +2297,10 @@
2265
2297
  "options": {
2266
2298
  "--send-as": {
2267
2299
  "in": [],
2268
- "planned": { "max": "G1 feat/send-as-identities", "tg": "G1 feat/send-as-identities" }
2300
+ "planned": {
2301
+ "max": "G1 feat/send-as-identities",
2302
+ "tg": "G1 feat/send-as-identities"
2303
+ }
2269
2304
  },
2270
2305
  "--send-id": "all",
2271
2306
  "--silent": "all",
@@ -2359,7 +2394,9 @@
2359
2394
  "--caption-above": {
2360
2395
  "in": [],
2361
2396
  "reason": "MAX has no spoilers or caption placement",
2362
- "planned": { "tg": "G1 feat/media-options" }
2397
+ "planned": {
2398
+ "tg": "G1 feat/media-options"
2399
+ }
2363
2400
  },
2364
2401
  "--file": "all",
2365
2402
  "--md": "all",
@@ -2368,14 +2405,19 @@
2368
2405
  "--reply-to": "all",
2369
2406
  "--send-as": {
2370
2407
  "in": [],
2371
- "planned": { "max": "G1 feat/send-as-identities", "tg": "G1 feat/send-as-identities" }
2408
+ "planned": {
2409
+ "max": "G1 feat/send-as-identities",
2410
+ "tg": "G1 feat/send-as-identities"
2411
+ }
2372
2412
  },
2373
2413
  "--send-id": "all",
2374
2414
  "--silent": "all",
2375
2415
  "--spoiler": {
2376
2416
  "in": [],
2377
2417
  "reason": "MAX has no spoilers or caption placement",
2378
- "planned": { "tg": "G1 feat/media-options" }
2418
+ "planned": {
2419
+ "tg": "G1 feat/media-options"
2420
+ }
2379
2421
  },
2380
2422
  "--topic": "all",
2381
2423
  "--voice": "all"
@@ -2444,7 +2486,10 @@
2444
2486
  "--revote": "all",
2445
2487
  "--send-as": {
2446
2488
  "in": [],
2447
- "planned": { "max": "G1 feat/send-as-identities", "tg": "G1 feat/send-as-identities" }
2489
+ "planned": {
2490
+ "max": "G1 feat/send-as-identities",
2491
+ "tg": "G1 feat/send-as-identities"
2492
+ }
2448
2493
  },
2449
2494
  "--send-id": "all",
2450
2495
  "--silent": "all",
@@ -2870,20 +2915,201 @@
2870
2915
  "stats contacts": {
2871
2916
  "in": [],
2872
2917
  "planned": {
2873
- "max": "stats hierarchy migration and rankings after naming approval",
2874
- "tg": "stats hierarchy migration and rankings after naming approval"
2918
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
2919
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
2920
+ }
2921
+ },
2922
+ "stats contacts evidence": {
2923
+ "in": [],
2924
+ "planned": {
2925
+ "max": "feat/stats-rankings-contract: evidence naming review, then implementation",
2926
+ "tg": "feat/stats-rankings-contract: evidence naming review, then implementation"
2927
+ },
2928
+ "options": {
2929
+ "--component": {
2930
+ "in": [],
2931
+ "planned": {
2932
+ "max": "feat/stats-rankings-contract: evidence naming review, then implementation",
2933
+ "tg": "feat/stats-rankings-contract: evidence naming review, then implementation"
2934
+ }
2935
+ },
2936
+ "--cursor": {
2937
+ "in": [],
2938
+ "planned": {
2939
+ "max": "feat/stats-rankings-contract: evidence naming review, then implementation",
2940
+ "tg": "feat/stats-rankings-contract: evidence naming review, then implementation"
2941
+ }
2942
+ },
2943
+ "--limit": {
2944
+ "in": [],
2945
+ "planned": {
2946
+ "max": "feat/stats-rankings-contract: evidence naming review, then implementation",
2947
+ "tg": "feat/stats-rankings-contract: evidence naming review, then implementation"
2948
+ }
2949
+ },
2950
+ "--selection": {
2951
+ "in": [],
2952
+ "planned": {
2953
+ "max": "feat/stats-rankings-contract: evidence naming review, then implementation",
2954
+ "tg": "feat/stats-rankings-contract: evidence naming review, then implementation"
2955
+ }
2956
+ }
2875
2957
  }
2876
2958
  },
2877
2959
  "stats contacts top": {
2878
2960
  "in": [],
2879
2961
  "planned": {
2880
- "max": "stats hierarchy migration and rankings after naming approval",
2881
- "tg": "stats hierarchy migration and rankings after naming approval"
2962
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
2963
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
2964
+ },
2965
+ "options": {
2966
+ "--chat": {
2967
+ "in": [],
2968
+ "planned": {
2969
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
2970
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
2971
+ }
2972
+ },
2973
+ "--exact": {
2974
+ "in": [],
2975
+ "planned": {
2976
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
2977
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
2978
+ }
2979
+ },
2980
+ "--limit": {
2981
+ "in": [],
2982
+ "planned": {
2983
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
2984
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
2985
+ }
2986
+ },
2987
+ "--max-chats": {
2988
+ "in": [],
2989
+ "planned": {
2990
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
2991
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
2992
+ }
2993
+ },
2994
+ "--max-messages": {
2995
+ "in": [],
2996
+ "planned": {
2997
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
2998
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
2999
+ }
3000
+ },
3001
+ "--measure": {
3002
+ "in": [],
3003
+ "planned": {
3004
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3005
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3006
+ }
3007
+ },
3008
+ "--message-kind": {
3009
+ "in": [],
3010
+ "planned": {
3011
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3012
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3013
+ }
3014
+ },
3015
+ "--min-messages": {
3016
+ "in": [],
3017
+ "planned": {
3018
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3019
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3020
+ }
3021
+ },
3022
+ "--saved": {
3023
+ "in": [],
3024
+ "planned": {
3025
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3026
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3027
+ }
3028
+ },
3029
+ "--score": {
3030
+ "in": [],
3031
+ "planned": {
3032
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3033
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3034
+ }
3035
+ },
3036
+ "--source": {
3037
+ "in": [],
3038
+ "planned": {
3039
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3040
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3041
+ }
3042
+ },
3043
+ "--sync-first": {
3044
+ "in": [],
3045
+ "planned": {
3046
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3047
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3048
+ }
3049
+ },
3050
+ "--sync-time": {
3051
+ "in": [],
3052
+ "planned": {
3053
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3054
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3055
+ }
3056
+ },
3057
+ "--timezone": {
3058
+ "in": [],
3059
+ "planned": {
3060
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3061
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3062
+ }
3063
+ },
3064
+ "--weights": {
3065
+ "in": [],
3066
+ "planned": {
3067
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3068
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3069
+ }
3070
+ }
2882
3071
  }
2883
3072
  },
2884
3073
  "stats messages": {
2885
3074
  "in": "all"
2886
3075
  },
3076
+ "stats messages evidence": {
3077
+ "in": [],
3078
+ "planned": {
3079
+ "max": "feat/stats-rankings-contract: evidence naming review, then implementation",
3080
+ "tg": "feat/stats-rankings-contract: evidence naming review, then implementation"
3081
+ },
3082
+ "options": {
3083
+ "--component": {
3084
+ "in": [],
3085
+ "planned": {
3086
+ "max": "feat/stats-rankings-contract: evidence naming review, then implementation",
3087
+ "tg": "feat/stats-rankings-contract: evidence naming review, then implementation"
3088
+ }
3089
+ },
3090
+ "--cursor": {
3091
+ "in": [],
3092
+ "planned": {
3093
+ "max": "feat/stats-rankings-contract: evidence naming review, then implementation",
3094
+ "tg": "feat/stats-rankings-contract: evidence naming review, then implementation"
3095
+ }
3096
+ },
3097
+ "--limit": {
3098
+ "in": [],
3099
+ "planned": {
3100
+ "max": "feat/stats-rankings-contract: evidence naming review, then implementation",
3101
+ "tg": "feat/stats-rankings-contract: evidence naming review, then implementation"
3102
+ }
3103
+ },
3104
+ "--selection": {
3105
+ "in": [],
3106
+ "planned": {
3107
+ "max": "feat/stats-rankings-contract: evidence naming review, then implementation",
3108
+ "tg": "feat/stats-rankings-contract: evidence naming review, then implementation"
3109
+ }
3110
+ }
3111
+ }
3112
+ },
2887
3113
  "stats messages show": {
2888
3114
  "in": "all",
2889
3115
  "options": {
@@ -2929,8 +3155,108 @@
2929
3155
  "stats messages top": {
2930
3156
  "in": [],
2931
3157
  "planned": {
2932
- "max": "stats hierarchy migration and rankings after naming approval",
2933
- "tg": "stats hierarchy migration and rankings after naming approval"
3158
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3159
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3160
+ },
3161
+ "options": {
3162
+ "--chat": {
3163
+ "in": [],
3164
+ "planned": {
3165
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3166
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3167
+ }
3168
+ },
3169
+ "--exact": {
3170
+ "in": [],
3171
+ "planned": {
3172
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3173
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3174
+ }
3175
+ },
3176
+ "--limit": {
3177
+ "in": [],
3178
+ "planned": {
3179
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3180
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3181
+ }
3182
+ },
3183
+ "--max-chats": {
3184
+ "in": [],
3185
+ "planned": {
3186
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3187
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3188
+ }
3189
+ },
3190
+ "--max-messages": {
3191
+ "in": [],
3192
+ "planned": {
3193
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3194
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3195
+ }
3196
+ },
3197
+ "--measure": {
3198
+ "in": [],
3199
+ "planned": {
3200
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3201
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3202
+ }
3203
+ },
3204
+ "--message-kind": {
3205
+ "in": [],
3206
+ "planned": {
3207
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3208
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3209
+ }
3210
+ },
3211
+ "--saved": {
3212
+ "in": [],
3213
+ "planned": {
3214
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3215
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3216
+ }
3217
+ },
3218
+ "--score": {
3219
+ "in": [],
3220
+ "planned": {
3221
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3222
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3223
+ }
3224
+ },
3225
+ "--source": {
3226
+ "in": [],
3227
+ "planned": {
3228
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3229
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3230
+ }
3231
+ },
3232
+ "--sync-first": {
3233
+ "in": [],
3234
+ "planned": {
3235
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3236
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3237
+ }
3238
+ },
3239
+ "--sync-time": {
3240
+ "in": [],
3241
+ "planned": {
3242
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3243
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3244
+ }
3245
+ },
3246
+ "--timezone": {
3247
+ "in": [],
3248
+ "planned": {
3249
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3250
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3251
+ }
3252
+ },
3253
+ "--weights": {
3254
+ "in": [],
3255
+ "planned": {
3256
+ "max": "feat/stats-rankings-contract: approved ranking plan; implementation pending",
3257
+ "tg": "feat/stats-rankings-contract: approved ranking plan; implementation pending"
3258
+ }
3259
+ }
2934
3260
  }
2935
3261
  },
2936
3262
  "stats tasks": {