Skip to content

fix: final review round#151

Merged
pedronauck merged 4 commits into
mainfrom
reviews
May 18, 2026
Merged

fix: final review round#151
pedronauck merged 4 commits into
mainfrom
reviews

Conversation

@pedronauck
Copy link
Copy Markdown
Member

@pedronauck pedronauck commented May 18, 2026

Summary by CodeRabbit

  • New Features

    • Durable webhook replay protection and delivery recovery across bridges.
    • Manual MCP login mode with persistent pending-login state.
    • Per-instance error/health tracking and Makefile web targets validated to run via Turbo.
  • Bug Fixes

    • Scoped webhook signature verification for shared paths.
    • Resource activation now rolls back earlier changes on failure.
    • Improved terminal exit reporting and oversized-request (413) responses.
  • Improvements

    • Webhook ingress timeouts and clearer error responses.
    • Stronger auth/session validation and delivery reconciliation (idempotency, thread/ message recovery).

@pedronauck pedronauck self-assigned this May 18, 2026
@vercel
Copy link
Copy Markdown

vercel Bot commented May 18, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
agh-site Ready Ready Preview, Comment May 18, 2026 5:54pm

Request Review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 18, 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: d21238b1-f2f9-45f9-b38d-5560524f7938

📥 Commits

Reviewing files that changed from the base of the PR and between c6801a1 and faa2589.

