Skip to content

fix: acp integration#4

Merged
pedronauck merged 1 commit into
mainfrom
pn/fix-acp
Apr 6, 2026
Merged

fix: acp integration#4
pedronauck merged 1 commit into
mainfrom
pn/fix-acp

Conversation

@pedronauck
Copy link
Copy Markdown
Member

@pedronauck pedronauck commented Apr 6, 2026

Summary by CodeRabbit

  • New Features

    • Session transcripts now available for retrieval and viewing via API endpoints
    • Transcript assembly properly aggregates user messages, agent responses, tool calls, and tool results
    • Support for multiple transcript payload formats ensures compatibility
  • Bug Fixes

    • Improved session resumption error handling to properly report when session loading is not supported

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

coderabbitai Bot commented Apr 6, 2026

Walkthrough

This pull request introduces a comprehensive session transcript feature across the backend and frontend, adding session history retrieval endpoints and replacing history-based hydration with transcript-based initialization. It also modifies session resume validation to independently check ResumeSessionID and error if the agent lacks LoadSession support.

Changes

Cohort / File(s) Summary
Configuration
.gitignore
Added pattern to ignore .codex/ledger/*-MEMORY-* files; removed .codex/plans from ignored paths.
Session Resume Validation
internal/acp/client.go, internal/acp/client_test.go
Modified resume-session control flow to validate ResumeSessionID independently and stop the process with an error if SupportsLoadSession is false. Updated load error handling to stop the process instead of falling back to session/new. Added tests for load failure and missing capability scenarios.
Event Persistence & Marshaling
internal/session/manager.go, internal/session/manager_test.go, internal/session/additional_test.go, internal/session/query_test.go
Added user message persistence before invoking driver prompt with notification support. Refactored event marshaling from minimal map to strongly-typed canonicalEventPayload with enhanced raw event handling, tool metadata extraction, and legacy payload support. Updated test expectations for stored event counts and added verification that user messages are persisted pre-prompt.
Transcript Rendering
internal/session/transcript.go, internal/session/transcript_test.go
Introduced new transcript assembly logic that stably sorts events by sequence/timestamp/ID, buffers assistant output by turn, correlates tool calls with results, and supports both canonical and legacy event payload formats. Includes comprehensive parsing and helper functions for multiple transcript shape formats.
Backend SessionManager Interface
internal/daemon/daemon.go, internal/daemon/daemon_test.go, internal/httpapi/server.go, internal/udsapi/server.go
Extended SessionManager interface across daemon and HTTP API servers with new Transcript(ctx, id) method. Updated test doubles (fakeSessionManager, stubSessionManager) to support transcript retrieval.
HTTP Transcript Endpoints
internal/httpapi/sessions.go, internal/httpapi/handlers_test.go, internal/httpapi/helpers_test.go, internal/udsapi/handlers.go, internal/udsapi/handlers_test.go, internal/udsapi/helpers_test.go, internal/udsapi/routes.go
Added new HTTP GET handlers and routes for /api/sessions/:id/transcript in both HTTP API and UDS API layers. Handlers retrieve transcripts and return JSON responses with message arrays. Updated test helpers and handler tests to cover new endpoint.
Frontend Transcript Types & Schemas
web/src/systems/session/types.ts, web/src/systems/session/types.test.ts
Added Zod schemas and TypeScript types for transcript payload structures: TranscriptMessage, TranscriptToolResult, and SessionTranscriptResponse. Extended ToolUseResult interface with optional rawOutput field.
Frontend API Adapter
web/src/systems/session/adapters/session-api.ts, web/src/systems/session/adapters/session-api.test.ts
Introduced new fetchSessionTranscript API adapter to request /api/sessions/{id}/transcript, replacing fetchSessionHistory. Added 404 error handling and response schema validation.
Frontend Query Infrastructure
web/src/systems/session/lib/query-keys.ts, web/src/systems/session/lib/query-options.ts
Added sessionKeys.transcript query key generator and sessionTranscriptOptions query configuration function with 10-second stale time and conditional enabling.
Frontend Transcript Mapping
web/src/systems/session/lib/transcript-mapper.ts, web/src/systems/session/lib/transcript-mapper.test.ts
Implemented transcript-to-UI message transformation logic that maps transcript messages (including tool calls/results) to UI message format, with timestamp parsing and tool result field mapping.
Frontend Hooks & Session System
web/src/systems/session/hooks/use-session-transcript.ts, web/src/systems/session/hooks/use-session-history.ts, web/src/systems/session/index.ts
Added new useSessionTranscript hook for fetching and mapping transcript data. Refactored useSessionHistory to wrap the transcript hook. Extended public session system exports to include transcript types, schemas, adapters, query options, mappers, and hooks.
Frontend Session Route
web/src/routes/_app/session.$id.tsx, web/src/routes/_app/-session.$id.test.tsx
Updated session page component to use transcript hydration instead of history, with immediate session reset on ID change and "hydrated-once" tracking via hydratedSessionIdRef. Added integration tests verifying transcript arrival updates chat messages and session switches properly reset prior state.

Sequence Diagram(s)

sequenceDiagram
    participant User as User/Client
    participant Frontend as Frontend Component
    participant Query as React Query
    participant API as HTTP API
    participant Manager as Session Manager
    participant DB as Event Recorder
    
    User->>Frontend: Navigate to session/:id
    Frontend->>Frontend: Reset session state<br/>(clear messages, stop streaming)
    Frontend->>Query: Request sessionTranscriptOptions(id)
    Query->>API: GET /api/sessions/:id/transcript
    API->>Manager: Transcript(ctx, id)
    Manager->>DB: Query events by session ID
    DB-->>Manager: Return ordered events
    Manager->>Manager: Assembly: buffer by turn,<br/>correlate tool calls/results
    Manager-->>API: []TranscriptMessage
    API-->>Query: {messages: [...]}
    Query-->>Frontend: transcriptMessages
    alt Messages match active session ID
        Frontend->>Frontend: setActiveSession(id, messages)
        Frontend->>Frontend: Hydrate chat with messages
    end
    Frontend-->>User: Render chat with transcript
Loading
sequenceDiagram
    participant Driver as ACP Driver
    participant Client as ACP Client
    participant Agent as Agent Process
    
    Client->>Client: Validate normalized.ResumeSessionID
    Client->>Agent: Check Caps.SupportsLoadSession
    alt SupportsLoadSession is true
        Client->>Agent: Session/load
        alt Load succeeds
            Agent-->>Client: loadResponse with SessionID/Caps
            Client->>Client: Update process state
            Client-->>Driver: Return process
        else Load fails
            Agent-->>Client: loadErr
            Client->>Agent: Stop process
            Client-->>Driver: Return wrapped error
        end
    else SupportsLoadSession is false
        Client->>Agent: Stop process
        Client-->>Driver: Return "does not support session/load"
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

🐰 Hops with glee through transcripts new,
Messages recorded, sorted true,
From backend halls to frontend views,
Sessions bloom in every hue!
Tool calls correlated, turns aligned,
A conversation well-designed!

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 9.62% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The PR title 'fix: acp integration' is vague and does not clearly convey the primary changes in the changeset, which include ACP resume/session validation fixes, session transcript capabilities, and corresponding API/UI integration across multiple layers. Use a more specific title that captures the main change, such as 'feat: add session transcript API and integrate transcript-based chat hydration' or 'fix: improve ACP resume validation and add session transcript support'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch pn/fix-acp

Comment @coderabbitai help to get the list of available commands and usage tips.

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: 6

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@internal/acp/client_test.go`:
- Around line 334-352: Collapse the two near-duplicate tests
(TestStartResumeReturnsErrorWhenLoadFails and the adjacent resume-failure test)
into a single table-driven test that iterates cases (scenario name, Env value,
expected sentinel error) and uses t.Run per case; in addition, introduce
exported sentinel errors in the driver package (e.g.
ErrAgentDoesNotSupportSession and ErrLoadSessionFailed or similar names) that
Start(...) returns for the two resume failure paths, and update the Start caller
in the tests to assert the error using errors.Is(err, sentinelErr) instead of
string matching via strings.Contains; locate the Start function implementation
to return the new sentinel errors on the corresponding branches and update the
test cases to reference those sentinel symbols.

In `@internal/acp/client.go`:
- Around line 206-209: The resume-paths currently ignore errors from d.Stop(...)
causing subprocesses to potentially remain alive; update both places where you
call d.Stop(context.Background(), process) (the branch gated by
normalized.ResumeSessionID && !process.Caps.SupportsLoadSession and the similar
branch around lines 218-220) to capture the error return, and if Stop fails,
return a wrapped/combined error that includes the original resume/load error and
the Stop error (e.g., using fmt.Errorf("...; stop failed: %w", stopErr)) so
callers see both failures instead of swallowing the Stop error.

In `@internal/httpapi/handlers_test.go`:
- Around line 302-332: Add t.Parallel() to the start of the
TestSessionTranscriptHandlerReturnsMessages test to run it concurrently;
specifically, insert a call to t.Parallel() as the first statement in the
TestSessionTranscriptHandlerReturnsMessages function (before creating homePaths,
manager, handlers, and engine) so the test aligns with the test concurrency
standard for independent tests.

In `@internal/session/transcript_test.go`:
- Around line 17-19: The cleanup currently ignores errors from
h.manager.Stop(testContext(t), session.ID) using `_ =`; change this to capture
the error and log it instead of discarding it (e.g., `if err :=
h.manager.Stop(testContext(t), session.ID); err != nil { t.Logf("h.manager.Stop
failed for session %s: %v", session.ID, err) }`) in both cleanup blocks
referenced (including the other occurrence around lines 147-149) so failures
during Stop are recorded; use testContext(t), session.ID and h.manager.Stop
identifiers to locate and update the code.

In `@internal/session/transcript.go`:
- Around line 107-109: The deferred call currently ignores the cleanup error via
`_ = cleanup()`; update the deferred anonymous function to handle the returned
error instead—call cleanup(), capture its error, and either log it with the
package logger (e.g., a processLogger / std logger) or explicitly comment why it
can be ignored; reference the deferred anonymous function and cleanup() so
reviewers can find and replace the `_ = cleanup()` with an error check (e.g., if
err := cleanup(); err != nil { logger.Warn("transcript cleanup failed:", err) })
or add a one-line justification comment if ignoring is intentional.

In `@internal/udsapi/handlers_test.go`:
- Around line 299-329: In TestSessionTranscriptHandlerReturnsMessages add
t.Parallel() at the start of the test to run it concurrently with other tests;
modify the TestSessionTranscriptHandlerReturnsMessages function (the test with
stubSessionManager and newTestRouter/newTestHandlers) to call t.Parallel()
immediately after the function begins so it behaves consistently with other
tests in this file.
🪄 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: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 6436f8b2-e524-48d8-b503-d88abe104373

📥 Commits

Reviewing files that changed from the base of the PR and between e0653d2 and 6856f09.

⛔ Files ignored due to path filters (35)
  • .codex/plans/2026-03-31-daemon-runtime-dashboard.md is excluded by !**/*.md
  • .codex/plans/2026-04-01-dashboard-zoom-fix.md is excluded by !**/*.md
  • .codex/plans/2026-04-01-observability-spine.md is excluded by !**/*.md
  • .codex/plans/2026-04-02-child-workgroup-activation.md is excluded by !**/*.md
  • .codex/plans/2026-04-02-dashboard-xterm-visibility.md is excluded by !**/*.md
  • .codex/plans/2026-04-02-session-bootstrap-live-dashboard.md is excluded by !**/*.md
  • .codex/plans/2026-04-05-daemon-web-integration.md is excluded by !**/*.md
  • .codex/plans/2026-04-06-acp-history-replay.md is excluded by !**/*.md
  • .codex/plans/2026-04-06-default-agent-install.md is excluded by !**/*.md
  • .codex/plans/2026-04-06-session-stop-hang.md is excluded by !**/*.md
  • .codex/plans/remove-legacy-alpha.md is excluded by !**/*.md
  • docs/cc-ideas/_meta.md is excluded by !**/*.md
  • docs/cc-ideas/analysis_memory_autonomous.md is excluded by !**/*.md
  • docs/cc-ideas/analysis_multi_agent.md is excluded by !**/*.md
  • docs/cc-ideas/analysis_prompt_architecture.md is excluded by !**/*.md
  • docs/cc-ideas/analysis_query_engine.md is excluded by !**/*.md
  • docs/cc-ideas/analysis_services_infra.md is excluded by !**/*.md
  • docs/cc-ideas/analysis_tool_system.md is excluded by !**/*.md
  • docs/cc-ideas/filtered_recommendations.md is excluded by !**/*.md
  • docs/cc-ideas/our_system_cli.md is excluded by !**/*.md
  • docs/cc-ideas/our_system_infra.md is excluded by !**/*.md
  • docs/cc-ideas/our_system_kernel.md is excluded by !**/*.md
  • docs/network/ideas/agora-council_round1.md is excluded by !**/*.md
  • docs/network/ideas/agora-council_round2.md is excluded by !**/*.md
  • docs/network/ideas/agora-recipe-design.md is excluded by !**/*.md
  • docs/network/ideas/agora-spec-v0.1.md is excluded by !**/*.md
  • docs/network/ideas/agora-spec-v0.2.md is excluded by !**/*.md
  • docs/network/ideas/draft_1.md is excluded by !**/*.md
  • docs/network/ideas/draft_2.md is excluded by !**/*.md
  • docs/network/ideas/draft_3.md is excluded by !**/*.md
  • docs/network/ideas/draft_4.md is excluded by !**/*.md
  • docs/network/ideas/draft_5.md is excluded by !**/*.md
  • docs/plans/2026-04-03-web-design-system-foundations-design.md is excluded by !**/*.md
  • docs/rfcs/agent-md-with-skills-memory.md is excluded by !**/*.md
  • docs/rfcs/skills-system-final.md is excluded by !**/*.md
