Skip to content

feat: add ext refac and sandbox#25

Merged
pedronauck merged 7 commits into
mainfrom
pn/ext
Apr 16, 2026
Merged

feat: add ext refac and sandbox#25
pedronauck merged 7 commits into
mainfrom
pn/ext

Conversation

@pedronauck
Copy link
Copy Markdown
Member

@pedronauck pedronauck commented Apr 16, 2026

Summary by CodeRabbit

  • New Features

    • Operator-facing Resources API: CRUD for bundles, activations, automation (jobs/triggers), bridge instances, agents, skills, MCP servers.
    • Resource-backed automation/bridge definitions with reconciliation and projection.
    • Environment profiles: configurable backends, sync/persistence, network and Daytona settings.
    • CLI: workspace add/edit --environment flag; session listing and outputs show Environment/Backend.
  • Bug Fixes

    • Webhook handlers now verify signatures and reject unauthorized requests.

@pedronauck pedronauck self-assigned this Apr 16, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 16, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 232e24f2-3d2a-4986-9280-2d7c2a202ffb

📥 Commits

Reviewing files that changed from the base of the PR and between 8086aeb and 72a8326.

⛔ Files ignored due to path filters (49)
  • .compozy/tasks/ext-parity/reviews-001/_meta.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_001.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_002.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_003.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_004.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_005.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_006.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_007.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_008.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_009.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_010.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_011.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_012.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_013.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_014.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_015.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_016.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_017.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_018.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_019.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_020.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_021.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_022.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_023.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_024.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_025.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_026.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_027.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_028.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_029.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_030.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_031.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_032.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_033.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_034.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_035.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_036.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_037.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_038.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_039.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_040.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_041.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_042.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_043.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_044.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_045.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_046.md is excluded by !**/*.md
  • extensions/bridges/gchat/extension.toml is excluded by !**/*.toml
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (75)
  • .env.example
  • extensions/bridges/discord/provider.go
  • extensions/bridges/discord/provider_test.go
  • extensions/bridges/gchat/provider.go
  • extensions/bridges/gchat/provider_test.go
  • extensions/bridges/github/provider.go
  • extensions/bridges/github/provider_test.go
  • extensions/bridges/linear/runtime_test.go
  • extensions/bridges/slack/provider.go
  • extensions/bridges/slack/provider_test.go
  • extensions/bridges/teams/provider_test.go
  • extensions/bridges/telegram/provider_test.go
  • extensions/bridges/whatsapp/provider_test.go
  • go.mod
  • internal/acp/client.go
  • internal/acp/client_integration_test.go
  • internal/acp/client_test.go
  • internal/acp/handlers.go
  • internal/acp/handlers_test.go
  • internal/acp/launcher.go
  • internal/acp/launcher_tool_host_test.go
  • internal/acp/permission.go
  • internal/acp/tool_host.go
  • internal/acp/types.go
  • internal/api/contract/contract.go
  • internal/api/contract/contract_test.go
  • internal/api/contract/resources.go
  • internal/api/contract/responses.go
  • internal/api/core/conversions.go
  • internal/api/core/conversions_parsers_test.go
  • internal/api/core/errors.go
  • internal/api/core/handlers.go
  • internal/api/core/handlers_test.go
  • internal/api/core/interfaces.go
  • internal/api/core/memory_workspace_test.go
  • internal/api/core/more_coverage_test.go
  • internal/api/core/resources.go
  • internal/api/core/resources_test.go
  • internal/api/core/workspaces.go
  • internal/api/httpapi/handlers.go
  • internal/api/httpapi/handlers_test.go
  • internal/api/httpapi/helpers_test.go
  • internal/api/httpapi/httpapi_integration_test.go
  • internal/api/httpapi/resources_test.go
  • internal/api/httpapi/routes.go
  • internal/api/httpapi/server.go
  • internal/api/httpapi/server_test.go
  • internal/api/spec/resources_test.go
  • internal/api/spec/spec.go
  • internal/api/testutil/apitest.go
  • internal/api/udsapi/handlers_test.go
  • internal/api/udsapi/helpers_test.go
  • internal/api/udsapi/resources_test.go
  • internal/api/udsapi/routes.go
  • internal/api/udsapi/server.go
  • internal/api/udsapi/udsapi_integration_test.go
  • internal/automation/manager.go
  • internal/automation/resource.go
  • internal/automation/resource_projection.go
  • internal/automation/resource_test.go
  • internal/bridges/managed_sync.go
  • internal/bridges/managed_sync_test.go
  • internal/bridges/resource.go
  • internal/bridges/resource_projection.go
  • internal/bridges/resource_test.go
  • internal/bridgesdk/test_helpers_test.go
  • internal/bundles/resource.go
  • internal/bundles/resource_integration_test.go
  • internal/bundles/resource_projection.go
  • internal/bundles/resource_store.go
  • internal/bundles/resource_store_test.go
  • internal/bundles/resource_test.go
  • internal/bundles/service.go
  • internal/bundles/service_test.go
  • internal/cli/cli_integration_test.go

Walkthrough

Introduces a resource-driven desired-state system (resources, codecs, projection plans, stores, and projectors) across bundles, automation, bridges, agents/skills, and MCP servers; adds environment profiles and ACP launcher/tool-host abstractions; wires resource APIs, server routing, daemon boot/reconcile, and extensive tests.

Changes