⛔ Files ignored due to path filters (7)
  • .agents/skills/firecrawl/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/firecrawl/rules/install.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/firecrawl/rules/security.md is excluded by !**/*.md, !.agents/**
  • .github/actions/setup-go/action.yml is excluded by !**/*.yml
  • .github/workflows/ci.yml is excluded by !**/*.yml
  • .github/workflows/release.yml is excluded by !**/*.yml
  • .goreleaser.yml is excluded by !**/*.yml
📒 Files selected for processing (290)
  • .pr-release
  • Makefile
  • cmd/agh-codegen/main.go
  • cmd/agh-codegen/main_test.go
  • cmd/agh-codegen/openapi_temp_storage_test.go
  • extensions/bridges/discord/provider.go
  • extensions/bridges/discord/reconcile_zero_managed_test.go
  • extensions/bridges/gchat/provider.go
  • extensions/bridges/gchat/provider_contract_test.go
  • extensions/bridges/gchat/provider_test.go
  • extensions/bridges/github/api.go
  • extensions/bridges/github/provider.go
  • extensions/bridges/github/provider_delivery_test.go
  • extensions/bridges/github/provider_test.go
  • extensions/bridges/linear/api.go
  • extensions/bridges/linear/oauth_failure_test.go
  • extensions/bridges/linear/provider.go
  • extensions/bridges/linear/provider_test.go
  • extensions/bridges/linear/runtime_test.go
  • extensions/bridges/linear/runtime_webhook_timeout_test.go
  • extensions/bridges/slack/provider.go
  • extensions/bridges/slack/provider_delivery_test.go
  • extensions/bridges/slack/provider_test.go
  • extensions/bridges/teams/provider.go
  • extensions/bridges/teams/provider_delivery_test.go
  • extensions/bridges/teams/provider_test.go
  • extensions/bridges/telegram/provider.go
  • extensions/bridges/telegram/provider_delivery_test.go
  • extensions/bridges/telegram/provider_test.go
  • extensions/bridges/whatsapp/provider.go
  • extensions/bridges/whatsapp/provider_delivery_test.go
  • extensions/bridges/whatsapp/provider_test.go
  • go.mod
  • internal/acp/client.go
  • internal/acp/client_integration_test.go
  • internal/acp/launcher_tool_host_test.go
  • internal/acp/permission.go
  • internal/acp/request_contract_test.go
  • internal/acp/terminal.go
  • internal/acp/tool_host.go
  • internal/agentidentity/identity.go
  • internal/agentidentity/identity_test.go
  • internal/api/contract/agents.go
  • internal/api/contract/agents_test.go
  • internal/api/contract/authored_context.go
  • internal/api/contract/bridges.go
  • internal/api/contract/bridges_test.go
  • internal/api/contract/json_safety.go
  • internal/api/core/agent_channels.go
  • internal/api/core/agent_channels_internal_test.go
  • internal/api/core/authored_context.go
  • internal/api/core/errors.go
  • internal/api/core/resources.go
  • internal/api/core/resources_trigger_test.go
  • internal/api/core/tasks_integration_test.go
  • internal/api/core/tasks_surface_integration_test.go
  • internal/api/core/tasks_terminal_integration_test.go
  • internal/api/core/tasks_token_fence_integration_test.go
  • internal/api/core/testutil_stub_test.go
  • internal/api/httpapi/bridges_integration_test.go
  • internal/api/httpapi/helpers_integration_test.go
  • internal/api/httpapi/hooks_integration_test.go
  • internal/api/httpapi/httpapi_integration_test.go
  • internal/api/httpapi/middleware.go
  • internal/api/httpapi/network_test.go
  • internal/api/httpapi/prompt.go
  • internal/api/httpapi/prompt_drain_test.go
  • internal/api/httpapi/request_body_limit_test.go
  • internal/api/httpapi/transport_parity_integration_test.go
  • internal/api/spec/authored_context.go
  • internal/api/spec/authored_context_test.go
  • internal/api/spec/resources_test.go
  • internal/api/spec/spec.go
  • internal/api/spec/spec_test.go
  • internal/api/testutil/apitest_test.go
  • internal/api/testutil/automation_stub.go
  • internal/api/testutil/bridge_stub.go
  • internal/api/testutil/session_stub.go
  • internal/api/testutil/sse.go
  • internal/api/udsapi/bridges_integration_test.go
  • internal/api/udsapi/hosted_mcp.go
  • internal/api/udsapi/hosted_mcp_test.go
  • internal/api/udsapi/server.go
  • internal/api/udsapi/server_test.go
  • internal/api/udsapi/transport_parity_integration_test.go
  • internal/api/udsapi/udsapi_integration_test.go
  • internal/automation/dispatch.go
  • internal/automation/manager.go
  • internal/automation/manager_integration_test.go
  • internal/automation/manager_webhook_replay_test.go
  • internal/automation/model/persistence.go
  • internal/automation/model/template.go
  • internal/automation/model/template_test.go
  • internal/automation/persistence.go
  • internal/automation/resource_projection.go
  • internal/automation/resource_test.go
  • internal/automation/trigger.go
  • internal/automation/trigger_refac_test.go
  • internal/automation/trigger_test.go
  • internal/bridges/delivery_broker.go
  • internal/bridges/delivery_broker_contract_test.go
  • internal/bridges/delivery_types.go
  • internal/bridges/registry_integration_test.go
  • internal/bridges/target_integration_test.go
  • internal/bridges/task_notifier.go
  • internal/bridges/task_notifier_test.go
  • internal/bridgesdk/batching.go
  • internal/bridgesdk/batching_refac_test.go
  • internal/bridgesdk/dedup.go
  • internal/bridgesdk/dedup_test.go
  • internal/bridgesdk/runtime.go
  • internal/bridgesdk/runtime_initialize_request_test.go
  • internal/bridgesdk/runtime_integration_test.go
  • internal/bundles/model/model.go
  • internal/bundles/model/model_test.go
  • internal/bundles/resource_store.go
  • internal/bundles/resource_store_test.go
  • internal/bundles/service.go
  • internal/bundles/service_refac_test.go
  • internal/cli/authored_context.go
  • internal/cli/cli_historical_mixed_ownership_integration_test.go
  • internal/cli/cli_historical_task_run_terminal_integration_test.go
  • internal/cli/cli_integration_test.go
  • internal/cli/client.go
  • internal/cli/client_test.go
  • internal/cli/client_tools.go
  • internal/cli/daemon.go
  • internal/cli/daemon_authored_context_test.go
  • internal/cli/daemon_relaunch_test.go
  • internal/cli/daemon_wait_test.go
  • internal/cli/docpost/docpost.go
  • internal/cli/docpost/process_input_test.go
  • internal/cli/extension_marketplace_integration_test.go
  • internal/cli/helpers_test.go
  • internal/cli/lifecycle_test.go
  • internal/cli/mcp_auth.go
  • internal/cli/mcp_auth_test.go
  • internal/cli/perf_bench_test.go
  • internal/cli/root.go
  • internal/cli/skill_marketplace_integration_test.go
  • internal/cli/tool_integration_test.go
  • internal/cli/tool_test.go
  • internal/codegen/openapits/generate.go
  • internal/codegen/openapits/generate_test.go
  • internal/config/agent.go
  • internal/config/agent_create.go
  • internal/config/agent_edit.go
  • internal/config/agent_edit_test.go
  • internal/config/agent_resource.go
  • internal/config/agent_resource_test.go
  • internal/config/agent_workspace_discovery_test.go
  • internal/config/bootstrap.go
  • internal/config/capabilities.go
  • internal/config/config.go
  • internal/config/file_io.go
  • internal/config/home.go
  • internal/config/home_permissions_test.go
  • internal/config/hooks.go
  • internal/config/mcp_resource.go
  • internal/config/persistence_integration_test.go
  • internal/config/release_config_test.go
  • internal/daemon/agent_skill_resources_integration_test.go
  • internal/daemon/boot.go
  • internal/daemon/bridge_secrets.go
  • internal/daemon/bridge_secrets_test.go
  • internal/daemon/daemon_acpmock_faults_integration_test.go
  • internal/daemon/daemon_bridge_extension_integration_test.go
  • internal/daemon/daemon_integration_test.go
  • internal/daemon/daemon_mock_agents_integration_test.go
  • internal/daemon/daemon_network_collaboration_integration_test.go
  • internal/daemon/daemon_nightly_combined_integration_test.go
  • internal/daemon/daemon_test.go
  • internal/daemon/harness_context_integration_test.go
  • internal/daemon/native_provider_model_tools.go
  • internal/daemon/native_tools.go
  • internal/daemon/native_tools_test.go
  • internal/daemon/prompt_input_composite_integration_test.go
  • internal/daemon/tool_mcp_resources_integration_test.go
  • internal/daemon/tool_policy_resolver.go
  • internal/diagnostics/redact.go
  • internal/diagnostics/redact_test.go
  • internal/e2elane/command_wiring_test.go
  • internal/e2elane/go_module_contract_test.go
  • internal/e2elane/makefile_web_targets_test.go
  • internal/extension/bridge_delivery_integration_test.go
  • internal/extension/discord_provider_integration_test.go
  • internal/extension/gchat_provider_integration_test.go
  • internal/extension/github_provider_integration_test.go
  • internal/extension/host_api.go
  • internal/extension/host_api_authored_context.go
  • internal/extension/host_api_automation_payload_test.go
  • internal/extension/host_api_bridges.go
  • internal/extension/host_api_bridges_ingest_test.go
  • internal/extension/host_api_integration_test.go
  • internal/extension/host_api_soul_validate_test.go
  • internal/extension/linear_provider_integration_test.go
  • internal/extension/manager_integration_test.go
  • internal/extension/manifest_integration_test.go
  • internal/extension/model_source_test.go
  • internal/extension/provider_conformance_matrix_integration_test.go
  • internal/extension/reference_integration_test.go
  • internal/extension/registry_integration_test.go
  • internal/extension/slack_provider_integration_test.go
  • internal/extension/teams_provider_integration_test.go
  • internal/extension/telegram_provider_integration_test.go
  • internal/extension/telegram_reference_integration_test.go
  • internal/extension/whatsapp_provider_integration_test.go
  • internal/extensiontest/bridge_adapter_harness.go
  • internal/extensiontest/bridge_adapter_harness_ack_test.go
  • internal/extensiontest/bridge_adapter_harness_delivery_test.go
  • internal/extensiontest/bridge_adapter_harness_integration_test.go
  • internal/extensiontest/bridge_conformance_matrix.go
  • internal/extensiontest/bridge_conformance_matrix_outcomes_test.go
  • internal/fileutil/atomic.go
  • internal/fileutil/atomic_dirsync_windows.go
  • internal/fileutil/atomic_remove_test.go
  • internal/fileutil/atomic_remove_unix.go
  • internal/fileutil/atomic_remove_windows.go
  • internal/fileutil/atomic_test.go
  • internal/fileutil/atomic_windows_test.go
  • internal/heartbeat/authoring.go
  • internal/heartbeat/authoring_status_test.go
  • internal/heartbeat/heartbeat.go
  • internal/heartbeat/persistence.go
  • internal/heartbeat/status.go
  • internal/heartbeat/wake.go
  • internal/heartbeat/wake_test.go
  • internal/hooks/async_clone.go
  • internal/hooks/async_clone_test.go
  • internal/hooks/automation_job_payload_test.go
  • internal/hooks/dispatch_async_test.go
  • internal/hooks/dispatch_integration_test.go
  • internal/hooks/executor_subprocess.go
  • internal/hooks/executor_subprocess_windows.go
  • internal/hooks/executor_subprocess_windows_test.go
  • internal/hooks/hooks.go
  • internal/hooks/introspection.go
  • internal/hooks/introspection_wildcard_test.go
  • internal/hooks/matcher.go
  • internal/hooks/matcher_authored_context_test.go
  • internal/hooks/payloads.go
  • internal/mcp/auth/metadata.go
  • internal/mcp/auth/service.go
  • internal/mcp/auth/service_direct_endpoint_test.go
  • internal/mcp/auth/service_expires_in_test.go
  • internal/mcp/executor.go
  • internal/mcp/executor_test.go
  • internal/mcp/hosted_proxy.go
  • internal/mcp/hosted_proxy_result_test.go
  • internal/memory/assembler_test.go
  • internal/memory/consolidation/perf_bench_test.go
  • internal/memory/consolidation/runtime.go
  • internal/memory/consolidation/runtime_spawner_test.go
  • internal/memory/consolidation/runtime_test.go
  • internal/memory/contract/contract_test.go
  • internal/memory/contract/types.go
  • internal/memory/controller/controller.go
  • internal/memory/controller/controller_test.go
  • internal/memory/decision.go
  • internal/memory/dream.go
  • internal/memory/dream_test.go
  • internal/memory/extractor/inbox.go
  • internal/memory/extractor/runtime.go
  • internal/memory/extractor/runtime_test.go
  • internal/memory/extractor_events.go
  • internal/memory/extractor_events_test.go
  • internal/memory/lock.go
  • internal/memory/lock_concurrency_test.go
  • internal/memory/observability.go
  • internal/memory/observability_test.go
  • internal/memory/prompts/registry.go
  • internal/memory/prompts/registry_test.go
  • internal/memory/provider/local/provider.go
  • internal/memory/provider/local/provider_test.go
  • internal/memory/recall/signal_recorder.go
  • internal/memory/recall/signal_recorder_test.go
  • internal/memory/store.go
  • internal/memory/store_memv2_test.go
  • internal/memory/store_test.go
  • internal/modelcatalog/merge.go
  • internal/modelcatalog/service.go
  • internal/modelcatalog/service_test.go
  • internal/network/audit.go
  • internal/network/audit_timeline_test.go
  • internal/network/delivery_integration_test.go
  • internal/network/envelope_integration_test.go
  • internal/network/manager_integration_test.go
  • internal/network/router_integration_test.go
  • internal/network/tasks_integration_test.go
  • internal/network/transport.go

✨ 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: 18

Caution

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

⚠️ Outside diff range comments (2)
internal/api/core/resources.go (1)

110-116: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Trigger errors are silently swallowed.

The trigger error is neither returned nor logged. Per coding guidelines, errors must be handled or have written justification. If reconciliation is non-critical, at minimum log the error for observability:

🔧 Suggested fix
 if s.trigger != nil {
     if err := s.trigger(ctx, next.Kind, resources.ReconcileReasonWrite); err != nil {
-        return record, nil
+        // Trigger errors are non-fatal; the write succeeded but reconciliation
+        // may be delayed until next trigger.
+        slog.Warn("resource reconcile trigger failed after write",
+            "kind", next.Kind,
+            "id", record.ID,
+            "error", err,
+        )
+        return record, nil
     }
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/api/core/resources.go` around lines 110 - 116, The trigger error is
being swallowed in the block that calls s.trigger(ctx, next.Kind,
resources.ReconcileReasonWrite); update this code to handle errors: if s.trigger
returns an error, either return it (propagate) or at minimum log it for
observability before continuing; use the existing logger on the receiver (e.g.,
s.logger.Errorf or similar) to record the error with context (include next.Kind
and ReconcileReasonWrite) and then continue to return record, nil if
reconciliation is non-critical. Ensure you modify the branch that currently does
"if err := s.trigger(...); err != nil { return record, nil }" to include the
logging or propagate the error as appropriate.
internal/daemon/native_tools.go (1)

1858-1872: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Session-bound callers still cannot omit session_id here.

decodeSessionEventQueryInput() rejects empty session_id before the bound-session fallback runs, so a caller with scope.SessionID still has to pass its own session explicitly. That defeats the new binding behavior for sessionDescribe.

Suggested fix
-	input, query, err := decodeSessionEventQueryInput(req)
-	if err != nil {
-		return toolspkg.ToolResult{}, err
-	}
+	var input sessionEventQueryInput
+	if err := decodeNativeInput(req, &input); err != nil {
+		return toolspkg.ToolResult{}, err
+	}
 	bound, err := n.nativeBoundSession(ctx, scope)
 	if err != nil {
 		return toolspkg.ToolResult{}, err
 	}
 	input.SessionID = nativeBoundSessionID(bound, input.SessionID)
+	input.SessionID, err = requiredNativeString(req.ToolID, "session_id", input.SessionID)
+	if err != nil {
+		return toolspkg.ToolResult{}, err
+	}
+	query, err := input.eventQuery(req.ToolID)
+	if err != nil {
+		return toolspkg.ToolResult{}, err
+	}
 	resolved, err := n.nativeResolvedWorkspace(
 		ctx,
 		req.ToolID,
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/daemon/native_tools.go` around lines 1858 - 1872,
decodeSessionEventQueryInput currently rejects an empty session_id before the
binding fallback runs, preventing callers that rely on scope.SessionID from
omitting session_id; change the flow so the session binding occurs before
validation (or allow decodeSessionEventQueryInput to accept an empty
session_id), i.e., call n.nativeBoundSession and nativeBoundSessionID to fill
input.SessionID (using nativeBoundWorkspaceRef/nativeResolvedWorkspace as
needed) prior to enforcing non-empty session_id, or update
decodeSessionEventQueryInput to not error on empty session_id and let
nativeBoundSessionID populate it for sessionDescribe; adjust the code paths in
native_tools.go (functions decodeSessionEventQueryInput, nativeBoundSession,
nativeBoundSessionID, and nativeResolvedWorkspace/sessionDescribe call sites)
accordingly.
🧹 Nitpick comments (2)
internal/automation/resource_test.go (1)

1119-1197: ⚡ Quick win

Add compile-time interface assertions for the new adapter stores.

These adapters fully implement their respective interfaces (resources.Store[T] for cancelAfterMutationStore and WebhookSecretStore for cancelAfterWebhookSecretStore). Compile-time assertions will fail fast on interface drift and ensure test infrastructure stability.

Suggested patch
+var (
+	_ resources.Store[Job]        = (*cancelAfterMutationStore[Job])(nil)
+	_ resources.Store[Trigger]    = (*cancelAfterMutationStore[Trigger])(nil)
+	_ WebhookSecretStore          = (*cancelAfterWebhookSecretStore)(nil)
+)
+
 type cancelAfterMutationStore[T any] struct {
 	store          resources.Store[T]
 	cancel         context.CancelFunc
 	cancelOnPut    bool
 	cancelOnDelete bool
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/automation/resource_test.go` around lines 1119 - 1197, Add
compile-time interface assertions to ensure cancelAfterMutationStore[T]
implements resources.Store[T] and cancelAfterWebhookSecretStore implements
WebhookSecretStore: after the type declarations, add var _
resources.Store[YourTypePlaceholder] =
(*cancelAfterMutationStore[YourTypePlaceholder])(nil) (use a representative
concrete type or keep it generic via a concrete instantiation used in tests) and
var _ WebhookSecretStore = (*cancelAfterWebhookSecretStore)(nil); this will
cause a compile-time error if either
cancelAfterMutationStore.Put/Delete/Get/List or
cancelAfterWebhookSecretStore.ResolveRef/PutSecret/DeleteSecret stop satisfying
their interfaces.
extensions/bridges/gchat/provider.go (1)

419-439: 💤 Low value

API client cache key is computed outside the lock.

The gchatAPIClientCacheKey(cfg) call at line 420 happens before acquiring p.mu.Lock(), while cfg.instanceID is read again at line 437 inside the lock. This is safe because the config pointer is obtained from routes (which is protected by the same mutex) or is newly created and not yet shared. However, if future refactoring introduces concurrent config modification, this could become a subtle race.

Consider documenting this invariant or computing the cache key fully inside the lock for defensive clarity.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@extensions/bridges/gchat/provider.go` around lines 419 - 439, The cache key
for the GChat API client is computed by gchatAPIClientCacheKey(cfg) before
acquiring p.mu.Lock() inside apiForConfig, which relies on the invariant that
cfg won't be concurrently modified; to make this defensive and avoid a potential
race, move the call to gchatAPIClientCacheKey(cfg) and the read of
cfg.instanceID so they occur inside the p.mu.Lock()/defer p.mu.Unlock() critical
section where p.apiClients is accessed/initialized (i.e., compute cacheKey and
instanceID within the locked block before checking or writing p.apiClients).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@extensions/bridges/linear/provider_test.go`:
- Around line 369-399: The shared-path scenario needs to be moved into a named
subtest using t.Run to isolate failures; wrap the entire block that builds
sharedPathBody, sharedPathReq, sharedPathCandidates, calls
selectLinearWebhookSignatureCandidates and verifyLinearWebhookSignature into a
t.Run("Should ...") closure (e.g., t.Run("Should scope shared-path signatures to
organization", func(t *testing.T) { ... })) and keep all existing assertions and
header manipulations (calls to linearSignature, verifyLinearWebhookSignature)
inside that closure so the test follows the required t.Run("Should...") pattern
while preserving the same setup and checks using
selectLinearWebhookSignatureCandidates and verifyLinearWebhookSignature.

In `@extensions/bridges/linear/runtime_test.go`:
- Around line 268-386: Wrap the main test logic inside
TestWebhookIngressRejectsCrossInstanceSignatureOnSharedPath in a t.Run subtest
(e.g., t.Run("Should reject cross-instance signature on shared path", func(t
*testing.T) { ... })), moving the existing setup/calls/assertions into that
closure while keeping declarations like runtime, hostPeer, cleanup, managed, and
the mustHandleLinear callback accessible; ensure deferred cleanup remains inside
the subtest (or is preserved correctly) so resource teardown still runs when the
subtest finishes.

In `@extensions/bridges/slack/provider.go`:
- Around line 2119-2140: FindDeliveryMessage currently only requests up to 100
messages and returns nil if the matching message isn’t in that first page;
implement cursor-based pagination to iterate pages until a match is found or
there are no more pages. Modify the loop around c.call so
slackConversationMessagesRequest includes a Cursor field set from
slackConversationMessagesResponse.ResponseMetadata.NextCursor (or equivalent)
and repeat calling c.call while result.HasMore is true (or NextCursor != ""); on
each page check messages with slackMetadataMatchesDelivery and return
slackPostedMessage when found. Ensure you preserve the thread/replies behavior
by keeping method set to "conversations.replies" and TS/Inclusive set when
req.ThreadTS is present, and stop paginating immediately when a match is
returned.

In `@extensions/bridges/teams/provider_test.go`:
- Around line 1724-1801: The test function TestWebhookRejectsDuplicateSharedPath
is missing the required t.Run("Should...") subtest wrapper; wrap the existing
test body inside t.Run with a descriptive name (e.g., t.Run("Should reject
duplicate shared path", func(t *testing.T) { ... })) so all assertions and setup
(including calls to newRuntimePeerPair, testTeamsManagedInstance,
mustHandleLifecycle, hostPeer.Call, runtime.currentSession,
runtime.reconcileInstanceConfigs, and runtime.serveWebhookHTTP) execute inside
the subtest; keep the same logic and use the subtest's t for all checks.

In `@extensions/bridges/teams/provider.go`:
- Around line 2025-2047: The helper resolveTeamsReferencedRemoteMessageID
currently falls back to state.RemoteMessageID/snapshot.RemoteMessageID when
reference.delivery_id is present but referenceStateLookup misses; change it to
"fail closed": if referenceDeliveryID(reference) returns a non-empty deliveryID
and referenceStateLookup is non-nil, then if the lookup does not find a
referencedState (ok == false) return empty string immediately (do not proceed to
check state.RemoteMessageID or snapshot.RemoteMessageID); keep the existing
early-return when referenceRemoteMessageID(reference) is present, and retain the
later fallback to state/snapshot only when no delivery_id was supplied or no
lookup attempt was made. Reference symbols:
resolveTeamsReferencedRemoteMessageID, referenceDeliveryID,
referenceRemoteMessageID, referenceStateLookup, deliveryState,
state.RemoteMessageID, snapshot.RemoteMessageID.

In `@internal/acp/tool_host.go`:
- Around line 62-66: WithLocalAdditionalRoots currently overwrites
cfg.additionalRoots causing earlier calls to be lost; change the mutation to
append the new roots onto existing cfg.additionalRoots (e.g., use
append(cfg.additionalRoots, roots...)) so repeated calls accumulate roots
instead of the last call winning; update the closure that mutates
localRuntimeConfig in WithLocalAdditionalRoots and ensure newPermissionPolicy
will see the combined list.

In `@internal/api/contract/agents.go`:
- Around line 16-17: The regex rawClaimTokenValuePattern only matches lowercase
"agh_claim_" so containsRawClaimTokenJSON can miss upper-case variants; update
the regex used in rawClaimTokenValuePattern to be case-insensitive (or compile
with (?i) prefix) so it matches AGH_CLAIM_... in any casing, and also verify any
other uses around containsRawClaimTokenJSON (references in the same file around
lines ~587-593) use the updated pattern; keep the symbol name
rawClaimTokenValuePattern and ensure no other manual case checks conflict with
this change.

In `@internal/api/contract/json_safety.go`:
- Around line 55-57: The current normalization only replaces hyphens so keys
like "claim.token" or "api.key" bypass the sensitive-key switch; update the
normalization in json_safety.go (the code that defines normalized :=
strings.ToLower(strings.TrimSpace(key)) and the subsequent strings.ReplaceAll)
to generically canonicalize delimiters by replacing any non-alphanumeric
character with an underscore (e.g., via a regexp), then collapse repeated
underscores and trim leading/trailing underscores before the switch; this
ensures variants like "claim.token", "claim-token", "claim token", "claim:token"
all normalize to "claim_token" so the existing sensitive-key switch (the switch
on normalized) will catch them.

In `@internal/api/core/agent_channels.go`:
- Around line 575-577: The code path that calls
coordinationMetadataFromEnvelope(envelope) currently swallows ExtJSON
json.Unmarshal errors (returning nil metadata) which can hide persisted decode
failures and break validateReplySource; update coordinationMetadataFromEnvelope
(and the callers around envelopeFromNetworkMessage usage) to propagate the JSON
decode error instead of returning a nil metadata/ok, e.g., change the function
signature to return (metadata, ok, err) or return an error alongside
sourceCoordinationMetadata so callers (where envelopeFromNetworkMessage,
sourceCoordinationMetadata, validateReplySource are used) can log/handle the
decode failure and return the error up the call chain rather than silently
discarding it.

In `@internal/api/core/resources.go`:
- Around line 127-132: In the Delete handler there's silent swallowing of the
trigger error: when s.trigger(ctx, kind, resources.ReconcileReasonWrite) returns
an error the code returns nil; update the Delete method to propagate the error
instead of dropping it (i.e., return the err from the s.trigger call) and ensure
the Delete function's signature/ callers handle the propagated error; reference
the s.trigger call and the Delete method (and the kind /
resources.ReconcileReasonWrite usage) to locate and fix the code.

In `@internal/api/httpapi/prompt.go`:
- Around line 103-109: The detached drain goroutine currently uses
context.WithoutCancel(ctx) which drops any deadline and can let
drainPromptEvents run forever; instead preserve a bounded deadline by checking
ctx.Deadline() and creating a new context that re-attaches that deadline (or use
context.WithTimeout/context.WithDeadline) before calling h.promptDrainWG.Go;
update the code around ctx, drainCtx, context.WithoutCancel, h.promptDrainWG.Go,
cancelPrompt(), and h.drainPromptEvents so the goroutine always has a finite
deadline (or a reasonable timeout) and still detaches cancellation, ensuring
waitForPromptDrains() cannot block indefinitely.

In `@internal/api/udsapi/server_test.go`:
- Around line 511-515: The test currently only checks that
server.Shutdown(shutdownCtx) returns a non-nil error; change it to assert the
timeout-specific shutdown error instead by verifying the returned error matches
the prompt-drain timeout condition: capture err := server.Shutdown(shutdownCtx)
and then either use errors.Is(err, context.DeadlineExceeded) (or the concrete
timeout error type used by Shutdown) via errors.Is/ErrorAs, or use a string
assertion like require.ErrorContains(t, err, "prompt drain") / t.Fatalf if not
matched; reference the shutdownCtx, cancelShutdown and server.Shutdown call when
making the assertion so the test fails only for the timeout branch.

In `@internal/api/udsapi/server.go`:
- Around line 833-841: The code unconditionally clears server handles and sets
s.state = serverStateStopped even if s.serveErr indicates a partial/timeout
failure; change this so we only clear s.httpServer, s.listener, s.serveDone,
s.streamCancel and set s.state = serverStateStopped when the shutdown/serve
completed successfully (i.e. s.serveErr is nil). Concretely, inside the critical
section around s.mu.Lock()/Unlock() check s.serveErr (the local serveErr
variable you already read) and if serveErr == nil perform the current clearing
and state transition; otherwise leave the handles and state intact (so Start
cannot race in) and ensure serveErr remains set for callers to observe. Keep the
existing s.serveErr assignment behavior but do not overwrite/clear it when
non-nil.

In `@internal/automation/trigger.go`:
- Around line 476-479: The branch after calling dispatchAfterFilter incorrectly
only releases the webhook claim when an error occurred AND there are no runs;
change the condition so the claim is released when there are no runs OR an error
occurred. Update the check around result/err in the code that calls
e.dispatchAfterFilter(ctx, envelope, []TriggerRegistration{registration},
claim.reservedRun) to call e.releaseWebhookDelivery(ctx, claim) when
len(result.Runs) == 0 || err != nil (referencing result, err,
dispatchAfterFilter, releaseWebhookDelivery and claim.reservedRun).

In `@internal/bridges/task_notifier.go`:
- Around line 578-580: After decoding with decoder :=
json.NewDecoder(bytes.NewReader(raw)) and decoder.Decode(&payload), explicitly
reject any trailing JSON by attempting a second decode into a dummy (e.g. var
extra interface{}) and treating a successful second decode as an error;
specifically, after Decode(&payload) call if err := decoder.Decode(&extra); err
== nil { return fmt.Errorf("trailing JSON after payload") } else if err !=
io.EOF && err != nil { return err } so that decoder and payload handling in
task_notifier.go does not allow extra tokens after the primary JSON value.

In `@internal/bundles/resource_store_test.go`:
- Around line 264-309: Wrap the existing test body of
TestResourceStoreApplyRollsBackEarlierKindsOnLaterFailure inside a t.Run subtest
with a descriptive name beginning with "Should" (e.g., t.Run("Should rollback
earlier kinds on later failure", func(t *testing.T) { ... })) so the case
follows the required subtest naming pattern; keep the existing setup
(newBundleResourceUnitHarness, failingJobStore, scope, agent, job, activationID)
and all assertions intact but move them into the t.Run closure and call
t.Parallel() inside the subtest if parallelization is desired.

In `@internal/bundles/resource_store.go`:
- Around line 421-423: The rollback uses context.WithoutCancel(ctx) which drops
any deadline; change this so the rollback context preserves the original
deadline: check ctx.Deadline() and if present create rollbackCtx with
context.WithDeadline (or WithTimeout using remaining time) derived from that
deadline, otherwise fall back to context.WithoutCancel; ensure you call the
returned cancel function after restoreOwnedBundleActivationResources to free
resources and pass rollbackCtx into
restoreOwnedBundleActivationResources(snapshot) instead of the current
context.WithoutCancel result.

In `@internal/daemon/bridge_secrets_test.go`:
- Around line 88-90: Add a presence check for managed.BoundSecrets before
indexing: ensure len(managed.BoundSecrets) > 0 and call t.Fatalf (or
t.Fatalf-like helper) with a diagnostic message if it's empty, then proceed to
compare managed.BoundSecrets[0].Value to resolvedValue; reference the
ManagedInstance via instance.ID in the failure messages so test output
identifies which instance lacked BoundSecrets.

---

Outside diff comments:
In `@internal/api/core/resources.go`:
- Around line 110-116: The trigger error is being swallowed in the block that
calls s.trigger(ctx, next.Kind, resources.ReconcileReasonWrite); update this
code to handle errors: if s.trigger returns an error, either return it
(propagate) or at minimum log it for observability before continuing; use the
existing logger on the receiver (e.g., s.logger.Errorf or similar) to record the
error with context (include next.Kind and ReconcileReasonWrite) and then
continue to return record, nil if reconciliation is non-critical. Ensure you
modify the branch that currently does "if err := s.trigger(...); err != nil {
return record, nil }" to include the logging or propagate the error as
appropriate.

In `@internal/daemon/native_tools.go`:
- Around line 1858-1872: decodeSessionEventQueryInput currently rejects an empty
session_id before the binding fallback runs, preventing callers that rely on
scope.SessionID from omitting session_id; change the flow so the session binding
occurs before validation (or allow decodeSessionEventQueryInput to accept an
empty session_id), i.e., call n.nativeBoundSession and nativeBoundSessionID to
fill input.SessionID (using nativeBoundWorkspaceRef/nativeResolvedWorkspace as
needed) prior to enforcing non-empty session_id, or update
decodeSessionEventQueryInput to not error on empty session_id and let
nativeBoundSessionID populate it for sessionDescribe; adjust the code paths in
native_tools.go (functions decodeSessionEventQueryInput, nativeBoundSession,
nativeBoundSessionID, and nativeResolvedWorkspace/sessionDescribe call sites)
accordingly.

---

Nitpick comments:
In `@extensions/bridges/gchat/provider.go`:
- Around line 419-439: The cache key for the GChat API client is computed by
gchatAPIClientCacheKey(cfg) before acquiring p.mu.Lock() inside apiForConfig,
which relies on the invariant that cfg won't be concurrently modified; to make
this defensive and avoid a potential race, move the call to
gchatAPIClientCacheKey(cfg) and the read of cfg.instanceID so they occur inside
the p.mu.Lock()/defer p.mu.Unlock() critical section where p.apiClients is
accessed/initialized (i.e., compute cacheKey and instanceID within the locked
block before checking or writing p.apiClients).

In `@internal/automation/resource_test.go`:
- Around line 1119-1197: Add compile-time interface assertions to ensure
cancelAfterMutationStore[T] implements resources.Store[T] and
cancelAfterWebhookSecretStore implements WebhookSecretStore: after the type
declarations, add var _ resources.Store[YourTypePlaceholder] =
(*cancelAfterMutationStore[YourTypePlaceholder])(nil) (use a representative
concrete type or keep it generic via a concrete instantiation used in tests) and
var _ WebhookSecretStore = (*cancelAfterWebhookSecretStore)(nil); this will
cause a compile-time error if either
cancelAfterMutationStore.Put/Delete/Get/List or
cancelAfterWebhookSecretStore.ResolveRef/PutSecret/DeleteSecret stop satisfying
their interfaces.
🪄 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: 1ff76e16-012e-41d9-9afd-3724dd1b8b26

📥 Commits

Reviewing files that changed from the base of the PR and between f71a29d and 6a8b1bb.

⛔ Files ignored due to path filters (8)
  • .agents/skills/firecrawl/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/firecrawl/rules/install.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/firecrawl/rules/security.md is excluded by !**/*.md, !.agents/**
  • .github/actions/setup-go/action.yml is excluded by !**/*.yml
  • .github/workflows/ci.yml is excluded by !**/*.yml
  • .github/workflows/release.yml is excluded by !**/*.yml
  • .goreleaser.yml is excluded by !**/*.yml
  • agh-daytona-sidecar.exe is excluded by !**/*.exe