📒 Files selected for processing (34)
  • .codex/ledger/.gitkeep
  • .gitignore
  • internal/acp/client.go
  • internal/acp/client_test.go
  • internal/daemon/daemon.go
  • internal/daemon/daemon_test.go
  • internal/httpapi/handlers_test.go
  • internal/httpapi/helpers_test.go
  • internal/httpapi/server.go
  • internal/httpapi/sessions.go
  • internal/session/additional_test.go
  • internal/session/manager.go
  • internal/session/manager_test.go
  • internal/session/query_test.go
  • internal/session/transcript.go
  • internal/session/transcript_test.go
  • internal/udsapi/handlers.go
  • internal/udsapi/handlers_test.go
  • internal/udsapi/helpers_test.go
  • internal/udsapi/routes.go
  • internal/udsapi/server.go
  • web/src/routes/_app/-session.$id.test.tsx
  • web/src/routes/_app/session.$id.tsx
  • web/src/systems/session/adapters/session-api.test.ts
  • web/src/systems/session/adapters/session-api.ts
  • web/src/systems/session/hooks/use-session-history.ts
  • web/src/systems/session/hooks/use-session-transcript.ts
  • web/src/systems/session/index.ts
  • web/src/systems/session/lib/query-keys.ts
  • web/src/systems/session/lib/query-options.ts
  • web/src/systems/session/lib/transcript-mapper.test.ts
  • web/src/systems/session/lib/transcript-mapper.ts
  • web/src/systems/session/types.test.ts
  • web/src/systems/session/types.ts