Cohort / File(s) Summary
Resource API & DTOs
internal/api/contract/resources.go, internal/api/contract/responses.go, internal/api/spec/spec.go, internal/api/contract/contract.go
Added resource request/response DTOs, OpenAPI registration for resource endpoints, and session-environment payload fields.
Core resource handlers & interfaces
internal/api/core/resources.go, internal/api/core/interfaces.go, internal/api/core/errors.go, internal/api/core/*_test.go
Added ResourceService interface, HTTP handlers/parsers for List/Get/Put/Delete resources, error→status mapping, and extensive tests.
HTTP/UDS server wiring
internal/api/httpapi/*, internal/api/udsapi/*, internal/api/spec/*, internal/api/testutil/apitest.go
Wired ResourceService and AgentCatalog into servers, added options (WithResourceService/WithAgentCatalog/WithResourceOperatorAuth), conditional route registration based on operator auth, and test helpers/stubs.
Resource framework (kernel, codecs, stores)
internal/resources usages across many files, internal/api/testutil/apitest.go
Added typed-kind codecs, codec registry usage, typed stores and test stubs to support resource operations (referenced broadly).
Bundles / Activation resources
internal/bundles/resource.go, internal/bundles/resource_projection.go, internal/bundles/resource_store.go, internal/bundles/*
Typed bundle/activation codecs, projection plan and apply, ResourceStore that fans out owned jobs/triggers/bridges, apply/cleanup logic, and unit/integration tests; Service refactored to resource APIs.
Automation resources & manager
internal/automation/resource.go, internal/automation/resource_projection.go, internal/automation/manager.go, internal/automation/resource_test.go
Added job/trigger resource codecs, projection build/apply, manager option to enable resource-definitions, and routing of CRUD to resource-backed flows with tests.
Bridges resources & managed sync
internal/bridges/resource.go, internal/bridges/resource_projection.go, internal/bridges/managed_sync.go, internal/bridges/resource_test.go
BridgeInstance resource codec/validation, projection plan/apply, ManagedResourceSyncService for reconciliation against typed store, semantic JSON equality, and tests.
Daemon boot & resource integration
internal/daemon/boot.go, internal/daemon/*_resources.go, internal/daemon/*_resources_test.go, internal/daemon/bridges.go
Boot refactor to construct resource kernel/codecs/projectors, run resource reconciliation during boot, wire publishers/hook bindings/reconcile triggers, and update runtime reconcile/apply and rollback semantics with tests.
ACP launcher & ToolHost
internal/acp/launcher.go, internal/acp/tool_host.go, internal/acp/client.go, internal/acp/handlers.go, internal/acp/types.go, internal/acp/*test.go
Added Launcher/Handle abstraction, NewLocalLauncher, local ToolHost, Driver options WithLauncher/WithToolHost, and refactored process/terminal/file operations to use tool host abstractions with tests.
Daemon agent/skill & automation resource publishers
internal/daemon/agent_skill_resources.go, internal/daemon/automation_resources.go, internal/daemon/*_resources_test.go
Publishers/projectors to sync agents, skills, MCPs, jobs, triggers into resource kernel and tests for sync/boot behavior.
Resource projection helpers & stores
internal/bridges/resource_projection.go, internal/bundles/resource_*, internal/bundles/resource_store.go
Projection plan builders/appliers and ResourceStore logic to atomically replace/project desired runtime state and fan-out activations; many helpers and tests.
Config & environments
internal/config/*.go, internal/config/*_test.go
Added environment profiles, ResolveEnvironment, extensions.resources policy and rate-limit settings, agent/MCP resource codecs, TOML overlay changes, and tests.
CLI & UX
internal/cli/session.go, internal/cli/workspace.go, internal/cli/*test.go
Added environment display and session environment backend fields, --environment workspace flags, updated CLI outputs and tests.
Small provider/test fixes & deps
extensions/bridges/*, internal/bridgesdk/test_helpers_test.go, go.mod, .env.example
Provider tweaks (GChat token env rename, batcher map allocation changes), GitHub webhook signature verification for comment handlers, added SessionNonce to initialize requests in tests, go.mod dependency bumps, and .env.example Daytona API key placeholder.
Many tests added/updated
numerous *_test.go files across packages
Extensive new and updated unit/integration tests exercising resource codecs, stores, projections, handler behavior, server routing, boot, and ACP/tool-host behavior.

Sequence Diagram(s)

sequenceDiagram
    autonumber
    participant ReconcileDriver
    participant ResourceKernel
    participant Projector
    participant ResourceStore
    participant RuntimeStore

    ReconcileDriver->>ResourceKernel: List records(kind)
    ResourceKernel-->>ReconcileDriver: []records
    ReconcileDriver->>Projector: Build(ctx, records)
    Projector->>RuntimeStore: Read current runtime/store state
    RuntimeStore-->>Projector: current instances
    Projector->>Projector: compute ProjectionPlan (revision, ops, changed)
    Projector-->>ReconcileDriver: plan
    ReconcileDriver->>Projector: Apply(ctx, plan)
    Projector->>ResourceStore: Replace/Apply desired instances
    ResourceStore-->>Projector: ack
    Projector-->>ReconcileDriver: Apply complete
Loading
sequenceDiagram
    autonumber
    participant Client
    participant HTTPHandler
    participant ResourceService
    participant CodecRegistry
    participant RawStore
    participant ReconcileTrigger

    Client->>HTTPHandler: PUT /api/resources/{kind}/{id}
    HTTPHandler->>ResourceService: Put(ctx, draft)
    ResourceService->>CodecRegistry: Resolve codec for kind
    CodecRegistry-->>ResourceService: codec
    ResourceService->>ResourceService: Validate & canonicalize spec
    ResourceService->>RawStore: PutRaw(draft)
    RawStore-->>ResourceService: record
    ResourceService->>ReconcileTrigger: Trigger(kind, reason)
    ReconcileTrigger-->>ResourceService: ack
    ResourceService-->>HTTPHandler: record
    HTTPHandler-->>Client: 200/201 ResourceResponse
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

  • feat: add automation #16: Overlapping automation resource work — job/trigger codecs, manager changes, and projection integration.
  • refactor: add extensions gaps #21: Related bundle/bridge resource and managed-sync changes (activation fanout, bridge managed sync, projection/apply semantics).
  • feat: add extensability #13: Extension/runtime and manifest changes that interact with provider metadata validation and boot-time extension wiring.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 16

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
go.mod (1)

10-132: ⚠️ Potential issue | 🟡 Minor

Add vulnerability scanning to the build process for the expanded dependency graph.

This PR significantly increases transitive dependencies (Daytona SDK v0.166.0, AWS SDK v2, OpenTelemetry, gRPC/protobuf, NATS, MongoDB v2). Vulnerability scanning is not currently configured—neither in CI (no workflows exist) nor in the local Mage build system. Consider adding a vulnerability scanning step (e.g., go run golang.org/x/vuln/cmd/govulncheck@latest ./... or osv-scanner) to the build/verification pipeline when CI is established, or to a new Mage target for local scanning.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@go.mod` around lines 10 - 132, The project added many transitive deps but has
no vulnerability scanning in CI or Mage; add a vuln-scan step by creating a CI
workflow (e.g., GitHub Actions) that runs "go run
golang.org/x/vuln/cmd/govulncheck@latest ./..." against the module and/or add a
Mage target (e.g., function ScanVulnerabilities or target "vuln:scan") that
invokes govulncheck (or an alternative like osv-scanner) so maintainers can run
local scans; ensure the workflow/target fails the build on findings and document
invocation in README or Magefile comments.
internal/api/core/memory_workspace_test.go (1)

338-457: ⚠️ Potential issue | 🟡 Minor

Assert environment_ref in the returned workspace payloads too.

These cases verify that EnvironmentRef reaches Register/Update, but they never check the HTTP response body. A regression in the workspace-to-contract mapping would still pass even though this PR changes that API field.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/core/memory_workspace_test.go` around lines 338 - 457, Add
assertions that the returned contract.WorkspacePayload includes the
EnvironmentRef set in the request ("daytona-dev") wherever a workspace payload
is decoded: specifically update the "Should create a workspace" test to assert
payload.Workspace.EnvironmentRef == "daytona-dev", the "Should list workspaces"
test to assert payload.Workspaces[0].EnvironmentRef == "daytona-dev", the
"Should update a workspace via the service" test to assert
payload.Workspace.EnvironmentRef == "daytona-dev", and the "Should resolve a
workspace path via the service" test to assert payload.Workspace.EnvironmentRef
== "daytona-dev" so regressions in workspace-to-contract mapping are caught
(refer to contract.WorkspacePayload and the payload variables in each test).
🟡 Minor comments (11)
internal/api/httpapi/httpapi_integration_test.go-199-225 (1)

199-225: ⚠️ Potential issue | 🟡 Minor

Close the success-path response bodies.

putResp.Body and deleteResp.Body are only closed inside the failure branches. Because this integration runtime reuses a shared http.Client, leaving them open can pin connections and make later requests or shutdown behavior flaky.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/httpapi/httpapi_integration_test.go` around lines 199 - 225, The
test leaves HTTP response bodies open on the success path for putResp and
deleteResp; after calling mustHTTPRequest (which returns *http.Response)
immediately register a close (e.g., defer putResp.Body.Close() and defer
deleteResp.Body.Close() or use t.Cleanup to close each body) so the response
bodies are always closed regardless of the success/failure branch; update the
block that creates putResp and deleteResp (references: putResp, deleteResp,
mustHTTPRequest, runtime.client) to close their Body in all code paths.
internal/bundles/resource_test.go-71-72 (1)

71-72: ⚠️ Potential issue | 🟡 Minor

Make the wrong-plan failure assertion specific.

err != nil will pass for any unrelated failure inside Apply, so this does not prove the type-check branch is exercised. Please assert the expected error type or at least an identifying substring.

As per coding guidelines, "**/*_test.go: MUST have specific error assertions (ErrorContains, ErrorAs)`."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/bundles/resource_test.go` around lines 71 - 72, The test currently
only checks err != nil after calling service.Apply with a
nonBundleActivationPlan; change the assertion to verify the specific failure by
matching the expected error type or substring (e.g., use errors.As to assert a
concrete error type or t.ErrorContains / assert.ErrorContains with the expected
message). Update the assertion around the service.Apply(context.Background(),
nonBundleActivationPlan{}) call to use ErrorAs or ErrorContains against the
known activation-type error (or its identifying substring) so the test proves
the wrong-plan branch is exercised.
internal/config/mcp_resource.go-27-29 (1)

27-29: ⚠️ Potential issue | 🟡 Minor

Wrap validation failures with operation context

Line 28 and Line 52 currently return raw errors; wrapping here would preserve call-site intent and align with project error rules.

