- fix(sdk): import the command catalog from a pure subpath, not the barrel (@badchars)
- refactor: TUI and app registries consume the shared command catalog (@badchars)
- fix(app): gate hackbrowser-stop and queue pause/resume by live status, like the TUI (@badchars)
- feat(app): real Methodology and Report dialogs, replacing toast-only stubs (@badchars)
- fix(app): call security actions through the typed SDK, like the TUI (drop as-any) (@badchars)
- feat(sdk): shared command catalog — single source of truth for UI action commands (@badchars)
- refactor(tui): align command ids with the app's canonical namespace (@badchars)
- fix(app): persist the model selection to the server on every change (@badchars)
- feat(provider): persist the selected model server-side so every surface resolves it (@badchars)
- fix(app): send the selected model when launching a hackbrowser crawl (@badchars)
- fix(web): hackbrowser crawls plan with the UI-selected model, not the catalog default (@badchars)
- fix(web): /web/driver reports the session's active model, not Provider.defaultModel() (@badchars)
- fix(build): also bundle the hackbrowser extension inside bin/ for binary-only installs (@badchars)
- fix(build): bundle the web UI beside the binary in the release archive (@badchars)
- fix(publish): skip already-published npm packages instead of aborting the whole publish (@badchars)
- fix(web): AI-Navigator plans with the session's active model, not Provider.defaultModel() (@badchars)
- feat(skill): fetch the corpus from a stable release URL, not per-version (@badchars)
- fix(web): register the working directory as a project on startup (@badchars)
- refactor(app): drop the dead legacy home/target-session routes (#10) (@badchars)
- refactor(app): make newLayoutDesigns a constant true (#10) (@badchars)
- chore(ui): remove dead-on-arrival v2 files with no importers (@badchars)
- fix(app): new-session button opens the server workdir instead of an empty picker (@badchars)
- fix(tui): use singular model/agent/mcp slash primaries to match the app (@badchars)
- fix(app): show one slash row per command, keep aliases searchable (@badchars)
- fix(app): empty sessions column points to opening a project when none can be created (@badchars)
- chore(app): remove dead cyberstrike-panels (@badchars)
- chore(app): align remaining store reads with the guarded pattern (@badchars)
- fix(app): guard session store iteration in deleteSession (@badchars)
- chore(app): remove dead titlebar-v2 and settings-agents placeholders (@badchars)
- fix(app): guard Bolt dialog store reads against empty state (@badchars)
- fix(app): guard composer store reads so closing a session no longer crashes (@badchars)
- fix(app): open directory picker when New session has no project (@badchars)
- fix(app): register Scroller before AutoScroller in sortable plugin lists (@badchars)
- feat(skill): load the bundled corpus beside the binary (offline, all OS) (@badchars)
- feat(uninstall): remove the Chrome for Testing cache on uninstall (@badchars)
- feat(hackbrowser): ensure Chrome for Testing before spawning the orchestrator (@badchars)
- feat(skill): show branded first-run skill-download progress (#114) (@badchars)
- feat(npm): drop postinstall from published package — clean install, no npm v12 script warning (#114) (@badchars)
- feat(skill): externalize skill corpus — fetch from GitHub Releases at runtime, not bundled in npm (#114) (@badchars)
- test(publish): skip bundling skill corpus in main package — isolate npm review trigger (@badchars)
- build: install @opentui/core platform packages by name for cross-compile (#112) (@badchars)
- feat(web): server-side observe dedup — skip redundant SPA re-observations (#18) (@badchars)
- test(web): clean-page fixtures set every required security header (@badchars)
- test(web): driver POST response carries the main co-drive model (@badchars)
- feat(db): drop orphan web_signal/web_canary tables (#15) (@badchars)
- refactor(web): drop dead vars left after the CS-fabric rewiring (#15) (@badchars)
- refactor(web): delete the retired CS signal fabric — Vortex is the single producer (#15) (@badchars)
- refactor(web): route all live signal production to Vortex, off the CS fabric (#15) (@badchars)
- fix: break turbo build cycle for re package and default to single-platform local builds (@badchars)
- fix: rebrand vendored client tgz and add CyberStrikeClient type export (@badchars)
- fix: rebrand opencode references in markdown docs and openapi.json (@badchars)
- fix: rebrand opencode references to cyberstrike across core/ui/session-ui/llm/protocol/server/schema/httpapi-codegen/desktop/vortex/sdk (@badchars)
- fix: remove accidentally committed .tgz pack files and gitignore them (@badchars)
- fix: rebrand opencode references to cyberstrike across sdk/app/protocol/client/server/plugin/i18n (@badchars)
- fix(desktop): rename opencode store names, types, and internal variables to cyberstrike/cli (@badchars)
- fix(desktop): rebrand remaining opencode references in build/i18n/tests (@badchars)
- feat(prompt): add SCALPEL (re-agent) to orchestrator agent roster (@badchars)
- feat(plugin): register @cyberstrike-io/re as default domain (@badchars)
- feat(prompt): update agent prompts with new tools and technique tools (@badchars)
- feat(tool): add technique tools — IIS tilde, GraphQL introspection, HTTP smuggling (@badchars)
- feat(tool): add built-in CVE lookup tool (OSV + NVD) (@badchars)
- fix(provider): enable token usage tracking for GitHub Copilot (@badchars)
- fix(release): include extension, web UI and skills in release archives (@badchars)
- fix(build): minify binary + smol GC to reduce Windows OOM crashes (@badchars)
- fix: prevent stack overflow on deeply nested messages in long sessions (@badchars)
- fix(hackbrowser): fix double-hash URL corruption in spawned browsers (@badchars)
- feat(data-collector): classify telemetry/APM endpoints as noise (@badchars)
- fix(scope): block telemetry/APM domains from scope auto-expansion (@badchars)
- fix: handle corrupt database and malformed JSON responses gracefully (@badchars)
- chore(sdk): regenerate SDK types (@badchars)
- fix(poster): lazy-load fonts to prevent $bunfs crash in compiled binary (@badchars)
- feat(cyberstrike): add cloud escalation patterns to catalog (@badchars)
- feat(plugin): add escalation-hunter to AgentSpec role union (@badchars)
- fix: support Windows non-bash shells (PowerShell, cmd.exe) in bash tool (@badchars)
- fix: auto-expand scope for cross-domain API traffic from in-scope pages (@badchars)
- fix: prevent false chain auto-resume loops and duplicate watchdog notices (@badchars)
- feat: /poster command generates shareable OG card, tweet, and blog post from findings (@badchars)
- fix: inject credential context into LLM Navigator so smart models can log in (@badchars)
- fix: skip AI SDK reasoning "not found" soft errors instead of throwing (@badchars)
- feat: add /pin, /timestamps, /web commands to Web/Desktop (@badchars)
- fix: add TUI slash command aliases to Web/Desktop (@badchars)
- fix: align slash command names across TUI and Web/Desktop (@badchars)
- fix(copilot): route Claude models through Anthropic Messages API (@badchars)
- test(vuln): lock the severity scheme + guard the web mirror against divergence (#107) (@badchars)
- refactor(ui): TUI theme + web CSS map the severity role once per renderer (#107) (@badchars)
- refactor(vuln): canonical severity color scheme (role) in the shared model — crit+high=red, medium=orange, low=yellow, info=gray (#107) (@badchars)
- test(triage): reconcileDuplicates promotes a mis-marked critical, idempotent (#108) (@badchars)
- fix(triage): retroactively reconcile existing duplicate clusters on first read (#108) (@badchars)
- test(triage): severity-first dedup swaps a mis-marked critical (#108) (@badchars)
- fix(cloud): dedup fence picks the strongest finding per group as survivor (#108) (@badchars)
- fix(triage): dedup keeps the higher-severity/better-evidenced finding as primary (#108) (@badchars)
- refactor(ui): single source of truth for severity colors across all surfaces (#107) (@badchars)
- fix(sidebar): color vulnerability title by severity so criticals stand out (#106) (@badchars)
- feat(inspection): assessment-completion supervisor + resume-after-complete (#104) (@badchars)
- feat(inspection): escalation-hunt coverage + triage finalize hardening (@badchars)
- test(replay): constructed-target exploit is stored + verifiable end-to-end (#105) (@badchars)
- fix(replay): persist constructed-target exploits as retestable requests + verification_token (#105) (@badchars)
- test(inspection): routeAllSignals acknowledges un-routable signals (#102) (@badchars)
- test(triage): triaged collapses to pending_fix through the real gate (#101) (@badchars)
- fix(inspection): acknowledge structurally un-routable Vortex signals (#102) (@badchars)
- fix(triage): collapse triaged into pending_fix at the write site (#101) (@badchars)
- feat(tui): color signal status by triage (#98) + collapse MCP Servers by default (@badchars)
- fix(provider): migrate Anthropic OAuth/subscription model to LanguageModelV3 (#100) (@badchars)
- fix(provider): align @ai-sdk/* pins to v6-native so token usage is recorded (#99) (@badchars)
- fix(inspection): cap dispatch fan-out per endpoint-operation (#94) (@badchars)
- feat(agent): add wstg-api — API discovery + coverage + OWASP API Top-10 (#93) (@badchars)
- chore(wstg-apit): fix API Testing coverage — recon + BOLA + GraphQL (#92) (@badchars)
- feat(wstg-clnt): add Reverse Tabnabbing (CLNT-14) + fix stale/pessimistic map (#92) (@badchars)
- chore(wstg-busl): add Payment Functionality (BUSL-10) to the map (#92) (@badchars)
- fix(wstg-cryp): revive the cryptography orphan + fix map (#92) (@badchars)
- chore(wstg-errh): refresh map mechanisms + promote to covered (#92) (@badchars)
- chore(wstg-inpv): align coverage map with the (already-correct) prompt + tool (#92) (@badchars)
- feat(wstg-sess): add JWT (SESS-10) + Concurrent Sessions (SESS-11) + map (#92) (@badchars)
- feat(wstg-athz): first-class OAuth testing (ATHZ-05) + map (#92) (@badchars)
- feat(wstg-athn): add MFA (ATHN-11) coverage + refresh the map (#92) (@badchars)
- chore(wstg): give WSTG-IDNT (4.3) ownership to wstg-identity-mgmt (#92) (@badchars)
- chore(wstg): coverage map covers all 14 CONF items with honest statuses (#92) (@badchars)
- chore(wstg): consolidate WSTG-INFO (4.1) ownership to wstg-info-gathering + fix titles (#92) (@badchars)
- fix(server): warn loudly on port conflict instead of silent random-port fallback (#91) (@badchars)
- feat(triage): code-enforced impact gate — P1 deterministic F/P killer (#90) (@badchars)
- feat(vortex): SSRF out-of-band probe, confirmed via the #85 OOB server (#89) (@badchars)
- feat(vuln): human-readable per-session finding id (VULN-001) (@badchars)
- chore(sdk): regenerate JS client (@badchars)
- feat(hunter): escalation catalog as a loadable data pack — enterprise-extensible chains (P2) (@badchars)
- feat(hunter): code-seeded escalation catalog — the frontier starts with the obvious chains (P2) (@badchars)
- feat(oob): self-hosted OOB interaction server for blind-vuln confirmation (#85) (@badchars)
- feat(hunter): P1 code-enforced relentless engine — the propose_escalation frontier (@badchars)
- feat(hunter): code-enforced escalation coverage — auto-trigger per finding, guarantee every vuln is hunted (#84) (@badchars)
- revert(inspection): remove the sidebar activity feed (#81) — superseded by inline transcript entries (@badchars)
- feat(inspection): inline navigable dispatch entries in the root transcript (#78 follow-up) (@badchars)
- feat(inspection): live activity feed in the root session (#81) (@badchars)
Thank you to 1 community contributor:
- @badchars:
- feat(inspection): live activity feed in the root session (#81)
- feat(specialists): document HTTPQL cross-endpoint correlation in shared common prompt (#82)
- feat(inspection): inline navigable dispatch entries in the root transcript (#78 follow-up)
- revert(inspection): remove the sidebar activity feed (#81) — superseded by inline transcript entries
- docs(hunter): expand Correlation Hunter into a Correlation & Escalation Hunter design
- feat(hunter): escalation & correlation hunter agent — P0 MVP (#83)
- feat(hunter): code-enforced escalation coverage — auto-trigger per finding, guarantee every vuln is hunted (#84)
- docs(hunter): add the P1 code-enforced relentless engine (the secret sauce)
- feat(hunter): P1 code-enforced relentless engine — the propose_escalation frontier
- feat(oob): self-hosted OOB interaction server for blind-vuln confirmation (#85)
- feat(hunter): code-seeded escalation catalog — the frontier starts with the obvious chains (P2)
- feat(hunter): escalation catalog as a loadable data pack — enterprise-extensible chains (P2)
- chore(sdk): regenerate JS client
- feat(vuln): human-readable per-session finding id (VULN-001)
- feat(vortex): detect-once config-class signal format — one signal per host, not per endpoint (#87)
- feat(vortex): name/type targeting for the injection probe engine (#88 Phase B)
- feat(vortex): injection probe engine — open-redirect, CRLF, command-injection classes (#88 Phase A)
- feat(vortex): SSRF out-of-band probe, confirmed via the #85 OOB server (#89)
- feat(triage): code-enforced impact gate — P1 deterministic F/P killer (#90)
- fix(server): warn loudly on port conflict instead of silent random-port fallback (#91)
- chore(wstg): consolidate WSTG-INFO (4.1) ownership to wstg-info-gathering + fix titles (#92)
- docs(wstg-info): sharpen the info-gathering prompt per the official 4.1 checklist (#92)
- docs(wstg-conf): rewrite config-deploy prompt to work ALL 14 CONF items in detail (#92)
- chore(wstg): coverage map covers all 14 CONF items with honest statuses (#92)
- chore(wstg): give WSTG-IDNT (4.3) ownership to wstg-identity-mgmt (#92)
- fix(wstg): make wstg-identity-mgmt actually dispatchable (#92)
- feat(wstg-athn): add MFA (ATHN-11) coverage + refresh the map (#92)
- feat(wstg-athz): first-class OAuth testing (ATHZ-05) + map (#92)
- feat(wstg-sess): add JWT (SESS-10) + Concurrent Sessions (SESS-11) + map (#92)
- chore(wstg-inpv): align coverage map with the (already-correct) prompt + tool (#92)
- chore(wstg-errh): refresh map mechanisms + promote to covered (#92)
- fix(wstg-cryp): revive the cryptography orphan + fix map (#92)
- chore(wstg-busl): add Payment Functionality (BUSL-10) to the map (#92)
- feat(wstg-busl): Phase-0 app-understanding reasoning scaffold in business-logic (#92)
- feat(wstg-clnt): add Reverse Tabnabbing (CLNT-14) + fix stale/pessimistic map (#92)
- chore(wstg-apit): fix API Testing coverage — recon + BOLA + GraphQL (#92)
- feat(agent): add wstg-api — API discovery + coverage + OWASP API Top-10 (#93)
- fix(inspection): cap dispatch fan-out per endpoint-operation (#94)
- chore(domains): license aws/azure/gcp AGPL-3.0-only + mark tier free
- fix(provider): align @ai-sdk/* pins to v6-native so token usage is recorded (#99)
- fix(provider): migrate Anthropic OAuth/subscription model to LanguageModelV3 (#100)
- feat(tui): color signal status by triage (#98) + collapse MCP Servers by default
- fix(triage): collapse triaged into pending_fix at the write site (#101)
- fix(inspection): acknowledge structurally un-routable Vortex signals (#102)
- test(triage): triaged collapses to pending_fix through the real gate (#101)
- test(inspection): routeAllSignals acknowledges un-routable signals (#102)
- build(desktop): add Windows MSI + macOS pkg managed-deploy targets (#103)
- build(desktop): sign-windows accepts base64 pfx secret for CI (#103)
- ci(desktop): wire Windows + mac-installer signing, collect msi/pkg (#103)
- docs(desktop): enterprise deployment guide (#103)
- build(desktop): sign Windows via Azure Trusted Signing dlib (#103)
- ci(desktop): restore Trusted Signing dlib + pass Azure signing env (#103)
- docs(desktop): document Azure Trusted Signing setup (#103)
- fix(replay): persist constructed-target exploits as retestable requests + verification_token (#105)
- test(replay): constructed-target exploit is stored + verifiable end-to-end (#105)
- feat(inspection): escalation-hunt coverage + triage finalize hardening
- feat(inspection): assessment-completion supervisor + resume-after-complete (#104)
- chore(desktop): track electron-vite renderer entry html
- fix(sidebar): color vulnerability title by severity so criticals stand out (#106)
- refactor(ui): single source of truth for severity colors across all surfaces (#107)
- fix(triage): dedup keeps the higher-severity/better-evidenced finding as primary (#108)
- fix(cloud): dedup fence picks the strongest finding per group as survivor (#108)
- test(triage): severity-first dedup swaps a mis-marked critical (#108)
- fix(triage): retroactively reconcile existing duplicate clusters on first read (#108)
- test(triage): reconcileDuplicates promotes a mis-marked critical, idempotent (#108)
- refactor(vuln): canonical severity color scheme (role) in the shared model — crit+high=red, medium=orange, low=yellow, info=gray (#107)
- refactor(ui): TUI theme + web CSS map the severity role once per renderer (#107)
- test(vuln): lock the severity scheme + guard the web mirror against divergence (#107)
- fix(copilot): route Claude models through Anthropic Messages API
- docs: complete i18n overhaul — 9 locales, content rewrites, section cleanup
- fix(docs): remove duplicate Badge imports in zh locale MDX files
- fix(docs): increase Node.js heap size for Astro build
- docs(tools): add security hooks and probes pages, rewrite tools overview
- docs: remove Slash Commands section — content lives in Usage > TUI
- docs: remove exploitation section across all 9 locales
- docs: remove Resources sidebar section, link changelog to GitHub Releases
- docs: consolidate MCP section into features, remove 54 orphan files
- docs: consolidate CLI Reference into Usage > CLI, remove 36 orphan files
- docs: consolidate Hooks and Permissions into Configuration section
- docs: merge file-operations, bash, memory into single Built-in Tools page
- docs: merge dynamic-loading into built-in-tools, move Features before Providers in sidebar
- docs: move AI Providers into Configuration section, remove from sidebar
- docs: update provider docs from code — 25+ providers, accurate config schema
- docs: consolidate permissions, hooks, providers into single pages
- fix: align slash command names across TUI and Web/Desktop
- fix: add TUI slash command aliases to Web/Desktop
- feat: add /pin, /timestamps, /web commands to Web/Desktop
- docs: CHANGELOG [2.0.0] — 1,284 commits since v1.1.16
- fix: skip AI SDK reasoning "not found" soft errors instead of throwing
- fix: inject credential context into LLM Navigator so smart models can log in
- feat: /poster command generates shareable OG card, tweet, and blog post from findings
- fix: prevent false chain auto-resume loops and duplicate watchdog notices
- fix: auto-expand scope for cross-domain API traffic from in-scope pages
- fix: support Windows non-bash shells (PowerShell, cmd.exe) in bash tool
- docs: add Agentic Pipelines, AI Models pages + GitLab CI deploy + cross-linking
- docs: add external links to all provider and model names
- feat(plugin): add escalation-hunter to AgentSpec role union
- feat(cyberstrike): add cloud escalation patterns to catalog
- feat(aws): add agentic assessment pipeline and escalation-hunter
- feat(azure): add escalation-hunter agent and prompt
- feat(gcp): add agentic assessment pipeline and escalation-hunter
- fix(poster): lazy-load fonts to prevent $bunfs crash in compiled binary
- chore(sdk): regenerate SDK types
- fix: handle corrupt database and malformed JSON responses gracefully
- fix(scope): block telemetry/APM domains from scope auto-expansion
- feat(data-collector): classify telemetry/APM endpoints as noise
- fix(hackbrowser): fix double-hash URL corruption in spawned browsers
- fix: prevent stack overflow on deeply nested messages in long sessions
- ci(gitlab): add release stage with Generic Package Registry uploads
- ci(gitlab): tag-based release trigger
- fix(ci): use absolute paths in release archive packaging
- fix(build): minify binary + smol GC to reduce Windows OOM crashes
- fix(ci): install npm in publish-gitlab job + add curl retry for release uploads
- fix(ci): use --retry-all-errors for release uploads (connection reset)
- fix(hackbrowser): add Windows and Linux browser discovery paths
- fix(release): include extension, web UI and skills in release archives
- fix(hackbrowser): await cap-state restore before webRequest handlers
- fix(provider): enable token usage tracking for GitHub Copilot
- feat(vortex): expand security rules from 58 to 100+
- feat(vortex): add tech playbooks, error intelligence, and agent capabilities
- feat(tool): add built-in CVE lookup tool (OSV + NVD)
- feat(tool): add technique tools — IIS tilde, GraphQL introspection, HTTP smuggling
- feat(prompt): update agent prompts with new tools and technique tools
- docs(vortex): update documentation with expanded rule coverage
- feat(re): add reverse engineering domain package with REA MCP pipeline
- feat(plugin): register @cyberstrike-io/re as default domain
- feat(prompt): add SCALPEL (re-agent) to orchestrator agent roster
- feat(re): upgrade specialist prompts with real REA MCP tool names
- fix(re): remove non-existent snapshot tool references from re-debug prompt
- feat(web): add hypothesis generation phase to specialist agents
- fix(desktop): rebrand opencode references to cyberstrike
- fix(desktop): rebrand remaining opencode references in build/i18n/tests
- fix(desktop): rename opencode store names, types, and internal variables to cyberstrike/cli
- fix: rebrand opencode references to cyberstrike across sdk/app/protocol/client/server/plugin/i18n
- fix: remove accidentally committed .tgz pack files and gitignore them
- fix: rebrand opencode references to cyberstrike across core/ui/session-ui/llm/protocol/server/schema/httpapi-codegen/desktop/vortex/sdk
- fix: rebrand opencode references in markdown docs and openapi.json
- fix: rebrand vendored client tgz and add CyberStrikeClient type export
- fix: break turbo build cycle for re package and default to single-platform local builds
- fix: replace non-existent mcp__rea__* tools with real CLI tools in RE domain agents
- Revert "fix: replace non-existent mcp__rea__* tools with real CLI tools in RE domain agents"
- feat: add rea-agents (Reverse Engineer Anything) MCP server to monorepo
- fix: wire RE domain MCP to local rea package and exclude from Bun workspace
- feat(vortex): expand server-banner rule — wider header set + version-aware severity
- test(vortex): assert probe count against catalog length, not a magic number
- feat(hackbrowser): proactive surface-reveal sweep in the capture extension
- feat(hackbrowser): proceed through non-destructive native confirm() to discover gated endpoints
- docs: add module & package architecture doc
- refactor(web): route all live signal production to Vortex, off the CS fabric (#15)
- refactor(web): delete the retired CS signal fabric — Vortex is the single producer (#15)
- refactor(web): drop dead vars left after the CS-fabric rewiring (#15)
- feat(db): drop orphan web_signal/web_canary tables (#15)
- test(web): driver POST response carries the main co-drive model
- test(web): clean-page fixtures set every required security header
- feat(vortex): declarative corpus rules + group quantifiers — access.ts is now data (#16)
- feat(vortex): migrate header/cookie rules to declarative data (#16)
- test(vortex): characterization tests for the advanced corpus rules
- feat(web): server-side observe dedup — skip redundant SPA re-observations (#18)
- build: install @opentui/core platform packages by name for cross-compile (#112)
- fix(postinstall): drop child_process/PowerShell PATH edit — trips npm malware review (#174)
- Revert "fix(postinstall): drop child_process/PowerShell PATH edit — trips npm malware review (#174)"
- test(build): skip bundling hackbrowser extension — isolate npm automated-review trigger
- Revert "test(build): skip bundling hackbrowser extension — isolate npm automated-review trigger"
- test(publish): skip bundling skill corpus in main package — isolate npm review trigger
- feat(skill): externalize skill corpus — fetch from GitHub Releases at runtime, not bundled in npm (#114)
- feat(npm): drop postinstall from published package — clean install, no npm v12 script warning (#114)
- feat(skill): show branded first-run skill-download progress (#114)
- feat(release): auto-publish GitHub release (binaries + skills) for canary/beta too (#114)
- feat(hackbrowser): auto-provision Chrome for Testing on first run
- feat(hackbrowser): ensure Chrome for Testing before spawning the orchestrator
- feat(uninstall): remove the Chrome for Testing cache on uninstall
- feat(skill): load the bundled corpus beside the binary (offline, all OS)
- ci(forgejo): self-hosted release pipeline on the home runner
- ci(forgejo): drop github->Forgejo url rewrite before bun install
- ci(forgejo): point github: deps at real github.com (GITHUB_API_URL override)
- ci(forgejo): publish with PUBLISH_TOKEN + Basic auth for the package registry
- ci(forgejo): add concurrency guard to the release workflow
- ci(forgejo): attach archives as release assets, not the package registry
- fix(app): register Scroller before AutoScroller in sortable plugin lists
- fix(app): open directory picker when New session has no project
- fix(app): guard composer store reads so closing a session no longer crashes
- fix(app): guard Bolt dialog store reads against empty state
- chore(app): remove dead titlebar-v2 and settings-agents placeholders
- fix(ui): use the real brand logo for the in-app mark and favicons
- fix(app): guard session store iteration in deleteSession
- chore(app): align remaining store reads with the guarded pattern
- chore(app): remove dead cyberstrike-panels
- fix(app): empty sessions column points to opening a project when none can be created
- fix(app): show one slash row per command, keep aliases searchable
- fix(tui): use singular model/agent/mcp slash primaries to match the app
- fix(app): new-session button opens the server workdir instead of an empty picker
- chore(ui): remove dead-on-arrival v2 files with no importers
- refactor(app): make newLayoutDesigns a constant true (#10)
- refactor(app): drop the dead legacy home/target-session routes (#10)
- fix(web): register the working directory as a project on startup
- feat(skill): fetch the corpus from a stable release URL, not per-version
- fix(web): AI-Navigator plans with the session's active model, not Provider.defaultModel()
- fix(publish): skip already-published npm packages instead of aborting the whole publish
- fix(ci): embed the freshly-built web UI into the compiled binary (build-cli)
- fix(build): bundle the web UI beside the binary in the release archive
- fix(build): also bundle the hackbrowser extension inside bin/ for binary-only installs
- fix(web): /web/driver reports the session's active model, not Provider.defaultModel()
- fix(web): hackbrowser crawls plan with the UI-selected model, not the catalog default
- fix(app): send the selected model when launching a hackbrowser crawl
- feat(provider): persist the selected model server-side so every surface resolves it
- fix(app): persist the model selection to the server on every change
- refactor(tui): align command ids with the app's canonical namespace
- feat(sdk): shared command catalog — single source of truth for UI action commands
- fix(app): call security actions through the typed SDK, like the TUI (drop as-any)
- feat(app): real Methodology and Report dialogs, replacing toast-only stubs
- fix(app): gate hackbrowser-stop and queue pause/resume by live status, like the TUI
- refactor: TUI and app registries consume the shared command catalog
- fix(sdk): import the command catalog from a pure subpath, not the barrel
- ci(publish): reconcile and push against origin/main for the main-based stable release
- docs(changelog): rewrite the 2.0.0 entry — detailed headerless bullets, no paid-layer references
- docs: add long-form 2.0.0 release notes (headerless)
- merge: adopt the 2.0.0 release line as main (take dev wholesale; main was a stale pre-2.0 line)