Comment on lines +334 to +352
func TestStartResumeReturnsErrorWhenLoadFails(t *testing.T) {
t.Parallel()

driver := New()
_, err := driver.Start(testContext(t), StartOpts{
AgentName: "helper",
Command: helperCommand(t),
Cwd: t.TempDir(),
Env: helperEnv("load_session_error", ""),
Permissions: aghconfig.PermissionModeApproveAll,
ResumeSessionID: "sess-existing",
})
if err == nil {
t.Fatal("Start(load_session_error) error = nil, want non-nil")
}
if !strings.Contains(err.Error(), "load session") {
t.Fatalf("Start(load_session_error) error = %v, want load session failure", err)
}
}
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

🧩 Analysis chain

🏁 Script executed:

# Read the test file to see the actual test code at the mentioned lines
head -400 internal/acp/client_test.go | tail -100

Repository: compozy/agh

Length of output: 3272


🏁 Script executed:

# Check the full test to see if there are duplicated tests and what error patterns are used
rg -n "TestStartResume" internal/acp/client_test.go -A 20

Repository: compozy/agh

Length of output: 2420


🏁 Script executed:

# Check the Start() function implementation to see what errors it returns
rg -n "func.*Start.*StartOpts" internal/acp/client.go -A 30

Repository: compozy/agh