Suggested error wrapping
 import (
 	"context"
+	"fmt"
 	"strings"
@@
 	if err := normalizedScope.Validate("scope"); err != nil {
-		return MCPServer{}, err
+		return MCPServer{}, fmt.Errorf("validate mcp_server scope: %w", err)
 	}
@@
 	if err := normalized.Validate("mcp_server"); err != nil {
-		return MCPServer{}, err
+		return MCPServer{}, fmt.Errorf("validate mcp_server spec: %w", err)
 	}

As per coding guidelines: Use explicit error returns with wrapped context: fmt.Errorf("context: %w", err).

Also applies to: 51-53

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/config/mcp_resource.go` around lines 27 - 29, The validation errors
returned from normalizedScope.Validate("scope") (and the other Validate call
around lines 51-53) should be wrapped with contextual operation text instead of
returning the raw error; replace direct returns like `return MCPServer{}, err`
with wrapped errors using fmt.Errorf, e.g. `fmt.Errorf("validating scope: %w",
err)`, so callers get both the original error and the operation context; ensure
you import fmt if not already imported.
internal/config/mcp_resource_test.go-90-92 (1)

90-92: ⚠️ Potential issue | 🟡 Minor

Protect Args[0] assertion with a length check

Line 90 can panic if canonicalization or validation starts rejecting/emptying args in future changes.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/config/mcp_resource_test.go` around lines 90 - 92, Protect the
test's access to record.Spec.Args[0] by first asserting the slice has at least
one element: check len(record.Spec.Args) > 0 and fail the test with a clear
message if not, then perform the existing comparison of record.Spec.Args[0] ==
"--stdio"; update the assertion in mcp_resource_test.go so the test cannot panic
if canonicalization or validation makes Args empty or shorter.
internal/api/core/handlers.go-403-406 (1)

403-406: ⚠️ Potential issue | 🟡 Minor

Handle os.ErrNotExist in catalog-backed ListAgents

GetAgent already maps not-found correctly, but ListAgents currently returns 500 for all catalog errors. Mapping not-found to 200 {agents: []} would keep behavior consistent with the filesystem fallback.

Suggested status mapping
 	agentDefs, err := h.AgentCatalog.ListAgents(c.Request.Context())
 	if err != nil {
+		if errors.Is(err, os.ErrNotExist) {
+			c.JSON(http.StatusOK, contract.AgentsResponse{Agents: []contract.AgentPayload{}})
+			return
+		}
 		h.respondError(c, http.StatusInternalServerError, err)
 		return
 	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/core/handlers.go` around lines 403 - 406, ListAgents currently
treats all catalog errors as 500; change the error handling after calling
h.AgentCatalog.ListAgents(ctx) to detect os.ErrNotExist (use errors.Is(err,
os.ErrNotExist)) and map that case to a 200 response with an empty agents array
(consistent with GetAgent/filesystem fallback) instead of calling
h.respondError; keep existing behavior for other errors and still call
h.respondError for those.
internal/config/agent_resource_test.go-115-117 (1)

115-117: ⚠️ Potential issue | 🟡 Minor

Guard slice access before asserting MCP server fields

Line 115 assumes at least one MCP server and can panic if normalization/filtering behavior changes, which makes failures less diagnosable.

Safer assertion pattern
+	if len(got.MCPServers) == 0 {
+		t.Fatalf("MCPServers = %#v, want at least one MCP server", got.MCPServers)
+	}
 	if got.MCPServers[0].Name != "github" || got.MCPServers[0].Command != "npx" {
 		t.Fatalf("MCPServers = %#v, want trimmed name/command", got.MCPServers)
 	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/config/agent_resource_test.go` around lines 115 - 117, The test code
in the MCPServers assertion does not check if the MCPServers slice is non-empty
before accessing its first element, risking a panic if the slice is empty. To
fix this, add a guard condition before the existing assertion to verify that the
MCPServers slice length is greater than zero. This should be done before the
field checks in the test function where the current assertion uses
got.MCPServers[0].Name and got.MCPServers[0].Command.
internal/config/mcp_resource_test.go-27-29 (1)

27-29: ⚠️ Potential issue | 🟡 Minor

Assert the specific validation failure, not only non-nil error

This test currently passes on any decode/validate error, including unrelated regressions.

Suggested assertion tightening
 import (
 	"path/filepath"
+	"strings"
 	"testing"
@@
 	if err == nil {
 		t.Fatal("codec.DecodeAndValidate() error = nil, want missing command failure")
 	}
+	if !strings.Contains(err.Error(), "mcp_server.command") {
+		t.Fatalf("codec.DecodeAndValidate() error = %v, want command validation error", err)
+	}

As per coding guidelines: MUST have specific error assertions (ErrorContains, ErrorAs).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/config/mcp_resource_test.go` around lines 27 - 29, The test
currently only checks err != nil after calling codec.DecodeAndValidate(), which
allows any decode/validation error to pass; tighten the assertion to verify the
specific validation failure by asserting the error contains the expected message
or matches the expected validation error type (e.g., use ErrorContains(t, err,
"missing command") or errors.As to check for the specific validation error) so
that codec.DecodeAndValidate() is validated for the exact "missing command"
failure rather than any error.
internal/config/agent_resource.go-48-50 (1)

48-50: ⚠️ Potential issue | 🟡 Minor

Use errors.Join() to preserve the validation error in the unwrap chain.

Line 49 wraps resources.ErrValidation with %w, but formats the validation error using %v, which removes it from the error chain. This breaks errors.As() for the original validation failure. Use errors.Join() instead to preserve both errors, consistent with the codebase's error handling pattern.

Suggested fix
+import "errors"
+
 	if err := normalized.Validate(); err != nil {
-		return AgentDef{}, fmt.Errorf("%w: %v", resources.ErrValidation, err)
+		return AgentDef{}, errors.Join(
+			resources.ErrValidation,
+			fmt.Errorf("validate agent resource spec: %w", err),
+		)
 	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/config/agent_resource.go` around lines 48 - 50, Replace the current
wrapping of the validation error in the normalized.Validate() check so the
original error stays in the unwrap chain: when normalized.Validate() returns
err, return AgentDef{} and use errors.Join(resources.ErrValidation, err) instead
of fmt.Errorf("%w: %v", resources.ErrValidation, err); also add a import for the
"errors" package (and remove/adjust "fmt" if it becomes unused). This ensures
resources.ErrValidation and the original validation error are both preserved for
errors.As()/errors.Is().
internal/automation/resource.go-43-56 (1)

43-56: ⚠️ Potential issue | 🟡 Minor

Wrap validation errors with resource-specific context.

These paths currently return raw scope/binding/spec errors, which makes job-vs-trigger failures harder to diagnose once they bubble out of the codec. Wrap each failing step before returning it.

As per coding guidelines, "Use explicit error returns with wrapped context: fmt.Errorf("context: %w", err)".

Also applies to: 59-72

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/automation/resource.go` around lines 43 - 56, The validation
pipeline in validateJobResourceSpec returns raw errors from scope.Validate,
bindAutomationScope, and next.Validate, making it hard to tell which resource
failed; update validateJobResourceSpec to wrap each returned error with
resource-specific context using fmt.Errorf (e.g., return Job{},
fmt.Errorf("validateJobResourceSpec: scope validation: %w", err)) for the calls
to normalizedScope.Validate("scope"), bindAutomationScope(&next.Scope,
&next.WorkspaceID, normalizedScope, "job"), and next.Validate("job"); apply the
same wrapped-error pattern to the analogous function handling lines 59-72 so all
scope/bind/spec errors include explicit resource context.
internal/bridges/resource_test.go-84-92 (1)

84-92: ⚠️ Potential issue | 🟡 Minor

Strengthen these negative-path assertions.

These cases mostly pass on “any non-nil error”, so the tests stay green even if the wrong validation branch fails. Please assert the expected error type/message per case so the suite actually pins the business rule being exercised.

As per coding guidelines, "MUST have specific error assertions (ErrorContains, ErrorAs)".

Also applies to: 187-193, 492-533

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/bridges/resource_test.go` around lines 84 - 92, The test loop
currently only asserts that codec.DecodeAndValidate(testutil.Context(t),
tt.scope, tt.raw) returns a non-nil error; change each negative-case assertion
to assert the specific error using t.Fatalf or the testify/require helpers
(e.g., require.ErrorContains or errors.As/require.ErrorAs) against the expected
message/type in the table entry (tt.expectedErr / tt.wantErr or add such a field
to each test case), so replace the generic nil-check in the t.Run closure with a
targeted assertion that the returned error matches the expected error string or
concrete error type for codec.DecodeAndValidate (and apply the same pattern to
the other failing blocks mentioned).
internal/bundles/resource_store.go-600-615 (1)

600-615: ⚠️ Potential issue | 🟡 Minor

Potential issue: scope comparison in sameEncodedSpec is always true.

The comparison scope == scope.Normalize() on line 614 compares the scope to itself (normalized), which will always be true if the scope was already normalized. This seems like it should compare record.Scope to the expected scope for the desired spec instead.

🐛 Proposed fix for scope comparison
 func sameEncodedSpec[T any](
 	codec resources.KindCodec[T],
 	scope resources.ResourceScope,
 	current T,
 	desired T,
 ) bool {
 	currentJSON, err := codec.Encode(current)
 	if err != nil {
 		return false
 	}
 	desiredJSON, err := codec.Encode(desired)
 	if err != nil {
 		return false
 	}
-	return bytes.Equal(currentJSON, desiredJSON) && scope == scope.Normalize()
+	return bytes.Equal(currentJSON, desiredJSON)
 }

The scope comparison is redundant here since callers already compare scopes before calling this function (e.g., lines 428, 461, 494).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/bundles/resource_store.go` around lines 600 - 615, The scope
equality check in sameEncodedSpec is incorrect/redundant: remove the comparison
"scope == scope.Normalize()" from the return and simply return
bytes.Equal(currentJSON, desiredJSON); keep the existing error handling around
codec.Encode, and retain use of scope.Normalize() only if you later need to
normalize/compare a different scope value (e.g., record.Scope) — for now delete
the scope comparison in sameEncodedSpec to avoid the always-true
self-comparison.
🧹 Nitpick comments (19)
extensions/bridges/github/provider_test.go (1)

1050-1054: Test name no longer matches behavior

The test is still named TestGitHubProviderReconcileRejectsSharedWebhookPaths, but it now asserts shared paths are accepted. Please rename it to reflect the new contract (e.g., ...AllowsSharedWebhookPaths) to avoid future misreads.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@extensions/bridges/github/provider_test.go` around lines 1050 - 1054, Rename
the test function TestGitHubProviderReconcileRejectsSharedWebhookPaths to
reflect the new behavior (for example
TestGitHubProviderReconcileAllowsSharedWebhookPaths) and update any in-test
description strings or t.Run subtest names that mention
"RejectsSharedWebhookPaths" so they match the new contract; ensure references to
the old name (function identifier and any string literals) are updated
accordingly (e.g., in provider_test.go where
TestGitHubProviderReconcileRejectsSharedWebhookPaths is defined and invoked).
extensions/bridges/teams/provider_test.go (1)

1255-1262: Wait for ready state in the polling predicate to reduce flakiness.

This currently waits for “any state” and asserts readiness afterward. If an intermediate non-ready state is written first, the test can fail intermittently.

Proposed tweak
  states := waitForJSONLinesFile[stateMarker](
  	t,
  	env.statePath,
- 	func(items []stateMarker) bool { return len(items) >= 1 },
+ 	func(items []stateMarker) bool {
+ 		return len(items) >= 1 &&
+ 			items[len(items)-1].Status.Normalize() == bridgepkg.BridgeStatusReady
+ 	},
  )
- if got, want := states[len(states)-1].Status.Normalize(), bridgepkg.BridgeStatusReady; got != want {
- 	t.Fatalf("states[last].Status = %q, want %q", got, want)
- }
+ if len(states) == 0 {
+ 	t.Fatal("states = empty, want at least one state marker")
+ }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@extensions/bridges/teams/provider_test.go` around lines 1255 - 1262, The test
currently waits for any state then asserts readiness afterwards, which can race;
update the polling predicate passed to waitForJSONLinesFile to wait until the
latest state is Ready. Specifically, change the anonymous predicate in the call
to waitForJSONLinesFile(stateMarker) so it returns true only when len(items) >=
1 AND items[len(items)-1].Status.Normalize() == bridgepkg.BridgeStatusReady
(using symbols stateMarker, waitForJSONLinesFile, and
bridgepkg.BridgeStatusReady), and then remove the separate readiness assertion
that follows.
go.mod (1)

77-77: Consider updating the daytona SDK if gorilla/websocket pseudo-version drift is a concern.

The gorilla/websocket pseudo-version is an indirect dependency pulled transitively through github.com/daytonaio/daytona/libs/sdk-go/pkg/daytona with no direct imports in this codebase. The version constraint is controlled by the daytona SDK, not by this project. If supply-chain risk from the pseudo-version is a concern, you would need to update the daytona SDK version or explicitly pin gorilla/websocket at the expense of potentially conflicting with daytona's requirements.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@go.mod` at line 77, The indirect pseudo-version of
github.com/gorilla/websocket is coming via the daytona SDK
(github.com/daytonaio/daytona/libs/sdk-go/pkg/daytona); to address
pseudo-version drift either update the daytona SDK dependency to a newer release
that pins a stable websocket version or explicitly add/replace a direct
requirement for github.com/gorilla/websocket in go.mod to a desired stable
version (or use a replace directive) while verifying there are no conflicts with
daytona; pick one approach, update go.mod accordingly, run go mod tidy, and
ensure tests/build pass.
internal/acp/client.go (1)

181-189: Wrap launcher failures with agent/process context.

This returns the launcher error verbatim, which drops the agent and command that failed to start. Wrapping it here would make startup failures much easier to triage.

As per coding guidelines, Use explicit error returns with wrapped context: fmt.Errorf("context: %w", err).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/acp/client.go` around lines 181 - 189, The launcher.Launch call
returns errors verbatim; wrap that error with agent/process context before
returning so we don't lose which agent/command failed. After calling
launcher.Launch(...) (using LaunchSpec fields like normalized.Command,
normalized.Cwd, normalized.AdditionalDirs, normalized.Env), replace the bare
"return nil, err" with a wrapped error using fmt.Errorf to include the
agent/process id and the command (e.g., fmt.Errorf("failed to launch agent %s
command %q: %w", agentIDOrName, normalized.Command, err)) so callers get
actionable context.
internal/api/core/conversions_parsers_test.go (1)

63-66: Strengthen environment assertions to cover all mapped fields.

You set Profile, State, and InstanceID in the fixture but don’t assert them. Adding checks here would catch partial mapping regressions.

Suggested test assertion enhancement
-	if payload.Environment == nil || payload.Environment.EnvironmentID != "env-1" ||
-		payload.Environment.Backend != "local" || payload.Environment.LastSyncError != "sync failed" {
+	if payload.Environment == nil || payload.Environment.EnvironmentID != "env-1" ||
+		payload.Environment.Backend != "local" || payload.Environment.Profile != "local" ||
+		payload.Environment.State != "prepared" || payload.Environment.InstanceID != "instance-1" ||
+		payload.Environment.LastSyncError != "sync failed" {
 		t.Fatalf("environment = %#v", payload.Environment)
 	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/core/conversions_parsers_test.go` around lines 63 - 66, The
environment assertion block in conversions_parsers_test.go only checks
EnvironmentID, Backend and LastSyncError; extend it to assert the remaining
mapped fields set in the fixture by checking payload.Environment.Profile,
payload.Environment.State and payload.Environment.InstanceID (verify they equal
the fixture values, e.g. "profile-1", "active" and "inst-1" respectively) so the
test fails on any partial mapping regressions.
internal/api/core/handlers_test.go (1)

364-387: Add compile-time interface verification for stubAgentCatalog.

This test double is standing in for the handler’s agent catalog abstraction; a compile-time assertion would make interface drift fail immediately instead of weakening the fixture silently.

As per coding guidelines, "Use compile-time interface verification: var _ Interface = (*Type)(nil)."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/core/handlers_test.go` around lines 364 - 387, Add a
compile-time interface assertion for the test double to catch interface drift:
insert a statement of the form `var _ <AgentCatalogInterface> =
(*stubAgentCatalog)(nil)` near the `stubAgentCatalog` type definition (replace
<AgentCatalogInterface> with the actual handler agent catalog interface name
used by the handlers), so the compiler will verify `stubAgentCatalog` implements
that interface.
internal/api/core/more_coverage_test.go (1)

254-491: Prefer a table-driven t.Run("Should...") matrix here.

These branches differ mostly by fixture wiring and expected status, so the repetition makes the coverage harder to scan and extend than necessary. Folding them into a table-driven subtest matrix would keep the intent tighter and the failures more localized.

As per coding guidelines, "**/*_test.go: Use table-driven tests with subtests (t.Run) as default" and "MUST use t.Run(\"Should...\") pattern for ALL test cases`."

Also applies to: 493-544

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/core/more_coverage_test.go` around lines 254 - 491, The test
TestBaseHandlersHealthAndDaemonStatusErrorBranches contains many repetitive
t.Run subtests; refactor into a table-driven subtest matrix that uses the
t.Run("Should ...") naming pattern. Create a slice of test cases describing the
fixture setup (session manager ListAllFn, observer HealthFn, automation
StatusFn, Network service and Config.Network.Enabled, DreamTrigger), the
endpoint to call ("/observe/health" or "/daemon/status"), and the expected HTTP
status; then iterate test cases and for each case build the fixture via
newHandlerFixture or newHandlerFixtureWithAutomation, call performRequest, and
assert resp.Code equals the expected status. Ensure each subtest uses
t.Run("Should ...", func(t *testing.T){...}) and reference the same unique
symbols used now (TestBaseHandlersHealthAndDaemonStatusErrorBranches,
newHandlerFixture, newHandlerFixtureWithAutomation, performRequest,
fixture.Handlers.Network, fixture.Handlers.Config.Network.Enabled) so the
behavior and individual failure messages remain clear.
internal/daemon/automation_resources.go (1)

26-27: Avoid any(...) for this type assertion

You can assert directly from runtime without widening to any.

Suggested simplification
-	target, ok := any(runtime).(automationResourceProjectorTarget)
+	target, ok := runtime.(automationResourceProjectorTarget)

As per coding guidelines: Never use interface{}/any when a concrete type is known.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/daemon/automation_resources.go` around lines 26 - 27, The type
assertion is widening `runtime` to any before asserting to
automationResourceProjectorTarget; change the assertion to assert directly from
runtime (e.g., target, ok := runtime.(automationResourceProjectorTarget)) so you
avoid using any/interface{} when the concrete target type is known; update the
branch that follows to continue using target and ok as before.
internal/api/httpapi/helpers_test.go (1)

125-145: Consider extracting shared resource-handler test config

Both constructors duplicate nearly the full handlerConfig setup; a small internal helper would reduce maintenance drift.

Also applies to: 157-177

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/httpapi/helpers_test.go` around lines 125 - 145, Tests duplicate
nearly identical handlerConfig construction for newHandlers; extract a shared
helper function (e.g., makeTestHandlerConfig or mustNewHandlers) that builds and
returns the configured handlerConfig or directly returns newHandlers(...) used
by tests, and update both call sites to use that helper. Ensure the helper sets
fields shown in the diff (sessions, tasks, observer, resources, workspaces,
staticFS, homePaths, config, logger, startedAt, now, pollInterval, agentLoader,
httpPort) and keep test-specific overrides possible by accepting optional params
or returning the config for modification before creating handlers.
internal/config/agent_resource_test.go (1)

26-27: Use t.Run("Should...") style for subtest names

The current case labels work, but they miss the enforced test naming convention used in this repo.

As per coding guidelines: MUST use t.Run("Should...") pattern for ALL test cases.

Also applies to: 33-34, 40-41, 49-50

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/config/agent_resource_test.go` around lines 26 - 27, The subtest
labels in agent_resource_test.go use plain descriptions ("missing name", etc.)
but must follow the repo convention of t.Run("Should..."); update each
table-driven subtest invocation to call t.Run with a name that starts with
"Should" (e.g., t.Run("Should return error for missing name")), specifically for
the cases currently labeled at the shown snippets (the cases around the entries
with name: "missing name" and the others at the mentioned locations), keeping
the same test logic and only changing the subtest name strings to the
"Should..." format so the test harness and conventions are satisfied.
internal/api/udsapi/udsapi_integration_test.go (1)

1265-1394: Replace the polling sleeps in the new wait helpers.

These helpers now gate several resource-projection assertions, but fixed time.Sleep() polling still makes the suite flaky on slow CI and slower than necessary on fast runs. Expose a reconciliation/projector signal and wait on that instead of sleeping.

As per coding guidelines, Never use time.Sleep() in orchestration — use proper synchronization primitives.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/udsapi/udsapi_integration_test.go` around lines 1265 - 1394, The
helpers use time.Sleep polling which causes flakiness; instead add a
synchronization signal on integrationRuntime (e.g., a channel or wait method
like integrationRuntime.waitForProjection()/waitForReconcile() that the
projector/reconciler closes/sends to after each projection) and replace the
time.Sleep loops in waitForAutomationJobPrompt, waitForAutomationJobMissing,
waitForAutomationTriggerPrompt, waitForAutomationTriggerMissing and
waitForProjectedToolRevision to select on that signal with a time.After
deadline; keep the same overall timeout semantics and still re-query the API or
snapshot only after receiving the projection/reconcile signal so tests no longer
busy-wait.
internal/daemon/bridge_resources.go (1)

68-87: Silent nil return may mask configuration issues.

The function returns nil, nil when either raw or codecs is nil. This silent behavior could mask misconfiguration during daemon boot, making debugging harder. Consider returning an explicit error or logging a warning when this occurs.

♻️ Suggested improvement
 func bridgeInstanceResourceStore(
 	raw resources.RawStore,
 	codecs *resources.CodecRegistry,
 ) (resources.Store[bridgepkg.BridgeInstanceSpec], error) {
 	if raw == nil || codecs == nil {
-		return nil, nil
+		return nil, fmt.Errorf("daemon: bridge instance resource store requires raw store and codec registry")
 	}

Alternatively, if nil is intentional for optional initialization, add a comment explaining the design choice.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/daemon/bridge_resources.go` around lines 68 - 87, The function
bridgeInstanceResourceStore currently returns nil, nil when its dependencies raw
or codecs are nil which can hide misconfiguration; update it to return a
descriptive error instead of silent nil (e.g., validate inputs at the top and
return fmt.Errorf("daemon: missing raw store or codec registry") when raw==nil
|| codecs==nil), or if nil is intentional, add a clear comment above
bridgeInstanceResourceStore explaining that behavior; reference the parameters
raw and codecs and keep the later ResolveCodec
(resources.ResolveCodec[bridgepkg.BridgeInstanceSpec]) and NewStore
(resources.NewStore) logic unchanged.
internal/bridges/managed_sync.go (1)

538-540: JSON equality check may produce false negatives for semantically equivalent JSON.

The managedSyncJSONEqual function compares JSON as trimmed strings. This works for identical serializations but will return false for semantically equivalent JSON with different formatting (e.g., {"a":1} vs {"a": 1}). If provider configs or delivery defaults are serialized differently across sources, this could cause unnecessary updates.

If this is intentional for detecting any serialization differences, consider adding a comment. Otherwise, consider canonical JSON comparison:

♻️ Suggested canonical JSON comparison
func managedSyncJSONEqual(left json.RawMessage, right json.RawMessage) bool {
    if len(left) == 0 && len(right) == 0 {
        return true
    }
    var leftVal, rightVal any
    if err := json.Unmarshal(left, &leftVal); err != nil {
        return false
    }
    if err := json.Unmarshal(right, &rightVal); err != nil {
        return false
    }
    leftCanonical, _ := json.Marshal(leftVal)
    rightCanonical, _ := json.Marshal(rightVal)
    return bytes.Equal(leftCanonical, rightCanonical)
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/bridges/managed_sync.go` around lines 538 - 540, The function
managedSyncJSONEqual currently compares json.RawMessage by trimmed string which
yields false negatives for semantically equivalent JSON; change
managedSyncJSONEqual to perform a canonical JSON comparison by handling empty
inputs, unmarshalling both left and right into interface{} (any), returning
false on unmarshal errors, then re-marshalling each to canonical JSON and
comparing the resulting bytes (use bytes.Equal) so formatting/spacing
differences don't trigger diffs.
internal/daemon/agent_skill_resources.go (1)

588-631: Silent encode errors in comparison methods may cause unnecessary updates.

The sameAgent, sameSkill, and sameMCPServer methods return false when encoding fails, treating encode errors as "resource changed". While this is safe (it will trigger an update), it could mask codec issues and cause repeated unnecessary writes on every sync cycle if the codec consistently fails.

Consider logging encode errors at debug level to aid troubleshooting:

♻️ Suggested improvement
 func (s *agentSkillSourceSyncer) sameAgent(
 	record resources.Record[aghconfig.AgentDef],
 	scope resources.ResourceScope,
 	encoded []byte,
 ) bool {
 	if record.Scope != scope {
 		return false
 	}
 	currentEncoded, err := s.agentCodec.Encode(record.Spec)
 	if err != nil {
+		s.logger.Debug("agent encode comparison failed", "id", record.ID, "error", err)
 		return false
 	}
 	return bytes.Equal(currentEncoded, encoded)
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/daemon/agent_skill_resources.go` around lines 588 - 631, Encode
errors in sameAgent, sameSkill, and sameMCPServer are currently swallowed (they
just return false), which can hide codec failures and cause repeated unnecessary
updates; update each method to log the encoding error at debug level before
returning false — use the existing codec fields (agentCodec, skillCodec,
mcpCodec) and the syncer logger (e.g., s.logger or s.log) to emit a debug
message that includes the method name (sameAgent/sameSkill/sameMCPServer), the
error, and identifying info from the record (e.g., record.ID or record key) so
failures are visible while preserving the existing false return.
internal/bundles/service.go (1)

665-714: Preload bundle resources once per request/reconcile instead of listing them per activation.

This lookup path does a fresh ListBundleResources(ctx) for every activation resolution. On larger activation sets that turns reconcile into repeated full-store scans, and different activations can be resolved against different bundle snapshots inside the same operation.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/bundles/service.go` around lines 665 - 714, The
resolveActivationDefinition currently calls findBundleResource which calls
s.store.ListBundleResources for every activation; change this to preload the
bundle resource list once per request/reconcile and reuse it for all activation
resolutions. Add a request-scoped cache (or a preload step) that populates a
slice/map of resources via ListBundleResources (e.g., preloadBundleResources or
set s.bundleResourceCache) and modify findBundleResource and
resolveActivationDefinition to consult that cache instead of calling
ListBundleResources repeatedly; ensure the cache is populated before resolving
activations and fall back to a single ListBundleResources call if the cache is
empty.
internal/daemon/agent_skill_resources_integration_test.go (1)

276-282: Consider using testutil.Context(t) in cleanup for consistency.

The cleanup function uses context.Background() directly. While this is acceptable for cleanup scenarios (to ensure cleanup runs even if the test context is canceled), consider whether testutil.Context(t) with a separate timeout would be more consistent with the codebase patterns.

 	t.Cleanup(func() {
-		if err := driver.Close(context.Background()); err != nil {
+		ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+		defer cancel()
+		if err := driver.Close(ctx); err != nil {
 			t.Fatalf("driver.Close() error = %v", err)
 		}
 	})
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/daemon/agent_skill_resources_integration_test.go` around lines 276 -
282, Cleanup uses context.Background() directly; replace it with a test-scoped
context from testutil to keep patterns consistent. In the t.Cleanup closure,
create a context via testutil.Context(t) (optionally with a short timeout if
desired) and pass that context to driver.Close (...) instead of
context.Background(); update the closure referencing driver.Close and
testutil.Context(t) so the cleanup uses the test-scoped context.
internal/daemon/boot.go (2)

1070-1092: Consider consolidating the repeated sync pattern.

The syncExtensionResourcePublishers function has a repetitive pattern of nil-check-then-sync. Consider extracting a helper to reduce duplication.

♻️ Optional refactor to reduce repetition
func syncPublisher(ctx context.Context, publisher interface{ Sync(context.Context) error }) error {
    if publisher == nil {
        return nil
    }
    return publisher.Sync(ctx)
}

func syncExtensionResourcePublishers(ctx context.Context, state *bootState) error {
    for _, p := range []interface{ Sync(context.Context) error }{
        state.agentSkillResources,
        state.hookBindings,
        state.toolMCPResources,
        state.bundleResources,
    } {
        if err := syncPublisher(ctx, p); err != nil {
            return err
        }
    }
    return nil
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/daemon/boot.go` around lines 1070 - 1092, The repeated
nil-check-and-Sync pattern in syncExtensionResourcePublishers can be
consolidated: add a small helper like syncPublisher that accepts the interface{
Sync(context.Context) error } and returns nil if the passed publisher is nil or
forwards the call to publisher.Sync(ctx); then rewrite
syncExtensionResourcePublishers to iterate over the slice of publishers
(state.agentSkillResources, state.hookBindings, state.toolMCPResources,
state.bundleResources) calling syncPublisher for each and returning any error
immediately; reference the helper name syncPublisher and the existing function
syncExtensionResourcePublishers and the fields state.agentSkillResources,
state.hookBindings, state.toolMCPResources, state.bundleResources when making
the change.

405-416: Potential nil dereference if resourceReconcile is set after this callback is created.

The trigger callback captures state.resourceReconcile by reference, but resourceReconcile is set later in bootResourceReconcile. The nil check inside the callback handles this correctly, but it creates a subtle ordering dependency. Consider documenting this expectation or restructuring to make the dependency explicit.

// The callback correctly handles nil but relies on resourceReconcile being set 
// later in the boot sequence (by bootResourceReconcile).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/daemon/boot.go` around lines 405 - 416, The callback passed to
state.bridges.setResourceDefinitions closes over state.resourceReconcile which
may be set later by bootResourceReconcile, creating an ordering dependency;
introduce a small stable accessor to avoid the capture problem: add a method on
state (e.g., State.triggerResourceReconcile(ctx, kind, reason) or
State.getResourceReconcile()) that safely reads state.resourceReconcile (with
any needed sync/atomic) and invokes Trigger if non-nil, then replace the inline
anonymous callback in setResourceDefinitions with a call to that method;
alternatively move bootResourceReconcile to run before calling
state.bridges.setResourceDefinitions, but prefer the accessor/wrapper approach
for clarity and safety.
internal/api/core/resources.go (1)

354-360: Consider whether masking internal errors as 400 is always appropriate.

The statusForResourceRequestError function maps 500 Internal Server Error to 400 Bad Request. This could mask legitimate server-side issues during request parsing. Consider whether specific error types should preserve their original status.

// If StatusForResourceError returns 500, it might indicate a real server error
// rather than a client request error. Consider logging these cases.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/core/resources.go` around lines 354 - 360, The current
statusForResourceRequestError function unconditionally remaps a
StatusForResourceError result of http.StatusInternalServerError to
http.StatusBadRequest; instead, change it to preserve the original 500 for
genuine server-side errors and only remap when the error is a known
client-parsing type—update statusForResourceRequestError to call
StatusForResourceError(err), inspect the returned status and/or the underlying
error type (from err) to decide whether to convert 500->400 (only for identified
client parsing/validation errors), otherwise return the original 500, and add a
process/log call when StatusForResourceError returns
http.StatusInternalServerError so server errors are recorded for debugging.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: e7222471-8423-4796-88eb-95f6798a5602

📥 Commits

Reviewing files that changed from the base of the PR and between 2e22e66 and 2277250.

⛔ Files ignored due to path filters (6)
  • extensions/bridges/gchat/extension.toml is excluded by !**/*.toml
  • go.sum is excluded by !**/*.sum
  • internal/environment/daytona/VALIDATION.md is excluded by !**/*.md
  • openapi/agh.json is excluded by !**/*.json
  • sdk/typescript/src/generated/contracts.ts is excluded by !**/generated/**
  • web/src/generated/agh-openapi.d.ts is excluded by !**/generated/**
📒 Files selected for processing (270)
  • extensions/bridges/discord/provider.go
  • extensions/bridges/gchat/provider.go
  • extensions/bridges/gchat/provider_test.go
  • extensions/bridges/github/provider.go
  • extensions/bridges/github/provider_test.go
  • extensions/bridges/linear/runtime_test.go
  • extensions/bridges/slack/provider.go
  • extensions/bridges/slack/provider_test.go
  • extensions/bridges/teams/provider_test.go
  • extensions/bridges/telegram/provider_test.go
  • extensions/bridges/whatsapp/provider_test.go
  • go.mod
  • internal/acp/client.go
  • internal/acp/client_integration_test.go
  • internal/acp/client_test.go
  • internal/acp/handlers.go
  • internal/acp/launcher.go
  • internal/acp/launcher_tool_host_test.go
  • internal/acp/permission.go
  • internal/acp/tool_host.go
  • internal/acp/types.go
  • internal/api/contract/contract.go
  • internal/api/contract/contract_test.go
  • internal/api/contract/resources.go
  • internal/api/contract/responses.go
  • internal/api/core/conversions.go
  • internal/api/core/conversions_parsers_test.go
  • internal/api/core/errors.go
  • internal/api/core/handlers.go
  • internal/api/core/handlers_test.go
  • internal/api/core/interfaces.go
  • internal/api/core/memory_workspace_test.go
  • internal/api/core/more_coverage_test.go
  • internal/api/core/resources.go
  • internal/api/core/resources_test.go
  • internal/api/core/workspaces.go
  • internal/api/httpapi/handlers.go
  • internal/api/httpapi/handlers_test.go
  • internal/api/httpapi/helpers_test.go
  • internal/api/httpapi/httpapi_integration_test.go
  • internal/api/httpapi/resources_test.go
  • internal/api/httpapi/routes.go
  • internal/api/httpapi/server.go
  • internal/api/spec/resources_test.go
  • internal/api/spec/spec.go
  • internal/api/testutil/apitest.go
  • internal/api/udsapi/handlers_test.go
  • internal/api/udsapi/helpers_test.go
  • internal/api/udsapi/resources_test.go
  • internal/api/udsapi/routes.go
  • internal/api/udsapi/server.go
  • internal/api/udsapi/udsapi_integration_test.go
  • internal/automation/manager.go
  • internal/automation/resource.go
  • internal/automation/resource_projection.go
  • internal/automation/resource_test.go
  • internal/bridges/managed_sync.go
  • internal/bridges/resource.go
  • internal/bridges/resource_projection.go
  • internal/bridges/resource_test.go
  • internal/bridgesdk/test_helpers_test.go
  • internal/bundles/resource.go
  • internal/bundles/resource_integration_test.go
  • internal/bundles/resource_projection.go
  • internal/bundles/resource_store.go
  • internal/bundles/resource_store_test.go
  • internal/bundles/resource_test.go
  • internal/bundles/service.go
  • internal/bundles/service_test.go
  • internal/cli/cli_integration_test.go
  • internal/cli/session.go
  • internal/cli/workspace.go
  • internal/cli/workspace_test.go
  • internal/config/agent_resource.go
  • internal/config/agent_resource_test.go
  • internal/config/bootstrap.go
  • internal/config/config.go
  • internal/config/config_test.go
  • internal/config/mcp_resource.go
  • internal/config/mcp_resource_test.go
  • internal/config/merge.go
  • internal/config/merge_test.go
  • internal/daemon/agent_skill_resources.go
  • internal/daemon/agent_skill_resources_integration_test.go
  • internal/daemon/agent_skill_resources_test.go
  • internal/daemon/automation_resources.go
  • internal/daemon/boot.go
  • internal/daemon/bridge_resources.go
  • internal/daemon/bridges.go
  • internal/daemon/bridges_test.go
  • internal/daemon/bundle_resources.go
  • internal/daemon/bundle_resources_test.go
  • internal/daemon/daemon.go
  • internal/daemon/daemon_integration_test.go
  • internal/daemon/daemon_test.go
  • internal/daemon/environment_reconcile.go
  • internal/daemon/environment_reconcile_integration_test.go
  • internal/daemon/environment_reconcile_test.go
  • internal/daemon/extensions.go
  • internal/daemon/hook_agent_events.go
  • internal/daemon/hook_binding_resources.go
  • internal/daemon/hook_binding_resources_integration_test.go
  • internal/daemon/hook_binding_resources_test.go
  • internal/daemon/hook_bindings.go
  • internal/daemon/hooks_bridge.go
  • internal/daemon/notifier_test.go
  • internal/daemon/task_runtime.go
  • internal/daemon/tool_mcp_resources.go
  • internal/daemon/tool_mcp_resources_integration_test.go
  • internal/environment/daytona/doc.go
  • internal/environment/daytona/env.go
  • internal/environment/daytona/launcher.go
  • internal/environment/daytona/provider.go
  • internal/environment/daytona/provider_integration_test.go
  • internal/environment/daytona/provider_test.go
  • internal/environment/daytona/sdk.go
  • internal/environment/daytona/sdk_test.go
  • internal/environment/daytona/shell.go
  • internal/environment/daytona/ssh.go
  • internal/environment/daytona/ssh_test.go
  • internal/environment/daytona/ssh_token_test.go
  • internal/environment/daytona/ssh_validation_test.go
  • internal/environment/daytona/state.go
  • internal/environment/daytona/sync.go
  • internal/environment/daytona/tar.go
  • internal/environment/daytona/tar_test.go
  • internal/environment/daytona/tool_host.go
  • internal/environment/daytona/transport.go
  • internal/environment/local/provider.go
  • internal/environment/local/provider_test.go
  • internal/environment/providertest/suite.go
  • internal/environment/providertest/suite_test.go
  • internal/environment/registry.go
  • internal/environment/registry_test.go
  • internal/environment/types.go
  • internal/environment/types_test.go
  • internal/extension/bridge_delivery_integration_test.go
  • internal/extension/bundle_additional_test.go
  • internal/extension/capability.go
  • internal/extension/capability_test.go
  • internal/extension/contract/host_api.go
  • internal/extension/contract/sdk.go
  • internal/extension/describe.go
  • internal/extension/gchat_provider_integration_test.go
  • internal/extension/host_api.go
  • internal/extension/host_api_bridges_render_test.go
  • internal/extension/host_api_integration_test.go
  • internal/extension/host_api_resources.go
  • internal/extension/host_api_test.go
  • internal/extension/linear_provider_integration_test.go
  • internal/extension/manager.go
  • internal/extension/manager_integration_test.go
  • internal/extension/manager_test.go
  • internal/extension/manifest.go
  • internal/extension/manifest_test.go
  • internal/extension/protocol/host_api.go
  • internal/extension/protocol/host_api_test.go
  • internal/extension/reference_integration_test.go
  • internal/extension/registry.go
  • internal/extension/registry_bundles_test.go
  • internal/extension/registry_test.go
  • internal/extension/resource_publication.go
  • internal/extension/resource_publication_test.go
  • internal/extension/surfaces/registry.go
  • internal/extension/surfaces/registry_test.go
  • internal/extension/telegram_reference_integration_test.go
  • internal/extensiontest/bridge_adapter_harness.go
  • internal/hooks/agent_event.go
  • internal/hooks/binding_state.go
  • internal/hooks/dispatch.go
  • internal/hooks/events.go
  • internal/hooks/events_test.go
  • internal/hooks/hooks.go
  • internal/hooks/hooks_test.go
  • internal/hooks/introspection.go
  • internal/hooks/introspection_test.go
  • internal/hooks/matcher.go
  • internal/hooks/matcher_test.go
  • internal/hooks/normalize.go
  • internal/hooks/payloads.go
  • internal/hooks/payloads_test.go
  • internal/hooks/types.go
  • internal/network/delivery_integration_test.go
  • internal/network/tasks.go
  • internal/observe/observer.go
  • internal/observe/reconcile.go
  • internal/resources/codec.go
  • internal/resources/doc.go
  • internal/resources/errors.go
  • internal/resources/kernel.go
  • internal/resources/kernel_integration_test.go
  • internal/resources/kernel_test.go
  • internal/resources/projector.go
  • internal/resources/reconcile.go
  • internal/resources/reconcile_integration_test.go
  • internal/resources/reconcile_test.go
  • internal/resources/schema.go
  • internal/resources/typed.go
  • internal/resources/typed_integration_test.go
  • internal/resources/typed_test.go
  • internal/resources/types.go
  • internal/resources/validate.go
  • internal/session/environment.go
  • internal/session/environment_exec.go
  • internal/session/hooks.go
  • internal/session/interfaces.go
  • internal/session/manager.go
  • internal/session/manager_environment_test.go
  • internal/session/manager_hooks_test.go
  • internal/session/manager_integration_test.go
  • internal/session/manager_lifecycle.go
  • internal/session/manager_prompt.go
  • internal/session/manager_start.go
  • internal/session/manager_stop_integration_test.go
  • internal/session/manager_test.go
  • internal/session/manager_workspace.go
  • internal/session/notifier.go
  • internal/session/query.go
  • internal/session/query_test.go
  • internal/session/resume_repair.go
  • internal/session/resume_repair_test.go
  • internal/session/session.go
  • internal/session/session_test.go
  • internal/skills/loader.go
  • internal/skills/registry.go
  • internal/skills/registry_external.go
  • internal/skills/registry_test.go
  • internal/skills/resource.go
  • internal/skills/resource_test.go
  • internal/store/globaldb/global_db.go
  • internal/store/globaldb/global_db_automation.go
  • internal/store/globaldb/global_db_automation_test.go
  • internal/store/globaldb/global_db_bridge.go
  • internal/store/globaldb/global_db_bridges_test.go
  • internal/store/globaldb/global_db_bundles.go
  • internal/store/globaldb/global_db_bundles_test.go
  • internal/store/globaldb/global_db_extra_test.go
  • internal/store/globaldb/global_db_resources_integration_test.go
  • internal/store/globaldb/global_db_resources_test.go
  • internal/store/globaldb/global_db_session.go
  • internal/store/globaldb/global_db_session_test.go
  • internal/store/globaldb/global_db_task_graph_audit_test.go
  • internal/store/globaldb/global_db_task_test.go
  • internal/store/globaldb/global_db_test.go
  • internal/store/globaldb/global_db_workspace.go
  • internal/store/globaldb/migrate_workspace.go
  • internal/store/meta_test.go
  • internal/store/store_helpers_test.go
  • internal/store/types.go
  • internal/subprocess/handshake.go
  • internal/subprocess/handshake_test.go
  • internal/subprocess/process_test.go
  • internal/tools/resource.go
  • internal/tools/resource_test.go
  • internal/workspace/clone.go
  • internal/workspace/resolver.go
  • internal/workspace/resolver_crud.go
  • internal/workspace/resolver_integration_test.go
  • internal/workspace/resolver_test.go
  • internal/workspace/workspace.go
  • internal/workspace/workspace_test.go
  • sdk/examples/telegram-reference/main_test.go
  • sdk/typescript/src/extension.test.ts
  • sdk/typescript/src/extension.ts
  • sdk/typescript/src/host-api.test.ts
  • sdk/typescript/src/host-api.ts
  • sdk/typescript/src/index.ts
  • sdk/typescript/src/integration.test.ts
  • sdk/typescript/src/testing/harness.ts
  • sdk/typescript/src/types.ts
💤 Files with no reviewable changes (2)
  • internal/acp/permission.go
  • extensions/bridges/github/provider.go

Comment thread extensions/bridges/discord/provider.go Outdated
Comment thread extensions/bridges/github/provider_test.go
Comment thread internal/acp/handlers.go
Comment thread internal/acp/handlers.go
Comment thread internal/acp/launcher.go
Comment thread internal/config/mcp_resource.go
Comment thread internal/daemon/automation_resources.go Outdated
Comment thread internal/daemon/bridges.go Outdated
Comment thread internal/daemon/bridges.go Outdated
Comment thread internal/daemon/bridges.go
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 11

🧹 Nitpick comments (7)
internal/bridges/managed_sync.go (1)

168-170: Wrap source validation errors with method context.

Line 169 returns normalizedSource.Validate() directly, which loses caller context in logs and error chains.

Proposed fix
 	normalizedSource := source.Normalize()
 	if err := normalizedSource.Validate(); err != nil {
-		return resources.MutationActor{}, "", err
+		return resources.MutationActor{}, "", fmt.Errorf("bridges: validate managed resource sync source: %w", err)
 	}

As per coding guidelines, "**/*.go: Use explicit error returns with wrapped context: fmt.Errorf(\"context: %w\", err)".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/bridges/managed_sync.go` around lines 168 - 170, The call returning
normalizedSource.Validate() should wrap the error with contextual method info
instead of returning err directly; change the return that currently does `return
resources.MutationActor{}, "", err` to return a wrapped error using
fmt.Errorf("managed_sync <method>: validate normalizedSource: %w", err) (or use
the actual surrounding function name) so the error chain contains caller
context; locate the call to normalizedSource.Validate() and update the return to
wrap the error with fmt.Errorf and %w.
internal/automation/resource_projection.go (2)

474-476: Consider tolerating not-found errors when deleting webhook secrets.

DeleteTriggerWebhookSecret is called unconditionally, but non-webhook triggers won't have an associated secret. If the store returns an error for missing secrets, this will fail unnecessarily.

Compare with line 700-703 where ErrTriggerWebhookSecretNotFound is explicitly tolerated during managed sync cleanup.

♻️ Proposed fix to tolerate not-found errors
-	if err := m.store.DeleteTriggerWebhookSecret(ctx, current.ID); err != nil {
+	if err := m.store.DeleteTriggerWebhookSecret(ctx, current.ID); err != nil &&
+		!errors.Is(err, ErrTriggerWebhookSecretNotFound) {
 		return err
 	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/automation/resource_projection.go` around lines 474 - 476, The
unconditional call to m.store.DeleteTriggerWebhookSecret(ctx, current.ID) should
tolerate the store's "not found" result; change the error handling so that if
DeleteTriggerWebhookSecret returns ErrTriggerWebhookSecretNotFound you ignore it
and continue, otherwise return the error. Locate the DeleteTriggerWebhookSecret
invocation and replace the single-return-on-error with a conditional check
against ErrTriggerWebhookSecretNotFound (same pattern used around
ErrTriggerWebhookSecretNotFound handling near the managed sync cleanup) so
non-webhook triggers do not cause failures.

669-672: Webhook secret synced before unchanged check.

The webhook secret is synced before checking if the trigger definition is unchanged (lines 674-680). This ensures secrets are always consistent but performs potentially redundant work for unchanged triggers.

This appears intentional for consistency guarantees. Consider adding a brief comment explaining this design choice if it's intentional.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/automation/resource_projection.go` around lines 669 - 672, The call
to syncManagedTriggerWebhookSecret(ctx, Trigger{}, next, secret) is
intentionally performed before the "unchanged" check to guarantee webhook
secrets in desiredSecrets are always reconciled even when trigger definitions
are unchanged; add a brief comment immediately above this call referencing
syncManagedTriggerWebhookSecret, the Trigger{} placeholder and
next/desiredSecrets to state that this ordering is deliberate for secret
consistency and idempotency (or, if you prefer, move the sync after the
unchanged check and document the tradeoff). Ensure the comment explains the
design choice and that redundant syncs are acceptable to keep secrets
consistent.
internal/automation/resource_test.go (1)

17-91: Consider using t.Run("Should...") subtests for each validation case.

The test validates multiple codec rejection scenarios inline. Per coding guidelines, tests should use t.Run("Should...") pattern for all test cases. This improves failure isolation and test readability.

As per coding guidelines: "MUST use t.Run("Should...") pattern for ALL test cases".

♻️ Example refactor for one subtest
+	t.Run("Should reject job with scope mismatch", func(t *testing.T) {
+		t.Parallel()
 		jobWithScopeMismatch := validJob
 		jobWithScopeMismatch.WorkspaceID = "ws-other"
 		if _, err := jobCodec.DecodeAndValidate(
 			ctx,
 			workspaceScope,
 			mustAutomationJSON(t, jobWithScopeMismatch),
 		); !errors.Is(err, resources.ErrInvalidScopeBinding) {
 			t.Fatalf("job scope mismatch error = %v, want ErrInvalidScopeBinding", err)
 		} else if !strings.Contains(err.Error(), "automation: bind job resource scope") {
 			t.Fatalf("job scope mismatch error = %v, want bind job resource scope context", err)
 		}
+	})
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/automation/resource_test.go` around lines 17 - 91, Refactor
TestAutomationResourceCodecsRejectInvalidSpecs to split each validation scenario
into its own t.Run subtest (e.g., "Should reject job scope mismatch", "Should
reject malformed job schedule", "Should reject trigger with bad filter", "Should
reject webhook without endpoint"); keep the existing setup (jobCodec,
triggerCodec, ctx, workspaceScope, validJob/validTrigger) outside/above the
subtests, call t.Parallel() at the top of the parent test (and optionally inside
each subtest if desired), and move each DecodeAndValidate call and its
subsequent error assertions into the corresponding t.Run body while preserving
the exact error checks against resources.ErrInvalidScopeBinding and the
strings.Contains checks on the error messages.
internal/acp/handlers_test.go (2)

1233-1281: Test double implements ToolHost interface correctly.

The contextAwareToolHost provides minimal stub implementations for all interface methods while allowing injection of custom CreateTerminal behavior. This is a clean approach for focused testing.

Consider adding compile-time interface verification to ensure the test double stays in sync with the interface:

💡 Suggested enhancement
 type contextAwareToolHost struct {
 	createTerminalFn func(context.Context, acpsdk.CreateTerminalRequest) (acpsdk.CreateTerminalResponse, error)
 }
+
+var _ ToolHost = contextAwareToolHost{}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/acp/handlers_test.go` around lines 1233 - 1281, Add a compile-time
interface assertion to ensure contextAwareToolHost implements the ToolHost
interface: after the contextAwareToolHost type declaration, add a line that
assigns a *contextAwareToolHost to a ToolHost typed nil (e.g., the common var _
ToolHost = (*contextAwareToolHost)(nil) pattern) so the compiler will fail if
the test double falls out of sync with ToolHost.

691-692: Missing t.Parallel() in test function.

TestNetworkTurnTerminalOwnershipGuards does not call t.Parallel(), unlike most other tests in this file. This may be intentional due to environment manipulation (t.Setenv), but if so, a comment explaining why would be helpful.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/acp/handlers_test.go` around lines 691 - 692,
TestNetworkTurnTerminalOwnershipGuards is missing t.Parallel(); either add
t.Parallel() at the top of the test to run it in parallel like the other tests,
or if the test intentionally manipulates global environment (e.g., uses t.Setenv
or mutates shared state) add a brief comment above the test explaining why it
must be serial and keep t.Parallel() omitted; locate the
TestNetworkTurnTerminalOwnershipGuards function and update it accordingly (add
t.Parallel() as the first statement or add the explanatory comment).
internal/acp/launcher_tool_host_test.go (1)

370-429: fakeHandle implementation is correct but missing interface verification.

The fakeHandle properly implements the Handle interface with pipe management and sync.Once for safe finish semantics. Consider adding compile-time interface verification.

💡 Suggested enhancement
+var _ environment.Handle = (*fakeHandle)(nil)
+
 type fakeHandle struct {
 	cwd          string
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/acp/launcher_tool_host_test.go` around lines 370 - 429, Add a
compile-time interface assertion to ensure fakeHandle implements the Handle
interface: add a var declaration like a nil assignment assertion referencing the
Handle interface and the *fakeHandle type (e.g., var _ Handle =
(*fakeHandle)(nil)) near the fakeHandle type definition so the compiler will
catch any future signature drift for methods like PID, Cwd, Stdin, Stdout,
Stderr, Done, Wait, and Stop.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@extensions/bridges/discord/provider_test.go`:
- Around line 1116-1121: The test assertion that isNotInitializedRPCError
rejects RPC code -32001 should be moved into a t.Run subtest; locate the failing
assertion in provider_test.go that directly calls
isNotInitializedRPCError(&subprocess.RPCError{Code: -32001, Message: "Not
initialized"}) and wrap it in t.Run with a descriptive name (e.g., "returns
false for -32001"), keeping the same call and the t.Fatal check inside the
subtest body so it follows the test-structure requirement for subtests.

In `@internal/api/httpapi/httpapi_integration_test.go`:
- Around line 196-226: Replace the top-level
TestHTTPResourceMutationRoutesRemainUnavailableWithoutOperatorAuth body with a
t.Run subtest: wrap the existing test logic (including the call to
newIntegrationRuntime and both HTTP PUT/DELETE requests and assertions) inside
t.Run("Should keep mutation routes unavailable without operator auth", func(t
*testing.T) { ... }), keeping all assertions and defer closes exactly as-is;
ensure the test function name remains
TestHTTPResourceMutationRoutesRemainUnavailableWithoutOperatorAuth and only the
internal execution is converted to the t.Run("Should...") pattern so it follows
the repository's subtest naming convention.

In `@internal/api/httpapi/server_test.go`:
- Around line 112-127: Wrap the test body in t.Run("Should reject resource auth
without resource service", func(t *testing.T) { ... }) and strengthen the
assertion: call New(...) as currently using
WithResourceOperatorAuth(func(*gin.Context) {}) but without providing a resource
service, then assert the returned err is non-nil and specifically matches the
expected failure using testing helpers (e.g. require.ErrorContains or t.Fatalf
with strings.Contains) to check the error message mentions the missing resource
service (reference TestNewRejectsResourceAuthWithoutResourceService, New,
WithResourceOperatorAuth, WithResourceService and use ErrorContains/ErrorAs
semantics).

In `@internal/api/spec/resources_test.go`:
- Around line 8-65: Wrap each logical assertion block in the two tests into
named subtests using t.Run("Should ...") and move the t.Parallel() into those
subtests (or call it both at top-level and inside subtests if desired);
specifically, in TestResourceOperationsSupportHTTPAndUDS create a t.Run("Should
expose expected resource operations over HTTP and UDS") that performs the
want/seen map building and the loop asserting OperationID and Transports; in
TestDocumentDescribesResourceCRUDSchemas create separate t.Run subtests (e.g.,
t.Run("Should describe listResources query parameters"), t.Run("Should validate
putResource request schema"), t.Run("Should validate deleteResource request
schema")) that call operationFor, jsonRequestSchema, and the assert* helpers so
each check becomes an independent subtest following the "Should..." naming
convention.

In `@internal/bridges/managed_sync_test.go`:
- Around line 113-186: The test body in
TestManagedSyncerIgnoresSemanticallyEquivalentJSON is a standalone test and must
be wrapped in a t.Run("Should ...") subtest; modify the function
TestManagedSyncerIgnoresSemanticallyEquivalentJSON to call t.Run with a
descriptive name (e.g., "Should ignore semantically equivalent JSON") and move
the existing test logic (including t.Parallel(), the stubRegistryStore setup,
insert/update/delete hooks, syncer creation and assertions) into the subtest
callback so the test follows the repository's t.Run("Should...") pattern while
keeping the same identifiers (stubRegistryStore, insertBridgeInstanceFn,
updateBridgeInstanceFn, deleteBridgeInstanceFn, syncer :=
bridgepkg.NewManagedSyncer, SyncManagedInstances, stats checks).

In `@internal/bridges/managed_sync.go`:
- Around line 145-149: The reconcile is being triggered for no-op runs because
the loop increments the synced counter even when records are unchanged; update
the logic in the ManagedSyncStats accounting so that synced is only incremented
when an actual create/update occurs (not on unchanged records) — adjust the
increments at the locations that currently modify synced (the block around where
synced is incremented at the former lines 211-215 and the block near 236-237) to
perform the comparison/check and only increment when a real change happened,
and/or add a new boolean/changed counter and change the reconcile trigger (the
s.triggerResourceReconcile(ctx) guard currently using synced > 0) to use that
real-change indicator (or removed > 0) so semantic no-ops do not cause
reconciliation.
- Around line 250-260: Trim and normalize next.ID into a local variable (e.g.,
trimmedID := strings.TrimSpace(next.ID)) before any validation or lookup, use
trimmedID for the empty check, duplicate detection against desiredByID, and when
calling BridgeInstanceSpecFromInstance/returning the ID so duplicates like
"brg-1" vs " brg-1 " are detected and the returned ID matches the checked key.

In `@internal/bundles/service.go`:
- Around line 826-836: The fallback for the same-extension branch leaves
platform empty when s.loadExtension returns nil provider or a nil Manifest;
instead of letting instance.Validate fail later, detect provider == nil or
provider.Manifest == nil after calling s.loadExtension(extensionName) and return
the same explicit unavailable-provider error used in the other branch (e.g.,
bridgepkg.ErrBridgeProviderUnavailable or the project's equivalent) with a clear
message referencing extensionName so callers see the root cause; update the code
around the activation.ExtensionName branch where platform,
bundleRecord.Spec.OwnerBridgePlatform, s.loadExtension, and
provider.Manifest.Bridge.Platform are used to perform this check and early
return.
- Around line 177-180: Wrap all raw error returns in internal/bundles/service.go
with contextual fmt.Errorf messages using the %w verb; e.g., replace bare
"return nil, err" or "return err" after calls like
s.store.ListBundleResources(ctx) with something like fmt.Errorf("listing bundle
resources: %w", err). Do the same for the other three occurrences noted in this
file—add descriptive operation context (including relevant identifiers such as
bundle ID or resource name where available), use %w to preserve the original
error, and add "fmt" to the imports if not already present.

In `@internal/config/agent_resource.go`:
- Around line 28-30: The code currently returns raw validation errors from
normalizedScope.Validate("scope") (and the similar call at the later return
around lines 48-50); update both return paths to wrap the underlying error with
contextual messages using fmt.Errorf("validating %s scope: %w", "scope", err)
(or similar), replacing the plain "return AgentDef{}, err" with a wrapped error;
ensure fmt is imported if not already.

---

Nitpick comments:
In `@internal/acp/handlers_test.go`:
- Around line 1233-1281: Add a compile-time interface assertion to ensure
contextAwareToolHost implements the ToolHost interface: after the
contextAwareToolHost type declaration, add a line that assigns a
*contextAwareToolHost to a ToolHost typed nil (e.g., the common var _ ToolHost =
(*contextAwareToolHost)(nil) pattern) so the compiler will fail if the test
double falls out of sync with ToolHost.
- Around line 691-692: TestNetworkTurnTerminalOwnershipGuards is missing
t.Parallel(); either add t.Parallel() at the top of the test to run it in
parallel like the other tests, or if the test intentionally manipulates global
environment (e.g., uses t.Setenv or mutates shared state) add a brief comment
above the test explaining why it must be serial and keep t.Parallel() omitted;
locate the TestNetworkTurnTerminalOwnershipGuards function and update it
accordingly (add t.Parallel() as the first statement or add the explanatory
comment).

In `@internal/acp/launcher_tool_host_test.go`:
- Around line 370-429: Add a compile-time interface assertion to ensure
fakeHandle implements the Handle interface: add a var declaration like a nil
assignment assertion referencing the Handle interface and the *fakeHandle type
(e.g., var _ Handle = (*fakeHandle)(nil)) near the fakeHandle type definition so
the compiler will catch any future signature drift for methods like PID, Cwd,
Stdin, Stdout, Stderr, Done, Wait, and Stop.

In `@internal/automation/resource_projection.go`:
- Around line 474-476: The unconditional call to
m.store.DeleteTriggerWebhookSecret(ctx, current.ID) should tolerate the store's
"not found" result; change the error handling so that if
DeleteTriggerWebhookSecret returns ErrTriggerWebhookSecretNotFound you ignore it
and continue, otherwise return the error. Locate the DeleteTriggerWebhookSecret
invocation and replace the single-return-on-error with a conditional check
against ErrTriggerWebhookSecretNotFound (same pattern used around
ErrTriggerWebhookSecretNotFound handling near the managed sync cleanup) so
non-webhook triggers do not cause failures.
- Around line 669-672: The call to syncManagedTriggerWebhookSecret(ctx,
Trigger{}, next, secret) is intentionally performed before the "unchanged" check
to guarantee webhook secrets in desiredSecrets are always reconciled even when
trigger definitions are unchanged; add a brief comment immediately above this
call referencing syncManagedTriggerWebhookSecret, the Trigger{} placeholder and
next/desiredSecrets to state that this ordering is deliberate for secret
consistency and idempotency (or, if you prefer, move the sync after the
unchanged check and document the tradeoff). Ensure the comment explains the
design choice and that redundant syncs are acceptable to keep secrets
consistent.

In `@internal/automation/resource_test.go`:
- Around line 17-91: Refactor TestAutomationResourceCodecsRejectInvalidSpecs to
split each validation scenario into its own t.Run subtest (e.g., "Should reject
job scope mismatch", "Should reject malformed job schedule", "Should reject
trigger with bad filter", "Should reject webhook without endpoint"); keep the
existing setup (jobCodec, triggerCodec, ctx, workspaceScope,
validJob/validTrigger) outside/above the subtests, call t.Parallel() at the top
of the parent test (and optionally inside each subtest if desired), and move
each DecodeAndValidate call and its subsequent error assertions into the
corresponding t.Run body while preserving the exact error checks against
resources.ErrInvalidScopeBinding and the strings.Contains checks on the error
messages.

In `@internal/bridges/managed_sync.go`:
- Around line 168-170: The call returning normalizedSource.Validate() should
wrap the error with contextual method info instead of returning err directly;
change the return that currently does `return resources.MutationActor{}, "",
err` to return a wrapped error using fmt.Errorf("managed_sync <method>: validate
normalizedSource: %w", err) (or use the actual surrounding function name) so the
error chain contains caller context; locate the call to
normalizedSource.Validate() and update the return to wrap the error with
fmt.Errorf and %w.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 7c0c9625-737d-466c-b833-d7586f42ef36

📥 Commits

Reviewing files that changed from the base of the PR and between 2277250 and e4c60d7.

⛔ Files ignored due to path filters (47)
  • .compozy/tasks/ext-parity/reviews-001/_meta.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_001.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_002.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_003.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_004.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_005.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_006.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_007.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_008.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_009.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_010.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_011.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_012.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_013.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_014.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_015.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_016.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_017.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_018.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_019.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_020.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_021.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_022.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_023.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_024.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_025.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_026.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_027.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_028.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_029.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_030.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_031.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_032.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_033.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_034.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_035.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_036.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_037.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_038.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_039.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_040.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_041.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_042.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_043.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_044.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_045.md is excluded by !**/*.md
  • .compozy/tasks/ext-parity/reviews-001/issue_046.md is excluded by !**/*.md
📒 Files selected for processing (40)
  • extensions/bridges/discord/provider.go
  • extensions/bridges/discord/provider_test.go
  • extensions/bridges/github/provider.go
  • extensions/bridges/github/provider_test.go
  • extensions/bridges/teams/provider_test.go
  • internal/acp/client.go
  • internal/acp/handlers.go
  • internal/acp/handlers_test.go
  • internal/acp/launcher.go
  • internal/acp/launcher_tool_host_test.go
  • internal/acp/types.go
  • internal/api/core/conversions.go
  • internal/api/core/conversions_parsers_test.go
  • internal/api/core/handlers.go
  • internal/api/core/handlers_test.go
  • internal/api/httpapi/httpapi_integration_test.go
  • internal/api/httpapi/server.go
  • internal/api/httpapi/server_test.go
  • internal/api/spec/resources_test.go
  • internal/api/spec/spec.go
  • internal/automation/manager.go
  • internal/automation/resource.go
  • internal/automation/resource_projection.go
  • internal/automation/resource_test.go
  • internal/bridges/managed_sync.go
  • internal/bridges/managed_sync_test.go
  • internal/bridges/resource_projection.go
  • internal/bridges/resource_test.go
  • internal/bundles/resource_projection.go
  • internal/bundles/resource_test.go
  • internal/bundles/service.go
  • internal/config/agent_resource.go
  • internal/config/agent_resource_test.go
  • internal/config/mcp_resource.go
  • internal/config/mcp_resource_test.go
  • internal/daemon/automation_resources.go
  • internal/daemon/automation_resources_test.go
  • internal/daemon/bridges.go
  • internal/daemon/bridges_test.go
  • internal/extension/host_api_test.go
✅ Files skipped from review due to trivial changes (2)
  • internal/bridges/resource_test.go
  • internal/automation/manager.go
🚧 Files skipped from review as they are similar to previous changes (17)
  • internal/api/core/conversions.go
  • extensions/bridges/discord/provider.go
  • internal/api/core/conversions_parsers_test.go
  • internal/config/mcp_resource.go
  • internal/acp/types.go
  • internal/config/mcp_resource_test.go
  • internal/api/core/handlers_test.go
  • internal/config/agent_resource_test.go
  • internal/bundles/resource_test.go
  • internal/api/core/handlers.go
  • extensions/bridges/github/provider_test.go
  • internal/api/spec/spec.go
  • internal/automation/resource.go
  • internal/bundles/resource_projection.go
  • internal/acp/launcher.go
  • internal/acp/handlers.go
  • internal/bridges/resource_projection.go

Comment thread extensions/bridges/discord/provider_test.go
Comment thread internal/api/httpapi/httpapi_integration_test.go
Comment thread internal/api/httpapi/server_test.go
Comment thread internal/api/spec/resources_test.go
Comment thread internal/bridges/managed_sync_test.go
Comment thread internal/bridges/managed_sync.go
Comment thread internal/bundles/service.go
Comment thread internal/bundles/service.go
Comment thread internal/bundles/service.go
Comment thread internal/config/agent_resource.go
pedronauck added a commit that referenced this pull request Apr 16, 2026
pedronauck added a commit that referenced this pull request May 26, 2026
## Release v0.0.1

This PR prepares the release of version v0.0.1.

### Changelog

## 0.0.1 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This was referenced May 26, 2026
pedronauck added a commit that referenced this pull request May 26, 2026
## Release v0.0.1

This PR prepares the release of version v0.0.1.

### Changelog

## 0.0.1 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pedronauck added a commit that referenced this pull request May 26, 2026
## Release v0.0.2

This PR prepares the release of version v0.0.2.

### Changelog

## 0.0.2 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release
- Fix release process



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows
- Improve suite speed

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pedronauck added a commit that referenced this pull request May 27, 2026
## Release v0.0.2

This PR prepares the release of version v0.0.2.

### Changelog

## 0.0.2 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release
- Fix release process
- Fix release sync
- Decouple release dry-run npm auth
- Persist web assets git auth



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows
- Improve suite speed


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Updated web assets dependency to a newer version for improved
stability and performance.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/compozy/agh/pull/211?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pedronauck added a commit that referenced this pull request May 27, 2026
## Release v0.0.2

This PR prepares the release of version v0.0.2.

### Changelog

## 0.0.2 - 2026-05-27



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout
- Fix release dry-run token contract



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release
- Fix release process
- Fix release sync
- Decouple release dry-run npm auth
- Persist web assets git auth
- Require npm auth before release merge



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows
- Improve suite speed


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
  * Updated dependencies to latest versions.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/compozy/agh/pull/214?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
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.

1 participant