Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
0de96bb
feat(webapp): Phase 0 — scaffold web app + lab status --json verb
mkultraWasHere Aug 3, 2026
304d921
feat(webapp): Phase 1 — SQLite persistence backbone
mkultraWasHere Aug 3, 2026
4781b79
feat(webapp): Phase 2 — sessions & config
mkultraWasHere Aug 3, 2026
5ef8df8
feat(webapp): Phase 3 — agent, tools & commands
mkultraWasHere Aug 4, 2026
94cb9dc
feat(webapp): Phase 4 — ingestion hook
mkultraWasHere Aug 4, 2026
cc4e1f7
feat(webapp): Phase 5 — frontend (shell, tabs, RangeView)
mkultraWasHere Aug 4, 2026
54d5e64
feat(webapp): Phase 6 — long-running operations
mkultraWasHere Aug 4, 2026
3db7a08
feat(webapp): Phase 7 — remaining commands & overlays
mkultraWasHere Aug 4, 2026
69c8af7
fix(webapp): capture stdout/stderr separately for the status-check hook
mkultraWasHere Aug 4, 2026
d37c458
chore(webapp): pre-PR review — ruff format, pyright fixes, None-guard
mkultraWasHere Aug 4, 2026
a982c3f
fix(webapp): review-pass fixes across phases 0-7
mkultraWasHere Aug 4, 2026
cd114cb
feat(webapp): agent-dispatch commands with file-based prompts
mkultraWasHere Aug 4, 2026
6378e87
feat(webapp): slash-command autocomplete menu
mkultraWasHere Aug 4, 2026
d5e4b42
feat(webapp): close /score fetch + /health per-host gaps
mkultraWasHere Aug 4, 2026
d6932b3
feat(webapp): health-report table + Azure-capable score fetch
mkultraWasHere Aug 4, 2026
f26d1f3
docs(webapp): add README and change default port to 7331
mkultraWasHere Aug 4, 2026
e26472e
feat(webapp): in-UI per-session model switch (seamless)
mkultraWasHere Aug 5, 2026
9921b99
feat(webapp): in-app API key setting (ALFRED parity)
mkultraWasHere Aug 5, 2026
12fe607
feat(webapp): new-session flow + agent can run any command
mkultraWasHere Aug 5, 2026
c71cf01
feat(webapp): live /health per-check progress + reliable cancel
mkultraWasHere Aug 5, 2026
f4c87a6
feat(webapp): UI polish — unified settings, range header, status/spinner
mkultraWasHere Aug 5, 2026
5e87c54
feat(webapp): formatted /instances table + chat/popup UI polish
mkultraWasHere Aug 5, 2026
6bfd318
feat(console): rename webapp → console, cloud account id, formatted r…
mkultraWasHere Aug 6, 2026
447fcf8
feat(console): replace /diagnose with /exec, a control-plane remote s…
mkultraWasHere Aug 6, 2026
605aa3f
fix(exec): route through the control plane, not WinRM; add /restart
mkultraWasHere Aug 6, 2026
644dcde
feat(console): /help workflow guide, one-row range header, honest des…
mkultraWasHere Aug 6, 2026
007a353
fix(console): harden command dispatch and state updates
mkultraWasHere Aug 6, 2026
5fbd454
fix(console): make cancellation and session cleanup reliable
mkultraWasHere Aug 7, 2026
facf4d0
fix(console): own and reap captured subprocesses
mkultraWasHere Aug 7, 2026
7b84159
feat(console): shimmer working indicator, aligned pane headers, port …
mkultraWasHere Aug 7, 2026
f94065c
docs(console): correct the README's agent-capability claim and comman…
mkultraWasHere Aug 7, 2026
2f9659c
refactor(console): split chat responsibilities
mkultraWasHere Aug 7, 2026
64d83dd
refactor(console): split backend responsibilities
mkultraWasHere Aug 7, 2026
b99d6db
feat(webapp): attack-box connect commands + command recall
mkultraWasHere Aug 7, 2026
f3f1dd2
fix(console): keep tool calls paired when a command is cancelled
mkultraWasHere Aug 7, 2026
f7493b4
fix(console): run the CLI in the tree its config belongs to
mkultraWasHere Aug 7, 2026
42b720c
fix(console): readable errors for an unusable config path
mkultraWasHere Aug 7, 2026
d8f9eec
feat(webapp): themed copy-on-click tooltips + contrast fixes
mkultraWasHere Aug 7, 2026
fb69fbc
fix(console): stop claiming a cloud command was cancelled
mkultraWasHere Aug 7, 2026
b8b7b5f
fix(cli): announce VM lifecycle work before waiting on it, and bound it
mkultraWasHere Aug 7, 2026
0e4d47a
feat(webapp): colour the host health verdict
mkultraWasHere Aug 7, 2026
b1e6893
docs(console): diagnosis playbook in the agent's system prompt
mkultraWasHere Aug 7, 2026
509d44c
fix(console): don't drop a cancel that lands during the end event
mkultraWasHere Aug 10, 2026
5cfd791
docs(console): document command flags in the system prompt
mkultraWasHere Aug 10, 2026
c4c5006
feat(webapp): show the lab-definition moniker on host boxes
mkultraWasHere Aug 10, 2026
d4d23a5
fix(cli): deploy and tear down the Azure modules `up` depends on
mkultraWasHere Aug 10, 2026
0913c2a
docs: audit of the range stand-up path
mkultraWasHere Aug 10, 2026
582ada9
docs: drop the stand-up audit from the repo
mkultraWasHere Aug 10, 2026
a98ea83
Merge origin/main into feature/web-app
mkultraWasHere Aug 11, 2026
ecb3cc2
test(cli): cover the owning account captured during EC2 discovery
mkultraWasHere Aug 11, 2026
2d0ff12
fix(console): give the websocket tests the fixture they ask for
mkultraWasHere Aug 11, 2026
2cd55fd
test(console): assert a tool result carries an id before pairing it
mkultraWasHere Aug 11, 2026
cb08e09
chore(console): document the runtime accessors, apply ruff formatting
mkultraWasHere Aug 11, 2026
b320312
fix(cli): scrub .dreadnode/reports and tool-output in score reset
mkultraWasHere Aug 11, 2026
a3f123a
Merge remote-tracking branch 'origin/main' into feature/web-app
mkultraWasHere Aug 12, 2026
4dee5be
feat(cli): let env create choose a variant source; fix inventory + te…
mkultraWasHere Aug 13, 2026
36c0f89
feat(console): create configs, environments and their infrastructure …
mkultraWasHere Aug 13, 2026
4822c67
feat(cli): let a non-interactive caller run lab destroy-vm
mkultraWasHere Aug 13, 2026
894d817
fix(console): make /destroy work, and ask before it does
mkultraWasHere Aug 13, 2026
fdf8026
fix(console): seed a range's hosts once the lab config exists
mkultraWasHere Aug 13, 2026
119e006
feat(console): suggest regions, and make the empty state readable
mkultraWasHere Aug 13, 2026
f379c3a
feat(cli): add lab describe for a VM's disks and interfaces
mkultraWasHere Aug 14, 2026
1d061eb
feat(cli): warn before up when a region cannot supply the range
mkultraWasHere Aug 14, 2026
18d47b9
fix(cli): make an Azure range's inventory match what was deployed
mkultraWasHere Aug 14, 2026
c8fcfb9
fix(infra): bootstrap encoding, deployment naming, console persistence
mkultraWasHere Aug 15, 2026
32325b8
fix(console): add missing hostdetail and agentVerbs modules
mkultraWasHere Aug 18, 2026
b0fa923
fix(ansible,console): PSObject type errors, PSRP retry, bastion panel
mkultraWasHere Aug 20, 2026
fd88f76
feat(console): table view toggle for range, scope guidance for /up
mkultraWasHere Aug 20, 2026
2133278
fix(console): reorder table columns, orange toggle, multi-expand rows
mkultraWasHere Aug 20, 2026
73b1b71
feat(console,infra): wrap connect commands, fix chat scroll, add agen…
mkultraWasHere Aug 21, 2026
f7438e3
fix(cli): add Go-side destroy confirmation and timeout for infra ops
mkultraWasHere Aug 21, 2026
07cae9b
feat(console): generate answer key on session creation
mkultraWasHere Aug 21, 2026
69d92de
fix(ansible): gate cross-domain group adds on trust channel readiness
mkultraWasHere Aug 21, 2026
c4cd9ab
fix(console): guard missing config_path/session_dir, format fixes
mkultraWasHere Aug 22, 2026
a55471b
refactor(console): code review fixes and shared Modal component
mkultraWasHere Aug 22, 2026
4509032
refactor(console): extract shared components, cap progress events
mkultraWasHere Aug 23, 2026
4a06fe9
fix(console): address remaining code review issues
mkultraWasHere Aug 23, 2026
985cf7d
feat(console): add /copy and /status commands
mkultraWasHere Aug 24, 2026
801e8f6
fix(console): default /score to --live-verify
mkultraWasHere Aug 24, 2026
0e68f62
chore: merge main into feature/web-app
mkultraWasHere Aug 26, 2026
a3cc53e
fix: address PR review feedback
mkultraWasHere Aug 26, 2026
73db004
fix: address follow-up PR review feedback
mkultraWasHere Aug 26, 2026
15c9e4f
fix: resolve pre-commit failures
mkultraWasHere Aug 26, 2026
de286d1
feat(console): add /secure command, themed confirms, and direct comma…
mkultraWasHere Aug 26, 2026
3eddb82
fix(console): reset health to unknown when a host becomes absent
mkultraWasHere Aug 26, 2026
28cf060
fix: restore security check CI
mkultraWasHere Aug 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,15 @@ dreadgoad
.dreadgoad/
coverage.out