Length of output: 2038


🏁 Script executed:

# Check for any sentinel errors defined in the acp package
rg -n "var.*Err\|errors\.New\|fmt\.Errorf" internal/acp/client.go | head -20

Repository: compozy/agh

Length of output: 37


🏁 Script executed:

# Look at the session interfaces mentioned in the comment
cat internal/session/interfaces.go | head -100

Repository: compozy/agh

Length of output: 2648


🏁 Script executed:

# Check what errors Start() returns by looking at the process interaction and how errors are returned
rg -n "return nil, fmt\\.Errorf\|return nil, errors" internal/acp/client.go | head -30

Repository: compozy/agh

Length of output: 37


🏁 Script executed:

# Look for where session load/resume errors are generated
rg -n "load session\|does not support session/load" internal/acp/client.go -B 5 -A 5

Repository: compozy/agh

Length of output: 37


🏁 Script executed:

# Check the helper implementation to understand the error scenarios
grep -n "load_session_error\|stream_updates" internal/acp/client_test.go -B 3 -A 3

Repository: compozy/agh

Length of output: 1704


🏁 Script executed:

# Find where LoadSession is called in the client code
rg -n "LoadSession" internal/acp/client.go -B 5 -A 10

Repository: compozy/agh

Length of output: 3074


🏁 Script executed:

