Skip to content

chore: bump version to 2.10.0#1301

Closed
jpleva91 wants to merge 199 commits intomasterfrom
release/2.10.0
Closed

chore: bump version to 2.10.0#1301
jpleva91 wants to merge 199 commits intomasterfrom
release/2.10.0

Conversation

@jpleva91
Copy link
Copy Markdown
Collaborator

jpleva91 and others added 30 commits March 25, 2026 07:56
feat: Go kernel rewrite + 9-squad swarm org
Add 10 new transitive script patterns covering Node.js fs.*, fs/promises, Python pathlib/os/shutil file write operations that were missing from the transitive-effect-analysis invariant. Add new script-execution-tracking invariant (#23) that detects when a shell command executes a file written earlier in the same session, closing the write-then-execute indirection bypass vector.

Closes #862

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…pass

Closes #862 — critical governance bypass fix
Phase 6 (Reference Monitor Hardening) and KE-3 (Governance Event Envelope)
both completed. KE Sprint up from 20% to 37%. PR queue drained 8→0.
Risk score 23→10 (ELEVATED→NORMAL). Critical path: KE-2 → v3.0.

Milestone: #880 | Report: #881

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…rmal

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implements #857

- Create stranger test protocol spec (spec/stranger-test-protocol.md) with
  8-step validation flow, success criteria, and friction point taxonomy
- Fix wrong GitHub URL in generated policy comments (agent-guard → agentguard)
  in both postinstall.ts and claude-init.ts
- Fix invariant count in claude-init wizard (21 → 22)
- Add npx alternative to README Quick Start for users who prefer npx over
  global install
- Align postinstall starter policy mode with wizard default (monitor → guide)
- Update tests to match corrected policy mode and add URL regression test

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…857f

feat(issue-857): stranger test protocol and install fixes
…gent-20260325-140506

Auto-merge: all CI green, recovery controller status report.
PRs #869 and #870 both merged this cycle. New PR #888 (fix/npx-scoped-package-name) open with lint CI failure — assigned to senior-coder. No P0/P1 issues. Health: yellow.

https://claude.ai/code/session_018LQYdGroNHJMB7pmDbUJBW

Co-authored-by: Claude <noreply@anthropic.com>
…loses #848)

Update all user-facing references to the CLI from 'npx agentguard' (which
fails with HTTP 404 because no unscoped package is registered) to the correct
scoped form 'npx @red-codes/agentguard'.

Changes:
- apps/cli/src/postinstall.ts: post-install wizard hints
- apps/cli/src/commands/demo.ts: get-started output
- apps/cli/tests/cli-demo.test.ts: update test expectation to match
- CLAUDE.md: Quick Start code examples

Note: generated hook commands continue to use 'npx --no-install agentguard'
(which resolves the local binary via node_modules/.bin without registry
fallback) — this is intentional and tested separately.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Prettier formatting applied to apps/cli/src/postinstall.ts to fix CI
format check failure on run 23547828259.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Thin wrapper package that depends on @red-codes/agentguard.
Allows `npx agentguard` to work without the scoped name.

Both `npx agentguard` and `npx @red-codes/agentguard` work identically.

Closes #848

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace mutable tag references with immutable SHA-pinned digests across
all 6 workflow files to prevent supply chain attacks via compromised
upstream actions. Original tags preserved as inline comments.

Actions pinned:
- actions/checkout@v6
- actions/setup-node@v6
- pnpm/action-setup@v5
- actions/upload-artifact@v7
- github/codeql-action/init@v4
- github/codeql-action/analyze@v4
- actions/upload-pages-artifact@v4
- actions/deploy-pages@v4
- dtolnay/rust-toolchain@stable
- Swatinem/rust-cache@v2

Closes #829

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Version bump: 2.5.0 → 2.6.0

Supply chain hardening: all 10 GitHub Actions pinned to verified SHA
digests across 6 workflow files. Closes #829.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The agentguard-unscoped package depends on @red-codes/agentguard
which doesn't exist in the lockfile (it's the published package).
Moving to npm-wrapper/ excludes it from the pnpm workspace glob.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Publishes both @red-codes/agentguard and the unscoped agentguard
wrapper package on GitHub release. Tolerates "already published"
for the wrapper since its version tracks the CLI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
npm rejects "agentguard" as too similar to existing "agent-guard" package.
Canonical install path is `npx @red-codes/agentguard`.