# Web app build artifacts
console/frontend/node_modules/
console/frontend/dist/
console/frontend/*.tsbuildinfo

# Generated ADCS template archives (main tracks the sources, not the zips)
ansible/roles/adcs_templates/files/ADCSTemplate.zip
ansible/roles/vulns_adcs_templates/files/ADCSTemplate.zip

# Root environment inventories are local runtime state.
/*-inventory
/*-inventory.bak.*
Expand Down
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ repos:
hooks:
- id: codespell
entry: codespell -q 3 -f -S ".git,.github,README.md" -L "mot,fonction,connexion"
exclude: '(go\.sum|\.min\.css\.map|\.css\.map|\.min\.map|\.min\.js|sysmonconfig-export\.xml|jquery\.validate\.(min\.)?js|jquery-3\.4\.1(\.slim)?\.js|modernizr-[\d\.]+\.js)$'
exclude: '(go\.sum|package-lock\.json|\.min\.css\.map|\.css\.map|\.min\.map|\.min\.js|sysmonconfig-export\.xml|jquery\.validate\.(min\.)?js|jquery-3\.4\.1(\.slim)?\.js|modernizr-[\d\.]+\.js)$'

- repo: https://github.com/jumanjihouse/pre-commit-hooks
rev: 3.0.0
hooks:
- id: script-must-have-extension
name: Ensure shell scripts end with .sh
types: [shell]
exclude: '\.sh\.tpl$'
exclude: '(^dreadgoad-console$|\.sh\.tpl$)'
- id: shellcheck
exclude: '\.sh\.tpl$'
- id: shfmt
Expand Down
2 changes: 1 addition & 1 deletion ad/GOAD-Light/scripts/constrained_delegation_kerb_only.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ if ($computer.ServicePrincipalNames -notcontains $spn) {

$missing = @($delegateTo | Where-Object { $computer.'msDS-AllowedToDelegateTo' -notcontains $_ })
if ($missing.Count -gt 0) {
Set-ADComputer -Identity $identity -Add @{'msDS-AllowedToDelegateTo' = $missing }
Set-ADComputer -Identity $identity -Add @{'msDS-AllowedToDelegateTo' = [string[]]$missing }
}
2 changes: 1 addition & 1 deletion ad/GOAD-Light/scripts/constrained_delegation_use_any.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ Set-ADAccountControl -Identity $identity -TrustedToAuthForDelegation $true

$missing = @($delegateTo | Where-Object { $user.'msDS-AllowedToDelegateTo' -notcontains $_ })
if ($missing.Count -gt 0) {
Set-ADUser -Identity $identity -Add @{'msDS-AllowedToDelegateTo' = $missing }
Set-ADUser -Identity $identity -Add @{'msDS-AllowedToDelegateTo' = [string[]]$missing }
}
2 changes: 1 addition & 1 deletion ad/GOAD/scripts/constrained_delegation_kerb_only.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ if ($computer.ServicePrincipalNames -notcontains $spn) {

$missing = @($delegateTo | Where-Object { $computer.'msDS-AllowedToDelegateTo' -notcontains $_ })
if ($missing.Count -gt 0) {
Set-ADComputer -Identity $identity -Add @{'msDS-AllowedToDelegateTo' = $missing }
Set-ADComputer -Identity $identity -Add @{'msDS-AllowedToDelegateTo' = [string[]]$missing }
}
2 changes: 1 addition & 1 deletion ad/GOAD/scripts/constrained_delegation_use_any.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ Set-ADAccountControl -Identity $identity -TrustedToAuthForDelegation $true

$missing = @($delegateTo | Where-Object { $user.'msDS-AllowedToDelegateTo' -notcontains $_ })
if ($missing.Count -gt 0) {
Set-ADUser -Identity $identity -Add @{'msDS-AllowedToDelegateTo' = $missing }
Set-ADUser -Identity $identity -Add @{'msDS-AllowedToDelegateTo' = [string[]]$missing }
}
300 changes: 0 additions & 300 deletions ansible/playbooks/diagnose-dc01.yml

This file was deleted.

5 changes: 3 additions & 2 deletions ansible/plugins/modules/win_ad_object.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,10 @@ if ($null -eq $existing_obj) {

# Now set the mayContain attributes, we do a last check on existing_obj in case we are in check mode
if ($null -ne $may_contain -and $null -ne $existing_obj) {
$current_may_contain = @($existing_obj.mayContain | Where-Object { $_ -ne $null })
foreach ($may_contain_entry in $may_contain) {
if (-not $existing_obj.mayContain.Contains($may_contain_entry)) {
Set-ADObject -Identity $existing_obj.ObjectGuid -Add @{ mayContain = $may_contain_entry } @common_params > $null
if ($may_contain_entry -notin $current_may_contain) {
Set-ADObject -Identity $existing_obj.ObjectGuid -Add @{ mayContain = [string]$may_contain_entry } @common_params > $null
$result.changed = $true
}
}
Expand Down
2 changes: 2 additions & 0 deletions ansible/roles/child_domain/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@ Promote a Windows server as a child domain controller
- **Configure DNS listener addresses** (ansible.windows.win_powershell) - Conditional
- **Enable TLS 1.2 permanently via registry** (ansible.windows.win_regedit)
- **Check if xDnsServer exists** (ansible.windows.win_shell)
- **Unblock module DLLs before xDnsServer install** (ansible.windows.win_shell) - Conditional
- **Install xDnsServer only if needed** (community.windows.win_psmodule) - Conditional
- **Configure DNS Forwarders** (ansible.windows.win_dsc)
- **Check if ActiveDirectoryDSC exists** (ansible.windows.win_shell)
- **Unblock module DLLs before ActiveDirectoryDSC install** (ansible.windows.win_shell) - Conditional
- **Install ActiveDirectoryDSC only if needed** (community.windows.win_psmodule) - Conditional
- **Enable the Active Directory Web Services** (ansible.windows.win_service)

Expand Down
Loading
Loading