@namewta/speculo 1.0.6 → 1.0.8

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 (57) hide show
  1. package/dist/src/ops-resources.js +1 -1
  2. package/dist/src/ops-resources.js.map +1 -1
  3. package/package.json +1 -1
  4. package/template/workflows/ops/D-project-deploy/D-project-deploy.md +1 -1
  5. package/template/workflows/ops/H-host-manage/H-host-manage.md +5 -1
  6. package/template/workflows/ops/I-initialize/I-initialize.md +2 -2
  7. package/template/workflows/ops/README.md +8 -5
  8. package/template/workflows/ops/common/CAPABILITIES.md +2 -2
  9. package/template/workflows/ops/common/USAGE.md +25 -25
  10. package/template/workflows/ops/common/examples/README.md +1 -1
  11. package/template/workflows/ops/common/examples/register.example.json +1 -1
  12. package/template/workflows/ops/common/rules/persistence-and-secrets.md +1 -1
  13. package/template/workflows/ops/common/schemas/host.schema.json +65 -2
  14. package/template/workflows/ops/common/schemas/plan.schema.json +315 -3
  15. package/template/workflows/ops/common/schemas/spec.schema.json +137 -1
  16. package/template/workflows/ops/common/schemas/status.schema.json +143 -1
  17. package/template/workflows/ops/common/service-profiles/elasticsearch.md +13 -0
  18. package/template/workflows/ops/common/service-profiles/redis.md +4 -0
  19. package/template/workflows/ops/common/templates/CONTROLLER-RECORD.md +16 -2
  20. package/template/workflows/ops/common/templates/HOST-README.md +12 -2
  21. package/template/workflows/ops/common/tests/test_ops.mjs +982 -0
  22. package/template/workflows/ops/common/tools/bootstrap.ps1 +2 -2
  23. package/template/workflows/ops/common/tools/bootstrap.sh +2 -2
  24. package/template/workflows/ops/common/tools/demo-local.mjs +101 -0
  25. package/template/workflows/ops/common/tools/ops.mjs +4 -0
  26. package/template/workflows/ops/common/tools/opslib/agent.mjs +904 -0
  27. package/template/workflows/ops/common/tools/opslib/cli.mjs +311 -0
  28. package/template/workflows/ops/common/tools/opslib/control_files.mjs +57 -0
  29. package/template/workflows/ops/common/tools/opslib/core.mjs +393 -0
  30. package/template/workflows/ops/common/tools/opslib/docs.mjs +436 -0
  31. package/template/workflows/ops/common/tools/opslib/execution.mjs +396 -0
  32. package/template/workflows/ops/common/tools/opslib/host_recipes.mjs +109 -0
  33. package/template/workflows/ops/common/tools/opslib/model.mjs +272 -0
  34. package/template/workflows/ops/common/tools/opslib/{native_windows.py → native_windows.mjs} +16 -12
  35. package/template/workflows/ops/common/tools/opslib/planner.mjs +781 -0
  36. package/template/workflows/ops/common/tools/opslib/services.mjs +76 -0
  37. package/template/workflows/ops/common/tools/opslib/sources.mjs +56 -0
  38. package/template/workflows/ops/common/tools/opslib/transport.mjs +127 -0
  39. package/template/workflows/ops/common/tools/validate-ops.mjs +43 -30
  40. package/template/workflows/ops/common/tests/test_ops.py +0 -392
  41. package/template/workflows/ops/common/tools/demo-local.py +0 -64
  42. package/template/workflows/ops/common/tools/ops.py +0 -7
  43. package/template/workflows/ops/common/tools/opslib/__init__.py +0 -2
  44. package/template/workflows/ops/common/tools/opslib/__pycache__/__init__.cpython-312.pyc +0 -0
  45. package/template/workflows/ops/common/tools/opslib/__pycache__/core.cpython-312.pyc +0 -0
  46. package/template/workflows/ops/common/tools/opslib/__pycache__/model.cpython-312.pyc +0 -0
  47. package/template/workflows/ops/common/tools/opslib/agent.py +0 -510
  48. package/template/workflows/ops/common/tools/opslib/cli.py +0 -172
  49. package/template/workflows/ops/common/tools/opslib/core.py +0 -199
  50. package/template/workflows/ops/common/tools/opslib/docs.py +0 -199
  51. package/template/workflows/ops/common/tools/opslib/execution.py +0 -248
  52. package/template/workflows/ops/common/tools/opslib/host_recipes.py +0 -67
  53. package/template/workflows/ops/common/tools/opslib/model.py +0 -199
  54. package/template/workflows/ops/common/tools/opslib/planner.py +0 -497
  55. package/template/workflows/ops/common/tools/opslib/services.py +0 -47
  56. package/template/workflows/ops/common/tools/opslib/sources.py +0 -27
  57. package/template/workflows/ops/common/tools/opslib/transport.py +0 -55
@@ -46,6 +46,61 @@
46
46
  "type": "string",
47
47
  "minLength": 1
48
48
  },
49
+ "registry_slice_digest": {
50
+ "type": "string",
51
+ "minLength": 1
52
+ },
53
+ "registry_scope": {
54
+ "type": "object",
55
+ "properties": {
56
+ "hosts": {
57
+ "type": "array",
58
+ "items": {
59
+ "type": "string"
60
+ }
61
+ },
62
+ "projects": {
63
+ "type": "array",
64
+ "items": {
65
+ "type": "string"
66
+ }
67
+ },
68
+ "deployments": {
69
+ "type": "array",
70
+ "items": {
71
+ "type": "string"
72
+ }
73
+ },
74
+ "allocations": {
75
+ "type": "array",
76
+ "items": {
77
+ "type": "string"
78
+ }
79
+ },
80
+ "bindings": {
81
+ "type": "array",
82
+ "items": {
83
+ "type": "string"
84
+ }
85
+ },
86
+ "policies": {
87
+ "type": "boolean"
88
+ },
89
+ "public_ingress": {
90
+ "type": "boolean"
91
+ }
92
+ },
93
+ "required": [
94
+ "hosts",
95
+ "projects",
96
+ "deployments",
97
+ "allocations",
98
+ "bindings",
99
+ "policies",
100
+ "public_ingress"
101
+ ],
102
+ "additionalProperties": false
103
+ },
49
104
  "registry_revision": {
50
105
  "type": "integer"
51
106
  },
@@ -113,7 +168,7 @@
113
168
  "type": "string",
114
169
  "minLength": 1
115
170
  },
116
- "python": {
171
+ "node": {
117
172
  "type": "string",
118
173
  "minLength": 1
119
174
  },
@@ -129,6 +184,64 @@
129
184
  },
130
185
  "required": [],
131
186
  "additionalProperties": false
187
+ },
188
+ "host_services": {
189
+ "type": "array",
190
+ "items": {
191
+ "type": "object",
192
+ "properties": {
193
+ "id": {
194
+ "type": "string",
195
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
196
+ "maxLength": 80
197
+ },
198
+ "kind": {
199
+ "enum": [
200
+ "wireguard",
201
+ "nginx",
202
+ "systemd",
203
+ "probe",
204
+ "other"
205
+ ]
206
+ },
207
+ "unit": {
208
+ "type": "string",
209
+ "minLength": 1
210
+ },
211
+ "listen_port": {
212
+ "type": "integer",
213
+ "minimum": 1,
214
+ "maximum": 65535
215
+ },
216
+ "listen": {
217
+ "type": "array",
218
+ "items": {
219
+ "type": "string",
220
+ "minLength": 1
221
+ }
222
+ },
223
+ "tunnel_address": {
224
+ "type": "string",
225
+ "minLength": 1
226
+ },
227
+ "config_path": {
228
+ "type": "string",
229
+ "minLength": 1
230
+ },
231
+ "public_url": {
232
+ "type": "string",
233
+ "minLength": 1
234
+ },
235
+ "notes": {
236
+ "type": "string"
237
+ }
238
+ },
239
+ "required": [
240
+ "id",
241
+ "kind"
242
+ ],
243
+ "additionalProperties": false
244
+ }
132
245
  }
133
246
  },
134
247
  "required": [
@@ -365,6 +478,87 @@
365
478
  ],
366
479
  "additionalProperties": false
367
480
  },