# Look for error messages in the client that mention "load session" or "does not support"
rg -n "load session\|does not support" internal/acp/ -r

Repository: compozy/agh

Length of output: 468


🏁 Script executed:

# Check the full Start() function to see how resume/load session errors are handled
sed -n '110,250p' internal/acp/client.go

Repository: compozy/agh

Length of output: 4713


🏁 Script executed:

# Check if there are already any sentinel errors defined in the acp package
rg -n "var \(" internal/acp/client.go | head -20

Repository: compozy/agh

Length of output: 37


🏁 Script executed:

# Look for the complete flow: check how acpsdk.SendRequest wraps errors
rg -n "SendRequest\|LoadSessionResponse" internal/acp/ -A 2 | head -40

Repository: compozy/agh

Length of output: 37


🏁 Script executed:

# Verify the exact error text that will be in the wrapped error for both scenarios
rg -n "fmt.Errorf.*load session\|fmt.Errorf.*does not support" internal/acp/client.go

Repository: compozy/agh

Length of output: 37


🏁 Script executed:

# Check if there are any error constants/sentinel errors defined anywhere in the acp package
find internal/acp -name "*.go" -exec grep -l "var.*Err\|const.*Err" {} \;

Repository: compozy/agh

Length of output: 79


🏁 Script executed:

# Let's look at the imports and error handling in client.go to see what error pattern is used
head -30 internal/acp/client.go

Repository: compozy/agh

Length of output: 580


🏁 Script executed:

# Check if errors.Is is used anywhere in the test file to understand the testing pattern
rg -n "errors\\.Is\|errors\\.As" internal/acp/client_test.go

Repository: compozy/agh

Length of output: 37


🏁 Script executed:

# Check handlers.go to see if sentinel errors are defined there
cat internal/acp/handlers.go | head -50

Repository: compozy/agh

Length of output: 1274


🏁 Script executed:

# Get the complete picture of what errors are actually returned from Start() and how they're constructed
rg -n "fmt.Errorf\|errors.New" internal/acp/client.go | grep -E "load|does not support"

Repository: compozy/agh

Length of output: 37


🏁 Script executed:

# Let's check the exact error messages that will be in the wrapped errors
grep -n "fmt.Errorf" internal/acp/client.go | grep -E "209|220"

Repository: compozy/agh

Length of output: 319


🏁 Script executed:

# Check what error the helper returns for load_session_error scenario
sed -n '597,605p' internal/acp/client_test.go

Repository: compozy/agh

Length of output: 414


🏁 Script executed:

# Look at the overall structure to understand if the tests could use errors.Is
rg -n "errors\.New\|sentinel\|var.*=" internal/acp/handlers.go | head -20

Repository: compozy/agh

Length of output: 37


🏁 Script executed:

# Verify what package the error handling should follow - check if other Go files define sentinel errors
rg -n "var.*Error.*=" internal/ -A 1 | grep -v test | head -30

Repository: compozy/agh

Length of output: 37


🏁 Script executed:

# Check the coding guidelines enforcement - look for any existing sentinel error pattern in the codebase
rg -n "errors\.New\(" internal/acp/ -B 1 -A 1 | head -40

Repository: compozy/agh

Length of output: 2591


Refactor these into a single table-driven test and use sentinel errors with errors.Is() for error matching.

Both tests (lines 334-352 and 354-372) have identical structure with only the scenario, environment, and expected error message varying. Collapse into one t.Run table with different test cases. Currently both use strings.Contains(err.Error(), ...), which violates the guideline: "Use errors.Is() and errors.As() for error matching — never compare error strings."

Define sentinel errors in Start() for the two resume failure cases:

  • Agent does not support session/load
  • Load session fails

Then update tests to check these sentinel errors with errors.Is() rather than parsing error strings. This matches the codebase pattern already established in permission.go (e.g., ErrPermissionDenied, ErrPathOutsideWorkspace).

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

