@dzhechkov/cloudru-hub 0.1.4

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.
@@ -0,0 +1,585 @@
1
+ {
2
+ "capturedAt": "2026-08-09",
3
+ "engineVersion": "cloudru-vm 0.2.3-20260718",
4
+ "engineSha256": "59f83fc0678b95146ca539764d0c805bd2514b8588f198c1e835b26e54c05124",
5
+ "method": "echo tools/list JSON-RPC | cloudru-vm mcp",
6
+ "toolCount": 144,
7
+ "tools": [
8
+ {
9
+ "name": "deploy",
10
+ "gated": false
11
+ },
12
+ {
13
+ "name": "provision",
14
+ "gated": false
15
+ },
16
+ {
17
+ "name": "status",
18
+ "gated": false
19
+ },
20
+ {
21
+ "name": "list",
22
+ "gated": false
23
+ },
24
+ {
25
+ "name": "vm_list",
26
+ "gated": false
27
+ },
28
+ {
29
+ "name": "vm_exec",
30
+ "gated": false
31
+ },
32
+ {
33
+ "name": "vm_get",
34
+ "gated": false
35
+ },
36
+ {
37
+ "name": "logs",
38
+ "gated": false
39
+ },
40
+ {
41
+ "name": "destroy",
42
+ "gated": true
43
+ },
44
+ {
45
+ "name": "list_zones",
46
+ "gated": false
47
+ },
48
+ {
49
+ "name": "list_images",
50
+ "gated": false
51
+ },
52
+ {
53
+ "name": "deploy_plan",
54
+ "gated": false
55
+ },
56
+ {
57
+ "name": "deploy_apply",
58
+ "gated": true
59
+ },
60
+ {
61
+ "name": "list_flavors",
62
+ "gated": false
63
+ },
64
+ {
65
+ "name": "list_disk_types",
66
+ "gated": false
67
+ },
68
+ {
69
+ "name": "list_subnets",
70
+ "gated": false
71
+ },
72
+ {
73
+ "name": "list_security_groups",
74
+ "gated": false
75
+ },
76
+ {
77
+ "name": "list_floating_ips",
78
+ "gated": false
79
+ },
80
+ {
81
+ "name": "open_ports",
82
+ "gated": true
83
+ },
84
+ {
85
+ "name": "k8s_list",
86
+ "gated": false
87
+ },
88
+ {
89
+ "name": "k8s_get",
90
+ "gated": false
91
+ },
92
+ {
93
+ "name": "k8s_options",
94
+ "gated": false
95
+ },
96
+ {
97
+ "name": "k8s_plan",
98
+ "gated": false
99
+ },
100
+ {
101
+ "name": "k8s_create",
102
+ "gated": true
103
+ },
104
+ {
105
+ "name": "k8s_kubeconfig",
106
+ "gated": false
107
+ },
108
+ {
109
+ "name": "k8s_delete",
110
+ "gated": true
111
+ },
112
+ {
113
+ "name": "k8s_nodepools",
114
+ "gated": false
115
+ },
116
+ {
117
+ "name": "k8s_add_nodepool",
118
+ "gated": true
119
+ },
120
+ {
121
+ "name": "k8s_kubectl",
122
+ "gated": true
123
+ },
124
+ {
125
+ "name": "k8s_apply",
126
+ "gated": true
127
+ },
128
+ {
129
+ "name": "k8s_helm",
130
+ "gated": true
131
+ },
132
+ {
133
+ "name": "disk_list",
134
+ "gated": false
135
+ },
136
+ {
137
+ "name": "disk_create",
138
+ "gated": true
139
+ },
140
+ {
141
+ "name": "disk_attach",
142
+ "gated": true
143
+ },
144
+ {
145
+ "name": "disk_detach",
146
+ "gated": true
147
+ },
148
+ {
149
+ "name": "disk_resize",
150
+ "gated": true
151
+ },
152
+ {
153
+ "name": "disk_delete",
154
+ "gated": true
155
+ },
156
+ {
157
+ "name": "ca_list",
158
+ "gated": false
159
+ },
160
+ {
161
+ "name": "ca_get",
162
+ "gated": false
163
+ },
164
+ {
165
+ "name": "ca_deploy",
166
+ "gated": true
167
+ },
168
+ {
169
+ "name": "ca_delete",
170
+ "gated": true
171
+ },
172
+ {
173
+ "name": "ca_logs",
174
+ "gated": false
175
+ },
176
+ {
177
+ "name": "ca_start",
178
+ "gated": false
179
+ },
180
+ {
181
+ "name": "ca_stop",
182
+ "gated": false
183
+ },
184
+ {
185
+ "name": "iam_service_accounts",
186
+ "gated": false
187
+ },
188
+ {
189
+ "name": "org_projects",
190
+ "gated": false
191
+ },
192
+ {
193
+ "name": "org_quotas",
194
+ "gated": false
195
+ },
196
+ {
197
+ "name": "release_floating_ip",
198
+ "gated": true
199
+ },
200
+ {
201
+ "name": "snat_list",
202
+ "gated": false
203
+ },
204
+ {
205
+ "name": "snat_create",
206
+ "gated": true
207
+ },
208
+ {
209
+ "name": "snat_delete",
210
+ "gated": true
211
+ },
212
+ {
213
+ "name": "pg_list",
214
+ "gated": false
215
+ },
216
+ {
217
+ "name": "pg_get",
218
+ "gated": false
219
+ },
220
+ {
221
+ "name": "pg_versions",
222
+ "gated": false
223
+ },
224
+ {
225
+ "name": "pg_specs",
226
+ "gated": false
227
+ },
228
+ {
229
+ "name": "pg_create",
230
+ "gated": true
231
+ },
232
+ {
233
+ "name": "pg_delete",
234
+ "gated": true
235
+ },
236
+ {
237
+ "name": "pg_operation",
238
+ "gated": false
239
+ },
240
+ {
241
+ "name": "kafka_list",
242
+ "gated": false
243
+ },
244
+ {
245
+ "name": "kafka_get",
246
+ "gated": false
247
+ },
248
+ {
249
+ "name": "kafka_versions",
250
+ "gated": false
251
+ },
252
+ {
253
+ "name": "kafka_specs",
254
+ "gated": false
255
+ },
256
+ {
257
+ "name": "kafka_create",
258
+ "gated": true
259
+ },
260
+ {
261
+ "name": "kafka_delete",
262
+ "gated": true
263
+ },
264
+ {
265
+ "name": "kafka_operation",
266
+ "gated": false
267
+ },
268
+ {
269
+ "name": "redis_list",
270
+ "gated": false
271
+ },
272
+ {
273
+ "name": "redis_get",
274
+ "gated": false
275
+ },
276
+ {
277
+ "name": "redis_versions",
278
+ "gated": false
279
+ },
280
+ {
281
+ "name": "redis_specs",
282
+ "gated": false
283
+ },
284
+ {
285
+ "name": "redis_create",
286
+ "gated": true
287
+ },
288
+ {
289
+ "name": "redis_delete",
290
+ "gated": true
291
+ },
292
+ {
293
+ "name": "redis_operation",
294
+ "gated": false
295
+ },
296
+ {
297
+ "name": "pg_databases",
298
+ "gated": false
299
+ },
300
+ {
301
+ "name": "pg_db_create",
302
+ "gated": true
303
+ },
304
+ {
305
+ "name": "pg_db_delete",
306
+ "gated": true
307
+ },
308
+ {
309
+ "name": "pg_users",
310
+ "gated": false
311
+ },
312
+ {
313
+ "name": "pg_user_create",
314
+ "gated": true
315
+ },
316
+ {
317
+ "name": "pg_user_delete",
318
+ "gated": true
319
+ },
320
+ {
321
+ "name": "pg_backups",
322
+ "gated": false
323
+ },
324
+ {
325
+ "name": "pg_backup_create",
326
+ "gated": true
327
+ },
328
+ {
329
+ "name": "lb_list",
330
+ "gated": false
331
+ },
332
+ {
333
+ "name": "lb_get",
334
+ "gated": false
335
+ },
336
+ {
337
+ "name": "lb_operation",
338
+ "gated": false
339
+ },
340
+ {
341
+ "name": "tg_list",
342
+ "gated": false
343
+ },
344
+ {
345
+ "name": "tg_get",
346
+ "gated": false
347
+ },
348
+ {
349
+ "name": "tg_create",
350
+ "gated": true
351
+ },
352
+ {
353
+ "name": "tg_delete",
354
+ "gated": true
355
+ },
356
+ {
357
+ "name": "lb_create",
358
+ "gated": true
359
+ },
360
+ {
361
+ "name": "lb_delete",
362
+ "gated": true
363
+ },
364
+ {
365
+ "name": "vpc_list",
366
+ "gated": false
367
+ },
368
+ {
369
+ "name": "vpc_get",
370
+ "gated": false
371
+ },
372
+ {
373
+ "name": "vpc_create",
374
+ "gated": true
375
+ },
376
+ {
377
+ "name": "vpc_delete",
378
+ "gated": true
379
+ },
380
+ {
381
+ "name": "vpc_operation",
382
+ "gated": false
383
+ },
384
+ {
385
+ "name": "vpc_routes",
386
+ "gated": false
387
+ },
388
+ {
389
+ "name": "vpc_route_create",
390
+ "gated": true
391
+ },
392
+ {
393
+ "name": "vpc_route_delete",
394
+ "gated": true
395
+ },
396
+ {
397
+ "name": "dns_zones",
398
+ "gated": false
399
+ },
400
+ {
401
+ "name": "dns_zone_get",
402
+ "gated": false
403
+ },
404
+ {
405
+ "name": "dns_zone_create",
406
+ "gated": true
407
+ },
408
+ {
409
+ "name": "dns_zone_delete",
410
+ "gated": true
411
+ },
412
+ {
413
+ "name": "dns_operation",
414
+ "gated": false
415
+ },
416
+ {
417
+ "name": "dns_records",
418
+ "gated": false
419
+ },
420
+ {
421
+ "name": "dns_record_get",
422
+ "gated": false
423
+ },
424
+ {
425
+ "name": "dns_record_create",
426
+ "gated": true
427
+ },
428
+ {
429
+ "name": "dns_record_delete",
430
+ "gated": true
431
+ },
432
+ {
433
+ "name": "secret_list",
434
+ "gated": false
435
+ },
436
+ {
437
+ "name": "secret_get",
438
+ "gated": false
439
+ },
440
+ {
441
+ "name": "secret_value",
442
+ "gated": false
443
+ },
444
+ {
445
+ "name": "secret_create",
446
+ "gated": true
447
+ },
448
+ {
449
+ "name": "secret_add_version",
450
+ "gated": true
451
+ },
452
+ {
453
+ "name": "secret_delete",
454
+ "gated": true
455
+ },
456
+ {
457
+ "name": "ar_list",
458
+ "gated": false
459
+ },
460
+ {
461
+ "name": "ar_get",
462
+ "gated": false
463
+ },
464
+ {
465
+ "name": "ar_create",
466
+ "gated": true
467
+ },
468
+ {
469
+ "name": "ar_delete",
470
+ "gated": true
471
+ },
472
+ {
473
+ "name": "ar_operation",
474
+ "gated": false
475
+ },
476
+ {
477
+ "name": "billing_balance",
478
+ "gated": false
479
+ },
480
+ {
481
+ "name": "billing_consumption",
482
+ "gated": false
483
+ },
484
+ {
485
+ "name": "billing_finops",
486
+ "gated": false
487
+ },
488
+ {
489
+ "name": "metrics_history",
490
+ "gated": false
491
+ },
492
+ {
493
+ "name": "metrics_scrape",
494
+ "gated": false
495
+ },
496
+ {
497
+ "name": "audit_events",
498
+ "gated": false
499
+ },
500
+ {
501
+ "name": "cert_list",
502
+ "gated": false
503
+ },
504
+ {
505
+ "name": "cert_get",
506
+ "gated": false
507
+ },
508
+ {
509
+ "name": "cert_issue_le",
510
+ "gated": false
511
+ },
512
+ {
513
+ "name": "cert_import",
514
+ "gated": false
515
+ },
516
+ {
517
+ "name": "cert_renew",
518
+ "gated": false
519
+ },
520
+ {
521
+ "name": "cert_delete",
522
+ "gated": true
523
+ },
524
+ {
525
+ "name": "cert_usage",
526
+ "gated": false
527
+ },
528
+ {
529
+ "name": "cert_versions",
530
+ "gated": false
531
+ },
532
+ {
533
+ "name": "cert_private_key",
534
+ "gated": true
535
+ },
536
+ {
537
+ "name": "cert_operation",
538
+ "gated": false
539
+ },
540
+ {
541
+ "name": "s3_buckets",
542
+ "gated": false
543
+ },
544
+ {
545
+ "name": "s3_ls",
546
+ "gated": false
547
+ },
548
+ {
549
+ "name": "s3_get",
550
+ "gated": false
551
+ },
552
+ {
553
+ "name": "s3_put",
554
+ "gated": false
555
+ },
556
+ {
557
+ "name": "s3_rm",
558
+ "gated": true
559
+ },
560
+ {
561
+ "name": "s3_bucket_create",
562
+ "gated": false
563
+ },
564
+ {
565
+ "name": "s3_bucket_delete",
566
+ "gated": true
567
+ },
568
+ {
569
+ "name": "stack_plan",
570
+ "gated": false
571
+ },
572
+ {
573
+ "name": "stack_apply",
574
+ "gated": true
575
+ },
576
+ {
577
+ "name": "stack_status",
578
+ "gated": false
579
+ },
580
+ {
581
+ "name": "stack_destroy",
582
+ "gated": true
583
+ }
584
+ ]
585
+ }
@@ -0,0 +1,77 @@
1
+ # Local testing — @dzhechkov/cloudru-hub (no publish, no licence needed)
2
+
3
+ The launcher and everything around it run TODAY against a locally present engine build.
4
+ Nothing here publishes anything; the ADR-001 hold stays untouched.
5
+
6
+ ## 1. Point the launcher at an engine binary
7
+
8
+ Any of the three, in this precedence order:
9
+
10
+ ```bash
11
+ # a) environment variable (simplest — what the self-test proof below uses)
12
+ export CLOUDRU_VM_BIN=/path/to/hermes-engine-main/engine-build/cloudru-vm
13
+
14
+ # b) persistent config
15
+ mkdir -p ~/.cloudru-hub
16
+ cat > ~/.cloudru-hub/config.json <<'EOF'
17
+ { "enginePath": "/path/to/hermes-engine-main/engine-build/cloudru-vm" }
18
+ EOF
19
+
20
+ # c) (post-grant only) the platform package @dzhechkov/cloudru-vm-linux-x64
21
+ ```
22
+
23
+ The pinned baseline archive is
24
+ `features/hermes-claude-adaptation/evidence/hermes-engine-src-20260718.tgz` (sha256 in
25
+ `evidence/ENGINE-BASELINE.json`); the matching prebuilt binary identifies itself as
26
+ `cloudru-vm 0.2.3-20260718`, sha256
27
+ `59f83fc0678b95146ca539764d0c805bd2514b8588f198c1e835b26e54c05124` — the launcher
28
+ verifies the resolved binary against exactly this pin and says so.
29
+
30
+ ## 2. Self-test (end-to-end, no credentials required)
31
+
32
+ ```bash
33
+ cd packages/@dzhechkov/cloudru-hub
34
+ node bin/cloudru-hub.js self-test
35
+ ```
36
+
37
+ Expected output (MEASURED — live run on this server, 2026-08-10, baseline binary):
38
+
39
+ ```
40
+ ✓ resolve: …/engine-build/cloudru-vm (source: env)
41
+ ✓ sha256: 59f83fc0678b95146ca539764d0c805bd2514b8588f198c1e835b26e54c05124 — MATCHES pinned baseline
42
+ ✓ engine-version: cloudru-vm 0.2.3-20260718
43
+ ✓ tools-list: 144 tools live (snapshot: 144)
44
+ ✓ classification-coverage: every live tool is classified (144 golden entries)
45
+ self-test: ALL GREEN
46
+ ```
47
+
48
+ `tools/list` needs no Cloud.ru credentials; real tool calls do (env
49
+ `CLOUDRU_KEY_ID`/`CLOUDRU_SECRET`/`CLOUDRU_PROJECT_ID`, see the engine's own docs).
50
+
51
+ ## 3. Optional: `npm link` for a global `cloudru-hub`
52
+
53
+ ```bash
54
+ cd packages/@dzhechkov/cloudru-hub && npm link # linking is not publishing
55
+ cloudru-hub resolve
56
+ ```
57
+
58
+ ## 4. Wire it into a Claude Code project
59
+
60
+ ```bash
61
+ node bin/cloudru-hub.js install --target claude-code --dir /path/to/project
62
+ ```
63
+
64
+ This merges (never clobbers) `.mcp.json` (server `cloudru-vm` → the local launcher),
65
+ `.claude/settings.json` (the ADR-004 permission brake: ask on every mutating tool, deny
66
+ on the secret readers, allow on read-only recon; both `mcp__cloudru-vm__`/`mcp__cloudru_vm__`
67
+ spellings until the prefix is live-probed) and copies the PreToolUse veto hook — then
68
+ RUNS the forbidden-command fixtures through the emitted hook and refuses to claim
69
+ success unless the veto executes. Finish with the manual probe it prints: in a fresh
70
+ Claude Code session, call `mcp__cloudru-vm__deploy` and confirm a permission prompt
71
+ appears; note which prefix spelling the runtime used.
72
+
73
+ ## 5. Testing from another server AFTER the grant (`npm install` path)
74
+
75
+ Blocked until ADR-001 clears — see README "Post-grant publish checklist". Until then,
76
+ another server can test by copying this package directory (or `npm pack` + install the
77
+ tarball) plus an engine binary, then steps 1–4 exactly as above.
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@dzhechkov/cloudru-hub",
3
+ "version": "0.1.4",
4
+ "licenseHold": {
5
+ "adr": "features/hermes-claude-adaptation/03_adr/001-licence-and-provenance-precondition.md",
6
+ "note": "SATISFIED hold (ADR-001 AM-2, grant recorded 2026-08-12 — see grant-record-2026-08-12.md). The field deliberately STAYS: the dz guard `licence-hold` rule passes a satisfied hold with the trigger in place and keeps verifying LICENSE (no PENDING placeholder, Grant-Confirmation URL), THIRD_PARTY_NOTICES and the SPDX license field on every publish. test/pack-holds.test.mjs goes RED if this field is dropped or the LICENSE grant record is degraded."
7
+ },
8
+ "description": "Unofficial Cloud.ru Evolution launcher for Claude Code and harness-cli targets: thin JS launcher for the cloudru-vm MCP engine (144 tools), per-target installers with a deterministic paid-step brake (permission ask/deny + PreToolUse veto hooks), and skill dialect compiler. The engine binary is resolved at RUNTIME, never bundled. NOT affiliated with Cloud.ru.",
9
+ "main": "src/cli.js",
10
+ "bin": {
11
+ "cloudru-hub": "./bin/cloudru-hub.js"
12
+ },
13
+ "files": [
14
+ "bin/",
15
+ "src/",
16
+ "templates/",
17
+ "data/",
18
+ "docs/",
19
+ "test/",
20
+ "README.md",
21
+ "CHANGELOG.md",
22
+ "LICENSE",
23
+ "THIRD_PARTY_NOTICES.md",
24
+ ".dz-manifest.json",
25
+ "sbom.json"
26
+ ],
27
+ "cloudruHub": {
28
+ "binaryHashes": {
29
+ "linux-x64": "59f83fc0678b95146ca539764d0c805bd2514b8588f198c1e835b26e54c05124"
30
+ },
31
+ "engineVersion": "cloudru-vm 0.2.3-20260718",
32
+ "platformPackages": {
33
+ "linux-x64": "@dzhechkov/cloudru-vm-linux-x64"
34
+ }
35
+ },
36
+ "keywords": [
37
+ "cloudru",
38
+ "cloud-ru",
39
+ "evolution",
40
+ "mcp",
41
+ "claude",
42
+ "claude-code",
43
+ "deploy",
44
+ "vps",
45
+ "unofficial"
46
+ ],
47
+ "author": "dzhechko",
48
+ "license": "MIT",
49
+ "engines": {
50
+ "node": ">=18.0.0"
51
+ },
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "https://github.com/djd1m/dz-harness-hub.git",
55
+ "directory": "packages/@dzhechkov/cloudru-hub"
56
+ },
57
+ "homepage": "https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/cloudru-hub#readme",
58
+ "bugs": {
59
+ "url": "https://github.com/djd1m/dz-harness-hub/issues"
60
+ },
61
+ "publishConfig": {
62
+ "access": "public"
63
+ },
64
+ "scripts": {
65
+ "test": "node --test 'test/*.test.mjs'"
66
+ }
67
+ }