481
+ "public_ingress": {
482
+ "oneOf": [
483
+ {
484
+ "type": "null"
485
+ },
486
+ {
487
+ "type": "object",
488
+ "properties": {
489
+ "schema_version": {
490
+ "const": 1
491
+ },
492
+ "title": {
493
+ "type": "string",
494
+ "minLength": 1
495
+ },
496
+ "path": {
497
+ "type": "string",
498
+ "minLength": 1
499
+ },
500
+ "not_the_same_as": {
501
+ "type": "string"
502
+ },
503
+ "mappings": {
504
+ "type": "array",
505
+ "items": {
506
+ "type": "object",
507
+ "properties": {
508
+ "public": {
509
+ "type": "string",
510
+ "minLength": 1
511
+ },
512
+ "layer4": {
513
+ "type": "string"
514
+ },
515
+ "via": {
516
+ "type": "array",
517
+ "items": {
518
+ "type": "string"
519
+ }
520
+ },
521
+ "backend": {
522
+ "type": "string",
523
+ "minLength": 1
524
+ },
525
+ "backend_deployment": {
526
+ "type": "string"
527
+ }
528
+ },
529
+ "required": [
530
+ "public",
531
+ "backend"
532
+ ],
533
+ "additionalProperties": false
534
+ }
535
+ },
536
+ "open_http_checklist": {
537
+ "type": "array",
538
+ "items": {
539
+ "type": "string",
540
+ "minLength": 1
541
+ }
542
+ },
543
+ "forbidden_ports": {
544
+ "type": "array",
545
+ "items": {
546
+ "type": "integer",
547
+ "minimum": 1,
548
+ "maximum": 65535
549
+ }
550
+ }
551
+ },
552
+ "required": [
553
+ "schema_version",
554
+ "title",
555
+ "path",
556
+ "mappings"
557
+ ],
558
+ "additionalProperties": false
559
+ }
560
+ ]
561
+ },
368
562
  "updated_at": {
369
563
  "type": [
370
564
  "string",
@@ -445,7 +639,7 @@
445
639
  "type": "string",
446
640
  "minLength": 1
447
641
  },
448
- "python": {
642
+ "node": {
449
643
  "type": "string",
450
644
  "minLength": 1
451
645
  },
@@ -461,6 +655,64 @@
461
655
  },
462
656
  "required": [],
463
657
  "additionalProperties": false
658
+ },
659
+ "host_services": {
660
+ "type": "array",
661
+ "items": {
662
+ "type": "object",
663
+ "properties": {
664
+ "id": {
665
+ "type": "string",
666
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
667
+ "maxLength": 80
668
+ },
669
+ "kind": {
670
+ "enum": [
671
+ "wireguard",
672
+ "nginx",
673
+ "systemd",
674
+ "probe",
675
+ "other"
676
+ ]
677
+ },
678
+ "unit": {
679
+ "type": "string",
680
+ "minLength": 1
681
+ },
682
+ "listen_port": {
683
+ "type": "integer",
684
+ "minimum": 1,
685
+ "maximum": 65535
686
+ },
687
+ "listen": {
688
+ "type": "array",
689
+ "items": {
690
+ "type": "string",
691
+ "minLength": 1
692
+ }
693
+ },
694
+ "tunnel_address": {
695
+ "type": "string",
696
+ "minLength": 1
697
+ },
698
+ "config_path": {
699
+ "type": "string",
700
+ "minLength": 1
701
+ },
702
+ "public_url": {
703
+ "type": "string",
704
+ "minLength": 1
705
+ },
706
+ "notes": {
707
+ "type": "string"
708
+ }
709
+ },
710
+ "required": [
711
+ "id",
712
+ "kind"
713
+ ],
714
+ "additionalProperties": false
715
+ }
464
716
  }
465
717
  },
466
718
  "required": [
@@ -1000,6 +1252,8 @@
1000
1252
  "expires_at",
1001
1253
  "controller_id",
1002
1254
  "registry_digest",
1255
+ "registry_slice_digest",
1256
+ "registry_scope",
1003
1257
  "registry_revision",
1004
1258
  "hosts",
1005
1259
  "transport_digests",
@@ -1076,7 +1330,7 @@
1076
1330
  "type": "string",
1077
1331
  "minLength": 1
1078
1332
  },
1079
- "python": {
1333
+ "node": {
1080
1334
  "type": "string",
1081
1335
  "minLength": 1
1082
1336
  },
@@ -1092,6 +1346,64 @@
1092
1346
  },
1093
1347
  "required": [],
1094
1348
  "additionalProperties": false
1349
+ },
1350
+ "host_services": {
1351
+ "type": "array",
1352
+ "items": {
1353
+ "type": "object",
1354
+ "properties": {
1355
+ "id": {
1356
+ "type": "string",
1357
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1358
+ "maxLength": 80
1359
+ },
1360
+ "kind": {
1361
+ "enum": [
1362
+ "wireguard",
1363
+ "nginx",
1364
+ "systemd",
1365
+ "probe",
1366
+ "other"
1367
+ ]
1368
+ },
1369
+ "unit": {
1370
+ "type": "string",
1371
+ "minLength": 1
1372
+ },
1373
+ "listen_port": {
1374
+ "type": "integer",
1375
+ "minimum": 1,
1376
+ "maximum": 65535
1377
+ },
1378
+ "listen": {
1379
+ "type": "array",
1380
+ "items": {
1381
+ "type": "string",
1382
+ "minLength": 1
1383
+ }
1384
+ },
1385
+ "tunnel_address": {
1386
+ "type": "string",
1387
+ "minLength": 1
1388
+ },
1389
+ "config_path": {
1390
+ "type": "string",
1391
+ "minLength": 1
1392
+ },
1393
+ "public_url": {
1394
+ "type": "string",
1395
+ "minLength": 1
1396
+ },
1397
+ "notes": {
1398
+ "type": "string"
1399
+ }
1400
+ },
1401
+ "required": [
1402
+ "id",
1403
+ "kind"
1404
+ ],
1405
+ "additionalProperties": false
1406
+ }
1095
1407
  }
1096
1408
  },
1097
1409
  "required": [
@@ -86,7 +86,7 @@
86
86
  "type": "string",
87
87
  "minLength": 1
88
88
  },
89
- "python": {
89
+ "node": {
90
90
  "type": "string",
91
91
  "minLength": 1
92
92
  },
@@ -102,6 +102,64 @@
102
102
  },
103
103
  "required": [],
104
104
  "additionalProperties": false
105
+ },
106
+ "host_services": {
107
+ "type": "array",
108
+ "items": {
109
+ "type": "object",
110
+ "properties": {
111
+ "id": {
112
+ "type": "string",
113
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
114
+ "maxLength": 80
115
+ },
116
+ "kind": {
117
+ "enum": [
118
+ "wireguard",
119
+ "nginx",
120
+ "systemd",
121
+ "probe",
122
+ "other"
123
+ ]
124
+ },
125
+ "unit": {
126
+ "type": "string",
127
+ "minLength": 1
128
+ },
129
+ "listen_port": {
130
+ "type": "integer",
131
+ "minimum": 1,
132
+ "maximum": 65535
133
+ },
134
+ "listen": {
135
+ "type": "array",
136
+ "items": {
137
+ "type": "string",
138
+ "minLength": 1
139
+ }
140
+ },
141
+ "tunnel_address": {
142
+ "type": "string",
143
+ "minLength": 1
144
+ },
145
+ "config_path": {
146
+ "type": "string",
147
+ "minLength": 1
148
+ },
149
+ "public_url": {
150
+ "type": "string",
151
+ "minLength": 1
152
+ },
153
+ "notes": {
154
+ "type": "string"
155
+ }
156
+ },
157
+ "required": [
158
+ "id",
159
+ "kind"
160
+ ],
161
+ "additionalProperties": false
162
+ }
105
163
  }
106
164
  },
107
165
  "required": [
@@ -674,6 +732,10 @@
674
732
  "type": "integer",
675
733
  "minimum": 256,
676
734
  "maximum": 511
735
+ },
736
+ "rollback": {
737
+ "type": "string",
738
+ "minLength": 1
677
739
  }
678
740
  },
679
741
  "required": [
@@ -1019,6 +1081,80 @@
1019
1081
  "external-mutation",
1020
1082
  "production-critical"
1021
1083
  ]
1084
+ },
1085
+ "public_ingress": {
1086
+ "type": "object",
1087
+ "properties": {
1088
+ "schema_version": {
1089
+ "const": 1
1090
+ },
1091
+ "title": {
1092
+ "type": "string",
1093
+ "minLength": 1
1094
+ },
1095
+ "path": {
1096
+ "type": "string",
1097
+ "minLength": 1
1098
+ },
1099
+ "not_the_same_as": {
1100
+ "type": "string"
1101
+ },
1102
+ "mappings": {
1103
+ "type": "array",
1104
+ "items": {
1105
+ "type": "object",
1106
+ "properties": {
1107
+ "public": {
1108
+ "type": "string",
1109
+ "minLength": 1
1110
+ },
1111
+ "layer4": {
1112
+ "type": "string"
1113
+ },
1114
+ "via": {
1115
+ "type": "array",
1116
+ "items": {
1117
+ "type": "string"
1118
+ }
1119
+ },
1120
+ "backend": {
1121
+ "type": "string",
1122
+ "minLength": 1
1123
+ },
1124
+ "backend_deployment": {
1125
+ "type": "string"
1126
+ }
1127
+ },
1128
+ "required": [
1129
+ "public",
1130
+ "backend"
1131
+ ],
1132
+ "additionalProperties": false
1133
+ }
1134
+ },
1135
+ "open_http_checklist": {
1136
+ "type": "array",
1137
+ "items": {
1138
+ "type": "string",
1139
+ "minLength": 1
1140
+ }
1141
+ },
1142
+ "forbidden_ports": {
1143
+ "type": "array",
1144
+ "items": {
1145
+ "type": "integer",
1146
+ "minimum": 1,
1147
+ "maximum": 65535
1148
+ }
1149
+ }
1150
+ },
1151
+ "required": [
1152
+ "schema_version",
1153
+ "title",
1154
+ "path",
1155
+ "mappings"
1156
+ ],
1157
+ "additionalProperties": false
1022
1158
  }