In `@internal/acp/client_test.go` around lines 334 - 352, Collapse the two
near-duplicate tests (TestStartResumeReturnsErrorWhenLoadFails and the adjacent
resume-failure test) into a single table-driven test that iterates cases
(scenario name, Env value, expected sentinel error) and uses t.Run per case; in
addition, introduce exported sentinel errors in the driver package (e.g.
ErrAgentDoesNotSupportSession and ErrLoadSessionFailed or similar names) that
Start(...) returns for the two resume failure paths, and update the Start caller
in the tests to assert the error using errors.Is(err, sentinelErr) instead of
string matching via strings.Contains; locate the Start function implementation
to return the new sentinel errors on the corresponding branches and update the
test cases to reference those sentinel symbols.

Comment thread internal/acp/client.go
Comment on lines +206 to +209
if normalized.ResumeSessionID != "" {
if !process.Caps.SupportsLoadSession {
_ = d.Stop(context.Background(), process)
return nil, fmt.Errorf("acp: agent %q does not support session/load for resume %q", normalized.AgentName, normalized.ResumeSessionID)
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 | 🟠 Major

Handle Stop failures in these resume error paths.

Both branches drop d.Stop(...) with _. If shutdown fails during Start, the caller only sees the resume/load error while the ACP subprocess can remain alive. Return the stop failure as part of the error.

♻️ Suggested change
 	if normalized.ResumeSessionID != "" {
 		if !process.Caps.SupportsLoadSession {
-			_ = d.Stop(context.Background(), process)
-			return nil, fmt.Errorf("acp: agent %q does not support session/load for resume %q", normalized.AgentName, normalized.ResumeSessionID)
+			startErr := fmt.Errorf("acp: agent %q does not support session/load for resume %q", normalized.AgentName, normalized.ResumeSessionID)
+			if stopErr := d.Stop(context.Background(), process); stopErr != nil {
+				return nil, errors.Join(startErr, fmt.Errorf("acp: stop subprocess after resume rejection: %w", stopErr))
+			}
+			return nil, startErr
 		}
 
 		loadRequest := acpsdk.LoadSessionRequest{
 			Cwd:        normalized.Cwd,
 			McpServers: toSDKMCPServers(normalized.MCPServers),
 			SessionId:  acpsdk.SessionId(normalized.ResumeSessionID),
 		}
 		loadResponse, loadErr := acpsdk.SendRequest[acpsdk.LoadSessionResponse](process.conn, ctx, acpsdk.AgentMethodSessionLoad, loadRequest)
 		if loadErr != nil {
-			_ = d.Stop(context.Background(), process)
-			return nil, fmt.Errorf("acp: load session %q for %q: %w", normalized.ResumeSessionID, normalized.AgentName, loadErr)
+			startErr := fmt.Errorf("acp: load session %q for %q: %w", normalized.ResumeSessionID, normalized.AgentName, loadErr)
+			if stopErr := d.Stop(context.Background(), process); stopErr != nil {
+				return nil, errors.Join(startErr, fmt.Errorf("acp: stop subprocess after load failure: %w", stopErr))
+			}
+			return nil, startErr
 		}

As per coding guidelines, "Never ignore errors with _ — every error must be handled or have a written justification".

Also applies to: 218-220

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

In `@internal/acp/client.go` around lines 206 - 209, The resume-paths currently
ignore errors from d.Stop(...) causing subprocesses to potentially remain alive;
update both places where you call d.Stop(context.Background(), process) (the
branch gated by normalized.ResumeSessionID && !process.Caps.SupportsLoadSession
and the similar branch around lines 218-220) to capture the error return, and if
Stop fails, return a wrapped/combined error that includes the original
resume/load error and the Stop error (e.g., using fmt.Errorf("...; stop failed:
%w", stopErr)) so callers see both failures instead of swallowing the Stop
error.

Comment on lines +302 to +332
func TestSessionTranscriptHandlerReturnsMessages(t *testing.T) {
homePaths := newTestHomePaths(t)
manager := stubSessionManager{
transcriptFn: func(context.Context, string) ([]session.TranscriptMessage, error) {
return []session.TranscriptMessage{{
ID: "msg-1",
Role: session.TranscriptRoleAssistant,
Content: "hello",
Timestamp: time.Date(2026, 4, 3, 12, 0, 0, 0, time.UTC),
}}, nil
},
}
handlers := newTestHandlers(t, manager, stubObserver{}, homePaths)
engine := newTestRouter(t, handlers)

recorder := performRequest(t, engine, http.MethodGet, "/api/sessions/sess-123/transcript", nil)
if recorder.Code != http.StatusOK {
t.Fatalf("status = %d, want %d; body=%s", recorder.Code, http.StatusOK, recorder.Body.String())
}

var response struct {
Messages []session.TranscriptMessage `json:"messages"`
}
decodeJSONResponse(t, recorder, &response)
if len(response.Messages) != 1 {
t.Fatalf("len(messages) = %d, want 1", len(response.Messages))
}
if got := response.Messages[0].Content; got != "hello" {
t.Fatalf("messages[0].Content = %q, want %q", got, "hello")
}
}
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

Run this new test in parallel.

This test is independent and should call t.Parallel() to align with the test concurrency standard.

✅ Suggested patch
 func TestSessionTranscriptHandlerReturnsMessages(t *testing.T) {
+	t.Parallel()
+
 	homePaths := newTestHomePaths(t)
 	manager := stubSessionManager{
 		transcriptFn: func(context.Context, string) ([]session.TranscriptMessage, error) {

As per coding guidelines, **/*_test.go: "Use t.Parallel() for independent subtests in Go tests".

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

In `@internal/httpapi/handlers_test.go` around lines 302 - 332, Add t.Parallel()
to the start of the TestSessionTranscriptHandlerReturnsMessages test to run it
concurrently; specifically, insert a call to t.Parallel() as the first statement
in the TestSessionTranscriptHandlerReturnsMessages function (before creating
homePaths, manager, handlers, and engine) so the test aligns with the test
concurrency standard for independent tests.

Comment on lines +17 to +19
t.Cleanup(func() {
_ = h.manager.Stop(testContext(t), session.ID)
})
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Consider logging cleanup errors instead of silently ignoring.

The cleanup functions ignore errors from h.manager.Stop() with _ =. While cleanup errors are often secondary to test failures, the coding guidelines state errors should not be ignored without justification.

🔧 Optional: Log cleanup errors
  t.Cleanup(func() {
-   _ = h.manager.Stop(testContext(t), session.ID)
+   if err := h.manager.Stop(testContext(t), session.ID); err != nil {
+     t.Logf("cleanup: stop session failed: %v", err)
+   }
  })

As per coding guidelines: "Never ignore errors with _ — every error must be handled or have a written justification"

Also applies to: 147-149

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

In `@internal/session/transcript_test.go` around lines 17 - 19, The cleanup
currently ignores errors from h.manager.Stop(testContext(t), session.ID) using
`_ =`; change this to capture the error and log it instead of discarding it
(e.g., `if err := h.manager.Stop(testContext(t), session.ID); err != nil {
t.Logf("h.manager.Stop failed for session %s: %v", session.ID, err) }`) in both
cleanup blocks referenced (including the other occurrence around lines 147-149)
so failures during Stop are recorded; use testContext(t), session.ID and
h.manager.Stop identifiers to locate and update the code.

Comment on lines +107 to +109
defer func() {
_ = cleanup()
}()
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Consider handling cleanup errors.

The deferred cleanup ignores its error with _ = cleanup(). While this is a common pattern in cleanup code, the coding guidelines require explicit handling or justification.

🔧 Optional: Log cleanup errors
  defer func() {
-   _ = cleanup()
+   if err := cleanup(); err != nil {
+     m.logger.Warn("session: transcript recorder cleanup failed", "session_id", id, "error", err)
+   }
  }()

As per coding guidelines: "Never ignore errors with _ — every error must be handled or have a written justification"

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
defer func() {
_ = cleanup()
}()
defer func() {
if err := cleanup(); err != nil {
m.logger.Warn("session: transcript recorder cleanup failed", "session_id", id, "error", err)
}
}()
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/session/transcript.go` around lines 107 - 109, The deferred call
currently ignores the cleanup error via `_ = cleanup()`; update the deferred
anonymous function to handle the returned error instead—call cleanup(), capture
its error, and either log it with the package logger (e.g., a processLogger /
std logger) or explicitly comment why it can be ignored; reference the deferred
anonymous function and cleanup() so reviewers can find and replace the `_ =
cleanup()` with an error check (e.g., if err := cleanup(); err != nil {
logger.Warn("transcript cleanup failed:", err) }) or add a one-line
justification comment if ignoring is intentional.

Comment on lines +299 to +329
func TestSessionTranscriptHandlerReturnsMessages(t *testing.T) {
homePaths := newTestHomePaths(t)
manager := stubSessionManager{
transcriptFn: func(context.Context, string) ([]session.TranscriptMessage, error) {
return []session.TranscriptMessage{{
ID: "msg-1",
Role: session.TranscriptRoleAssistant,
Content: "hello",
Timestamp: time.Date(2026, 4, 3, 12, 0, 0, 0, time.UTC),
}}, nil
},
}
handlers := newTestHandlers(t, manager, stubObserver{}, homePaths)
engine := newTestRouter(t, handlers)

recorder := performRequest(t, engine, http.MethodGet, "/api/sessions/sess-123/transcript", nil)
if recorder.Code != http.StatusOK {
t.Fatalf("status = %d, want %d; body=%s", recorder.Code, http.StatusOK, recorder.Body.String())
}

var response struct {
Messages []session.TranscriptMessage `json:"messages"`
}
decodeJSONResponse(t, recorder, &response)
if len(response.Messages) != 1 {
t.Fatalf("len(messages) = %d, want 1", len(response.Messages))
}
if got := response.Messages[0].Content; got != "hello" {
t.Fatalf("messages[0].Content = %q, want %q", got, "hello")
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Consider adding t.Parallel() for consistency.

The test correctly validates the transcript handler behavior. However, other test functions in this file use t.Parallel() for independent tests. Consider adding it here for consistency and faster test execution.

💡 Suggested addition
 func TestSessionTranscriptHandlerReturnsMessages(t *testing.T) {
+	t.Parallel()
 	homePaths := newTestHomePaths(t)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
func TestSessionTranscriptHandlerReturnsMessages(t *testing.T) {
homePaths := newTestHomePaths(t)
manager := stubSessionManager{
transcriptFn: func(context.Context, string) ([]session.TranscriptMessage, error) {
return []session.TranscriptMessage{{
ID: "msg-1",
Role: session.TranscriptRoleAssistant,
Content: "hello",
Timestamp: time.Date(2026, 4, 3, 12, 0, 0, 0, time.UTC),
}}, nil
},
}
handlers := newTestHandlers(t, manager, stubObserver{}, homePaths)
engine := newTestRouter(t, handlers)
recorder := performRequest(t, engine, http.MethodGet, "/api/sessions/sess-123/transcript", nil)
if recorder.Code != http.StatusOK {
t.Fatalf("status = %d, want %d; body=%s", recorder.Code, http.StatusOK, recorder.Body.String())
}
var response struct {
Messages []session.TranscriptMessage `json:"messages"`
}
decodeJSONResponse(t, recorder, &response)
if len(response.Messages) != 1 {
t.Fatalf("len(messages) = %d, want 1", len(response.Messages))
}
if got := response.Messages[0].Content; got != "hello" {
t.Fatalf("messages[0].Content = %q, want %q", got, "hello")
}
}
func TestSessionTranscriptHandlerReturnsMessages(t *testing.T) {
t.Parallel()
homePaths := newTestHomePaths(t)
manager := stubSessionManager{
transcriptFn: func(context.Context, string) ([]session.TranscriptMessage, error) {
return []session.TranscriptMessage{{
ID: "msg-1",
Role: session.TranscriptRoleAssistant,
Content: "hello",
Timestamp: time.Date(2026, 4, 3, 12, 0, 0, 0, time.UTC),
}}, nil
},
}
handlers := newTestHandlers(t, manager, stubObserver{}, homePaths)
engine := newTestRouter(t, handlers)
recorder := performRequest(t, engine, http.MethodGet, "/api/sessions/sess-123/transcript", nil)
if recorder.Code != http.StatusOK {
t.Fatalf("status = %d, want %d; body=%s", recorder.Code, http.StatusOK, recorder.Body.String())
}
var response struct {
Messages []session.TranscriptMessage `json:"messages"`
}
decodeJSONResponse(t, recorder, &response)
if len(response.Messages) != 1 {
t.Fatalf("len(messages) = %d, want 1", len(response.Messages))
}
if got := response.Messages[0].Content; got != "hello" {
t.Fatalf("messages[0].Content = %q, want %q", got, "hello")
}
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/udsapi/handlers_test.go` around lines 299 - 329, In
TestSessionTranscriptHandlerReturnsMessages add t.Parallel() at the start of the
test to run it concurrently with other tests; modify the
TestSessionTranscriptHandlerReturnsMessages function (the test with
stubSessionManager and newTestRouter/newTestHandlers) to call t.Parallel()
immediately after the function begins so it behaves consistently with other
tests in this file.

@coderabbitai coderabbitai Bot mentioned this pull request May 26, 2026
12 tasks
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



### 🧪 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