📒 Files selected for processing (292)
  • Makefile
  • cmd/agh-codegen/main.go
  • cmd/agh-codegen/main_test.go
  • cmd/agh-codegen/openapi_temp_storage_test.go
  • extensions/bridges/discord/provider.go
  • extensions/bridges/discord/reconcile_zero_managed_test.go
  • extensions/bridges/gchat/provider.go
  • extensions/bridges/gchat/provider_contract_test.go
  • extensions/bridges/gchat/provider_test.go
  • extensions/bridges/github/api.go
  • extensions/bridges/github/provider.go
  • extensions/bridges/github/provider_delivery_test.go
  • extensions/bridges/github/provider_test.go
  • extensions/bridges/linear/api.go
  • extensions/bridges/linear/oauth_failure_test.go
  • extensions/bridges/linear/provider.go
  • extensions/bridges/linear/provider_test.go
  • extensions/bridges/linear/runtime_test.go
  • extensions/bridges/linear/runtime_webhook_timeout_test.go
  • extensions/bridges/slack/provider.go
  • extensions/bridges/slack/provider_delivery_test.go
  • extensions/bridges/slack/provider_test.go
  • extensions/bridges/teams/provider.go
  • extensions/bridges/teams/provider_delivery_test.go
  • extensions/bridges/teams/provider_test.go
  • extensions/bridges/telegram/provider.go
  • extensions/bridges/telegram/provider_delivery_test.go
  • extensions/bridges/telegram/provider_test.go
  • extensions/bridges/whatsapp/provider.go
  • extensions/bridges/whatsapp/provider_delivery_test.go
  • extensions/bridges/whatsapp/provider_test.go
  • go.mod
  • internal/acp/client.go
  • internal/acp/client_integration_test.go
  • internal/acp/launcher_tool_host_test.go
  • internal/acp/permission.go
  • internal/acp/request_contract_test.go
  • internal/acp/terminal.go
  • internal/acp/tool_host.go
  • internal/agentidentity/identity.go
  • internal/agentidentity/identity_test.go
  • internal/api/contract/agents.go
  • internal/api/contract/agents_test.go
  • internal/api/contract/authored_context.go
  • internal/api/contract/bridges.go
  • internal/api/contract/bridges_test.go
  • internal/api/contract/json_safety.go
  • internal/api/core/agent_channels.go
  • internal/api/core/agent_channels_internal_test.go
  • internal/api/core/authored_context.go
  • internal/api/core/errors.go
  • internal/api/core/resources.go
  • internal/api/core/resources_trigger_test.go
  • internal/api/core/tasks_integration_test.go
  • internal/api/core/tasks_surface_integration_test.go
  • internal/api/core/tasks_terminal_integration_test.go
  • internal/api/core/tasks_token_fence_integration_test.go
  • internal/api/core/testutil_stub_test.go
  • internal/api/httpapi/bridges_integration_test.go
  • internal/api/httpapi/helpers_integration_test.go
  • internal/api/httpapi/hooks_integration_test.go
  • internal/api/httpapi/httpapi_integration_test.go
  • internal/api/httpapi/middleware.go
  • internal/api/httpapi/network_test.go
  • internal/api/httpapi/prompt.go
  • internal/api/httpapi/prompt_drain_test.go
  • internal/api/httpapi/request_body_limit_test.go
  • internal/api/httpapi/transport_parity_integration_test.go
  • internal/api/spec/authored_context.go
  • internal/api/spec/authored_context_test.go
  • internal/api/spec/resources_test.go
  • internal/api/spec/spec.go
  • internal/api/spec/spec_test.go
  • internal/api/testutil/apitest_test.go
  • internal/api/testutil/automation_stub.go
  • internal/api/testutil/bridge_stub.go
  • internal/api/testutil/session_stub.go
  • internal/api/testutil/sse.go
  • internal/api/udsapi/bridges_integration_test.go
  • internal/api/udsapi/hosted_mcp.go
  • internal/api/udsapi/hosted_mcp_test.go
  • internal/api/udsapi/server.go
  • internal/api/udsapi/server_test.go
  • internal/api/udsapi/transport_parity_integration_test.go
  • internal/api/udsapi/udsapi_integration_test.go
  • internal/automation/dispatch.go
  • internal/automation/manager.go
  • internal/automation/manager_integration_test.go
  • internal/automation/manager_webhook_replay_test.go
  • internal/automation/model/persistence.go
  • internal/automation/model/template.go
  • internal/automation/model/template_test.go
  • internal/automation/persistence.go
  • internal/automation/resource_projection.go
  • internal/automation/resource_test.go
  • internal/automation/trigger.go
  • internal/automation/trigger_refac_test.go
  • internal/bridges/delivery_broker.go
  • internal/bridges/delivery_broker_contract_test.go
  • internal/bridges/delivery_types.go
  • internal/bridges/registry_integration_test.go
  • internal/bridges/target_integration_test.go
  • internal/bridges/task_notifier.go
  • internal/bridges/task_notifier_test.go
  • internal/bridgesdk/batching.go
  • internal/bridgesdk/batching_refac_test.go
  • internal/bridgesdk/dedup.go
  • internal/bridgesdk/dedup_test.go
  • internal/bridgesdk/runtime.go
  • internal/bridgesdk/runtime_initialize_request_test.go
  • internal/bridgesdk/runtime_integration_test.go
  • internal/bundles/model/model.go
  • internal/bundles/model/model_test.go
  • internal/bundles/resource_store.go
  • internal/bundles/resource_store_test.go
  • internal/bundles/service.go
  • internal/bundles/service_refac_test.go
  • internal/cli/authored_context.go
  • internal/cli/cli_historical_mixed_ownership_integration_test.go
  • internal/cli/cli_historical_task_run_terminal_integration_test.go
  • internal/cli/cli_integration_test.go
  • internal/cli/client.go
  • internal/cli/client_test.go
  • internal/cli/client_tools.go
  • internal/cli/daemon.go
  • internal/cli/daemon_authored_context_test.go
  • internal/cli/daemon_relaunch_test.go
  • internal/cli/daemon_wait_test.go
  • internal/cli/docpost/docpost.go
  • internal/cli/docpost/process_input_test.go
  • internal/cli/extension_marketplace_integration_test.go
  • internal/cli/helpers_test.go
  • internal/cli/lifecycle_test.go
  • internal/cli/mcp_auth.go
  • internal/cli/mcp_auth_test.go
  • internal/cli/perf_bench_test.go
  • internal/cli/root.go
  • internal/cli/skill_marketplace_integration_test.go
  • internal/cli/tool_integration_test.go
  • internal/cli/tool_test.go
  • internal/codegen/openapits/generate.go
  • internal/codegen/openapits/generate_test.go
  • internal/config/agent.go
  • internal/config/agent_create.go
  • internal/config/agent_edit.go
  • internal/config/agent_edit_test.go
  • internal/config/agent_resource.go
  • internal/config/agent_resource_test.go
  • internal/config/agent_workspace_discovery_test.go
  • internal/config/bootstrap.go
  • internal/config/capabilities.go
  • internal/config/config.go
  • internal/config/file_io.go
  • internal/config/home.go
  • internal/config/home_permissions_test.go
  • internal/config/hooks.go
  • internal/config/mcp_resource.go
  • internal/config/persistence_integration_test.go
  • internal/daemon/agent_skill_resources_integration_test.go
  • internal/daemon/boot.go
  • internal/daemon/bridge_secrets.go
  • internal/daemon/bridge_secrets_test.go
  • internal/daemon/daemon_acpmock_faults_integration_test.go
  • internal/daemon/daemon_bridge_extension_integration_test.go
  • internal/daemon/daemon_integration_test.go
  • internal/daemon/daemon_mock_agents_integration_test.go
  • internal/daemon/daemon_network_collaboration_integration_test.go
  • internal/daemon/daemon_nightly_combined_integration_test.go
  • internal/daemon/daemon_test.go
  • internal/daemon/harness_context_integration_test.go
  • internal/daemon/native_provider_model_tools.go
  • internal/daemon/native_tools.go
  • internal/daemon/native_tools_test.go
  • internal/daemon/prompt_input_composite_integration_test.go
  • internal/daemon/tool_mcp_resources_integration_test.go
  • internal/daemon/tool_policy_resolver.go
  • internal/diagnostics/redact.go
  • internal/diagnostics/redact_test.go
  • internal/e2elane/command_wiring_test.go
  • internal/e2elane/go_module_contract_test.go
  • internal/e2elane/makefile_web_targets_test.go
  • internal/extension/bridge_delivery_integration_test.go
  • internal/extension/discord_provider_integration_test.go
  • internal/extension/gchat_provider_integration_test.go
  • internal/extension/github_provider_integration_test.go
  • internal/extension/host_api.go
  • internal/extension/host_api_authored_context.go
  • internal/extension/host_api_automation_payload_test.go
  • internal/extension/host_api_bridges.go
  • internal/extension/host_api_bridges_ingest_test.go
  • internal/extension/host_api_integration_test.go
  • internal/extension/host_api_soul_validate_test.go
  • internal/extension/linear_provider_integration_test.go
  • internal/extension/manager_integration_test.go
  • internal/extension/manifest_integration_test.go
  • internal/extension/model_source_test.go
  • internal/extension/provider_conformance_matrix_integration_test.go
  • internal/extension/reference_integration_test.go
  • internal/extension/registry_integration_test.go
  • internal/extension/slack_provider_integration_test.go
  • internal/extension/teams_provider_integration_test.go
  • internal/extension/telegram_provider_integration_test.go
  • internal/extension/telegram_reference_integration_test.go
  • internal/extension/whatsapp_provider_integration_test.go
  • internal/extensiontest/bridge_adapter_harness.go
  • internal/extensiontest/bridge_adapter_harness_ack_test.go
  • internal/extensiontest/bridge_adapter_harness_delivery_test.go
  • internal/extensiontest/bridge_adapter_harness_integration_test.go
  • internal/extensiontest/bridge_conformance_matrix.go
  • internal/extensiontest/bridge_conformance_matrix_outcomes_test.go
  • internal/fileutil/atomic.go
  • internal/fileutil/atomic_dirsync_windows.go
  • internal/fileutil/atomic_remove_test.go
  • internal/fileutil/atomic_remove_unix.go
  • internal/fileutil/atomic_remove_windows.go
  • internal/fileutil/atomic_test.go
  • internal/fileutil/atomic_windows_test.go
  • internal/heartbeat/authoring.go
  • internal/heartbeat/authoring_status_test.go
  • internal/heartbeat/heartbeat.go
  • internal/heartbeat/persistence.go
  • internal/heartbeat/status.go
  • internal/heartbeat/wake.go
  • internal/heartbeat/wake_test.go
  • internal/hooks/async_clone.go
  • internal/hooks/async_clone_test.go
  • internal/hooks/automation_job_payload_test.go
  • internal/hooks/dispatch_async_test.go
  • internal/hooks/dispatch_integration_test.go
  • internal/hooks/executor_subprocess.go
  • internal/hooks/executor_subprocess_windows.go
  • internal/hooks/executor_subprocess_windows_test.go
  • internal/hooks/hooks.go
  • internal/hooks/introspection.go
  • internal/hooks/introspection_wildcard_test.go
  • internal/hooks/matcher.go
  • internal/hooks/matcher_authored_context_test.go
  • internal/hooks/payloads.go
  • internal/mcp/auth/metadata.go
  • internal/mcp/auth/service.go
  • internal/mcp/auth/service_direct_endpoint_test.go
  • internal/mcp/auth/service_expires_in_test.go
  • internal/mcp/executor.go
  • internal/mcp/executor_test.go
  • internal/mcp/hosted_proxy.go
  • internal/mcp/hosted_proxy_result_test.go
  • internal/memory/assembler_test.go
  • internal/memory/consolidation/perf_bench_test.go
  • internal/memory/consolidation/runtime.go
  • internal/memory/consolidation/runtime_spawner_test.go
  • internal/memory/consolidation/runtime_test.go
  • internal/memory/contract/contract_test.go
  • internal/memory/contract/types.go
  • internal/memory/controller/controller.go
  • internal/memory/controller/controller_test.go
  • internal/memory/decision.go
  • internal/memory/dream.go
  • internal/memory/dream_test.go
  • internal/memory/extractor/inbox.go
  • internal/memory/extractor/runtime.go
  • internal/memory/extractor/runtime_test.go
  • internal/memory/extractor_events.go
  • internal/memory/extractor_events_test.go
  • internal/memory/lock.go
  • internal/memory/lock_concurrency_test.go
  • internal/memory/observability.go
  • internal/memory/observability_test.go
  • internal/memory/prompts/registry.go
  • internal/memory/prompts/registry_test.go
  • internal/memory/provider/local/provider.go
  • internal/memory/provider/local/provider_test.go
  • internal/memory/recall/signal_recorder.go
  • internal/memory/recall/signal_recorder_test.go
  • internal/memory/store.go
  • internal/memory/store_memv2_test.go
  • internal/memory/store_test.go
  • internal/modelcatalog/merge.go
  • internal/modelcatalog/service.go
  • internal/modelcatalog/service_test.go
  • internal/network/audit.go
  • internal/network/audit_timeline_test.go
  • internal/network/delivery_integration_test.go
  • internal/network/envelope_integration_test.go
  • internal/network/manager_integration_test.go
  • internal/network/router_integration_test.go
  • internal/network/tasks_integration_test.go
  • internal/network/transport.go
  • internal/network/transport_shutdown_test.go
  • internal/observe/reconcile.go
  • internal/observe/reconcile_test.go
  • internal/observe/tasks_integration_test.go
  • internal/procutil/detached.go