1023
1159
  },
1024
1160
  "required": [
@@ -194,6 +194,16 @@
194
194
  ],
195
195
  "additionalProperties": false
196
196
  },
197
+ "public_ingress": {
198
+ "oneOf": [
199
+ {
200
+ "type": "null"
201
+ },
202
+ {
203
+ "$ref": "#/$defs/public_ingress"
204
+ }
205
+ ]
206
+ },
197
207
  "updated_at": {
198
208
  "type": [
199
209
  "string",
@@ -274,7 +284,7 @@
274
284
  "type": "string",
275
285
  "minLength": 1
276
286
  },
277
- "python": {
287
+ "node": {
278
288
  "type": "string",
279
289
  "minLength": 1
280
290
  },
@@ -290,6 +300,64 @@
290
300
  },
291
301
  "required": [],
292
302
  "additionalProperties": false
303
+ },
304
+ "host_services": {
305
+ "type": "array",
306
+ "items": {
307
+ "type": "object",
308
+ "properties": {
309
+ "id": {
310
+ "type": "string",
311
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
312
+ "maxLength": 80
313
+ },
314
+ "kind": {
315
+ "enum": [
316
+ "wireguard",
317
+ "nginx",
318
+ "systemd",
319
+ "probe",
320
+ "other"
321
+ ]
322
+ },
323
+ "unit": {
324
+ "type": "string",
325
+ "minLength": 1
326
+ },
327
+ "listen_port": {
328
+ "type": "integer",
329
+ "minimum": 1,
330
+ "maximum": 65535
331
+ },
332
+ "listen": {
333
+ "type": "array",
334
+ "items": {
335
+ "type": "string",
336
+ "minLength": 1
337
+ }
338
+ },
339
+ "tunnel_address": {
340
+ "type": "string",
341
+ "minLength": 1
342
+ },
343
+ "config_path": {
344
+ "type": "string",
345
+ "minLength": 1
346
+ },
347
+ "public_url": {
348
+ "type": "string",
349
+ "minLength": 1
350
+ },
351
+ "notes": {
352
+ "type": "string"
353
+ }
354
+ },
355
+ "required": [
356
+ "id",
357
+ "kind"
358
+ ],
359
+ "additionalProperties": false
360
+ }
293
361
  }
294
362
  },
295
363
  "required": [
@@ -766,6 +834,80 @@
766
834
  "network"
767
835
  ],
768
836
  "additionalProperties": false
837
+ },
838
+ "public_ingress": {
839
+ "type": "object",
840
+ "properties": {
841
+ "schema_version": {
842
+ "const": 1
843
+ },
844
+ "title": {
845
+ "type": "string",
846
+ "minLength": 1
847
+ },
848
+ "path": {
849
+ "type": "string",
850
+ "minLength": 1
851
+ },
852
+ "not_the_same_as": {
853
+ "type": "string"
854
+ },
855
+ "mappings": {
856
+ "type": "array",
857
+ "items": {
858
+ "type": "object",
859
+ "properties": {
860
+ "public": {
861
+ "type": "string",
862
+ "minLength": 1
863
+ },
864
+ "layer4": {
865
+ "type": "string"
866
+ },
867
+ "via": {
868
+ "type": "array",
869
+ "items": {
870
+ "type": "string"
871
+ }
872
+ },
873
+ "backend": {
874
+ "type": "string",
875
+ "minLength": 1
876
+ },
877
+ "backend_deployment": {
878
+ "type": "string"
879
+ }
880
+ },
881
+ "required": [
882
+ "public",
883
+ "backend"
884
+ ],
885
+ "additionalProperties": false
886
+ }
887
+ },
888
+ "open_http_checklist": {
889
+ "type": "array",
890
+ "items": {
891
+ "type": "string",
892
+ "minLength": 1
893
+ }
894
+ },
895
+ "forbidden_ports": {
896
+ "type": "array",
897
+ "items": {
898
+ "type": "integer",
899
+ "minimum": 1,
900
+ "maximum": 65535
901
+ }
902
+ }
903
+ },
904
+ "required": [
905
+ "schema_version",
906
+ "title",
907
+ "path",
908
+ "mappings"
909
+ ],
910
+ "additionalProperties": false
769
911
  }
770
912
  }
771
913
  }