@calltelemetry/ct-lab-mcp 0.8.97 → 0.8.99
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/README.md +22 -0
- package/assets/stig/SHA256SUMS +18 -0
- package/assets/stig/files/ct-luks-firstboot.service +13 -0
- package/assets/stig/files/ct-luks-firstboot.sh +35 -0
- package/assets/stig/guest/keyhash.sh +4 -0
- package/assets/stig/guest/read-recovery.sh +2 -0
- package/assets/stig/guest/scan-disa.sh +17 -0
- package/assets/stig/guest/scan.sh +22 -0
- package/assets/stig/guest/shred-recovery.sh +2 -0
- package/assets/stig/guest/test-recovery.sh +3 -0
- package/assets/stig/guest/trim.sh +3 -0
- package/assets/stig/guest/verify-root.sh +9 -0
- package/assets/stig/guest/verify-user.sh +9 -0
- package/assets/stig/ks.cfg.pkrtpl +95 -0
- package/assets/stig/scripts/assess.sh +39 -0
- package/assets/stig/scripts/errata.sh +19 -0
- package/assets/stig/scripts/remediate.sh +127 -0
- package/assets/stig/scripts/seal.sh +46 -0
- package/assets/stig/tailoring.xml +16 -0
- package/assets/stig/template.pkr.hcl +252 -0
- package/dist/src/credentials/index.d.ts +1 -0
- package/dist/src/credentials/index.d.ts.map +1 -1
- package/dist/src/credentials/index.js +1 -0
- package/dist/src/credentials/index.js.map +1 -1
- package/dist/src/credentials/remediation.d.ts +33 -0
- package/dist/src/credentials/remediation.d.ts.map +1 -0
- package/dist/src/credentials/remediation.js +105 -0
- package/dist/src/credentials/remediation.js.map +1 -0
- package/dist/src/generated-version.d.ts +1 -1
- package/dist/src/generated-version.js +1 -1
- package/dist/src/stig/live.d.ts +116 -0
- package/dist/src/stig/live.d.ts.map +1 -0
- package/dist/src/stig/live.js +339 -0
- package/dist/src/stig/live.js.map +1 -0
- package/dist/src/stig/model.d.ts +160 -0
- package/dist/src/stig/model.d.ts.map +1 -0
- package/dist/src/stig/model.js +384 -0
- package/dist/src/stig/model.js.map +1 -0
- package/dist/src/stig/ports.d.ts +149 -0
- package/dist/src/stig/ports.d.ts.map +1 -0
- package/dist/src/stig/ports.js +7 -0
- package/dist/src/stig/ports.js.map +1 -0
- package/dist/src/stig/receipt.d.ts +35 -0
- package/dist/src/stig/receipt.d.ts.map +1 -0
- package/dist/src/stig/receipt.js +112 -0
- package/dist/src/stig/receipt.js.map +1 -0
- package/dist/src/stig/runner.d.ts +109 -0
- package/dist/src/stig/runner.d.ts.map +1 -0
- package/dist/src/stig/runner.js +471 -0
- package/dist/src/stig/runner.js.map +1 -0
- package/dist/src/tools/appliance-claim-spec-schema.v1.json +1 -1
- package/dist/src/tools/appliance-claim-tools.d.ts +10 -4
- package/dist/src/tools/appliance-claim-tools.d.ts.map +1 -1
- package/dist/src/tools/appliance-claim-tools.js +10 -2
- package/dist/src/tools/appliance-claim-tools.js.map +1 -1
- package/dist/src/tools/claim-creation-projection.d.ts +1 -1
- package/dist/src/tools/claim-creation-projection.js +1 -1
- package/dist/src/tools/claim-custody.d.ts +7 -7
- package/dist/src/tools/claimed-import-qcow.d.ts +2 -2
- package/dist/src/tools/credential-status.d.ts.map +1 -1
- package/dist/src/tools/credential-status.js +19 -0
- package/dist/src/tools/credential-status.js.map +1 -1
- package/dist/src/tools/host-maintenance-shutdown.d.ts +4 -4
- package/dist/src/tools/host-migrate-vm.d.ts +4 -4
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +6 -1
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/purge-slots.d.ts +1 -1
- package/dist/src/tools/sandbox-tools.d.ts +8 -8
- package/dist/src/tools/stig-tools.d.ts +47 -0
- package/dist/src/tools/stig-tools.d.ts.map +1 -0
- package/dist/src/tools/stig-tools.js +125 -0
- package/dist/src/tools/stig-tools.js.map +1 -0
- package/dist/src/tools/vm-action.d.ts +2 -2
- package/package.json +2 -1
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
packer {
|
|
2
|
+
required_version = "= 1.16.0"
|
|
3
|
+
required_plugins {
|
|
4
|
+
proxmox = {
|
|
5
|
+
version = "= 1.2.4"
|
|
6
|
+
source = "github.com/hashicorp/proxmox"
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
variable "proxmox_url" { type = string }
|
|
12
|
+
variable "proxmox_username" { type = string }
|
|
13
|
+
variable "proxmox_token" {
|
|
14
|
+
type = string
|
|
15
|
+
sensitive = true
|
|
16
|
+
}
|
|
17
|
+
variable "proxmox_node" {
|
|
18
|
+
type = string
|
|
19
|
+
default = "minis"
|
|
20
|
+
}
|
|
21
|
+
variable "vm_id" { type = number }
|
|
22
|
+
variable "template_name" { type = string }
|
|
23
|
+
variable "disk_storage_pool" {
|
|
24
|
+
type = string
|
|
25
|
+
default = "local-lvm"
|
|
26
|
+
}
|
|
27
|
+
variable "bridge" {
|
|
28
|
+
type = string
|
|
29
|
+
default = "vmbr0"
|
|
30
|
+
}
|
|
31
|
+
variable "vlan_tag" {
|
|
32
|
+
type = string
|
|
33
|
+
default = "" # untagged lab network: VLAN126 has no internet egress/DNS, and the build needs RHSM errata
|
|
34
|
+
}
|
|
35
|
+
variable "disk_size" {
|
|
36
|
+
type = string
|
|
37
|
+
default = "128G"
|
|
38
|
+
}
|
|
39
|
+
variable "vcpus" {
|
|
40
|
+
type = number
|
|
41
|
+
default = 4
|
|
42
|
+
}
|
|
43
|
+
variable "memory_mb" {
|
|
44
|
+
type = number
|
|
45
|
+
default = 8192
|
|
46
|
+
}
|
|
47
|
+
variable "iso_file" {
|
|
48
|
+
type = string
|
|
49
|
+
default = "synology-cisco-isos:iso/rhel-8.10-x86_64-dvd.iso"
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
variable "ssh_username" {
|
|
53
|
+
type = string
|
|
54
|
+
default = "ctbuild"
|
|
55
|
+
}
|
|
56
|
+
variable "ssh_private_key_file" { type = string }
|
|
57
|
+
variable "ssh_public_key" { type = string }
|
|
58
|
+
variable "build_password" {
|
|
59
|
+
type = string
|
|
60
|
+
sensitive = true
|
|
61
|
+
}
|
|
62
|
+
variable "build_password_hash" {
|
|
63
|
+
type = string
|
|
64
|
+
sensitive = true
|
|
65
|
+
}
|
|
66
|
+
variable "grub_pbkdf2" {
|
|
67
|
+
type = string
|
|
68
|
+
sensitive = true
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
variable "luks_bootstrap" {
|
|
72
|
+
type = string
|
|
73
|
+
sensitive = true
|
|
74
|
+
}
|
|
75
|
+
variable "rhsm_org" {
|
|
76
|
+
type = string
|
|
77
|
+
sensitive = true
|
|
78
|
+
}
|
|
79
|
+
variable "rhsm_key" {
|
|
80
|
+
type = string
|
|
81
|
+
sensitive = true
|
|
82
|
+
}
|
|
83
|
+
variable "dns_servers" {
|
|
84
|
+
type = string
|
|
85
|
+
default = "192.168.126.1,192.168.68.125"
|
|
86
|
+
}
|
|
87
|
+
variable "ntp_servers" {
|
|
88
|
+
type = string
|
|
89
|
+
default = "0.rhel.pool.ntp.org,1.rhel.pool.ntp.org"
|
|
90
|
+
}
|
|
91
|
+
variable "tailoring_file" { type = string }
|
|
92
|
+
|
|
93
|
+
variable "ssg_datastream" { type = string }
|
|
94
|
+
variable "ssg_datastream_sha256" {
|
|
95
|
+
type = string
|
|
96
|
+
default = "82592d3cff74a82ce652a65ba67cd755cf57550269798d4c449c2069417c1028"
|
|
97
|
+
}
|
|
98
|
+
variable "evidence_dir" { type = string }
|
|
99
|
+
|
|
100
|
+
locals {
|
|
101
|
+
sudo = "echo '${var.build_password}' | sudo -S -p '' env {{ .Vars }} bash '{{ .Path }}'"
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
source "proxmox-iso" "rhel810_stig" {
|
|
105
|
+
proxmox_url = var.proxmox_url
|
|
106
|
+
username = var.proxmox_username
|
|
107
|
+
token = var.proxmox_token
|
|
108
|
+
insecure_skip_tls_verify = true # lab self-signed PVE certificate
|
|
109
|
+
node = var.proxmox_node
|
|
110
|
+
vm_id = var.vm_id
|
|
111
|
+
vm_name = var.template_name
|
|
112
|
+
template_name = var.template_name
|
|
113
|
+
template_description = "RHEL 8.10 DISA STIG template. SSG 0.1.82 / RHEL 8 STIG V2R8. Built ${timestamp()}. LUKS2 PV with template bootstrap key; each clone re-encrypts and binds its own TPM2 at first boot."
|
|
114
|
+
tags = "rhel8-stig-template;ssg-0-1-82;stig-v2r8"
|
|
115
|
+
os = "l26"
|
|
116
|
+
machine = "q35"
|
|
117
|
+
bios = "ovmf"
|
|
118
|
+
cpu_type = "host"
|
|
119
|
+
cores = var.vcpus
|
|
120
|
+
memory = var.memory_mb
|
|
121
|
+
qemu_agent = true
|
|
122
|
+
scsi_controller = "virtio-scsi-single"
|
|
123
|
+
boot = "order=scsi0;ide2;net0"
|
|
124
|
+
onboot = false
|
|
125
|
+
|
|
126
|
+
efi_config {
|
|
127
|
+
efi_storage_pool = var.disk_storage_pool
|
|
128
|
+
efi_type = "4m"
|
|
129
|
+
pre_enrolled_keys = true
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
boot_iso {
|
|
133
|
+
type = "ide"
|
|
134
|
+
index = "2"
|
|
135
|
+
iso_file = var.iso_file
|
|
136
|
+
iso_checksum = "sha256:9b3c8e31bc2cdd2de9cf96abb3726347f5840ff3b176270647b3e66639af291b"
|
|
137
|
+
unmount = true
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
additional_iso_files {
|
|
141
|
+
type = "ide"
|
|
142
|
+
index = "3"
|
|
143
|
+
iso_storage_pool = "local"
|
|
144
|
+
cd_label = "OEMDRV"
|
|
145
|
+
cd_content = {
|
|
146
|
+
"ks.cfg" = templatefile("${path.root}/ks.cfg.pkrtpl", {
|
|
147
|
+
hostname = var.template_name
|
|
148
|
+
ssh_username = var.ssh_username
|
|
149
|
+
ssh_public_key = trimspace(var.ssh_public_key)
|
|
150
|
+
build_password_hash = var.build_password_hash
|
|
151
|
+
grub_pbkdf2 = var.grub_pbkdf2
|
|
152
|
+
luks_bootstrap = var.luks_bootstrap
|
|
153
|
+
})
|
|
154
|
+
}
|
|
155
|
+
unmount = true
|
|
156
|
+
keep_cdrom_device = false
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
disks {
|
|
160
|
+
type = "scsi"
|
|
161
|
+
storage_pool = var.disk_storage_pool
|
|
162
|
+
disk_size = var.disk_size
|
|
163
|
+
discard = true
|
|
164
|
+
io_thread = true
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
network_adapters {
|
|
168
|
+
model = "virtio"
|
|
169
|
+
bridge = var.bridge
|
|
170
|
+
vlan_tag = var.vlan_tag
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
cloud_init = true
|
|
174
|
+
cloud_init_storage_pool = var.disk_storage_pool
|
|
175
|
+
|
|
176
|
+
boot_wait = "3m15s" # OVMF reaches the DVD GRUB menu ~3m after power-on on minis
|
|
177
|
+
boot_command = [
|
|
178
|
+
"<up><wait>e<wait><down><down><end>",
|
|
179
|
+
" fips=1 inst.text inst.ks=hd:LABEL=OEMDRV:/ks.cfg",
|
|
180
|
+
"<leftCtrlOn>x<leftCtrlOff>",
|
|
181
|
+
]
|
|
182
|
+
|
|
183
|
+
communicator = "ssh"
|
|
184
|
+
ssh_username = var.ssh_username
|
|
185
|
+
ssh_private_key_file = var.ssh_private_key_file
|
|
186
|
+
ssh_timeout = "75m"
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
build {
|
|
190
|
+
name = "rhel810-stig-template"
|
|
191
|
+
sources = ["source.proxmox-iso.rhel810_stig"]
|
|
192
|
+
|
|
193
|
+
provisioner "file" {
|
|
194
|
+
source = var.ssg_datastream
|
|
195
|
+
destination = "/home/${var.ssh_username}/ssg-rhel8-ds.xml"
|
|
196
|
+
}
|
|
197
|
+
provisioner "file" {
|
|
198
|
+
source = var.tailoring_file
|
|
199
|
+
destination = "/home/${var.ssh_username}/tailoring.xml"
|
|
200
|
+
}
|
|
201
|
+
provisioner "file" {
|
|
202
|
+
source = "${path.root}/files"
|
|
203
|
+
destination = "/home/${var.ssh_username}/"
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
# Current errata through RHSM, then reboot into the updated kernel.
|
|
207
|
+
provisioner "shell" {
|
|
208
|
+
execute_command = local.sudo
|
|
209
|
+
environment_vars = [
|
|
210
|
+
"RHSM_ORG=${var.rhsm_org}",
|
|
211
|
+
"RHSM_KEY=${var.rhsm_key}",
|
|
212
|
+
]
|
|
213
|
+
scripts = ["${path.root}/scripts/errata.sh"]
|
|
214
|
+
expect_disconnect = true
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
# Organization settings + pinned SSG STIG remediation, then reboot.
|
|
218
|
+
provisioner "shell" {
|
|
219
|
+
pause_before = "90s"
|
|
220
|
+
execute_command = local.sudo
|
|
221
|
+
environment_vars = [
|
|
222
|
+
"SSG_DATASTREAM=/home/${var.ssh_username}/ssg-rhel8-ds.xml",
|
|
223
|
+
"SSG_DATASTREAM_SHA256=${var.ssg_datastream_sha256}",
|
|
224
|
+
"TAILORING=/home/${var.ssh_username}/tailoring.xml",
|
|
225
|
+
"FILES_DIR=/home/${var.ssh_username}/files",
|
|
226
|
+
"BUILD_USER=${var.ssh_username}",
|
|
227
|
+
"DNS_SERVERS=${var.dns_servers}",
|
|
228
|
+
"NTP_SERVERS=${var.ntp_servers}",
|
|
229
|
+
]
|
|
230
|
+
scripts = ["${path.root}/scripts/remediate.sh"]
|
|
231
|
+
expect_disconnect = true
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
provisioner "shell" {
|
|
235
|
+
pause_before = "90s"
|
|
236
|
+
execute_command = local.sudo
|
|
237
|
+
environment_vars = ["BUILD_USER=${var.ssh_username}"]
|
|
238
|
+
scripts = ["${path.root}/scripts/assess.sh"]
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
provisioner "file" {
|
|
242
|
+
direction = "download"
|
|
243
|
+
source = "/home/${var.ssh_username}/stig-report/"
|
|
244
|
+
destination = "${var.evidence_dir}/"
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
provisioner "shell" {
|
|
248
|
+
execute_command = local.sudo
|
|
249
|
+
environment_vars = ["BUILD_USER=${var.ssh_username}"]
|
|
250
|
+
scripts = ["${path.root}/scripts/seal.sh"]
|
|
251
|
+
}
|
|
252
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/credentials/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/credentials/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/credentials/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/credentials/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Actionable credential remediation for credential_status and the
|
|
3
|
+
* CREDENTIALS_UNAVAILABLE gate.
|
|
4
|
+
*
|
|
5
|
+
* The resolver's own `remediation` string is generic (and leads with mock
|
|
6
|
+
* mode). In a governed local-stdio install the failure is almost always the
|
|
7
|
+
* same: the harness that spawned this process never injected the lab
|
|
8
|
+
* variables, and the governed runtime wrapper strips DOPPLER_TOKEN so the
|
|
9
|
+
* Tier-2 Doppler path is unreachable. This module inspects which variable
|
|
10
|
+
* groups the process actually received (names only, never values) and says
|
|
11
|
+
* exactly what to change.
|
|
12
|
+
*/
|
|
13
|
+
import type { CredentialResolutionError } from "./errors.js";
|
|
14
|
+
export interface CredentialGroupStatus {
|
|
15
|
+
group: "proxmox-lab" | "proxmox-mini" | "appliance-ssh";
|
|
16
|
+
present: boolean;
|
|
17
|
+
/** Variable names that satisfy this group (name-only; never values). */
|
|
18
|
+
needs: string;
|
|
19
|
+
}
|
|
20
|
+
export interface CredentialRemediation {
|
|
21
|
+
/** One sentence naming the concrete gap; safe to embed in an error. */
|
|
22
|
+
headline: string;
|
|
23
|
+
/** Ordered, copy-pasteable steps. Never contains a secret value. */
|
|
24
|
+
steps: string[];
|
|
25
|
+
/** Which variable groups the aggregate resolver found in this process. */
|
|
26
|
+
inspected: CredentialGroupStatus[];
|
|
27
|
+
dopplerTokenInProcess: boolean;
|
|
28
|
+
}
|
|
29
|
+
type Env = Record<string, string | undefined>;
|
|
30
|
+
export declare function inspectCredentialEnvironment(env?: Env): CredentialGroupStatus[];
|
|
31
|
+
export declare function buildCredentialRemediation(error: Pick<CredentialResolutionError, "reason" | "missing" | "message"> | undefined, env?: Env): CredentialRemediation;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=remediation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../../../src/credentials/remediation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,eAAe,CAAC;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,0EAA0E;IAC1E,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAe9C,wBAAgB,4BAA4B,CAAC,GAAG,GAAE,GAAiB,GAAG,qBAAqB,EAAE,CAqB5F;AAcD,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS,EACpF,GAAG,GAAE,GAAiB,GACrB,qBAAqB,CAqEvB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Actionable credential remediation for credential_status and the
|
|
3
|
+
* CREDENTIALS_UNAVAILABLE gate.
|
|
4
|
+
*
|
|
5
|
+
* The resolver's own `remediation` string is generic (and leads with mock
|
|
6
|
+
* mode). In a governed local-stdio install the failure is almost always the
|
|
7
|
+
* same: the harness that spawned this process never injected the lab
|
|
8
|
+
* variables, and the governed runtime wrapper strips DOPPLER_TOKEN so the
|
|
9
|
+
* Tier-2 Doppler path is unreachable. This module inspects which variable
|
|
10
|
+
* groups the process actually received (names only, never values) and says
|
|
11
|
+
* exactly what to change.
|
|
12
|
+
*/
|
|
13
|
+
const set = (env, key) => typeof env[key] === "string" && env[key].length > 0;
|
|
14
|
+
const anySet = (env, keys) => keys.some((key) => set(env, key));
|
|
15
|
+
function proxmoxGroupPresent(env, prefix) {
|
|
16
|
+
const endpoint = anySet(env, [`${prefix}URL`, `${prefix}BASE_URL`, `${prefix}HOST`, `${prefix}IP`]);
|
|
17
|
+
const auth = set(env, `${prefix}API_TOKEN`) ||
|
|
18
|
+
(anySet(env, [`${prefix}TOKEN_ID`, `${prefix}API_TOKEN_ID`]) &&
|
|
19
|
+
anySet(env, [`${prefix}TOKEN_SECRET`, `${prefix}API_TOKEN_SECRET`])) ||
|
|
20
|
+
(anySet(env, [`${prefix}USERNAME`, `${prefix}USER`]) && anySet(env, [`${prefix}PASSWORD`, `${prefix}PASS`]));
|
|
21
|
+
return endpoint && auth;
|
|
22
|
+
}
|
|
23
|
+
export function inspectCredentialEnvironment(env = process.env) {
|
|
24
|
+
return [
|
|
25
|
+
{
|
|
26
|
+
group: "proxmox-lab",
|
|
27
|
+
present: proxmoxGroupPresent(env, "LAB_PROXMOX_"),
|
|
28
|
+
needs: "LAB_PROXMOX_URL (or _HOST) + LAB_PROXMOX_API_TOKEN (or _USERNAME/_PASSWORD)",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
group: "proxmox-mini",
|
|
32
|
+
present: proxmoxGroupPresent(env, "LAB_PROXMOX_MINIS_") || proxmoxGroupPresent(env, "LAB_PROXMOX_MINI_"),
|
|
33
|
+
needs: "LAB_PROXMOX_MINIS_URL (or _HOST) + LAB_PROXMOX_MINIS_API_TOKEN (or _USERNAME/_PASSWORD)",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
group: "appliance-ssh",
|
|
37
|
+
present: anySet(env, ["LAB_VM_CREDENTIALS", "VM_CREDENTIALS"]) ||
|
|
38
|
+
(anySet(env, ["LAB_VM_CREDENTIALS_USERNAME", "LAB_VM_CREDENTIALS_USER", "LAB_VM_USER", "VM_USER"]) &&
|
|
39
|
+
anySet(env, ["LAB_VM_CREDENTIALS_PASSWORD", "LAB_VM_CREDENTIALS_PASS", "LAB_VM_PASS", "VM_PASS"])),
|
|
40
|
+
needs: "LAB_VM_CREDENTIALS (JSON or user:pass) or LAB_VM_CREDENTIALS_USERNAME + LAB_VM_CREDENTIALS_PASSWORD",
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
const CANONICAL_ALTERNATIVE = "Reads that do not need this aggregate bundle: list_hosts and list_inventory (target-scoped credentials via the " +
|
|
45
|
+
"canonical lab-inventory CLI), the ApplianceClaim tools, and `lab-inventory` itself. Legacy tools such as " +
|
|
46
|
+
"list_slots stay blocked with CREDENTIALS_UNAVAILABLE until the bundle resolves; do not inject unrelated hosts' " +
|
|
47
|
+
"credentials just to unblock one VM.";
|
|
48
|
+
const VERIFY_STEP = "Reload the server (manage_mcp_server reload, or restart the harness) and call credential_status again: the " +
|
|
49
|
+
"tier should read direct_env or doppler_api and the legacy aggregate source resolved. A host listed here as " +
|
|
50
|
+
"reachable is the only evidence the credentials work; mock mode (CT_LAB_MCP_ALLOW_MOCK=1) is for offline tests " +
|
|
51
|
+
"and its results are not evidence.";
|
|
52
|
+
export function buildCredentialRemediation(error, env = process.env) {
|
|
53
|
+
const inspected = inspectCredentialEnvironment(env);
|
|
54
|
+
const missingGroups = inspected.filter((g) => !g.present);
|
|
55
|
+
const dopplerTokenInProcess = set(env, "DOPPLER_TOKEN");
|
|
56
|
+
const reason = error?.reason ?? "no_credentials_found";
|
|
57
|
+
const steps = [];
|
|
58
|
+
const injectSteps = () => [
|
|
59
|
+
"Confirm the source has the values (names only; never print values): " +
|
|
60
|
+
"`doppler secrets --only-names --project ai-workspace --config dev | grep -E 'LAB_PROXMOX|LAB_VM_CREDENTIALS'`.",
|
|
61
|
+
"Inject them into this process from the parent, because it only sees the environment its harness gave it " +
|
|
62
|
+
"(DOPPLER_PROJECT/DOPPLER_CONFIG are not credentials). Either add `env` refs to the ct-lab entry of the " +
|
|
63
|
+
"harness MCP config, e.g. `\"LAB_PROXMOX_URL\": \"doppler://ai-workspace/dev/LAB_PROXMOX_URL\"` for each " +
|
|
64
|
+
"variable below, which the governed runtime wrapper (tools/mcp-runtime-exec.mjs) resolves through the " +
|
|
65
|
+
"Doppler CLI without a login prompt, or start the harness itself under " +
|
|
66
|
+
"`doppler run --project ai-workspace --config dev --`.",
|
|
67
|
+
dopplerTokenInProcess
|
|
68
|
+
? "DOPPLER_TOKEN is present in this process, so the Tier-2 Doppler API path was attempted; check the " +
|
|
69
|
+
"`doppler_unreachable` / `partial_credentials` detail above instead of the injection steps."
|
|
70
|
+
: "A DOPPLER_TOKEN exported in the harness is not enough: the governed runtime wrapper strips it before " +
|
|
71
|
+
"spawning this server (by design), so the Doppler API tier is unreachable here. Use the env refs above.",
|
|
72
|
+
];
|
|
73
|
+
if (reason === "doppler_unreachable") {
|
|
74
|
+
steps.push("The Doppler API tier was attempted and failed. Check that DOPPLER_TOKEN is a valid config-scoped token for " +
|
|
75
|
+
"DOPPLER_PROJECT/DOPPLER_CONFIG (not expired or revoked) and that api.doppler.com is reachable.", "The fetch is bounded by CT_LAB_MCP_RESOLVE_TIMEOUT_MS (default 8000, 250-30000); raise it only for a slow link.", "Or bypass Doppler by injecting the variables directly (see the groups below).");
|
|
76
|
+
}
|
|
77
|
+
else if (reason === "partial_credentials") {
|
|
78
|
+
steps.push(`The aggregate resolver found some but not all required groups; still missing: ${(error?.missing.length ? error.missing : missingGroups.map((g) => g.group)).join(", ") || "unknown"}.`, ...injectSteps().slice(1));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
steps.push(...injectSteps());
|
|
82
|
+
}
|
|
83
|
+
if (missingGroups.length > 0) {
|
|
84
|
+
steps.push("Variable groups still missing from this process: " +
|
|
85
|
+
missingGroups.map((g) => `${g.group} (${g.needs})`).join("; ") +
|
|
86
|
+
".");
|
|
87
|
+
}
|
|
88
|
+
if (missingGroups.some((g) => g.group === "appliance-ssh")) {
|
|
89
|
+
steps.push("Note: the aggregate resolver reads one shared appliance login (LAB_VM_CREDENTIALS or the _USERNAME/_PASSWORD " +
|
|
90
|
+
"pair). Per-VM `LAB_VM_CREDENTIALS_<UUID>` secrets are consumed only by the canonical CLI and do not satisfy " +
|
|
91
|
+
"it; if the secret store has no shared entry the aggregate bundle cannot resolve from it.");
|
|
92
|
+
}
|
|
93
|
+
steps.push(CANONICAL_ALTERNATIVE, VERIFY_STEP);
|
|
94
|
+
const groupSummary = missingGroups.length
|
|
95
|
+
? `no ${missingGroups.map((g) => g.group).join(", ")} variables reached this process`
|
|
96
|
+
: "the expected variables are present but did not resolve";
|
|
97
|
+
const headline = reason === "doppler_unreachable"
|
|
98
|
+
? "The Doppler API tier failed; fix the token/connectivity or inject LAB_* variables directly."
|
|
99
|
+
: `Aggregate lab credentials unavailable: ${groupSummary}. Inject LAB_PROXMOX_*, LAB_PROXMOX_MINIS_* and ` +
|
|
100
|
+
"LAB_VM_CREDENTIALS from the parent (doppler:// env refs in the MCP config, or run the harness under " +
|
|
101
|
+
"`doppler run`); credential_status lists the exact steps. list_hosts/list_inventory and claim tools do " +
|
|
102
|
+
"not need this bundle.";
|
|
103
|
+
return { headline, steps, inspected, dopplerTokenInProcess };
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=remediation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remediation.js","sourceRoot":"","sources":["../../../src/credentials/remediation.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Auto-synced package version fallback for non-filesystem runtimes (Cloudflare Workers).
|
|
3
3
|
* Updated automatically during release publication in .github/workflows/publish.yml.
|
|
4
4
|
*/
|
|
5
|
-
export declare const PACKAGE_VERSION = "0.8.
|
|
5
|
+
export declare const PACKAGE_VERSION = "0.8.99";
|
|
6
6
|
//# sourceMappingURL=generated-version.d.ts.map
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Auto-synced package version fallback for non-filesystem runtimes (Cloudflare Workers).
|
|
3
3
|
* Updated automatically during release publication in .github/workflows/publish.yml.
|
|
4
4
|
*/
|
|
5
|
-
export const PACKAGE_VERSION = "0.8.
|
|
5
|
+
export const PACKAGE_VERSION = "0.8.99";
|
|
6
6
|
//# sourceMappingURL=generated-version.js.map
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { BuildMaterial, ClaimPort, ClaimRecord, GuestShell, Materials, PackerPort, PveShell, RunOpts, SecretStore, ShellResult, StigDeps, StigProvider } from "./ports.js";
|
|
2
|
+
/** assets/stig next to dist/src/stig (published) or next to src/stig (dev). */
|
|
3
|
+
export declare function defaultAssetsDir(): string;
|
|
4
|
+
export declare class SshPveShell implements PveShell {
|
|
5
|
+
private readonly host;
|
|
6
|
+
private readonly user;
|
|
7
|
+
constructor(host?: string, user?: string);
|
|
8
|
+
run(script: string, opts?: RunOpts): Promise<ShellResult>;
|
|
9
|
+
}
|
|
10
|
+
export declare class SshGuestShell implements GuestShell {
|
|
11
|
+
private user;
|
|
12
|
+
private keyFile;
|
|
13
|
+
private known;
|
|
14
|
+
private ip;
|
|
15
|
+
configure(cfg: {
|
|
16
|
+
user: string;
|
|
17
|
+
keyFile: string;
|
|
18
|
+
knownHostsFile: string;
|
|
19
|
+
}): void;
|
|
20
|
+
setTarget(ip: string): void;
|
|
21
|
+
private opts;
|
|
22
|
+
private ssh;
|
|
23
|
+
runScript(script: string, o?: {
|
|
24
|
+
sudo?: boolean;
|
|
25
|
+
stdin?: string;
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
}): Promise<ShellResult>;
|
|
28
|
+
waitSsh(hostKey: "accept-new" | "yes", tries: number, intervalMs?: number): Promise<boolean>;
|
|
29
|
+
fileExists(path: string): Promise<boolean>;
|
|
30
|
+
fetchDir(remote: string, localDir: string): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
export declare class DopplerSecrets implements SecretStore {
|
|
33
|
+
private readonly project;
|
|
34
|
+
private readonly config;
|
|
35
|
+
constructor(project?: string, config?: string);
|
|
36
|
+
get(name: string): Promise<string | undefined>;
|
|
37
|
+
set(name: string, value: string): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
export declare class LabClaims implements ClaimPort {
|
|
40
|
+
private readonly ns;
|
|
41
|
+
private text;
|
|
42
|
+
list(): Promise<ClaimRecord[]>;
|
|
43
|
+
get(name: string): Promise<ClaimRecord | null>;
|
|
44
|
+
create(a: {
|
|
45
|
+
name: string;
|
|
46
|
+
vmid: number;
|
|
47
|
+
vmName: string;
|
|
48
|
+
ttlHours: number;
|
|
49
|
+
stig: Record<string, unknown>;
|
|
50
|
+
}): Promise<ClaimRecord>;
|
|
51
|
+
waitReady(name: string): Promise<ClaimRecord>;
|
|
52
|
+
annotate(name: string, annotations: Record<string, string>): Promise<void>;
|
|
53
|
+
renew(name: string, extendHours: number): Promise<{
|
|
54
|
+
ttlHours: number;
|
|
55
|
+
}>;
|
|
56
|
+
pause(name: string, paused: boolean, reason?: string): Promise<void>;
|
|
57
|
+
delete(name: string, expectedUid: string): Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
export declare class PackerCli implements PackerPort {
|
|
60
|
+
private readonly cwd;
|
|
61
|
+
private readonly pluginPath;
|
|
62
|
+
constructor(cwd: string, pluginPath?: string | undefined);
|
|
63
|
+
version(): Promise<string>;
|
|
64
|
+
build(a: {
|
|
65
|
+
vars: Record<string, string>;
|
|
66
|
+
env: Record<string, string>;
|
|
67
|
+
logFile: string;
|
|
68
|
+
}): Promise<number>;
|
|
69
|
+
}
|
|
70
|
+
export declare class NodeMaterials implements Materials {
|
|
71
|
+
private openssl;
|
|
72
|
+
randomAlnum(length: number): string;
|
|
73
|
+
sha512Crypt(plain: string): Promise<string>;
|
|
74
|
+
sshKeypair(dir: string, label: string): Promise<{
|
|
75
|
+
privateKeyFile: string;
|
|
76
|
+
publicKey: string;
|
|
77
|
+
}>;
|
|
78
|
+
buildMaterial(runDir: string, label: string): Promise<BuildMaterial>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Canonical provider: the `lab-inventory stig` verbs (plan, then apply with the plan digest). Secrets travel in 0600
|
|
82
|
+
* files inside a private temp directory that is removed afterwards; argv carries only public values.
|
|
83
|
+
*/
|
|
84
|
+
export declare class CliStigProvider implements StigProvider {
|
|
85
|
+
private readonly cli;
|
|
86
|
+
private readonly exec;
|
|
87
|
+
private readonly tmpRoot;
|
|
88
|
+
constructor(cli: string, exec?: (file: string, args: string[], o?: RunOpts) => Promise<ShellResult>, tmpRoot?: string);
|
|
89
|
+
private call;
|
|
90
|
+
clone(a: {
|
|
91
|
+
operationId: string;
|
|
92
|
+
name: string;
|
|
93
|
+
templateName: string;
|
|
94
|
+
vmid: number;
|
|
95
|
+
claimedVmids: number[];
|
|
96
|
+
sshPublicKey: string;
|
|
97
|
+
passwordHash: string;
|
|
98
|
+
dns: string[];
|
|
99
|
+
}): Promise<{
|
|
100
|
+
vmid: number;
|
|
101
|
+
}>;
|
|
102
|
+
destroyTemplate(a: {
|
|
103
|
+
operationId: string;
|
|
104
|
+
name: string;
|
|
105
|
+
vmid: number;
|
|
106
|
+
}): Promise<void>;
|
|
107
|
+
guestIp(vmid: number): Promise<string>;
|
|
108
|
+
}
|
|
109
|
+
export declare function defaultRunDir(): string;
|
|
110
|
+
/** The lab-inventory CLI path when the canonical bridge is configured (CT_LAB_CANONICAL_CLI). */
|
|
111
|
+
export declare function canonicalCli(env?: NodeJS.ProcessEnv): string | undefined;
|
|
112
|
+
export declare function liveDeps(opts?: {
|
|
113
|
+
baseDir?: string;
|
|
114
|
+
log?: (line: string) => void;
|
|
115
|
+
}): StigDeps;
|
|
116
|
+
//# sourceMappingURL=live.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../../src/stig/live.ts"],"names":[],"mappings":"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"}
|