typeclaw 0.1.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 (213) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -0
  3. package/auth.schema.json +63 -0
  4. package/cron.schema.json +96 -0
  5. package/package.json +72 -0
  6. package/scripts/emit-base-dockerfile.ts +5 -0
  7. package/scripts/generate-schema.ts +34 -0
  8. package/secrets.schema.json +63 -0
  9. package/src/agent/auth.ts +119 -0
  10. package/src/agent/compaction.ts +35 -0
  11. package/src/agent/git-nudge.ts +95 -0
  12. package/src/agent/index.ts +451 -0
  13. package/src/agent/plugin-tools.ts +269 -0
  14. package/src/agent/reload-tool.ts +71 -0
  15. package/src/agent/self.ts +45 -0
  16. package/src/agent/session-origin.ts +288 -0
  17. package/src/agent/subagents.ts +253 -0
  18. package/src/agent/system-prompt.ts +68 -0
  19. package/src/agent/tools/channel-fetch-attachment.ts +118 -0
  20. package/src/agent/tools/channel-history.ts +119 -0
  21. package/src/agent/tools/channel-reply.ts +182 -0
  22. package/src/agent/tools/channel-send.ts +212 -0
  23. package/src/agent/tools/ddg.ts +218 -0
  24. package/src/agent/tools/restart.ts +122 -0
  25. package/src/agent/tools/stream-snapshot.ts +181 -0
  26. package/src/agent/tools/webfetch/fetch.ts +102 -0
  27. package/src/agent/tools/webfetch/index.ts +1 -0
  28. package/src/agent/tools/webfetch/strategies/grep.ts +70 -0
  29. package/src/agent/tools/webfetch/strategies/jq.ts +31 -0
  30. package/src/agent/tools/webfetch/strategies/raw.ts +3 -0
  31. package/src/agent/tools/webfetch/strategies/readability.ts +30 -0
  32. package/src/agent/tools/webfetch/strategies/selector.ts +41 -0
  33. package/src/agent/tools/webfetch/strategies/snapshot.ts +135 -0
  34. package/src/agent/tools/webfetch/tool.ts +281 -0
  35. package/src/agent/tools/webfetch/types.ts +33 -0
  36. package/src/agent/tools/websearch.ts +96 -0
  37. package/src/agent/tools/wikipedia.ts +52 -0
  38. package/src/bundled-plugins/agent-browser/dashboard-discovery.ts +170 -0
  39. package/src/bundled-plugins/agent-browser/dashboard-proxy.ts +421 -0
  40. package/src/bundled-plugins/agent-browser/index.ts +179 -0
  41. package/src/bundled-plugins/agent-browser/shim-install.ts +158 -0
  42. package/src/bundled-plugins/agent-browser/shim.ts +152 -0
  43. package/src/bundled-plugins/agent-browser/skills/agent-browser/SKILL.md +113 -0
  44. package/src/bundled-plugins/guard/index.ts +26 -0
  45. package/src/bundled-plugins/guard/policies/non-workspace-write.ts +98 -0
  46. package/src/bundled-plugins/guard/policies/skill-authoring.ts +185 -0
  47. package/src/bundled-plugins/guard/policies/uncommitted-changes.ts +85 -0
  48. package/src/bundled-plugins/guard/policy.ts +18 -0
  49. package/src/bundled-plugins/memory/README.md +71 -0
  50. package/src/bundled-plugins/memory/append-tool.ts +84 -0
  51. package/src/bundled-plugins/memory/dreaming-state.ts +86 -0
  52. package/src/bundled-plugins/memory/dreaming.ts +470 -0
  53. package/src/bundled-plugins/memory/fragment-parser.ts +67 -0
  54. package/src/bundled-plugins/memory/index.ts +238 -0
  55. package/src/bundled-plugins/memory/load-memory.ts +122 -0
  56. package/src/bundled-plugins/memory/memory-logger.ts +257 -0
  57. package/src/bundled-plugins/memory/secret-detector.ts +49 -0
  58. package/src/bundled-plugins/memory/watermark.ts +15 -0
  59. package/src/bundled-plugins/security/index.ts +35 -0
  60. package/src/bundled-plugins/security/policies/git-exfil.ts +120 -0
  61. package/src/bundled-plugins/security/policies/outbound-secret-scan.ts +167 -0
  62. package/src/bundled-plugins/security/policies/prompt-injection.ts +488 -0
  63. package/src/bundled-plugins/security/policies/secret-exfil-bash.ts +99 -0
  64. package/src/bundled-plugins/security/policies/secret-exfil-read.ts +127 -0
  65. package/src/bundled-plugins/security/policies/session-search-secrets.ts +86 -0
  66. package/src/bundled-plugins/security/policies/ssrf.ts +196 -0
  67. package/src/bundled-plugins/security/policies/system-prompt-leak.ts +81 -0
  68. package/src/bundled-plugins/security/policy.ts +9 -0
  69. package/src/channels/adapters/discord-bot-channel-resolver.ts +77 -0
  70. package/src/channels/adapters/discord-bot-classify.ts +148 -0
  71. package/src/channels/adapters/discord-bot.ts +640 -0
  72. package/src/channels/adapters/kakaotalk-author-resolver.ts +78 -0
  73. package/src/channels/adapters/kakaotalk-channel-resolver.ts +105 -0
  74. package/src/channels/adapters/kakaotalk-classify.ts +77 -0
  75. package/src/channels/adapters/kakaotalk.ts +622 -0
  76. package/src/channels/adapters/slack-bot-author-resolver.ts +80 -0
  77. package/src/channels/adapters/slack-bot-channel-resolver.ts +84 -0
  78. package/src/channels/adapters/slack-bot-classify.ts +213 -0
  79. package/src/channels/adapters/slack-bot-dedupe.ts +51 -0
  80. package/src/channels/adapters/slack-bot-time.ts +10 -0
  81. package/src/channels/adapters/slack-bot.ts +881 -0
  82. package/src/channels/adapters/telegram-bot-classify.ts +155 -0
  83. package/src/channels/adapters/telegram-bot-format.ts +309 -0
  84. package/src/channels/adapters/telegram-bot.ts +604 -0
  85. package/src/channels/engagement.ts +227 -0
  86. package/src/channels/index.ts +21 -0
  87. package/src/channels/manager.ts +292 -0
  88. package/src/channels/membership-cache.ts +116 -0
  89. package/src/channels/membership-from-history.ts +53 -0
  90. package/src/channels/membership.ts +30 -0
  91. package/src/channels/participants.ts +47 -0
  92. package/src/channels/persistence.ts +209 -0
  93. package/src/channels/reloadable.ts +28 -0
  94. package/src/channels/router.ts +1570 -0
  95. package/src/channels/schema.ts +273 -0
  96. package/src/channels/types.ts +160 -0
  97. package/src/cli/channel.ts +403 -0
  98. package/src/cli/compose-status.ts +95 -0
  99. package/src/cli/compose.ts +240 -0
  100. package/src/cli/hostd.ts +163 -0
  101. package/src/cli/index.ts +27 -0
  102. package/src/cli/init.ts +592 -0
  103. package/src/cli/logs.ts +38 -0
  104. package/src/cli/reload.ts +68 -0
  105. package/src/cli/restart.ts +66 -0
  106. package/src/cli/run.ts +77 -0
  107. package/src/cli/shell.ts +33 -0
  108. package/src/cli/start.ts +57 -0
  109. package/src/cli/status.ts +178 -0
  110. package/src/cli/stop.ts +31 -0
  111. package/src/cli/tui.ts +35 -0
  112. package/src/cli/ui.ts +110 -0
  113. package/src/commands/index.ts +74 -0
  114. package/src/compose/discover.ts +43 -0
  115. package/src/compose/index.ts +25 -0
  116. package/src/compose/logs.ts +162 -0
  117. package/src/compose/restart.ts +69 -0
  118. package/src/compose/start.ts +62 -0
  119. package/src/compose/status.ts +28 -0
  120. package/src/compose/stop.ts +43 -0
  121. package/src/config/config.ts +424 -0
  122. package/src/config/index.ts +25 -0
  123. package/src/config/providers.ts +234 -0
  124. package/src/config/reloadable.ts +47 -0
  125. package/src/container/index.ts +27 -0
  126. package/src/container/logs.ts +37 -0
  127. package/src/container/port.ts +137 -0
  128. package/src/container/shared.ts +290 -0
  129. package/src/container/shell.ts +58 -0
  130. package/src/container/start.ts +670 -0
  131. package/src/container/status.ts +76 -0
  132. package/src/container/stop.ts +120 -0
  133. package/src/container/verify-running.ts +149 -0
  134. package/src/cron/consumer.ts +138 -0
  135. package/src/cron/index.ts +54 -0
  136. package/src/cron/reloadable.ts +64 -0
  137. package/src/cron/scheduler.ts +200 -0
  138. package/src/cron/schema.ts +96 -0
  139. package/src/hostd/client.ts +113 -0
  140. package/src/hostd/daemon.ts +587 -0
  141. package/src/hostd/index.ts +25 -0
  142. package/src/hostd/paths.ts +82 -0
  143. package/src/hostd/portbroker-manager.ts +101 -0
  144. package/src/hostd/protocol.ts +48 -0
  145. package/src/hostd/spawn.ts +224 -0
  146. package/src/hostd/supervisor.ts +60 -0
  147. package/src/hostd/tailscale.ts +172 -0
  148. package/src/hostd/version.ts +115 -0
  149. package/src/init/dockerfile.ts +327 -0
  150. package/src/init/ensure-deps.ts +152 -0
  151. package/src/init/gitignore.ts +46 -0
  152. package/src/init/hatching.ts +60 -0
  153. package/src/init/index.ts +786 -0
  154. package/src/init/kakaotalk-auth.ts +114 -0
  155. package/src/init/models-dev.ts +130 -0
  156. package/src/init/oauth-login.ts +74 -0
  157. package/src/init/packagejson.ts +94 -0
  158. package/src/init/paths.ts +2 -0
  159. package/src/init/run-bun-install.ts +20 -0
  160. package/src/markdown/chunk.ts +299 -0
  161. package/src/markdown/index.ts +1 -0
  162. package/src/plugin/context.ts +40 -0
  163. package/src/plugin/define.ts +35 -0
  164. package/src/plugin/hooks.ts +204 -0
  165. package/src/plugin/index.ts +63 -0
  166. package/src/plugin/loader.ts +111 -0
  167. package/src/plugin/manager.ts +136 -0
  168. package/src/plugin/registry.ts +145 -0
  169. package/src/plugin/skills.ts +62 -0
  170. package/src/plugin/types.ts +172 -0
  171. package/src/portbroker/bind-with-forward.ts +102 -0
  172. package/src/portbroker/container-server.ts +305 -0
  173. package/src/portbroker/forward-result-bus.ts +36 -0
  174. package/src/portbroker/hostd-client.ts +443 -0
  175. package/src/portbroker/index.ts +33 -0
  176. package/src/portbroker/policy.ts +24 -0
  177. package/src/portbroker/proc-net-tcp.ts +72 -0
  178. package/src/portbroker/protocol.ts +39 -0
  179. package/src/reload/client.ts +59 -0
  180. package/src/reload/index.ts +3 -0
  181. package/src/reload/registry.ts +60 -0
  182. package/src/reload/types.ts +13 -0
  183. package/src/run/bundled-plugins.ts +24 -0
  184. package/src/run/channel-session-factory.ts +105 -0
  185. package/src/run/index.ts +432 -0
  186. package/src/run/plugin-runtime.ts +43 -0
  187. package/src/run/schema-with-plugins.ts +14 -0
  188. package/src/secrets/index.ts +13 -0
  189. package/src/secrets/migrate.ts +95 -0
  190. package/src/secrets/schema.ts +75 -0
  191. package/src/secrets/storage.ts +231 -0
  192. package/src/server/index.ts +436 -0
  193. package/src/sessions/index.ts +23 -0
  194. package/src/shared/index.ts +9 -0
  195. package/src/shared/local-time.ts +21 -0
  196. package/src/shared/protocol.ts +25 -0
  197. package/src/skills/typeclaw-channel-kakaotalk/SKILL.md +87 -0
  198. package/src/skills/typeclaw-channel-telegram-bot/SKILL.md +64 -0
  199. package/src/skills/typeclaw-config/SKILL.md +643 -0
  200. package/src/skills/typeclaw-cron/SKILL.md +159 -0
  201. package/src/skills/typeclaw-git/SKILL.md +89 -0
  202. package/src/skills/typeclaw-memory/SKILL.md +174 -0
  203. package/src/skills/typeclaw-monorepo/SKILL.md +175 -0
  204. package/src/skills/typeclaw-plugins/SKILL.md +594 -0
  205. package/src/skills/typeclaw-skills/SKILL.md +246 -0
  206. package/src/stream/broker.ts +161 -0
  207. package/src/stream/index.ts +16 -0
  208. package/src/stream/types.ts +69 -0
  209. package/src/tui/client.ts +45 -0
  210. package/src/tui/format.ts +317 -0
  211. package/src/tui/index.ts +225 -0
  212. package/src/tui/theme.ts +41 -0
  213. package/typeclaw.schema.json +826 -0
