@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.
- package/.dz-manifest.json +105 -0
- package/CHANGELOG.md +130 -0
- package/LICENSE +67 -0
- package/README.md +131 -0
- package/THIRD_PARTY_NOTICES.md +56 -0
- package/bin/cloudru-hub.js +8 -0
- package/data/dialects.json +73 -0
- package/data/pointer-section.md +22 -0
- package/data/tools-classification.json +732 -0
- package/data/tools-list-snapshot.json +585 -0
- package/docs/LOCAL-TESTING.md +77 -0
- package/package.json +67 -0
- package/sbom.json +253 -0
- package/src/classification.js +66 -0
- package/src/cli.js +174 -0
- package/src/dialects.js +172 -0
- package/src/install.js +252 -0
- package/src/resolve.js +101 -0
- package/templates/.claude/hooks/cloudru-ssh-guard.cjs +80 -0
- package/test/classification.test.mjs +151 -0
- package/test/dialects.test.mjs +314 -0
- package/test/hook.test.mjs +67 -0
- package/test/install.test.mjs +145 -0
- package/test/mutation-registry.json +135 -0
- package/test/pack-holds.test.mjs +96 -0
- package/test/resolve.test.mjs +81 -0
|
@@ -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
|
+
}
|