💤 Files with no reviewable changes (2)
  • internal/daemon/boot.go
  • internal/daemon/native_provider_model_tools.go

Comment thread extensions/bridges/linear/provider_test.go Outdated
Comment thread extensions/bridges/linear/runtime_test.go
Comment thread extensions/bridges/slack/provider.go
Comment thread extensions/bridges/teams/provider_test.go
Comment thread extensions/bridges/teams/provider.go
Comment thread internal/automation/trigger.go
Comment thread internal/bridges/task_notifier.go
Comment thread internal/bundles/resource_store_test.go
Comment thread internal/bundles/resource_store.go
Comment thread internal/daemon/bridge_secrets_test.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: 1

🧹 Nitpick comments (1)
extensions/bridges/slack/provider.go (1)

222-224: 💤 Low value

Add compile-time interface assertion for slackDeliveryReconciler.

The slackBotClient implements slackDeliveryReconciler via FindDeliveryMessage, but there's no compile-time assertion to verify interface satisfaction. While the runtime type assertion at line 1528 handles cases where the interface isn't implemented, a compile-time check catches implementation drift earlier.

♻️ Add compile-time assertion

Add near the type definition:

var _ slackDeliveryReconciler = (*slackBotClient)(nil)

As per coding guidelines: "Use compile-time interface assertions (var _ InterfaceName = (*ConcreteType)(nil)) to verify interface satisfaction".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@extensions/bridges/slack/provider.go` around lines 222 - 224, Add a
compile-time interface assertion to ensure slackBotClient implements
slackDeliveryReconciler: near the slackDeliveryReconciler type definition, add
the statement asserting var _ slackDeliveryReconciler = (*slackBotClient)(nil).
This references the slackDeliveryReconciler interface and the slackBotClient
concrete type (which implements FindDeliveryMessage) so the compiler will catch
any future drift.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/automation/trigger_test.go`:
- Around line 554-618: Wrap the existing
TestTriggerEngineAllowsWebhookRetryWhenFilteringProducesNoRuns body in a
t.Run("Should allow webhook retry when filtering produces no runs", func(t
*testing.T) { ... }) subtest and move the t.Parallel() call inside that subtest;
keep all existing setup and assertions
(store/newRecordingSessionCreator/current/dispatcher/newTestTriggerEngine,
registering the trigger, signing payload, the two HandleWebhook calls and
assertions, and checks against creator.promptCalls()) unchanged except for the
surrounding t.Run wrapper so the test follows the required t.Run("Should...")
pattern.

