@kodelyth/nextcloud-talk 2026.5.42 → 2026.6.2

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 (58) hide show
  1. package/klaw.plugin.json +799 -2
  2. package/package.json +18 -6
  3. package/api.ts +0 -1
  4. package/channel-plugin-api.ts +0 -1
  5. package/contract-api.ts +0 -4
  6. package/doctor-contract-api.ts +0 -1
  7. package/index.ts +0 -20
  8. package/runtime-api.ts +0 -29
  9. package/secret-contract-api.ts +0 -5
  10. package/setup-entry.ts +0 -13
  11. package/src/accounts.test.ts +0 -31
  12. package/src/accounts.ts +0 -149
  13. package/src/api-credentials.ts +0 -31
  14. package/src/approval-auth.test.ts +0 -17
  15. package/src/approval-auth.ts +0 -27
  16. package/src/bot-preflight.test.ts +0 -135
  17. package/src/bot-preflight.ts +0 -183
  18. package/src/channel-api.ts +0 -5
  19. package/src/channel.adapters.ts +0 -52
  20. package/src/channel.core.test.ts +0 -75
  21. package/src/channel.lifecycle.test.ts +0 -91
  22. package/src/channel.status.test.ts +0 -28
  23. package/src/channel.ts +0 -225
  24. package/src/config-schema.ts +0 -79
  25. package/src/core.test.ts +0 -325
  26. package/src/doctor-contract.ts +0 -9
  27. package/src/doctor.test.ts +0 -87
  28. package/src/doctor.ts +0 -40
  29. package/src/gateway.ts +0 -109
  30. package/src/inbound.authz.test.ts +0 -146
  31. package/src/inbound.behavior.test.ts +0 -309
  32. package/src/inbound.ts +0 -392
  33. package/src/message-actions.test.ts +0 -270
  34. package/src/message-actions.ts +0 -82
  35. package/src/message-adapter.ts +0 -28
  36. package/src/monitor-runtime.ts +0 -138
  37. package/src/monitor.replay.test.ts +0 -276
  38. package/src/monitor.test-fixtures.ts +0 -30
  39. package/src/monitor.test-harness.ts +0 -59
  40. package/src/monitor.ts +0 -385
  41. package/src/normalize.ts +0 -44
  42. package/src/policy.ts +0 -111
  43. package/src/replay-guard.ts +0 -128
  44. package/src/room-info.test.ts +0 -160
  45. package/src/room-info.ts +0 -130
  46. package/src/runtime.ts +0 -9
  47. package/src/secret-contract.ts +0 -103
  48. package/src/secret-input.ts +0 -4
  49. package/src/send.cfg-threading.test.ts +0 -359
  50. package/src/send.runtime.ts +0 -8
  51. package/src/send.ts +0 -269
  52. package/src/session-route.ts +0 -40
  53. package/src/setup-core.ts +0 -250
  54. package/src/setup-surface.ts +0 -195
  55. package/src/setup.test.ts +0 -445
  56. package/src/signature.ts +0 -82
  57. package/src/types.ts +0 -195
  58. package/tsconfig.json +0 -16
package/klaw.plugin.json CHANGED
@@ -3,13 +3,810 @@
3
3
  "activation": {
4
4
  "onStartup": false
5
5
  },
6
- "channels": ["nextcloud-talk"],
6
+ "channels": [
7
+ "nextcloud-talk"
8
+ ],
7
9
  "channelEnvVars": {
8
- "nextcloud-talk": ["NEXTCLOUD_TALK_BOT_SECRET", "NEXTCLOUD_TALK_API_PASSWORD"]
10
+ "nextcloud-talk": [
11
+ "NEXTCLOUD_TALK_BOT_SECRET",
12
+ "NEXTCLOUD_TALK_API_PASSWORD"
13
+ ]
9
14
  },
