devlanes 0.0.1 → 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.
- package/LICENSE +201 -21
- package/README.md +44 -2
- package/bin/devlanes.js +44 -0
- package/package.json +27 -8
- package/schema.json +3161 -0
- package/user-schema.json +1115 -0
- package/index.js +0 -1
package/user-schema.json
ADDED
|
@@ -0,0 +1,1115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Generated by bins/devlanes/build.rs from crates/config; do not edit.",
|
|
3
|
+
"$defs": {
|
|
4
|
+
"ByteSize": {
|
|
5
|
+
"description": "A byte count with decimal or binary size units.",
|
|
6
|
+
"examples": [
|
|
7
|
+
"5GiB"
|
|
8
|
+
],
|
|
9
|
+
"pattern": "^[0-9]+(B|KB|MB|GB|KiB|MiB|GiB)$",
|
|
10
|
+
"type": "string"
|
|
11
|
+
},
|
|
12
|
+
"CaKind": {
|
|
13
|
+
"description": "Certificate authority used to issue certificates for local project hostnames.",
|
|
14
|
+
"examples": [
|
|
15
|
+
"devlanes",
|
|
16
|
+
"mkcert"
|
|
17
|
+
],
|
|
18
|
+
"oneOf": [
|
|
19
|
+
{
|
|
20
|
+
"const": "devlanes",
|
|
21
|
+
"description": "Use the CA managed in the devlanes home directory.",
|
|
22
|
+
"examples": [
|
|
23
|
+
"devlanes"
|
|
24
|
+
],
|
|
25
|
+
"type": "string"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"const": "mkcert",
|
|
29
|
+
"description": "Reuse the CA in mkcert's CAROOT directory.",
|
|
30
|
+
"examples": [
|
|
31
|
+
"mkcert"
|
|
32
|
+
],
|
|
33
|
+
"type": "string"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
"CloudflareDns": {
|
|
38
|
+
"additionalProperties": false,
|
|
39
|
+
"description": "Cloudflare DNS credentials for the reserved public resolver.",
|
|
40
|
+
"examples": [
|
|
41
|
+
{
|
|
42
|
+
"token": "${{ env.CF_API_TOKEN }}"
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"properties": {
|
|
46
|
+
"token": {
|
|
47
|
+
"$ref": "#/$defs/Templated_string",
|
|
48
|
+
"description": "API token with permission to edit the domain's DNS records; prefer an environment expression.",
|
|
49
|
+
"examples": [
|
|
50
|
+
"${{ env.CF_API_TOKEN }}"
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"required": [
|
|
55
|
+
"token"
|
|
56
|
+
],
|
|
57
|
+
"type": "object"
|
|
58
|
+
},
|
|
59
|
+
"ConfigDuration": {
|
|
60
|
+
"description": "A duration written with `ms`, `s`, `m`, `h`, or `d` units.",
|
|
61
|
+
"examples": [
|
|
62
|
+
"15s",
|
|
63
|
+
"10m"
|
|
64
|
+
],
|
|
65
|
+
"pattern": "^[0-9]+(ms|s|m|h|d)$",
|
|
66
|
+
"type": "string"
|
|
67
|
+
},
|
|
68
|
+
"DnsProvider": {
|
|
69
|
+
"additionalProperties": false,
|
|
70
|
+
"description": "Reserved DNS-01 provider configuration; not supported yet.",
|
|
71
|
+
"examples": [
|
|
72
|
+
{
|
|
73
|
+
"cloudflare": {
|
|
74
|
+
"token": "${{ env.CF_API_TOKEN }}"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"properties": {
|
|
79
|
+
"cloudflare": {
|
|
80
|
+
"$ref": "#/$defs/CloudflareDns",
|
|
81
|
+
"description": "Cloudflare DNS API credentials supplied by an environment expression.",
|
|
82
|
+
"examples": [
|
|
83
|
+
{
|
|
84
|
+
"token": "${{ env.CF_API_TOKEN }}"
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"required": [
|
|
90
|
+
"cloudflare"
|
|
91
|
+
],
|
|
92
|
+
"type": "object"
|
|
93
|
+
},
|
|
94
|
+
"HistoryConfig": {
|
|
95
|
+
"additionalProperties": false,
|
|
96
|
+
"description": "Age limits for finished unit/task history and disconnected remote-host records.",
|
|
97
|
+
"examples": [
|
|
98
|
+
{
|
|
99
|
+
"remote_hosts_retention": "90d",
|
|
100
|
+
"retention": "30d"
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"properties": {
|
|
104
|
+
"remote_hosts_retention": {
|
|
105
|
+
"$ref": "#/$defs/ConfigDuration",
|
|
106
|
+
"default": "7776000000ms",
|
|
107
|
+
"description": "Maximum age since a remote host last connected successfully; defaults to 90d. Records without a timestamp are retained.",
|
|
108
|
+
"examples": [
|
|
109
|
+
"90d",
|
|
110
|
+
"180d"
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"retention": {
|
|
114
|
+
"$ref": "#/$defs/ConfigDuration",
|
|
115
|
+
"default": "2592000000ms",
|
|
116
|
+
"description": "Maximum age since a unit or task finished; defaults to 30d. Disk pressure may prune it sooner.",
|
|
117
|
+
"examples": [
|
|
118
|
+
"30d",
|
|
119
|
+
"14d"
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"type": "object"
|
|
124
|
+
},
|
|
125
|
+
"HostnamesConfig": {
|
|
126
|
+
"additionalProperties": false,
|
|
127
|
+
"description": "Hostname resolution and optional system hosts-file entries.",
|
|
128
|
+
"examples": [
|
|
129
|
+
{
|
|
130
|
+
"hosts_file": "auto",
|
|
131
|
+
"resolver": "localhost"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"resolver": "resolver",
|
|
135
|
+
"tld": "test"
|
|
136
|
+
}
|
|
137
|
+
],
|
|
138
|
+
"properties": {
|
|
139
|
+
"base_domain": {
|
|
140
|
+
"default": null,
|
|
141
|
+
"description": "Reserved public-resolver base domain; not supported yet.",
|
|
142
|
+
"examples": [
|
|
143
|
+
"dev.example.invalid"
|
|
144
|
+
],
|
|
145
|
+
"type": [
|
|
146
|
+
"string",
|
|
147
|
+
"null"
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
"dns_provider": {
|
|
151
|
+
"anyOf": [
|
|
152
|
+
{
|
|
153
|
+
"$ref": "#/$defs/DnsProvider"
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"type": "null"
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"default": null,
|
|
160
|
+
"description": "Reserved DNS-01 provider settings; not supported yet.",
|
|
161
|
+
"examples": [
|
|
162
|
+
{
|
|
163
|
+
"cloudflare": {
|
|
164
|
+
"token": "${{ env.CF_API_TOKEN }}"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
"hosts_file": {
|
|
170
|
+
"anyOf": [
|
|
171
|
+
{
|
|
172
|
+
"$ref": "#/$defs/HostsFile"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"type": "null"
|
|
176
|
+
}
|
|
177
|
+
],
|
|
178
|
+
"default": null,
|
|
179
|
+
"description": "Whether exact hostnames should also be written to the system hosts file.",
|
|
180
|
+
"examples": [
|
|
181
|
+
"auto",
|
|
182
|
+
"never",
|
|
183
|
+
"always"
|
|
184
|
+
]
|
|
185
|
+
},
|
|
186
|
+
"resolver": {
|
|
187
|
+
"$ref": "#/$defs/Resolver",
|
|
188
|
+
"default": "localhost",
|
|
189
|
+
"description": "localhost or resolver in v1; public parses but is not supported yet.",
|
|
190
|
+
"examples": [
|
|
191
|
+
"localhost",
|
|
192
|
+
"hosts_file",
|
|
193
|
+
"resolver",
|
|
194
|
+
"public"
|
|
195
|
+
]
|
|
196
|
+
},
|
|
197
|
+
"tld": {
|
|
198
|
+
"default": null,
|
|
199
|
+
"description": "Custom top-level domain for the embedded DNS strategy.",
|
|
200
|
+
"examples": [
|
|
201
|
+
"test"
|
|
202
|
+
],
|
|
203
|
+
"type": [
|
|
204
|
+
"string",
|
|
205
|
+
"null"
|
|
206
|
+
]
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
"type": "object"
|
|
210
|
+
},
|
|
211
|
+
"HostsFile": {
|
|
212
|
+
"description": "Whether project hostnames are also written to the system hosts file.",
|
|
213
|
+
"examples": [
|
|
214
|
+
"auto",
|
|
215
|
+
"never",
|
|
216
|
+
"always"
|
|
217
|
+
],
|
|
218
|
+
"oneOf": [
|
|
219
|
+
{
|
|
220
|
+
"const": "auto",
|
|
221
|
+
"description": "Write entries when the system cannot resolve the configured hostnames.",
|
|
222
|
+
"examples": [
|
|
223
|
+
"auto"
|
|
224
|
+
],
|
|
225
|
+
"type": "string"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"const": "never",
|
|
229
|
+
"description": "Do not write hosts entries.",
|
|
230
|
+
"examples": [
|
|
231
|
+
"never"
|
|
232
|
+
],
|
|
233
|
+
"type": "string"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"const": "always",
|
|
237
|
+
"description": "Always write exact hostnames, including for runtimes without localhost subdomain support.",
|
|
238
|
+
"examples": [
|
|
239
|
+
"always"
|
|
240
|
+
],
|
|
241
|
+
"type": "string"
|
|
242
|
+
}
|
|
243
|
+
]
|
|
244
|
+
},
|
|
245
|
+
"LogRetention": {
|
|
246
|
+
"additionalProperties": false,
|
|
247
|
+
"description": "Disk retention bounded by both age and total log size.",
|
|
248
|
+
"examples": [
|
|
249
|
+
{
|
|
250
|
+
"days": 7,
|
|
251
|
+
"max_size": "5GiB"
|
|
252
|
+
}
|
|
253
|
+
],
|
|
254
|
+
"properties": {
|
|
255
|
+
"days": {
|
|
256
|
+
"default": 7,
|
|
257
|
+
"description": "Number of days to retain logs and database log-segment metadata; defaults to 7.",
|
|
258
|
+
"examples": [
|
|
259
|
+
7
|
|
260
|
+
],
|
|
261
|
+
"format": "uint32",
|
|
262
|
+
"minimum": 0,
|
|
263
|
+
"type": "integer"
|
|
264
|
+
},
|
|
265
|
+
"max_size": {
|
|
266
|
+
"$ref": "#/$defs/ByteSize",
|
|
267
|
+
"default": "5368709120B",
|
|
268
|
+
"description": "Maximum total size of retained logs; defaults to 5GiB.",
|
|
269
|
+
"examples": [
|
|
270
|
+
"5GiB"
|
|
271
|
+
]
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"type": "object"
|
|
275
|
+
},
|
|
276
|
+
"LogsConfig": {
|
|
277
|
+
"additionalProperties": false,
|
|
278
|
+
"description": "Retention settings for stored service/task output and database log metadata.",
|
|
279
|
+
"examples": [
|
|
280
|
+
{
|
|
281
|
+
"retention": {
|
|
282
|
+
"days": 7,
|
|
283
|
+
"max_size": "5GiB"
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
],
|
|
287
|
+
"properties": {
|
|
288
|
+
"retention": {
|
|
289
|
+
"$ref": "#/$defs/LogRetention",
|
|
290
|
+
"default": {
|
|
291
|
+
"days": 7,
|
|
292
|
+
"max_size": "5368709120B"
|
|
293
|
+
},
|
|
294
|
+
"description": "Age and total-size bounds for log files; the age limit also bounds database log-segment metadata.",
|
|
295
|
+
"examples": [
|
|
296
|
+
{
|
|
297
|
+
"days": 7,
|
|
298
|
+
"max_size": "5GiB"
|
|
299
|
+
}
|
|
300
|
+
]
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
"type": "object"
|
|
304
|
+
},
|
|
305
|
+
"MetricsConfig": {
|
|
306
|
+
"additionalProperties": false,
|
|
307
|
+
"description": "Retention for monitor history used by graphs and service baselines, including database aggregates.",
|
|
308
|
+
"examples": [
|
|
309
|
+
{
|
|
310
|
+
"retention": "30d"
|
|
311
|
+
}
|
|
312
|
+
],
|
|
313
|
+
"properties": {
|
|
314
|
+
"retention": {
|
|
315
|
+
"$ref": "#/$defs/ConfigDuration",
|
|
316
|
+
"default": "2592000000ms",
|
|
317
|
+
"description": "Maximum age of persisted monitor samples and database run summaries; defaults to 30d.",
|
|
318
|
+
"examples": [
|
|
319
|
+
"30d"
|
|
320
|
+
]
|
|
321
|
+
}
|
|
322
|
+
},
|
|
323
|
+
"type": "object"
|
|
324
|
+
},
|
|
325
|
+
"Percent": {
|
|
326
|
+
"description": "A percentage with a `%` suffix, such as `75%` or `12.5%`.",
|
|
327
|
+
"examples": [
|
|
328
|
+
"75%",
|
|
329
|
+
"12.5%"
|
|
330
|
+
],
|
|
331
|
+
"pattern": "^\\s*([0-9]+\\.?[0-9]*|\\.[0-9]+)\\s*%\\s*$",
|
|
332
|
+
"type": "string"
|
|
333
|
+
},
|
|
334
|
+
"PortsConfig": {
|
|
335
|
+
"additionalProperties": false,
|
|
336
|
+
"description": "Machine-wide port pool shared by all projects and lanes.",
|
|
337
|
+
"examples": [
|
|
338
|
+
{
|
|
339
|
+
"range": "20000-32767"
|
|
340
|
+
}
|
|
341
|
+
],
|
|
342
|
+
"properties": {
|
|
343
|
+
"range": {
|
|
344
|
+
"default": "20000-32767",
|
|
345
|
+
"description": "Inclusive port range, written start-end; defaults to 20000-32767.",
|
|
346
|
+
"examples": [
|
|
347
|
+
"20000-32767"
|
|
348
|
+
],
|
|
349
|
+
"pattern": "^[0-9]+-[0-9]+$",
|
|
350
|
+
"type": "string"
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
"type": "object"
|
|
354
|
+
},
|
|
355
|
+
"ProxyConfig": {
|
|
356
|
+
"additionalProperties": false,
|
|
357
|
+
"description": "Ports and network access policy for the local HTTP/HTTPS proxy.",
|
|
358
|
+
"examples": [
|
|
359
|
+
{
|
|
360
|
+
"http_port": 80,
|
|
361
|
+
"https_port": 443,
|
|
362
|
+
"lan": false
|
|
363
|
+
}
|
|
364
|
+
],
|
|
365
|
+
"properties": {
|
|
366
|
+
"http_port": {
|
|
367
|
+
"default": 80,
|
|
368
|
+
"description": "HTTP listening port; defaults to 80 and redirects to HTTPS when TLS is enabled.",
|
|
369
|
+
"examples": [
|
|
370
|
+
80,
|
|
371
|
+
8080
|
|
372
|
+
],
|
|
373
|
+
"format": "uint16",
|
|
374
|
+
"maximum": 65535,
|
|
375
|
+
"minimum": 0,
|
|
376
|
+
"type": "integer"
|
|
377
|
+
},
|
|
378
|
+
"https_port": {
|
|
379
|
+
"default": 443,
|
|
380
|
+
"description": "HTTPS listening port; defaults to 443.",
|
|
381
|
+
"examples": [
|
|
382
|
+
443,
|
|
383
|
+
8443
|
|
384
|
+
],
|
|
385
|
+
"format": "uint16",
|
|
386
|
+
"maximum": 65535,
|
|
387
|
+
"minimum": 0,
|
|
388
|
+
"type": "integer"
|
|
389
|
+
},
|
|
390
|
+
"lan": {
|
|
391
|
+
"default": false,
|
|
392
|
+
"description": "Accept connections from other machines; defaults to loopback-only access.",
|
|
393
|
+
"examples": [
|
|
394
|
+
false,
|
|
395
|
+
true
|
|
396
|
+
],
|
|
397
|
+
"type": "boolean"
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
"type": "object"
|
|
401
|
+
},
|
|
402
|
+
"Resolver": {
|
|
403
|
+
"description": "Strategy for resolving local project hostnames; defaults to localhost.",
|
|
404
|
+
"examples": [
|
|
405
|
+
"localhost",
|
|
406
|
+
"hosts_file",
|
|
407
|
+
"resolver",
|
|
408
|
+
"public"
|
|
409
|
+
],
|
|
410
|
+
"oneOf": [
|
|
411
|
+
{
|
|
412
|
+
"const": "localhost",
|
|
413
|
+
"description": "Use names under .localhost, resolved by browsers without a custom DNS service.",
|
|
414
|
+
"examples": [
|
|
415
|
+
"localhost"
|
|
416
|
+
],
|
|
417
|
+
"type": "string"
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
"const": "hosts_file",
|
|
421
|
+
"description": "Resolve exact project names through system hosts-file entries.",
|
|
422
|
+
"examples": [
|
|
423
|
+
"hosts_file"
|
|
424
|
+
],
|
|
425
|
+
"type": "string"
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
"const": "resolver",
|
|
429
|
+
"description": "Use the daemon's DNS resolver for the configured custom top-level domain.",
|
|
430
|
+
"examples": [
|
|
431
|
+
"resolver"
|
|
432
|
+
],
|
|
433
|
+
"type": "string"
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
"const": "public",
|
|
437
|
+
"description": "Reserved public DNS and DNS-01 strategy; not supported yet.",
|
|
438
|
+
"examples": [
|
|
439
|
+
"public"
|
|
440
|
+
],
|
|
441
|
+
"type": "string"
|
|
442
|
+
}
|
|
443
|
+
]
|
|
444
|
+
},
|
|
445
|
+
"StartupConfig": {
|
|
446
|
+
"additionalProperties": false,
|
|
447
|
+
"description": "Startup pacing. Machine settings, so they live in user config only.",
|
|
448
|
+
"examples": [
|
|
449
|
+
{
|
|
450
|
+
"max": 4,
|
|
451
|
+
"mode": "fixed"
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"initial": 2,
|
|
455
|
+
"max": 8,
|
|
456
|
+
"mode": "adaptive",
|
|
457
|
+
"settle_cpu": "10%",
|
|
458
|
+
"slot_timeout": "20s",
|
|
459
|
+
"target_cpu": "75%"
|
|
460
|
+
}
|
|
461
|
+
],
|
|
462
|
+
"properties": {
|
|
463
|
+
"initial": {
|
|
464
|
+
"default": null,
|
|
465
|
+
"description": "Adaptive starting window; default CPU cores / 4, at least 2, at most `max`.",
|
|
466
|
+
"examples": [
|
|
467
|
+
2
|
|
468
|
+
],
|
|
469
|
+
"format": "uint32",
|
|
470
|
+
"minimum": 1,
|
|
471
|
+
"type": [
|
|
472
|
+
"integer",
|
|
473
|
+
"null"
|
|
474
|
+
]
|
|
475
|
+
},
|
|
476
|
+
"max": {
|
|
477
|
+
"default": null,
|
|
478
|
+
"description": "Largest window (the fixed window in `fixed` mode); default CPU cores.",
|
|
479
|
+
"examples": [
|
|
480
|
+
8
|
|
481
|
+
],
|
|
482
|
+
"format": "uint32",
|
|
483
|
+
"minimum": 1,
|
|
484
|
+
"type": [
|
|
485
|
+
"integer",
|
|
486
|
+
"null"
|
|
487
|
+
]
|
|
488
|
+
},
|
|
489
|
+
"mode": {
|
|
490
|
+
"$ref": "#/$defs/StartupMode",
|
|
491
|
+
"default": "fixed",
|
|
492
|
+
"description": "`adaptive`, `fixed` or `all`; default `fixed`.",
|
|
493
|
+
"examples": [
|
|
494
|
+
"adaptive",
|
|
495
|
+
"fixed",
|
|
496
|
+
"all"
|
|
497
|
+
]
|
|
498
|
+
},
|
|
499
|
+
"settle_cpu": {
|
|
500
|
+
"$ref": "#/$defs/Percent",
|
|
501
|
+
"default": "10%",
|
|
502
|
+
"description": "A `ready: started` service has finished starting once its process tree\nstays below this share of one core for 2 s; default 10%.",
|
|
503
|
+
"examples": [
|
|
504
|
+
"10%",
|
|
505
|
+
"12.5%"
|
|
506
|
+
]
|
|
507
|
+
},
|
|
508
|
+
"slot_timeout": {
|
|
509
|
+
"$ref": "#/$defs/ConfigDuration",
|
|
510
|
+
"default": "20000ms",
|
|
511
|
+
"description": "A start slot is given back after this even if the service is not ready,\nso services waiting on each other cannot block the queue; default 20s.",
|
|
512
|
+
"examples": [
|
|
513
|
+
"15s",
|
|
514
|
+
"10m"
|
|
515
|
+
]
|
|
516
|
+
},
|
|
517
|
+
"target_cpu": {
|
|
518
|
+
"$ref": "#/$defs/Percent",
|
|
519
|
+
"default": "75%",
|
|
520
|
+
"description": "Adaptive mode grows the window while system CPU stays below this; default 75%.",
|
|
521
|
+
"examples": [
|
|
522
|
+
"75%",
|
|
523
|
+
"80%"
|
|
524
|
+
]
|
|
525
|
+
}
|
|
526
|
+
},
|
|
527
|
+
"type": "object"
|
|
528
|
+
},
|
|
529
|
+
"StartupMode": {
|
|
530
|
+
"description": "How the start gate sizes its window.",
|
|
531
|
+
"examples": [
|
|
532
|
+
"adaptive",
|
|
533
|
+
"fixed",
|
|
534
|
+
"all"
|
|
535
|
+
],
|
|
536
|
+
"oneOf": [
|
|
537
|
+
{
|
|
538
|
+
"const": "adaptive",
|
|
539
|
+
"description": "Grow the window while CPU and memory allow, shrink it under pressure.",
|
|
540
|
+
"examples": [
|
|
541
|
+
"adaptive"
|
|
542
|
+
],
|
|
543
|
+
"type": "string"
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
"const": "fixed",
|
|
547
|
+
"description": "Always `max` starts at a time.",
|
|
548
|
+
"examples": [
|
|
549
|
+
"fixed"
|
|
550
|
+
],
|
|
551
|
+
"type": "string"
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
"const": "all",
|
|
555
|
+
"description": "No pacing: every service starts at once.",
|
|
556
|
+
"examples": [
|
|
557
|
+
"all"
|
|
558
|
+
],
|
|
559
|
+
"type": "string"
|
|
560
|
+
}
|
|
561
|
+
]
|
|
562
|
+
},
|
|
563
|
+
"StateConfig": {
|
|
564
|
+
"additionalProperties": false,
|
|
565
|
+
"description": "Soft disk budget for the database; live registry and completion records are preserved.",
|
|
566
|
+
"examples": [
|
|
567
|
+
{
|
|
568
|
+
"max_size": "512MiB"
|
|
569
|
+
}
|
|
570
|
+
],
|
|
571
|
+
"properties": {
|
|
572
|
+
"max_size": {
|
|
573
|
+
"$ref": "#/$defs/ByteSize",
|
|
574
|
+
"default": "536870912B",
|
|
575
|
+
"description": "Budget for the database plus WAL and shared-memory files; defaults to 512MiB and must be nonzero. Old metrics and history are pruned first; protected live state may exceed it.",
|
|
576
|
+
"examples": [
|
|
577
|
+
"512MiB",
|
|
578
|
+
"1GiB"
|
|
579
|
+
]
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
"type": "object"
|
|
583
|
+
},
|
|
584
|
+
"Templated_string": {
|
|
585
|
+
"anyOf": [
|
|
586
|
+
{
|
|
587
|
+
"description": "Literal value used without expression evaluation.",
|
|
588
|
+
"type": "string"
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
"description": "Text containing `${{ ... }}`, evaluated for each lane; write `${{ '${{' }}` for a literal `${{`.",
|
|
592
|
+
"examples": [
|
|
593
|
+
"${{ lane.index }}"
|
|
594
|
+
],
|
|
595
|
+
"pattern": "\\$\\{\\{",
|
|
596
|
+
"type": "string"
|
|
597
|
+
}
|
|
598
|
+
],
|
|
599
|
+
"description": "A literal value or a `${{ ... }}` expression, checked for the required type after evaluation.\nWrite `${{ '${{' }}` for a literal `${{`.",
|
|
600
|
+
"examples": [
|
|
601
|
+
"${{ lane.index }}"
|
|
602
|
+
]
|
|
603
|
+
},
|
|
604
|
+
"Terminal": {
|
|
605
|
+
"description": "Terminal application used by open-in-terminal actions.",
|
|
606
|
+
"examples": [
|
|
607
|
+
"iterm2",
|
|
608
|
+
"ghostty",
|
|
609
|
+
"wezterm",
|
|
610
|
+
"kitty",
|
|
611
|
+
"terminal"
|
|
612
|
+
],
|
|
613
|
+
"oneOf": [
|
|
614
|
+
{
|
|
615
|
+
"const": "iterm2",
|
|
616
|
+
"description": "Open a session in iTerm2 on macOS.",
|
|
617
|
+
"examples": [
|
|
618
|
+
"iterm2"
|
|
619
|
+
],
|
|
620
|
+
"type": "string"
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
"const": "ghostty",
|
|
624
|
+
"description": "Open a session in Ghostty.",
|
|
625
|
+
"examples": [
|
|
626
|
+
"ghostty"
|
|
627
|
+
],
|
|
628
|
+
"type": "string"
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
"const": "wezterm",
|
|
632
|
+
"description": "Open a session in WezTerm.",
|
|
633
|
+
"examples": [
|
|
634
|
+
"wezterm"
|
|
635
|
+
],
|
|
636
|
+
"type": "string"
|
|
637
|
+
},
|
|
638
|
+
{
|
|
639
|
+
"const": "kitty",
|
|
640
|
+
"description": "Open a session in kitty.",
|
|
641
|
+
"examples": [
|
|
642
|
+
"kitty"
|
|
643
|
+
],
|
|
644
|
+
"type": "string"
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
"const": "terminal",
|
|
648
|
+
"description": "Open a session in macOS Terminal.app.",
|
|
649
|
+
"examples": [
|
|
650
|
+
"terminal"
|
|
651
|
+
],
|
|
652
|
+
"type": "string"
|
|
653
|
+
}
|
|
654
|
+
]
|
|
655
|
+
},
|
|
656
|
+
"TerminalConfig": {
|
|
657
|
+
"anyOf": [
|
|
658
|
+
{
|
|
659
|
+
"$ref": "#/$defs/Terminal",
|
|
660
|
+
"description": "Terminal app used by open-in-terminal actions; progress stays on auto.",
|
|
661
|
+
"examples": [
|
|
662
|
+
"ghostty"
|
|
663
|
+
]
|
|
664
|
+
},
|
|
665
|
+
{
|
|
666
|
+
"$ref": "#/$defs/TerminalSettings",
|
|
667
|
+
"description": "Terminal app and progress-bar setting written as separate fields.",
|
|
668
|
+
"examples": [
|
|
669
|
+
{
|
|
670
|
+
"app": "wezterm",
|
|
671
|
+
"progress": "never"
|
|
672
|
+
}
|
|
673
|
+
]
|
|
674
|
+
}
|
|
675
|
+
],
|
|
676
|
+
"description": "The terminal app name alone, or a mapping with the app and the progress-bar setting.",
|
|
677
|
+
"examples": [
|
|
678
|
+
"ghostty",
|
|
679
|
+
{
|
|
680
|
+
"app": "ghostty",
|
|
681
|
+
"progress": "auto"
|
|
682
|
+
}
|
|
683
|
+
]
|
|
684
|
+
},
|
|
685
|
+
"TerminalProgress": {
|
|
686
|
+
"description": "When start progress goes to the terminal tab's progress bar. Only a terminal\nsession in human output ever gets it; `DEVLANES_TERM_PROGRESS=0` or `1` overrides this.",
|
|
687
|
+
"examples": [
|
|
688
|
+
"auto",
|
|
689
|
+
"always",
|
|
690
|
+
"never"
|
|
691
|
+
],
|
|
692
|
+
"oneOf": [
|
|
693
|
+
{
|
|
694
|
+
"const": "auto",
|
|
695
|
+
"description": "Only in terminals known to draw it (Ghostty, WezTerm, recent iTerm2, Windows Terminal, ConEmu, Ptyxis, Konsole), never inside tmux or screen.",
|
|
696
|
+
"examples": [
|
|
697
|
+
"auto"
|
|
698
|
+
],
|
|
699
|
+
"type": "string"
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
"const": "always",
|
|
703
|
+
"description": "In any terminal, also kitty 0.47 or later and inside tmux (needs `allow-passthrough on`).",
|
|
704
|
+
"examples": [
|
|
705
|
+
"always"
|
|
706
|
+
],
|
|
707
|
+
"type": "string"
|
|
708
|
+
},
|
|
709
|
+
{
|
|
710
|
+
"const": "never",
|
|
711
|
+
"description": "Never.",
|
|
712
|
+
"examples": [
|
|
713
|
+
"never"
|
|
714
|
+
],
|
|
715
|
+
"type": "string"
|
|
716
|
+
}
|
|
717
|
+
]
|
|
718
|
+
},
|
|
719
|
+
"TerminalSettings": {
|
|
720
|
+
"additionalProperties": false,
|
|
721
|
+
"description": "Terminal app and how devlanes uses the terminal's own progress bar.",
|
|
722
|
+
"examples": [
|
|
723
|
+
{
|
|
724
|
+
"app": "ghostty",
|
|
725
|
+
"progress": "auto"
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
"progress": "never"
|
|
729
|
+
}
|
|
730
|
+
],
|
|
731
|
+
"properties": {
|
|
732
|
+
"app": {
|
|
733
|
+
"anyOf": [
|
|
734
|
+
{
|
|
735
|
+
"$ref": "#/$defs/Terminal"
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
"type": "null"
|
|
739
|
+
}
|
|
740
|
+
],
|
|
741
|
+
"default": null,
|
|
742
|
+
"description": "Terminal app used by open-in-terminal actions; unset picks Terminal.app on macOS, else the first one installed.",
|
|
743
|
+
"examples": [
|
|
744
|
+
"ghostty",
|
|
745
|
+
"iterm2"
|
|
746
|
+
]
|
|
747
|
+
},
|
|
748
|
+
"progress": {
|
|
749
|
+
"$ref": "#/$defs/TerminalProgress",
|
|
750
|
+
"default": "auto",
|
|
751
|
+
"description": "Show start progress in the terminal tab's progress bar (OSC 9;4); defaults to auto.",
|
|
752
|
+
"examples": [
|
|
753
|
+
"auto",
|
|
754
|
+
"never"
|
|
755
|
+
]
|
|
756
|
+
}
|
|
757
|
+
},
|
|
758
|
+
"type": "object"
|
|
759
|
+
},
|
|
760
|
+
"TlsConfig": {
|
|
761
|
+
"additionalProperties": false,
|
|
762
|
+
"description": "Certificate authority selection and requested certificate trust targets.",
|
|
763
|
+
"examples": [
|
|
764
|
+
{
|
|
765
|
+
"ca": "devlanes",
|
|
766
|
+
"trust": [
|
|
767
|
+
"system",
|
|
768
|
+
"firefox"
|
|
769
|
+
]
|
|
770
|
+
}
|
|
771
|
+
],
|
|
772
|
+
"properties": {
|
|
773
|
+
"ca": {
|
|
774
|
+
"$ref": "#/$defs/CaKind",
|
|
775
|
+
"default": "devlanes",
|
|
776
|
+
"description": "Use devlanes' own CA by default, or reuse mkcert's CA.",
|
|
777
|
+
"examples": [
|
|
778
|
+
"devlanes",
|
|
779
|
+
"mkcert"
|
|
780
|
+
]
|
|
781
|
+
},
|
|
782
|
+
"trust": {
|
|
783
|
+
"default": [],
|
|
784
|
+
"description": "Trust stores that should accept the local CA; mobile targets are ignored with a warning for now.",
|
|
785
|
+
"examples": [
|
|
786
|
+
[
|
|
787
|
+
"system",
|
|
788
|
+
"firefox"
|
|
789
|
+
],
|
|
790
|
+
[
|
|
791
|
+
"chrome"
|
|
792
|
+
]
|
|
793
|
+
],
|
|
794
|
+
"items": {
|
|
795
|
+
"$ref": "#/$defs/TrustTarget",
|
|
796
|
+
"description": "Store in which the local CA should be trusted; mobile stores are not supported yet.",
|
|
797
|
+
"examples": [
|
|
798
|
+
"system",
|
|
799
|
+
"firefox",
|
|
800
|
+
"chrome",
|
|
801
|
+
"ios-simulator",
|
|
802
|
+
"android-emulator"
|
|
803
|
+
]
|
|
804
|
+
},
|
|
805
|
+
"type": "array"
|
|
806
|
+
}
|
|
807
|
+
},
|
|
808
|
+
"type": "object"
|
|
809
|
+
},
|
|
810
|
+
"TrustTarget": {
|
|
811
|
+
"description": "Store in which the local CA should be trusted; mobile stores are not supported yet.",
|
|
812
|
+
"examples": [
|
|
813
|
+
"system",
|
|
814
|
+
"firefox",
|
|
815
|
+
"chrome",
|
|
816
|
+
"ios-simulator",
|
|
817
|
+
"android-emulator"
|
|
818
|
+
],
|
|
819
|
+
"oneOf": [
|
|
820
|
+
{
|
|
821
|
+
"const": "system",
|
|
822
|
+
"description": "Trust the local CA in the operating system's certificate store.",
|
|
823
|
+
"examples": [
|
|
824
|
+
"system"
|
|
825
|
+
],
|
|
826
|
+
"type": "string"
|
|
827
|
+
},
|
|
828
|
+
{
|
|
829
|
+
"const": "firefox",
|
|
830
|
+
"description": "Trust the local CA in Firefox's certificate database.",
|
|
831
|
+
"examples": [
|
|
832
|
+
"firefox"
|
|
833
|
+
],
|
|
834
|
+
"type": "string"
|
|
835
|
+
},
|
|
836
|
+
{
|
|
837
|
+
"const": "chrome",
|
|
838
|
+
"description": "Trust the local CA in Chrome's certificate database where required.",
|
|
839
|
+
"examples": [
|
|
840
|
+
"chrome"
|
|
841
|
+
],
|
|
842
|
+
"type": "string"
|
|
843
|
+
},
|
|
844
|
+
{
|
|
845
|
+
"const": "ios-simulator",
|
|
846
|
+
"description": "Reserved iOS simulator trust target; not supported yet, so it is ignored with a warning.",
|
|
847
|
+
"examples": [
|
|
848
|
+
"ios-simulator"
|
|
849
|
+
],
|
|
850
|
+
"type": "string"
|
|
851
|
+
},
|
|
852
|
+
{
|
|
853
|
+
"const": "android-emulator",
|
|
854
|
+
"description": "Reserved Android emulator trust target; not supported yet, so it is ignored with a warning.",
|
|
855
|
+
"examples": [
|
|
856
|
+
"android-emulator"
|
|
857
|
+
],
|
|
858
|
+
"type": "string"
|
|
859
|
+
}
|
|
860
|
+
]
|
|
861
|
+
},
|
|
862
|
+
"TuiConfig": {
|
|
863
|
+
"additionalProperties": false,
|
|
864
|
+
"description": "Terminal UI behaviour of the CLI.",
|
|
865
|
+
"examples": [
|
|
866
|
+
{
|
|
867
|
+
"open_on_start": false
|
|
868
|
+
}
|
|
869
|
+
],
|
|
870
|
+
"properties": {
|
|
871
|
+
"open_on_start": {
|
|
872
|
+
"default": true,
|
|
873
|
+
"description": "Run `start`, `restart`, `lane resume` and `lane new --start` inside the TUI when typed at a terminal; defaults to true. false prints them as text, like `--no-ui` or DEVLANES_NO_UI=1.",
|
|
874
|
+
"examples": [
|
|
875
|
+
true,
|
|
876
|
+
false
|
|
877
|
+
],
|
|
878
|
+
"type": "boolean"
|
|
879
|
+
}
|
|
880
|
+
},
|
|
881
|
+
"type": "object"
|
|
882
|
+
},
|
|
883
|
+
"UpdatesConfig": {
|
|
884
|
+
"additionalProperties": false,
|
|
885
|
+
"description": "Release checks: the daemon reads the latest release's version once a day and\ncommands print a one-line notice. Nothing is downloaded or installed.",
|
|
886
|
+
"examples": [
|
|
887
|
+
{
|
|
888
|
+
"check": false
|
|
889
|
+
}
|
|
890
|
+
],
|
|
891
|
+
"properties": {
|
|
892
|
+
"check": {
|
|
893
|
+
"default": true,
|
|
894
|
+
"description": "Check GitHub once a day for a newer devlanes release and show the upgrade command; defaults to true.",
|
|
895
|
+
"examples": [
|
|
896
|
+
true,
|
|
897
|
+
false
|
|
898
|
+
],
|
|
899
|
+
"type": "boolean"
|
|
900
|
+
}
|
|
901
|
+
},
|
|
902
|
+
"type": "object"
|
|
903
|
+
}
|
|
904
|
+
},
|
|
905
|
+
"$id": "https://devlanes.run/schema/user-v1.json",
|
|
906
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
907
|
+
"additionalProperties": false,
|
|
908
|
+
"description": "Per-user machine settings, separate from project configuration.",
|
|
909
|
+
"examples": [
|
|
910
|
+
{
|
|
911
|
+
"hostnames": {
|
|
912
|
+
"resolver": "localhost"
|
|
913
|
+
},
|
|
914
|
+
"ports": {
|
|
915
|
+
"range": "20000-32767"
|
|
916
|
+
},
|
|
917
|
+
"terminal": "ghostty"
|
|
918
|
+
}
|
|
919
|
+
],
|
|
920
|
+
"properties": {
|
|
921
|
+
"history": {
|
|
922
|
+
"$ref": "#/$defs/HistoryConfig",
|
|
923
|
+
"default": {
|
|
924
|
+
"remote_hosts_retention": "7776000000ms",
|
|
925
|
+
"retention": "2592000000ms"
|
|
926
|
+
},
|
|
927
|
+
"description": "Retention for finished unit/task history and disconnected remote hosts in the database.",
|
|
928
|
+
"examples": [
|
|
929
|
+
{
|
|
930
|
+
"remote_hosts_retention": "90d",
|
|
931
|
+
"retention": "30d"
|
|
932
|
+
}
|
|
933
|
+
]
|
|
934
|
+
},
|
|
935
|
+
"hostnames": {
|
|
936
|
+
"$ref": "#/$defs/HostnamesConfig",
|
|
937
|
+
"default": {
|
|
938
|
+
"base_domain": null,
|
|
939
|
+
"dns_provider": null,
|
|
940
|
+
"hosts_file": null,
|
|
941
|
+
"resolver": "localhost",
|
|
942
|
+
"tld": null
|
|
943
|
+
},
|
|
944
|
+
"description": "Hostname resolution strategy and optional hosts-file policy.",
|
|
945
|
+
"examples": [
|
|
946
|
+
{
|
|
947
|
+
"hosts_file": "auto",
|
|
948
|
+
"resolver": "localhost"
|
|
949
|
+
},
|
|
950
|
+
{
|
|
951
|
+
"resolver": "resolver",
|
|
952
|
+
"tld": "test"
|
|
953
|
+
}
|
|
954
|
+
]
|
|
955
|
+
},
|
|
956
|
+
"logs": {
|
|
957
|
+
"$ref": "#/$defs/LogsConfig",
|
|
958
|
+
"default": {
|
|
959
|
+
"retention": {
|
|
960
|
+
"days": 7,
|
|
961
|
+
"max_size": "5368709120B"
|
|
962
|
+
}
|
|
963
|
+
},
|
|
964
|
+
"description": "Retention for service output files and their database metadata.",
|
|
965
|
+
"examples": [
|
|
966
|
+
{
|
|
967
|
+
"retention": {
|
|
968
|
+
"days": 7,
|
|
969
|
+
"max_size": "5GiB"
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
]
|
|
973
|
+
},
|
|
974
|
+
"metrics": {
|
|
975
|
+
"$ref": "#/$defs/MetricsConfig",
|
|
976
|
+
"default": {
|
|
977
|
+
"retention": "2592000000ms"
|
|
978
|
+
},
|
|
979
|
+
"description": "Retention for monitor history, including aggregates stored in the database.",
|
|
980
|
+
"examples": [
|
|
981
|
+
{
|
|
982
|
+
"retention": "30d"
|
|
983
|
+
}
|
|
984
|
+
]
|
|
985
|
+
},
|
|
986
|
+
"ports": {
|
|
987
|
+
"$ref": "#/$defs/PortsConfig",
|
|
988
|
+
"default": {
|
|
989
|
+
"range": "20000-32767"
|
|
990
|
+
},
|
|
991
|
+
"description": "Machine-wide pool shared by all project lane blocks.",
|
|
992
|
+
"examples": [
|
|
993
|
+
{
|
|
994
|
+
"range": "20000-32767"
|
|
995
|
+
}
|
|
996
|
+
]
|
|
997
|
+
},
|
|
998
|
+
"proxy": {
|
|
999
|
+
"$ref": "#/$defs/ProxyConfig",
|
|
1000
|
+
"default": {
|
|
1001
|
+
"http_port": 80,
|
|
1002
|
+
"https_port": 443,
|
|
1003
|
+
"lan": false
|
|
1004
|
+
},
|
|
1005
|
+
"description": "HTTP/HTTPS listening ports and LAN access policy.",
|
|
1006
|
+
"examples": [
|
|
1007
|
+
{
|
|
1008
|
+
"http_port": 80,
|
|
1009
|
+
"https_port": 443,
|
|
1010
|
+
"lan": false
|
|
1011
|
+
}
|
|
1012
|
+
]
|
|
1013
|
+
},
|
|
1014
|
+
"startup": {
|
|
1015
|
+
"$ref": "#/$defs/StartupConfig",
|
|
1016
|
+
"default": {
|
|
1017
|
+
"initial": null,
|
|
1018
|
+
"max": null,
|
|
1019
|
+
"mode": "fixed",
|
|
1020
|
+
"settle_cpu": "10%",
|
|
1021
|
+
"slot_timeout": "20000ms",
|
|
1022
|
+
"target_cpu": "75%"
|
|
1023
|
+
},
|
|
1024
|
+
"description": "How many services start at once, across all lanes and projects.",
|
|
1025
|
+
"examples": [
|
|
1026
|
+
{
|
|
1027
|
+
"max": 4,
|
|
1028
|
+
"mode": "fixed"
|
|
1029
|
+
},
|
|
1030
|
+
{
|
|
1031
|
+
"initial": 2,
|
|
1032
|
+
"max": 8,
|
|
1033
|
+
"mode": "adaptive",
|
|
1034
|
+
"settle_cpu": "10%",
|
|
1035
|
+
"slot_timeout": "20s",
|
|
1036
|
+
"target_cpu": "75%"
|
|
1037
|
+
}
|
|
1038
|
+
]
|
|
1039
|
+
},
|
|
1040
|
+
"state": {
|
|
1041
|
+
"$ref": "#/$defs/StateConfig",
|
|
1042
|
+
"default": {
|
|
1043
|
+
"max_size": "536870912B"
|
|
1044
|
+
},
|
|
1045
|
+
"description": "Soft disk budget for the state database and its SQLite sidecar files.",
|
|
1046
|
+
"examples": [
|
|
1047
|
+
{
|
|
1048
|
+
"max_size": "512MiB"
|
|
1049
|
+
}
|
|
1050
|
+
]
|
|
1051
|
+
},
|
|
1052
|
+
"terminal": {
|
|
1053
|
+
"anyOf": [
|
|
1054
|
+
{
|
|
1055
|
+
"$ref": "#/$defs/TerminalConfig"
|
|
1056
|
+
},
|
|
1057
|
+
{
|
|
1058
|
+
"type": "null"
|
|
1059
|
+
}
|
|
1060
|
+
],
|
|
1061
|
+
"default": null,
|
|
1062
|
+
"description": "Terminal app for open-in-terminal actions, alone or with the progress-bar setting.",
|
|
1063
|
+
"examples": [
|
|
1064
|
+
"ghostty",
|
|
1065
|
+
{
|
|
1066
|
+
"app": "ghostty",
|
|
1067
|
+
"progress": "auto"
|
|
1068
|
+
}
|
|
1069
|
+
]
|
|
1070
|
+
},
|
|
1071
|
+
"tls": {
|
|
1072
|
+
"$ref": "#/$defs/TlsConfig",
|
|
1073
|
+
"default": {
|
|
1074
|
+
"ca": "devlanes",
|
|
1075
|
+
"trust": []
|
|
1076
|
+
},
|
|
1077
|
+
"description": "Certificate authority and explicitly requested trust targets.",
|
|
1078
|
+
"examples": [
|
|
1079
|
+
{
|
|
1080
|
+
"ca": "devlanes",
|
|
1081
|
+
"trust": [
|
|
1082
|
+
"system",
|
|
1083
|
+
"firefox"
|
|
1084
|
+
]
|
|
1085
|
+
}
|
|
1086
|
+
]
|
|
1087
|
+
},
|
|
1088
|
+
"tui": {
|
|
1089
|
+
"$ref": "#/$defs/TuiConfig",
|
|
1090
|
+
"default": {
|
|
1091
|
+
"open_on_start": true
|
|
1092
|
+
},
|
|
1093
|
+
"description": "How commands use the terminal UI.",
|
|
1094
|
+
"examples": [
|
|
1095
|
+
{
|
|
1096
|
+
"open_on_start": false
|
|
1097
|
+
}
|
|
1098
|
+
]
|
|
1099
|
+
},
|
|
1100
|
+
"updates": {
|
|
1101
|
+
"$ref": "#/$defs/UpdatesConfig",
|
|
1102
|
+
"default": {
|
|
1103
|
+
"check": true
|
|
1104
|
+
},
|
|
1105
|
+
"description": "Whether the daemon looks for new devlanes releases.",
|
|
1106
|
+
"examples": [
|
|
1107
|
+
{
|
|
1108
|
+
"check": false
|
|
1109
|
+
}
|
|
1110
|
+
]
|
|
1111
|
+
}
|
|
1112
|
+
},
|
|
1113
|
+
"title": "devlanes user config",
|
|
1114
|
+
"type": "object"
|
|
1115
|
+
}
|