---

Nitpick comments:
In `@extensions/bridges/slack/provider.go`:
- Around line 222-224: Add a compile-time interface assertion to ensure
slackBotClient implements slackDeliveryReconciler: near the
slackDeliveryReconciler type definition, add the statement asserting var _
slackDeliveryReconciler = (*slackBotClient)(nil). This references the
slackDeliveryReconciler interface and the slackBotClient concrete type (which
implements FindDeliveryMessage) so the compiler will catch any future drift.
🪄 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: eaf2b1d3-91af-4219-9c9f-ab92973e99ad

📥 Commits

Reviewing files that changed from the base of the PR and between 6a8b1bb and c6801a1.

📒 Files selected for processing (25)
  • extensions/bridges/linear/provider_test.go
  • extensions/bridges/linear/runtime_test.go
  • extensions/bridges/slack/provider.go
  • extensions/bridges/slack/provider_test.go
  • extensions/bridges/teams/provider.go
  • extensions/bridges/teams/provider_test.go
  • internal/acp/launcher_tool_host_test.go
  • internal/acp/tool_host.go
  • internal/api/contract/agents.go
  • internal/api/contract/agents_test.go
  • internal/api/contract/json_safety.go
  • internal/api/core/agent_channels.go
  • internal/api/core/agent_channels_internal_test.go
  • internal/api/httpapi/prompt.go
  • internal/api/httpapi/prompt_drain_test.go
  • internal/api/udsapi/server.go
  • internal/api/udsapi/server_test.go
  • internal/automation/resource_test.go
  • internal/automation/trigger.go
  • internal/automation/trigger_test.go
  • internal/bridges/task_notifier.go
  • internal/bridges/task_notifier_test.go
  • internal/bundles/resource_store.go
  • internal/bundles/resource_store_test.go
  • internal/daemon/bridge_secrets_test.go
🚧 Files skipped from review as they are similar to previous changes (16)
  • extensions/bridges/linear/provider_test.go
  • internal/api/contract/json_safety.go
  • internal/api/contract/agents.go
  • internal/bridges/task_notifier.go
  • internal/acp/tool_host.go
  • internal/api/core/agent_channels.go
  • internal/daemon/bridge_secrets_test.go
  • extensions/bridges/teams/provider_test.go
  • extensions/bridges/linear/runtime_test.go
  • internal/bundles/resource_store_test.go
  • internal/automation/resource_test.go
  • internal/bundles/resource_store.go
  • internal/api/core/agent_channels_internal_test.go
  • internal/bridges/task_notifier_test.go
  • extensions/bridges/teams/provider.go
  • internal/automation/trigger.go

Comment on lines +554 to +618
func TestTriggerEngineAllowsWebhookRetryWhenFilteringProducesNoRuns(t *testing.T) {
t.Parallel()

store := newMemoryRunStore()
creator := newRecordingSessionCreator()
current := time.Date(2026, 4, 11, 5, 0, 0, 0, time.UTC)
dispatcher := newTestDispatcher(t, creator, store, WithDispatcherNow(func() time.Time { return current }))
engine := newTestTriggerEngine(
t,
dispatcher,
WithTriggerEngineNow(func() time.Time { return current }),
WithTriggerEngineWebhookFreshnessWindow(5*time.Minute),
)

trigger := testWebhookTrigger(AutomationScopeGlobal, "webhook-filter-no-runs", "")
trigger.Filter = map[string]string{"data.payload": "approved"}
if err := engine.Register(TriggerRegistration{Trigger: trigger}); err != nil {
t.Fatalf("Register() error = %v", err)
}

payload := []byte(`{"payload":"deploy"}`)
signature, err := SignWebhookPayload(testWebhookSecretValue(trigger.WebhookSecretRef), current, payload)
if err != nil {
t.Fatalf("SignWebhookPayload() error = %v", err)
}

firstResult, err := engine.HandleWebhook(testutil.Context(t), WebhookRequest{
Scope: AutomationScopeGlobal,
Endpoint: "deploy-review--" + trigger.WebhookID,
DeliveryID: "delivery-filtered",
Timestamp: current,
Signature: signature,
Payload: payload,
Data: map[string]any{
"payload": "deploy",
},
})
if err != nil {
t.Fatalf("HandleWebhook(first) error = %v", err)
}
if got := len(firstResult.Runs); got != 0 {
t.Fatalf("len(firstResult.Runs) = %d, want 0", got)
}

secondResult, err := engine.HandleWebhook(testutil.Context(t), WebhookRequest{
Scope: AutomationScopeGlobal,
Endpoint: "deploy-review--" + trigger.WebhookID,
DeliveryID: "delivery-filtered",
Timestamp: current,
Signature: signature,
Payload: payload,
Data: map[string]any{
"payload": "deploy",
},
})
if err != nil {
t.Fatalf("HandleWebhook(second) error = %v, want nil retry after filter", err)
}
if got := len(secondResult.Runs); got != 0 {
t.Fatalf("len(secondResult.Runs) = %d, want 0", got)
}
if got := len(creator.promptCalls()); got != 0 {
t.Fatalf("len(Prompt calls) = %d, want 0", got)
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Wrap this test case in a t.Run("Should...") subtest.

This new test is implemented as a direct top-level case instead of the required t.Run("Should...") pattern.

Suggested change
 func TestTriggerEngineAllowsWebhookRetryWhenFilteringProducesNoRuns(t *testing.T) {
 	t.Parallel()
+	t.Run("ShouldAllowWebhookRetryWhenFilteringProducesNoRuns", func(t *testing.T) {
+		t.Parallel()

 	// existing test body
+	})
 }

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

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/automation/trigger_test.go` around lines 554 - 618, Wrap the
existing TestTriggerEngineAllowsWebhookRetryWhenFilteringProducesNoRuns body in
a t.Run("Should allow webhook retry when filtering produces no runs", func(t
*testing.T) { ... }) subtest and move the t.Parallel() call inside that subtest;
keep all existing setup and assertions
(store/newRecordingSessionCreator/current/dispatcher/newTestTriggerEngine,
registering the trigger, signing payload, the two HandleWebhook calls and
assertions, and checks against creator.promptCalls()) unchanged except for the
surrounding t.Run wrapper so the test follows the required t.Run("Should...")
pattern.

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