10
15
  "configSchema": {
11
16
  "type": "object",
12
17
  "additionalProperties": false,
13
18
  "properties": {}
19
+ },
20
+ "channelConfigs": {
21
+ "nextcloud-talk": {
22
+ "schema": {
23
+ "$schema": "http://json-schema.org/draft-07/schema#",
24
+ "type": "object",
25
+ "properties": {
26
+ "name": {
27
+ "type": "string"
28
+ },
29
+ "enabled": {
30
+ "type": "boolean"
31
+ },
32
+ "markdown": {
33
+ "type": "object",
34
+ "properties": {
35
+ "tables": {
36
+ "type": "string",
37
+ "enum": [
38
+ "off",
39
+ "bullets",
40
+ "code",
41
+ "block"
42
+ ]
43
+ }
44
+ },
45
+ "additionalProperties": false
46
+ },
47
+ "baseUrl": {
48
+ "type": "string"
49
+ },
50
+ "botSecret": {
51
+ "anyOf": [
52
+ {
53
+ "type": "string"
54
+ },
55
+ {
56
+ "oneOf": [
57
+ {
58
+ "type": "object",
59
+ "properties": {
60
+ "source": {
61
+ "type": "string",
62
+ "const": "env"
63
+ },
64
+ "provider": {
65
+ "type": "string",
66
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
67
+ },
68
+ "id": {
69
+ "type": "string",
70
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
71
+ }
72
+ },
73
+ "required": [
74
+ "source",
75
+ "provider",
76
+ "id"
77
+ ],
78
+ "additionalProperties": false
79
+ },
80
+ {
81
+ "type": "object",
82
+ "properties": {
83
+ "source": {
84
+ "type": "string",
85
+ "const": "file"
86
+ },
87
+ "provider": {
88
+ "type": "string",
89
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
90
+ },
91
+ "id": {
92
+ "type": "string"
93
+ }
94
+ },
95
+ "required": [
96
+ "source",
97
+ "provider",
98
+ "id"
99
+ ],
100
+ "additionalProperties": false
101
+ },
102
+ {
103
+ "type": "object",
104
+ "properties": {
105
+ "source": {
106
+ "type": "string",
107
+ "const": "exec"
108
+ },
109
+ "provider": {
110
+ "type": "string",
111
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
112
+ },
113
+ "id": {
114
+ "type": "string"
115
+ }
116
+ },
117
+ "required": [
118
+ "source",
119
+ "provider",
120
+ "id"
121
+ ],
122
+ "additionalProperties": false
123
+ }
124
+ ]
125
+ }
126
+ ]
127
+ },
128
+ "botSecretFile": {
129
+ "type": "string"
130
+ },
131
+ "apiUser": {
132
+ "type": "string"
133
+ },
134
+ "apiPassword": {
135
+ "anyOf": [
136
+ {
137
+ "type": "string"
138
+ },
139
+ {
140
+ "oneOf": [
141
+ {
142
+ "type": "object",
143
+ "properties": {
144
+ "source": {
145
+ "type": "string",
146
+ "const": "env"
147
+ },
148
+ "provider": {
149
+ "type": "string",
150
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
151
+ },
152
+ "id": {
153
+ "type": "string",
154
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
155
+ }
156
+ },
157
+ "required": [
158
+ "source",
159
+ "provider",
160
+ "id"
161
+ ],
162
+ "additionalProperties": false
163
+ },
164
+ {
165
+ "type": "object",
166
+ "properties": {
167
+ "source": {
168
+ "type": "string",
169
+ "const": "file"
170
+ },
171
+ "provider": {
172
+ "type": "string",
173
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
174
+ },
175
+ "id": {
176
+ "type": "string"
177
+ }
178
+ },
179
+ "required": [
180
+ "source",
181
+ "provider",
182
+ "id"
183
+ ],
184
+ "additionalProperties": false
185
+ },
186
+ {
187
+ "type": "object",
188
+ "properties": {
189
+ "source": {
190
+ "type": "string",
191
+ "const": "exec"
192
+ },
193
+ "provider": {
194
+ "type": "string",
195
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
196
+ },
197
+ "id": {
198
+ "type": "string"
199
+ }
200
+ },
201
+ "required": [
202
+ "source",
203
+ "provider",
204
+ "id"
205
+ ],
206
+ "additionalProperties": false
207
+ }
208
+ ]
209
+ }
210
+ ]
211
+ },
212
+ "apiPasswordFile": {
213
+ "type": "string"
214
+ },
215
+ "dmPolicy": {
216
+ "default": "pairing",
217
+ "type": "string",
218
+ "enum": [
219
+ "pairing",
220
+ "allowlist",
221
+ "open",
222
+ "disabled"
223
+ ]
224
+ },
225
+ "webhookPort": {
226
+ "type": "integer",
227
+ "exclusiveMinimum": 0,
228
+ "maximum": 9007199254740991
229
+ },
230
+ "webhookHost": {
231
+ "type": "string"
232
+ },
233
+ "webhookPath": {
234
+ "type": "string"
235
+ },
236
+ "webhookPublicUrl": {
237
+ "type": "string"
238
+ },
239
+ "allowFrom": {
240
+ "type": "array",
241
+ "items": {
242
+ "type": "string"
243
+ }
244
+ },
245
+ "groupAllowFrom": {
246
+ "type": "array",
247
+ "items": {
248
+ "type": "string"
249
+ }
250
+ },
251
+ "groupPolicy": {
252
+ "default": "allowlist",
253
+ "type": "string",
254
+ "enum": [
255
+ "open",
256
+ "disabled",
257
+ "allowlist"
258
+ ]
259
+ },
260
+ "rooms": {
261
+ "type": "object",
262
+ "propertyNames": {
263
+ "type": "string"
264
+ },
265
+ "additionalProperties": {
266
+ "type": "object",
267
+ "properties": {
268
+ "requireMention": {
269
+ "type": "boolean"
270
+ },
271
+ "tools": {
272
+ "type": "object",
273
+ "properties": {
274
+ "allow": {
275
+ "type": "array",
276
+ "items": {
277
+ "type": "string"
278
+ }
279
+ },
280
+ "alsoAllow": {
281
+ "type": "array",
282
+ "items": {
283
+ "type": "string"
284
+ }
285
+ },
286
+ "deny": {
287
+ "type": "array",
288
+ "items": {
289
+ "type": "string"
290
+ }
291
+ }
292
+ },
293
+ "additionalProperties": false
294
+ },
295
+ "skills": {
296
+ "type": "array",
297
+ "items": {
298
+ "type": "string"
299
+ }
300
+ },
301
+ "enabled": {
302
+ "type": "boolean"
303
+ },
304
+ "allowFrom": {
305
+ "type": "array",
306
+ "items": {
307
+ "type": "string"
308
+ }
309
+ },
310
+ "systemPrompt": {
311
+ "type": "string"
312
+ }
313
+ },
314
+ "additionalProperties": false
315
+ }
316
+ },
317
+ "network": {
318
+ "type": "object",
319
+ "properties": {
320
+ "dangerouslyAllowPrivateNetwork": {
321
+ "type": "boolean"
322
+ }
323
+ },
324
+ "additionalProperties": false
325
+ },
326
+ "historyLimit": {
327
+ "type": "integer",
328
+ "minimum": 0,
329
+ "maximum": 9007199254740991
330
+ },
331
+ "dmHistoryLimit": {
332
+ "type": "integer",
333
+ "minimum": 0,
334
+ "maximum": 9007199254740991
335
+ },
336
+ "contextVisibility": {
337
+ "type": "string",
338
+ "enum": [
339
+ "all",
340
+ "allowlist",
341
+ "allowlist_quote"
342
+ ]
343
+ },
344
+ "dms": {
345
+ "type": "object",
346
+ "propertyNames": {
347
+ "type": "string"
348
+ },
349
+ "additionalProperties": {
350
+ "type": "object",
351
+ "properties": {
352
+ "historyLimit": {
353
+ "type": "integer",
354
+ "minimum": 0,
355
+ "maximum": 9007199254740991
356
+ }
357
+ },
358
+ "additionalProperties": false
359
+ }
360
+ },
361
+ "textChunkLimit": {
362
+ "type": "integer",
363
+ "exclusiveMinimum": 0,
364
+ "maximum": 9007199254740991
365
+ },
366
+ "chunkMode": {
367
+ "type": "string",
368
+ "enum": [
369
+ "length",
370
+ "newline"
371
+ ]
372
+ },
373
+ "blockStreaming": {
374
+ "type": "boolean"
375
+ },
376
+ "blockStreamingCoalesce": {
377
+ "type": "object",
378
+ "properties": {
379
+ "minChars": {
380
+ "type": "integer",
381
+ "exclusiveMinimum": 0,
382
+ "maximum": 9007199254740991
383
+ },
384
+ "maxChars": {
385
+ "type": "integer",
386
+ "exclusiveMinimum": 0,
387
+ "maximum": 9007199254740991
388
+ },
389
+ "idleMs": {
390
+ "type": "integer",
391
+ "minimum": 0,
392
+ "maximum": 9007199254740991
393
+ }
394
+ },
395
+ "additionalProperties": false
396
+ },
397
+ "responsePrefix": {
398
+ "type": "string"
399
+ },
400
+ "mediaMaxMb": {
401
+ "type": "number",
402
+ "exclusiveMinimum": 0
403
+ },
404
+ "accounts": {
405
+ "type": "object",
406
+ "propertyNames": {
407
+ "type": "string"
408
+ },
409
+ "additionalProperties": {
410
+ "type": "object",
411
+ "properties": {
412
+ "name": {
413
+ "type": "string"
414
+ },
415
+ "enabled": {
416
+ "type": "boolean"
417
+ },
418
+ "markdown": {
419
+ "type": "object",
420
+ "properties": {
421
+ "tables": {
422
+ "type": "string",
423
+ "enum": [
424
+ "off",
425
+ "bullets",
426
+ "code",
427
+ "block"
428
+ ]
429
+ }
430
+ },
431
+ "additionalProperties": false
432
+ },
433
+ "baseUrl": {
434
+ "type": "string"
435
+ },
436
+ "botSecret": {
437
+ "anyOf": [
438
+ {
439
+ "type": "string"
440
+ },
441
+ {
442
+ "oneOf": [
443
+ {
444
+ "type": "object",
445
+ "properties": {
446
+ "source": {
447
+ "type": "string",
448
+ "const": "env"
449
+ },
450
+ "provider": {
451
+ "type": "string",
452
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
453
+ },
454
+ "id": {
455
+ "type": "string",
456
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
457
+ }
458
+ },
459
+ "required": [
460
+ "source",
461
+ "provider",
462
+ "id"
463
+ ],
464
+ "additionalProperties": false
465
+ },
466
+ {
467
+ "type": "object",
468
+ "properties": {
469
+ "source": {
470
+ "type": "string",
471
+ "const": "file"
472
+ },
473
+ "provider": {
474
+ "type": "string",
475
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
476
+ },
477
+ "id": {
478
+ "type": "string"
479
+ }
480
+ },
481
+ "required": [
482
+ "source",
483
+ "provider",
484
+ "id"
485
+ ],
486
+ "additionalProperties": false
487
+ },
488
+ {
489
+ "type": "object",
490
+ "properties": {
491
+ "source": {
492
+ "type": "string",
493
+ "const": "exec"
494
+ },
495
+ "provider": {
496
+ "type": "string",
497
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
498
+ },
499
+ "id": {
500
+ "type": "string"
501
+ }
502
+ },
503
+ "required": [
504
+ "source",
505
+ "provider",
506
+ "id"
507
+ ],
508
+ "additionalProperties": false
509
+ }
510
+ ]
511
+ }
512
+ ]
513
+ },
514
+ "botSecretFile": {
515
+ "type": "string"
516
+ },
517
+ "apiUser": {
518
+ "type": "string"
519
+ },
520
+ "apiPassword": {
521
+ "anyOf": [
522
+ {
523
+ "type": "string"
524
+ },
525
+ {
526
+ "oneOf": [
527
+ {
528
+ "type": "object",
529
+ "properties": {
530
+ "source": {
531
+ "type": "string",
532
+ "const": "env"
533
+ },
534
+ "provider": {
535
+ "type": "string",
536
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
537
+ },
538
+ "id": {
539
+ "type": "string",
540
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
541
+ }
542
+ },
543
+ "required": [
544
+ "source",
545
+ "provider",
546
+ "id"
547
+ ],
548
+ "additionalProperties": false
549
+ },
550
+ {
551
+ "type": "object",
552
+ "properties": {
553
+ "source": {
554
+ "type": "string",
555
+ "const": "file"
556
+ },
557
+ "provider": {
558
+ "type": "string",
559
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
560
+ },
561
+ "id": {
562
+ "type": "string"
563
+ }
564
+ },
565
+ "required": [
566
+ "source",
567
+ "provider",
568
+ "id"
569
+ ],
570
+ "additionalProperties": false
571
+ },
572
+ {
573
+ "type": "object",
574
+ "properties": {
575
+ "source": {
576
+ "type": "string",
577
+ "const": "exec"
578
+ },
579
+ "provider": {
580
+ "type": "string",
581
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
582
+ },
583
+ "id": {
584
+ "type": "string"
585
+ }
586
+ },
587
+ "required": [
588
+ "source",
589
+ "provider",
590
+ "id"
591
+ ],
592
+ "additionalProperties": false
593
+ }
594
+ ]
595
+ }
596
+ ]
597
+ },
598
+ "apiPasswordFile": {
599
+ "type": "string"
600
+ },
601
+ "dmPolicy": {
602
+ "default": "pairing",
603
+ "type": "string",
604
+ "enum": [
605
+ "pairing",
606
+ "allowlist",
607
+ "open",
608
+ "disabled"
609
+ ]
610
+ },
611
+ "webhookPort": {
612
+ "type": "integer",
613
+ "exclusiveMinimum": 0,
614
+ "maximum": 9007199254740991
615
+ },
616
+ "webhookHost": {
617
+ "type": "string"
618
+ },
619
+ "webhookPath": {
620
+ "type": "string"
621
+ },
622
+ "webhookPublicUrl": {
623
+ "type": "string"
624
+ },
625
+ "allowFrom": {
626
+ "type": "array",
627
+ "items": {
628
+ "type": "string"
629
+ }
630
+ },
631
+ "groupAllowFrom": {
632
+ "type": "array",
633
+ "items": {
634
+ "type": "string"
635
+ }
636
+ },
637
+ "groupPolicy": {
638
+ "default": "allowlist",
639
+ "type": "string",
640
+ "enum": [
641
+ "open",
642
+ "disabled",
643
+ "allowlist"
644
+ ]
645
+ },
646
+ "rooms": {
647
+ "type": "object",
648
+ "propertyNames": {
649
+ "type": "string"
650
+ },
651
+ "additionalProperties": {
652
+ "type": "object",
653
+ "properties": {
654
+ "requireMention": {
655
+ "type": "boolean"
656
+ },
657
+ "tools": {
658
+ "type": "object",
659
+ "properties": {
660
+ "allow": {
661
+ "type": "array",
662
+ "items": {
663
+ "type": "string"
664
+ }
665
+ },
666
+ "alsoAllow": {
667
+ "type": "array",
668
+ "items": {
669
+ "type": "string"
670
+ }
671
+ },
672
+ "deny": {
673
+ "type": "array",
674
+ "items": {
675
+ "type": "string"
676
+ }
677
+ }
678
+ },
679
+ "additionalProperties": false
680
+ },
681
+ "skills": {
682
+ "type": "array",
683
+ "items": {
684
+ "type": "string"
685
+ }
686
+ },
687
+ "enabled": {
688
+ "type": "boolean"
689
+ },
690
+ "allowFrom": {
691
+ "type": "array",
692
+ "items": {
693
+ "type": "string"
694
+ }
695
+ },
696
+ "systemPrompt": {
697
+ "type": "string"
698
+ }
699
+ },
700
+ "additionalProperties": false
701
+ }
702
+ },
703
+ "network": {
704
+ "type": "object",
705
+ "properties": {
706
+ "dangerouslyAllowPrivateNetwork": {
707
+ "type": "boolean"
708
+ }
709
+ },
710
+ "additionalProperties": false
711
+ },
712
+ "historyLimit": {
713
+ "type": "integer",
714
+ "minimum": 0,
715
+ "maximum": 9007199254740991
716
+ },
717
+ "dmHistoryLimit": {
718
+ "type": "integer",
719
+ "minimum": 0,
720
+ "maximum": 9007199254740991
721
+ },
722
+ "contextVisibility": {
723
+ "type": "string",
724
+ "enum": [
725
+ "all",
726
+ "allowlist",
727
+ "allowlist_quote"
728
+ ]
729
+ },
730
+ "dms": {
731
+ "type": "object",
732
+ "propertyNames": {
733
+ "type": "string"
734
+ },
735
+ "additionalProperties": {
736
+ "type": "object",
737
+ "properties": {
738
+ "historyLimit": {
739
+ "type": "integer",
740
+ "minimum": 0,
741
+ "maximum": 9007199254740991
742
+ }
743
+ },
744
+ "additionalProperties": false
745
+ }
746
+ },
747
+ "textChunkLimit": {
748
+ "type": "integer",
749
+ "exclusiveMinimum": 0,
750
+ "maximum": 9007199254740991
751
+ },
752
+ "chunkMode": {
753
+ "type": "string",
754
+ "enum": [
755
+ "length",
756
+ "newline"
757
+ ]
758
+ },
759
+ "blockStreaming": {
760
+ "type": "boolean"
761
+ },
762
+ "blockStreamingCoalesce": {
763
+ "type": "object",
764
+ "properties": {
765
+ "minChars": {
766
+ "type": "integer",
767
+ "exclusiveMinimum": 0,
768
+ "maximum": 9007199254740991
769
+ },
770
+ "maxChars": {
771
+ "type": "integer",
772
+ "exclusiveMinimum": 0,
773
+ "maximum": 9007199254740991
774
+ },
775
+ "idleMs": {
776
+ "type": "integer",
777
+ "minimum": 0,
778
+ "maximum": 9007199254740991
779
+ }
780
+ },
781
+ "additionalProperties": false
782
+ },
783
+ "responsePrefix": {
784
+ "type": "string"
785
+ },
786
+ "mediaMaxMb": {
787
+ "type": "number",
788
+ "exclusiveMinimum": 0
789
+ }
790
+ },
791
+ "required": [
792
+ "dmPolicy",
793
+ "groupPolicy"
794
+ ],
795
+ "additionalProperties": false
796
+ }
797
+ },
798
+ "defaultAccount": {
799
+ "type": "string"
800
+ }
801
+ },
802
+ "required": [
803
+ "dmPolicy",
804
+ "groupPolicy"
805
+ ],
806
+ "additionalProperties": false
807
+ },
808
+ "label": "Nextcloud Talk",
809
+ "description": "Self-hosted chat via Nextcloud Talk webhook bots."
810
+ }
14
811
  }
15
812
  }