@@ -0,0 +1,826 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "$schema": {
6
+ "type": "string"
7
+ },
8
+ "port": {
9
+ "default": 8973,
10
+ "type": "integer",
11
+ "minimum": 1,
12
+ "maximum": 65535
13
+ },
14
+ "model": {
15
+ "default": "openai/gpt-5.4-nano",
16
+ "type": "string",
17
+ "enum": [
18
+ "openai/gpt-5.4-nano",
19
+ "openai/gpt-5.4-mini",
20
+ "openai/gpt-5.4",
21
+ "openai/gpt-5.5",
22
+ "openai-codex/gpt-5.4-mini",
23
+ "openai-codex/gpt-5.4",
24
+ "openai-codex/gpt-5.5",
25
+ "fireworks/accounts/fireworks/routers/kimi-k2p6-turbo"
26
+ ]
27
+ },
28
+ "mounts": {
29
+ "default": [],
30
+ "type": "array",
31
+ "items": {
32
+ "type": "object",
33
+ "properties": {
34
+ "name": {
35
+ "type": "string",
36
+ "pattern": "^[a-z0-9][a-z0-9-_]*$"
37
+ },
38
+ "path": {
39
+ "type": "string",
40
+ "minLength": 1
41
+ },
42
+ "readOnly": {
43
+ "default": false,
44
+ "type": "boolean"
45
+ },
46
+ "description": {
47
+ "type": "string"
48
+ }
49
+ },
50
+ "required": [
51
+ "name",
52
+ "path"
53
+ ]
54
+ }
55
+ },
56
+ "plugins": {
57
+ "default": [],
58
+ "type": "array",
59
+ "items": {
60
+ "type": "string",
61
+ "minLength": 1
62
+ }
63
+ },
64
+ "alias": {
65
+ "default": [],
66
+ "type": "array",
67
+ "items": {
68
+ "type": "string",
69
+ "minLength": 1
70
+ }
71
+ },
72
+ "channels": {
73
+ "default": {},
74
+ "type": "object",
75
+ "properties": {
76
+ "discord-bot": {
77
+ "type": "object",
78
+ "properties": {
79
+ "allow": {
80
+ "default": [],
81
+ "type": "array",
82
+ "items": {
83
+ "type": "string",
84
+ "minLength": 1
85
+ }
86
+ },
87
+ "engagement": {
88
+ "default": {
89
+ "trigger": [
90
+ "mention",
91
+ "reply",
92
+ "dm"
93
+ ],
94
+ "stickiness": {
95
+ "perReply": {
96
+ "window": 300000
97
+ }
98
+ }
99
+ },
100
+ "type": "object",
101
+ "properties": {
102
+ "trigger": {
103
+ "default": [
104
+ "mention",
105
+ "reply",
106
+ "dm"
107
+ ],
108
+ "type": "array",
109
+ "items": {
110
+ "type": "string",
111
+ "enum": [
112
+ "mention",
113
+ "reply",
114
+ "dm"
115
+ ]
116
+ }
117
+ },
118
+ "stickiness": {
119
+ "default": {
120
+ "perReply": {
121
+ "window": 300000
122
+ }
123
+ },
124
+ "anyOf": [
125
+ {
126
+ "type": "string",
127
+ "const": "off"
128
+ },
129
+ {
130
+ "type": "object",
131
+ "properties": {
132
+ "perReply": {
133
+ "type": "object",
134
+ "properties": {
135
+ "window": {
136
+ "type": "integer",
137
+ "minimum": 1,
138
+ "maximum": 86400000
139
+ }
140
+ },
141
+ "required": [
142
+ "window"
143
+ ]
144
+ }
145
+ },
146
+ "required": [
147
+ "perReply"
148
+ ]
149
+ }
150
+ ]
151
+ }
152
+ }
153
+ },
154
+ "history": {
155
+ "default": {
156
+ "prefetch": {
157
+ "thread": {
158
+ "head": 3,
159
+ "tail": 10
160
+ },
161
+ "channel": {
162
+ "tail": 10
163
+ }
164
+ }
165
+ },
166
+ "type": "object",
167
+ "properties": {
168
+ "prefetch": {
169
+ "default": {
170
+ "thread": {
171
+ "head": 3,
172
+ "tail": 10
173
+ },
174
+ "channel": {
175
+ "tail": 10
176
+ }
177
+ },
178
+ "type": "object",
179
+ "properties": {
180
+ "thread": {
181
+ "default": {
182
+ "head": 3,
183
+ "tail": 10
184
+ },
185
+ "type": "object",
186
+ "properties": {
187
+ "head": {
188
+ "default": 3,
189
+ "type": "integer",
190
+ "minimum": 0,
191
+ "maximum": 200
192
+ },
193
+ "tail": {
194
+ "default": 10,
195
+ "type": "integer",
196
+ "minimum": 0,
197
+ "maximum": 200
198
+ }
199
+ }
200
+ },
201
+ "channel": {
202
+ "default": {
203
+ "tail": 10
204
+ },
205
+ "type": "object",
206
+ "properties": {
207
+ "tail": {
208
+ "default": 10,
209
+ "type": "integer",
210
+ "minimum": 0,
211
+ "maximum": 200
212
+ }
213
+ }
214
+ }
215
+ }
216
+ }
217
+ }
218
+ },
219
+ "enabled": {
220
+ "default": true,
221
+ "type": "boolean"
222
+ }
223
+ }
224
+ },
225
+ "kakaotalk": {
226
+ "type": "object",
227
+ "properties": {
228
+ "allow": {
229
+ "default": [],
230
+ "type": "array",
231
+ "items": {
232
+ "type": "string",
233
+ "minLength": 1
234
+ }
235
+ },
236
+ "engagement": {
237
+ "default": {
238
+ "trigger": [
239
+ "mention",
240
+ "reply",
241
+ "dm"
242
+ ],
243
+ "stickiness": {
244
+ "perReply": {
245
+ "window": 300000
246
+ }
247
+ }
248
+ },
249
+ "type": "object",
250
+ "properties": {
251
+ "trigger": {
252
+ "default": [
253
+ "mention",
254
+ "reply",
255
+ "dm"
256
+ ],
257
+ "type": "array",
258
+ "items": {
259
+ "type": "string",
260
+ "enum": [
261
+ "mention",
262
+ "reply",
263
+ "dm"
264
+ ]
265
+ }
266
+ },
267
+ "stickiness": {
268
+ "default": {
269
+ "perReply": {
270
+ "window": 300000
271
+ }
272
+ },
273
+ "anyOf": [
274
+ {
275
+ "type": "string",
276
+ "const": "off"
277
+ },
278
+ {
279
+ "type": "object",
280
+ "properties": {
281
+ "perReply": {
282
+ "type": "object",
283
+ "properties": {
284
+ "window": {
285
+ "type": "integer",
286
+ "minimum": 1,
287
+ "maximum": 86400000
288
+ }
289
+ },
290
+ "required": [
291
+ "window"
292
+ ]
293
+ }
294
+ },
295
+ "required": [
296
+ "perReply"
297
+ ]
298
+ }
299
+ ]
300
+ }
301
+ }
302
+ },
303
+ "history": {
304
+ "default": {
305
+ "prefetch": {
306
+ "thread": {
307
+ "head": 3,
308
+ "tail": 10
309
+ },
310
+ "channel": {
311
+ "tail": 10
312
+ }
313
+ }
314
+ },
315
+ "type": "object",
316
+ "properties": {
317
+ "prefetch": {
318
+ "default": {
319
+ "thread": {
320
+ "head": 3,
321
+ "tail": 10
322
+ },
323
+ "channel": {
324
+ "tail": 10
325
+ }
326
+ },
327
+ "type": "object",
328
+ "properties": {
329
+ "thread": {
330
+ "default": {
331
+ "head": 3,
332
+ "tail": 10
333
+ },
334
+ "type": "object",
335
+ "properties": {
336
+ "head": {
337
+ "default": 3,
338
+ "type": "integer",
339
+ "minimum": 0,
340
+ "maximum": 200
341
+ },
342
+ "tail": {
343
+ "default": 10,
344
+ "type": "integer",
345
+ "minimum": 0,
346
+ "maximum": 200
347
+ }
348
+ }
349
+ },
350
+ "channel": {
351
+ "default": {
352
+ "tail": 10
353
+ },
354
+ "type": "object",
355
+ "properties": {
356
+ "tail": {
357
+ "default": 10,
358
+ "type": "integer",
359
+ "minimum": 0,
360
+ "maximum": 200
361
+ }
362
+ }
363
+ }
364
+ }
365
+ }
366
+ }
367
+ },
368
+ "enabled": {
369
+ "default": true,
370
+ "type": "boolean"
371
+ },
372
+ "autoMarkRead": {
373
+ "default": false,
374
+ "type": "boolean"
375
+ }
376
+ }
377
+ },
378
+ "slack-bot": {
379
+ "type": "object",
380
+ "properties": {
381
+ "allow": {
382
+ "default": [],
383
+ "type": "array",
384
+ "items": {
385
+ "type": "string",
386
+ "minLength": 1
387
+ }
388
+ },
389
+ "engagement": {
390
+ "default": {
391
+ "trigger": [
392
+ "mention",
393
+ "reply",
394
+ "dm"
395
+ ],
396
+ "stickiness": {
397
+ "perReply": {
398
+ "window": 300000
399
+ }
400
+ }
401
+ },
402
+ "type": "object",
403
+ "properties": {
404
+ "trigger": {
405
+ "default": [
406
+ "mention",
407
+ "reply",
408
+ "dm"
409
+ ],
410
+ "type": "array",
411
+ "items": {
412
+ "type": "string",
413
+ "enum": [
414
+ "mention",
415
+ "reply",
416
+ "dm"
417
+ ]
418
+ }
419
+ },
420
+ "stickiness": {
421
+ "default": {
422
+ "perReply": {
423
+ "window": 300000
424
+ }
425
+ },
426
+ "anyOf": [
427
+ {
428
+ "type": "string",
429
+ "const": "off"
430
+ },
431
+ {
432
+ "type": "object",
433
+ "properties": {
434
+ "perReply": {
435
+ "type": "object",
436
+ "properties": {
437
+ "window": {
438
+ "type": "integer",
439
+ "minimum": 1,
440
+ "maximum": 86400000
441
+ }
442
+ },
443
+ "required": [
444
+ "window"
445
+ ]
446
+ }
447
+ },
448
+ "required": [
449
+ "perReply"
450
+ ]
451
+ }
452
+ ]
453
+ }
454
+ }
455
+ },
456
+ "history": {
457
+ "default": {
458
+ "prefetch": {
459
+ "thread": {
460
+ "head": 3,
461
+ "tail": 10
462
+ },
463
+ "channel": {
464
+ "tail": 10
465
+ }
466
+ }
467
+ },
468
+ "type": "object",
469
+ "properties": {
470
+ "prefetch": {
471
+ "default": {
472
+ "thread": {
473
+ "head": 3,
474
+ "tail": 10
475
+ },
476
+ "channel": {
477
+ "tail": 10
478
+ }
479
+ },
480
+ "type": "object",
481
+ "properties": {
482
+ "thread": {
483
+ "default": {
484
+ "head": 3,
485
+ "tail": 10
486
+ },
487
+ "type": "object",
488
+ "properties": {
489
+ "head": {
490
+ "default": 3,
491
+ "type": "integer",
492
+ "minimum": 0,
493
+ "maximum": 200
494
+ },
495
+ "tail": {
496
+ "default": 10,
497
+ "type": "integer",
498
+ "minimum": 0,
499
+ "maximum": 200
500
+ }
501
+ }
502
+ },
503
+ "channel": {
504
+ "default": {
505
+ "tail": 10
506
+ },
507
+ "type": "object",
508
+ "properties": {
509
+ "tail": {
510
+ "default": 10,
511
+ "type": "integer",
512
+ "minimum": 0,
513
+ "maximum": 200
514
+ }
515
+ }
516
+ }
517
+ }
518
+ }
519
+ }
520
+ },
521
+ "enabled": {
522
+ "default": true,
523
+ "type": "boolean"
524
+ }
525
+ }
526
+ },
527
+ "telegram-bot": {
528
+ "type": "object",
529
+ "properties": {
530
+ "allow": {
531
+ "default": [],
532
+ "type": "array",
533
+ "items": {
534
+ "type": "string",
535
+ "minLength": 1
536
+ }
537
+ },
538
+ "engagement": {
539
+ "default": {
540
+ "trigger": [
541
+ "mention",
542
+ "reply",
543
+ "dm"
544
+ ],
545
+ "stickiness": {
546
+ "perReply": {
547
+ "window": 300000
548
+ }
549
+ }
550
+ },
551
+ "type": "object",
552
+ "properties": {
553
+ "trigger": {
554
+ "default": [
555
+ "mention",
556
+ "reply",
557
+ "dm"
558
+ ],
559
+ "type": "array",
560
+ "items": {
561
+ "type": "string",
562
+ "enum": [
563
+ "mention",
564
+ "reply",
565
+ "dm"
566
+ ]
567
+ }
568
+ },
569
+ "stickiness": {
570
+ "default": {
571
+ "perReply": {
572
+ "window": 300000
573
+ }
574
+ },
575
+ "anyOf": [
576
+ {
577
+ "type": "string",
578
+ "const": "off"
579
+ },
580
+ {
581
+ "type": "object",
582
+ "properties": {
583
+ "perReply": {
584
+ "type": "object",
585
+ "properties": {
586
+ "window": {
587
+ "type": "integer",
588
+ "minimum": 1,
589
+ "maximum": 86400000
590
+ }
591
+ },
592
+ "required": [
593
+ "window"
594
+ ]
595
+ }
596
+ },
597
+ "required": [
598
+ "perReply"
599
+ ]
600
+ }
601
+ ]
602
+ }
603
+ }
604
+ },
605
+ "history": {
606
+ "default": {
607
+ "prefetch": {
608
+ "thread": {
609
+ "head": 3,
610
+ "tail": 10
611
+ },
612
+ "channel": {
613
+ "tail": 10
614
+ }
615
+ }
616
+ },
617
+ "type": "object",
618
+ "properties": {
619
+ "prefetch": {
620
+ "default": {
621
+ "thread": {
622
+ "head": 3,
623
+ "tail": 10
624
+ },
625
+ "channel": {
626
+ "tail": 10
627
+ }
628
+ },
629
+ "type": "object",
630
+ "properties": {
631
+ "thread": {
632
+ "default": {
633
+ "head": 3,
634
+ "tail": 10
635
+ },
636
+ "type": "object",
637
+ "properties": {
638
+ "head": {
639
+ "default": 3,
640
+ "type": "integer",
641
+ "minimum": 0,
642
+ "maximum": 200
643
+ },
644
+ "tail": {
645
+ "default": 10,
646
+ "type": "integer",
647
+ "minimum": 0,
648
+ "maximum": 200
649
+ }
650
+ }
651
+ },
652
+ "channel": {
653
+ "default": {
654
+ "tail": 10
655
+ },
656
+ "type": "object",
657
+ "properties": {
658
+ "tail": {
659
+ "default": 10,
660
+ "type": "integer",
661
+ "minimum": 0,
662
+ "maximum": 200
663
+ }
664
+ }
665
+ }
666
+ }
667
+ }
668
+ }
669
+ },
670
+ "enabled": {
671
+ "default": true,
672
+ "type": "boolean"
673
+ }
674
+ }
675
+ }
676
+ }
677
+ },
678
+ "portForward": {
679
+ "default": {
680
+ "allow": "*"
681
+ },
682
+ "type": "object",
683
+ "properties": {
684
+ "allow": {
685
+ "anyOf": [
686
+ {
687
+ "type": "string",
688
+ "const": "*"
689
+ },
690
+ {
691
+ "type": "array",
692
+ "items": {
693
+ "type": "integer",
694
+ "minimum": 1,
695
+ "maximum": 65535
696
+ }
697
+ }
698
+ ]
699
+ },
700
+ "deny": {
701
+ "type": "array",
702
+ "items": {
703
+ "type": "integer",
704
+ "minimum": 1,
705
+ "maximum": 65535
706
+ }
707
+ }
708
+ },
709
+ "required": [
710
+ "allow"
711
+ ]
712
+ },
713
+ "dockerfile": {
714
+ "default": {
715
+ "ffmpeg": false,
716
+ "gh": true,
717
+ "python": true,
718
+ "tmux": true,
719
+ "append": []
720
+ },
721
+ "type": "object",
722
+ "properties": {
723
+ "ffmpeg": {
724
+ "default": false,
725
+ "anyOf": [
726
+ {
727
+ "type": "boolean"
728
+ },
729
+ {
730
+ "type": "string",
731
+ "minLength": 1
732
+ }
733
+ ]
734
+ },
735
+ "gh": {
736
+ "default": true,
737
+ "anyOf": [
738
+ {
739
+ "type": "boolean"
740
+ },
741
+ {
742
+ "type": "string",
743
+ "minLength": 1
744
+ }
745
+ ]
746
+ },
747
+ "python": {
748
+ "default": true,
749
+ "type": "boolean"
750
+ },
751
+ "tmux": {
752
+ "default": true,
753
+ "anyOf": [
754
+ {
755
+ "type": "boolean"
756
+ },
757
+ {
758
+ "type": "string",
759
+ "minLength": 1
760
+ }
761
+ ]
762
+ },
763
+ "append": {
764
+ "default": [],
765
+ "type": "array",
766
+ "items": {
767
+ "type": "string"
768
+ }
769
+ }
770
+ }
771
+ },
772
+ "gitignore": {
773
+ "default": {
774
+ "append": []
775
+ },
776
+ "type": "object",
777
+ "properties": {
778
+ "append": {
779
+ "default": [],
780
+ "type": "array",
781
+ "items": {
782
+ "type": "string"
783
+ }
784
+ }
785
+ }
786
+ },
787
+ "memory": {
788
+ "default": {
789
+ "idleMs": 10000,
790
+ "bufferBytes": 100000,
791
+ "spawnTimeoutMs": 50000
792
+ },
793
+ "type": "object",
794
+ "properties": {
795
+ "idleMs": {
796
+ "default": 10000,
797
+ "type": "integer",
798
+ "minimum": 1000,
799
+ "maximum": 9007199254740991
800
+ },
801
+ "bufferBytes": {
802
+ "default": 100000,
803
+ "type": "integer",
804
+ "minimum": 0,
805
+ "maximum": 9007199254740991
806
+ },
807
+ "spawnTimeoutMs": {
808
+ "default": 50000,
809
+ "type": "integer",
810
+ "minimum": 1,
811
+ "maximum": 9007199254740991
812
+ },
813
+ "dreaming": {
814
+ "type": "object",
815
+ "properties": {
816
+ "schedule": {
817
+ "type": "string",
818
+ "minLength": 1
819
+ }
820
+ }
821
+ }
822
+ }
823
+ }
824
+ },
825
+ "additionalProperties": {}
826
+ }