Removes npm-wrapper/ and the publish step. Closes #848 as won't-fix.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
npx aiguard → delegates to @red-codes/agentguard.
Added to publish workflow for automated releases.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
npx aguard → delegates to @red-codes/agentguard.
Replaces aiguard attempt. Added to publish workflow.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…atrix

Code-level audit of AgentGuard kernel (22 invariants, 27 action types, 95+
command patterns) against all 10 OWASP Agentic Top 10 categories. Includes
per-category mechanism mapping, gap analysis, Microsoft AGT comparison,
and prioritized roadmap to close gaps before May 6 conference.

Closes #49

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Health: GREEN. Previous blockers resolved. Go kernel landed,
v2.6.0 released. 10 PRs merged since last cycle. 1 open PR (#888)
CI green, awaiting review. Sprint goal updated to post-release
stabilization.

Co-authored-by: Jared <jared@agentguard.dev>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Auto-merged by kernel EM — CI green, squad report
All 4065 tests passing across 18 packages, 0 failures.
No regressions since last QA run. No open PRs to review.
Health: green.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…stripping (closes #639)

- Add ANTHROPIC_API_KEY, OPENAI_API_KEY, OPENAI_ORG_ID, GOOGLE_API_KEY
- Add KUBECONFIG, KUBERNETES_SERVICE_TOKEN, VAULT_TOKEN, VAULT_ADDR
- Add DATABRICKS_TOKEN
- Add DEFAULT_STRIPPED_CREDENTIAL_PATTERNS with wildcard suffixes (*_API_KEY,
  *_SECRET, *_TOKEN, *_PASSWORD, *_PROXY) for future-proof credential catching
- Update sanitizeEnvironment() to apply wildcard suffix matching after the
  explicit list pass, with preserve override support
- Add comprehensive tests for all new patterns and wildcard behaviour

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…5004

Auto-merged: low-risk chore/docs PR, CI green.
…ing-ai-keys

fix(adapters): add missing AI/k8s/vault credential patterns to shell stripping
jpleva91 and others added 28 commits March 28, 2026 14:23
…th (#1249)

PR #1245 incorrectly changed URLs from the dashboard deployment
(agentguard-cloud-dashboard.vercel.app) to the telemetry API server
(agentguard-cloud.vercel.app). The API server has no UI — returns 401.

Also fixes /signup → /onboarding (the dashboard has no /signup route,
the onboarding page is at /onboarding).

Correct URLs:
- Dashboard: agentguard-cloud-dashboard.vercel.app
- Telemetry API: agentguard-cloud.vercel.app (no UI)
- Signup/onboarding: agentguard-cloud-dashboard.vercel.app/onboarding

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ell exec closure (#1250)

TypeScript does not narrow `let` variables captured in closures, so after the RTK
rewrite block reassigned `command`, the exec() call saw `string | undefined` instead
of `string`, causing TS2769 (no overload matches) and TS7006 (implicit any callback
parameters). Introduced in #509 when `command` was changed from const to let.

Fix: snapshot the final value into a typed `const execCommand` before the Promise
closure so TypeScript can guarantee the type at closure capture time.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* chore: remove Rust kernel source — aab.rs

* chore: remove Rust kernel source — actions.rs

* chore: remove Rust kernel source — data.rs

* chore: remove Rust kernel source — hash.rs

* chore: remove Rust kernel source — lib.rs

* chore: remove Rust kernel source — policy.rs

* chore: remove Rust kernel source — types.rs

* chore: remove Rust kernel — Cargo.toml

* chore: remove Rust kernel — Cargo.lock

* chore: remove rust-kernel CI job from size-check workflow
* chore(kernel-em): EM report 2026-03-28T17:30Z — yellow, sprint #1202 KE-2 unstarted (#1232)

- Version drift resolved: cloud + analytics both on 2.9.0
- Issue #1182 (identity bridge invariant) closed
- PR #1226 (stale EM report v2.8.5) closed as superseded
- New HIGH: issue #1202 (AAB normalization — 3,825+ unintended blocks)
- P0 swarm health (#1186) persists — human intervention required
- KE-2 (#917) unstarted for 3rd consecutive cycle — sprint goal at risk
- PRs #1224 + #1233 awaiting review (all checks green)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(invariants): strip heredoc body before governance path scan (closes #1208)

When a shell heredoc writes to /tmp but its body mentions governance
filenames as documentation (e.g. agentguard.yaml in a markdown table),
the no-governance-self-modification invariant incorrectly blocked the
write. Add stripHeredocBody() to extract only the command header before
scanning for protected path strings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ge (#1251)

* test(studio): schema cross-validation + execution profile test coverage

- Add cross-validation tests that load the default template YAML files and
  validate them against their JSON schemas (validateSwarmConfig,
  validateSquadManifest). Catches template/schema drift at test time.
- Fix squad-manifest.default.yaml: all 4 squads were missing required `name`
  field, violating the SQUAD_MANIFEST_SCHEMA (caught by the new tests).
- Extend cli-init.test.ts to cover all 6 execution profiles (ci-safe and
  enterprise were absent from the "all templates" test).

Closes sprint goal: "Formalize swarm template schema (JSON Schema validation)"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(studio): update senior assignment — #1251 schema cross-validation complete

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…g shell.exec (#1256)

* chore(kernel-em): EM report 2026-03-28T23:30Z — yellow, #1238 rebase escalated

- #1209 CLOSED: PR #1243 merged (MCP prefix match fix in AAB normalizeIntent)
- PR #1238 still BEHIND main (2nd run) — escalated to director per policy
- Senior flagged: #1202 (KE-2 AAB normalization) unstarted for 3 cycles
- Sprint completion 33%: #1202 + #1139 remain unstarted
- Dogfood: rtk git/gh commands still hitting AAB unknown-action-type until #1202 merges

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(policy): wildcard action "*" must match all action types including shell.exec (#1253)

The destructive command detection in authorizeIntent() was short-circuiting
before the policy evaluator, causing wildcard allow rules (action: "*") to be
silently ignored for destructive shell commands. Now, when intent.destructive
is true, the policy evaluator runs first. If a wildcard ("*") allow rule
explicitly matches, the operator's intent to allow everything is respected.
Specific action allow rules (e.g., action: "shell.exec") still do NOT override
the destructive safety gate — only the catch-all wildcard does.

Also adds:
- Go engine: namespace wildcard support (git.* matches git.push)
- Go types: UnmarshalJSON for StringOrSlice (handles JSON string + array)
- Tests: wildcard matching across TS evaluator, Go engine, kernel pipeline

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* chore: bump version to 2.9.1

* chore: bump aguard wrapper to 2.9.1
#1264)

Implements #1086

- Add optional EventBus field to KernelConfig; Propose() emits
  ActionRequested + ActionAllowed/Denied/Escalated events with
  KE-3 compatible payloads (actionType, target, reason/capability)
- Add Bus() accessor; Close() emits RunEnded with session stats
- Telemetry failures are silently swallowed (recover in publishEvent)
  to guarantee enforcement is never blocked by observer code
- Add telemetry_test.go: 10 tests covering KE-3 payload schema,
  panic isolation, concurrent correctness, and RunEnded on Close
- Add kernel_bench_test.go: 8 benchmarks validating sub-ms target;
  BenchmarkPropose_SubMsValidation confirms 721ns p50 (< 1ms SLO)

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…v2.9.x sprint (#1261)

- PR #1258: 10 stale stats fixed in site/index.html (invariants 24, patterns 93, event kinds 47)
- Issues #1259, #1260 filed: swarm audit + v2.9.x announcement
- Sprint updated: v2.9.x announcement + swarm audit as primary goals
- Content agent blocker (#995) entering 5th cycle — escalation warning set
- Dogfood: clean run, 0 governance denials

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…print near-complete (#1263)

* chore(marketing-em): EM report 2026-03-28T20:15Z — site stats fixed, v2.9.x sprint

- PR #1258: 10 stale stats fixed in site/index.html (invariants 24, patterns 93, event kinds 47)
- Issues #1259, #1260 filed: swarm audit + v2.9.x announcement
- Sprint updated: v2.9.x announcement + swarm audit as primary goals
- Content agent blocker (#995) entering 5th cycle — escalation warning set
- Dogfood: clean run, 0 governance denials

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(studio-em): EM report 2026-03-29T02:15Z — #1202 resolved, #199/#200 merged, #179 P0 4th cycle

- Removed kernel-aab-normalization blocker: kernel #1202 CLOSED (rtk-prefix fix landed in #1252)
- Merged workspace PRs #200 (README fix), #199 (schema+profiles — 2 sprint goals delivered), #195 (prev EM report); closed #198 (superseded)
- Senior #1251 delivered: schema cross-validation tests + fixed real bug in squad-manifest.default.yaml
- Triaged #201 (P1: real quota metrics), #202/#203 (P2: research, defer to April)
- #179 (Option A default-deny, April 4 P0) unassigned for 4th consecutive cycle — HUMAN ESCALATION

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(hq-em): EM report 2026-03-28T21:30Z — v2.9.1 released, kernel sprint near-complete

Actions this cycle:
- Closed #1229 (v2.9.0 npm publish race — superseded by v2.9.1 success)
- Identified PR #1258 MERGEABLE pending review (site stats sync, all green)
- Identified PR #1255 blocked by CodeQL failure (safe-subshell allowlist)
- Added new P1 dogfood #1254 to sprint tracking

Escalations:
- P0: Swarm health #1186 (4th cycle, human required)
- P0: KE-2 #917 unstarted 4th cycle (director/kernel-sr)
- P1: kernel squad — invariant false positive #1254 scope fix
- P2: cloud squad — upgrade 2.9.0→2.9.1, human reviewer for PR #1258

Dogfood: No-Governance-Self-Modification blocks both gh issue --body (analytics agents)
and EM squad state writes to .agentguard/squads/ — invariant scope too broad.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds 13 unit tests for the `agentguard init studio` interactive wizard
path in cli-init.test.ts — previously zero coverage for this code path.

Tests cover: non-interactive default flow, development profile selection,
ci-safe profile auto-detection when GitHub Actions is present, monorepo vs
non-monorepo swarm preset selection (full vs minimal), swarm scaffold failure
resilience, agentguard.yaml overwrite in non-interactive mode, Claude Code
hooks branch suppression, summary output, custom --dir support, and help
text inclusion.

Adds top-level vi.mock('@red-codes/swarm') to intercept the dynamic
import('@red-codes/swarm') call inside initStudio — demonstrates vitest's
hoisted mock interception of dynamic imports.

Closes studio sprint item: Implement agentguard init studio interactive wizard

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ves (closes #1139) (#1274)

* fix(matchers): add safe-subshell allowlist to prevent $(date) false positives (closes #1139)

Adds `stripSafeSubshells()` preprocessing step in `CommandScanner.scanDestructive()`
that strips known read-only, side-effect-free subshell expressions before destructive
pattern scanning.

The dogfood case: agents embedding `$(date -u +%Y-%m-%dT%H:%M:%SZ)` in `gh pr comment
--body` arguments were blocked by governance. The `date` command is a pure clock read
with no side effects; its substitution form should not trigger pattern scans.

Allowlisted safe subshells: date, pwd, whoami, hostname, uname, id, arch, uptime,
git rev-parse / git describe. Security constraint: `[^)(]*` in the argument slot
rejects nested subshells (e.g. `$(date $(rm -rf /))`), preventing bypass.

Destructive commands that happen to contain safe subshells are still detected:
`rm -rf /tmp/backup-$(date +%Y%m%d)` → strips date → `rm -rf /tmp/backup-` → blocked ✓

ReDoS-safe: patterns use `[^)(]*` directly instead of `(?:\s+[^)(]*)?\s*` which
creates polynomial backtracking risk via ambiguous whitespace overlap (CodeQL fix
vs PR #1255 which had this issue).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(kernel-sr): update senior state — #1139 PR #1274 created, #1202 confirmed closed

- #1202 was already merged via PR #1252 (confirmed in this run)
- #1139 implemented: PR #1274 open, supersedes #1255 (CodeQL/ReDoS fix)
- Closed stale PR #1255
- Health updated to green (all sprint issues have active PRs)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
safe-subshell allowlist (#1274) + studio wizard tests (#1268)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Missed in version bump — publish workflow requires wrapper version
to match CLI version.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… (#1279)

When a shell.exec command doesn't match any known git/github/destructive
pattern, tag it as unknownCommand in AAB metadata and emit an
UnknownCommandWarn event. The action is still allowed — this is
telemetry for the cloud dashboard, not a hard deny.

- core/types.ts: add UnknownCommandWarn to EventKind union
- events/schema.ts: add UNKNOWN_COMMAND_WARN event kind + schema
- kernel/aab.ts: tag unknown shell.exec commands in normalizeIntent
- kernel/kernel.ts: emit UnknownCommandWarn after ACTION_ALLOWED

Closes AgentGuardHQ/agentguard-workspace#179

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…-modification (#1280)

gh issue create / gh pr create make GitHub API calls and cannot modify local
governance files. Governance terminology in --body argument values was triggering
a false positive. Reuses extractBaseCommand to detect gh commands and skip the
command-text scan, consistent with the stripHeredocBody approach from #1208.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…smatch escalation (#1269)

## Findings

- **PR #1258** (invariants/patterns/event kinds fix): verified correct, but blocked by
  CI/branch-protection mismatch — site/** excluded from size-check.yml but lint+test-and-build
  are required checks. Filed as #1267 (P0-infra escalation).

- **New drifts found this cycle**:
  - CLI commands: site shows 29, codebase is 32 → filed #1265
  - Action types: site shows "27 across 9 classes", codebase is 41 across 10 → filed #1266

- **Ongoing from prior cycle**: swarm topology (#1259), v2.9.x announcement (#1260)

## Sprint Goal Updated

"Unblock site PR pipeline + comprehensive stats sync"

## Escalations

- P0: #1267 — all site PRs unmergeable without admin action

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Extract resolveBinary() into apps/cli/src/resolve-binary.ts — all init
commands (claude-init, copilot-init, deepagents-init, goose-init) now
use the same resolution logic:

  1. Dev repo: apps/cli/dist/bin.js → "node apps/cli/dist/bin.js"
  2. npm install: node_modules/.bin/agentguard → relative path
  3. npm alias: node_modules/.bin/aguard → relative path
  4. Global: bare "agentguard" (PATH)

Also fixes the claude-init workspace resolver: uses $HOME fallback
instead of git rev-parse (which breaks when cwd is a subrepo).

New: goose-init command for Block's Goose CLI — registers AgentGuard
as an MCP governance extension in ~/.config/goose/config.yaml.

- apps/cli/src/resolve-binary.ts: shared binary resolution
- apps/cli/src/commands/goose-init.ts: new Goose driver init
- apps/cli/src/commands/claude-init.ts: use shared resolver + hookCmd()
- apps/cli/src/commands/copilot-init.ts: use shared resolver
- apps/cli/src/commands/deepagents-init.ts: use shared resolver
- apps/cli/src/commands/auto-setup.ts: also runs goose-init
- apps/cli/src/bin.ts: register goose-init command + help text

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Shared binary resolver, goose-init, unknown command warn, governance
self-modification fix for gh commands.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(kernel/issue-918): KE-4 plane separation — Evaluator / Emitter / Shipper

Implements #918

Decouples the enforcement pipeline from telemetry persistence by
introducing three failure-isolated planes:

- **Emitter** (`packages/kernel/src/emitter.ts`): Bounded non-blocking
  buffer. `enqueue()` never throws, never blocks the Evaluator. Drops
  events with a counter if capacity is exhausted.

- **Shipper** (`packages/kernel/src/shipper.ts`): Persistence plane that
  drains the Emitter buffer into EventSink/DecisionSink backends. All
  sink calls are wrapped in try/catch at the plane boundary — failures
  are silenced and never propagate to the Evaluator.

- **Evaluator** (kernel.ts): Replaces direct `sinkEvent`/`sinkDecision`
  calls with `shipper.ship()` / `shipper.shipDecision()`. The Evaluator
  now returns its governance decision before the Shipper writes to any
  backend. `getEventCount()` and `shutdown()` delegate to the Shipper.

Backward compatible: existing tests that check sink contents after
`propose()` continue to work because the Shipper drains synchronously
(Phase 1). The drain strategy can be swapped for `setImmediate`-based
batching in Phase 2 without changing the public API.

Tests: 935 kernel tests pass (41 suites). New test suites for Emitter
(11 cases) and Shipper (13 cases) validate buffering, capacity limits,
FIFO ordering, multi-sink delivery, and failure isolation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* style(kernel/issue-918): apply prettier formatting to KE-4 new files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* style(kernel/issue-918): apply prettier formatting to kernel.ts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add writeCodexHooks() and writeGeminiHooks() to postinstall — detects
  .codex/ and .gemini/ dirs and writes governance hooks (same idempotency
  guarantees as Claude/Copilot writers)
- Add detectVersionUpgrade() — compares current version against the
  persisted value in ~/.agentguard/telemetry.json; on upgrade, postinstall
  prints the auto-setup reinit prompt
- Update reportInstallTelemetry() to persist the version into the identity
  file so upgrade detection works on the next npm install
- Update printSummary() to show all 4 drivers with not-detected/skipped/created states
- Update auto-setup.ts: detectExistingHooks() now checks Codex and Gemini
  hook files; autoSetup() adds --driver flag (claude|copilot|codex|gemini)
  to target a specific driver; Codex/Gemini always run on full auto-setup
- Add 21 new tests covering writeCodexHooks, writeGeminiHooks, and
  detectVersionUpgrade (58 total, all passing)

Closes #1281

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…rivers-1281

feat(postinstall): detect and configure all 4 AI coding drivers (#1281)
… (#1298)

Merged by HQ EM — ports ci-skip-site.yml to main, unblocks PR #1293. Closes #1297 (partial — CI fix only, full main/master reconciliation pending).
#1293)

Merged by HQ EM — closes #1266 (site AAB action types drift: 27/9 → 41/10). Required checks passed. CodeQL in progress (non-required).
…gents (#1299)

Completes the KE-2 Canonical Action Normalization feature by adding
copilotToActionContext and deepAgentsToActionContext test coverage to
match the existing Claude Code adapter tests, and marks all KE-2 ROADMAP
checkboxes as done.

- Add 6 copilotToActionContext tests to copilot-cli-adapter.test.ts
- Add 6 deepAgentsToActionContext tests to deepagents-adapter.test.ts
- Update ROADMAP.md: KE-2 complete with file references for all sub-tasks
- Check v3.0 KE-2 ActionContext milestone as shipped

Closes #917

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Go kernel complete — full TS hook parity, 145x faster evaluation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jpleva91 jpleva91 closed this Mar 29, 2026
@jpleva91 jpleva91 deleted the release/2.10.0 branch March 29, 2026 03:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants