@calltelemetry/ct-lab-mcp 0.8.98 → 0.8.100
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/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/generated-version.d.ts +1 -1
- package/dist/src/generated-version.d.ts.map +1 -1
- package/dist/src/generated-version.js +1 -1
- package/dist/src/generated-version.js.map +1 -1
- package/dist/src/provenance.d.ts.map +1 -1
- package/dist/src/provenance.js +18 -1
- package/dist/src/provenance.js.map +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/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 +3 -0
- 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
|
+
}
|
|
@@ -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.100";
|
|
6
6
|
//# sourceMappingURL=generated-version.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generated-version.d.ts","sourceRoot":"","sources":["../../src/generated-version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"generated-version.d.ts","sourceRoot":"","sources":["../../src/generated-version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,eAAe,YAAY,CAAC"}
|
|
@@ -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.100";
|
|
6
6
|
//# sourceMappingURL=generated-version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generated-version.js","sourceRoot":"","sources":["../../src/generated-version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,
|
|
1
|
+
{"version":3,"file":"generated-version.js","sourceRoot":"","sources":["../../src/generated-version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,WAAW,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,KAAK,EAAE,QAAQ,CAAC;IAChB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,IAAI,EAAE,OAAO,CAAC;IACd,uDAAuD;IACvD,gBAAgB,EAAE,YAAY,GAAG,SAAS,GAAG,eAAe,GAAG,YAAY,CAAC;CAC7E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CA4B/D;AAED,eAAO,MAAM,eAAe,QAAyB,CAAC;AAEtD,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,0BAA0B,GAAG,SAAS,EACnD,aAAa,EAAE,OAAO,GACrB,cAAc,CAAC,kBAAkB,CAAC,CAKpC;AAED,wBAAgB,eAAe,CAC7B,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,WAAW,CAAC,EAAE,0BAA0B,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GACL,cAAc,CAShB;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,CAEzE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAShD;
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,WAAW,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,KAAK,EAAE,QAAQ,CAAC;IAChB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,IAAI,EAAE,OAAO,CAAC;IACd,uDAAuD;IACvD,gBAAgB,EAAE,YAAY,GAAG,SAAS,GAAG,eAAe,GAAG,YAAY,CAAC;CAC7E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CA4B/D;AAED,eAAO,MAAM,eAAe,QAAyB,CAAC;AAEtD,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,0BAA0B,GAAG,SAAS,EACnD,aAAa,EAAE,OAAO,GACrB,cAAc,CAAC,kBAAkB,CAAC,CAKpC;AAED,wBAAgB,eAAe,CAC7B,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,WAAW,CAAC,EAAE,0BAA0B,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GACL,cAAc,CAShB;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,CAEzE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAShD;AAeD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,cAAc,GACzB,cAAc,CAkBhB"}
|
package/dist/src/provenance.js
CHANGED
|
@@ -96,6 +96,20 @@ export function isJsonText(text) {
|
|
|
96
96
|
return false;
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
|
+
function jsonObjectBody(result) {
|
|
100
|
+
const first = result.content.find((entry) => entry.type === "text" && typeof entry.text === "string");
|
|
101
|
+
if (!first || first.type !== "text")
|
|
102
|
+
return undefined;
|
|
103
|
+
try {
|
|
104
|
+
const parsed = JSON.parse(first.text.trim());
|
|
105
|
+
return parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)
|
|
106
|
+
? parsed
|
|
107
|
+
: undefined;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
99
113
|
/**
|
|
100
114
|
* Stamp provenance onto a tool result. Structured results gain a `provenance`
|
|
101
115
|
* object inside `structuredContent`; human-readable text gains a footer.
|
|
@@ -103,7 +117,10 @@ export function isJsonText(text) {
|
|
|
103
117
|
* and never mutates the original result.
|
|
104
118
|
*/
|
|
105
119
|
export function stampProvenance(result, provenance) {
|
|
106
|
-
|
|
120
|
+
// Clients that prefer structuredContent over content[] would otherwise see
|
|
121
|
+
// only `{provenance}` for JSON-text results; mirror the JSON object body.
|
|
122
|
+
const structured = result.structuredContent
|
|
123
|
+
?? jsonObjectBody(result);
|
|
107
124
|
const nextStructured = { ...(structured ?? {}), provenance };
|
|
108
125
|
const content = result.content.map((entry) => {
|
|
109
126
|
if (entry.type === "text" &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/provenance.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/provenance.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|