feat: session resilience#11
Conversation
WalkthroughAdds end-to-end session stop reason/detail tracking: enums, classification, stop-with-cause APIs, resume validation/classification, DB schema + migrations, propagation to API/observer/daemon, and extensive tests. Also adds a docs JSONL transcript (ANP discussion) as a PoC artifact. Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant Manager
participant Driver
participant Session
participant Store
participant GlobalDB
participant HTTPAPI
Client->>Manager: StopWithCause(id, cause, detail)
Manager->>Session: prepareStop(cause, detail)
Manager->>Driver: Stop(proc)
Driver-->>Manager: Stop result / waitErr
Manager->>Session: finalizeStopped(waitErr)
Session->>Store: write SessionMeta (stop_reason, stop_detail)
Store->>GlobalDB: persist session row (stop_reason, stop_detail)
Manager->>HTTPAPI: update session payload (stop fields)
HTTPAPI-->>Client: GET /api/sessions/{id} (includes stop_reason)
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 13
🧹 Nitpick comments (3)
internal/session/query.go (1)
213-216: Prefer reusing existing stop-reason helper to avoid duplicated normalization.This block duplicates logic already present in the same package (
sessionMetaStopReason). Reusing the helper keeps stop normalization behavior centralized.♻️ Proposed refactor
func sessionInfoFromMeta(meta store.SessionMeta) *SessionInfo { - stopReason := store.StopReason("") - if meta.StopReason != nil { - stopReason = *meta.StopReason - } + stopReason := sessionMetaStopReason(meta) return &SessionInfo{ ID: meta.ID,🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/session/query.go` around lines 213 - 216, The code manually normalizes stop reason by creating stopReason := store.StopReason("") and then overriding it from meta.StopReason; replace this duplicated logic by calling the existing helper sessionMetaStopReason(meta) to obtain the normalized stop reason (use that return in place of stopReason) so normalization is centralized and avoids duplication; update any variable names as needed to use the helper's output where the manual block currently appears.internal/session/query_test.go (1)
358-371: Split the legacy-path assertions into an explicit subtest.This introduces a second scenario in the same test body; isolating it in
t.Run("Should ...")keeps failures scoped and aligns with the test conventions.As per coding guidelines, "MUST use t.Run(\"Should...\") pattern for ALL test cases" and "Use table-driven tests with subtests (`t.Run`) as default in Go tests".🧪 Suggested structure
- legacyInfo := sessionInfoFromMeta(store.SessionMeta{ - ID: "sess-legacy", - AgentName: "coder", - WorkspaceID: "ws-1", - State: string(StateStopped), - CreatedAt: createdAt, - UpdatedAt: updatedAt, - }) - if got := legacyInfo.StopReason; got != "" { - t.Fatalf("sessionInfoFromMeta(legacy).StopReason = %q, want empty", got) - } - if got := legacyInfo.StopDetail; got != "" { - t.Fatalf("sessionInfoFromMeta(legacy).StopDetail = %q, want empty", got) - } + t.Run("Should keep stop fields empty for legacy metadata", func(t *testing.T) { + legacyInfo := sessionInfoFromMeta(store.SessionMeta{ + ID: "sess-legacy", + AgentName: "coder", + WorkspaceID: "ws-1", + State: string(StateStopped), + CreatedAt: createdAt, + UpdatedAt: updatedAt, + }) + if got := legacyInfo.StopReason; got != "" { + t.Fatalf("sessionInfoFromMeta(legacy).StopReason = %q, want empty", got) + } + if got := legacyInfo.StopDetail; got != "" { + t.Fatalf("sessionInfoFromMeta(legacy).StopDetail = %q, want empty", got) + } + })🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/session/query_test.go` around lines 358 - 371, The assertions checking legacyInfo returned by sessionInfoFromMeta (verifying StopReason and StopDetail are empty) should be moved into a subtest using t.Run to isolate the scenario; replace the inline checks with t.Run("Should handle legacy session without stop info", func(t *testing.T) { legacyInfo := sessionInfoFromMeta(store.SessionMeta{ ID: "sess-legacy", AgentName: "coder", WorkspaceID: "ws-1", State: string(StateStopped), CreatedAt: createdAt, UpdatedAt: updatedAt }) if got := legacyInfo.StopReason; got != "" { t.Fatalf(...) } if got := legacyInfo.StopDetail; got != "" { t.Fatalf(...) } }) so the legacy-path assertions run as their own subtest and follow the t.Run("Should...") convention.internal/session/stop_reason.go (1)
11-47: Substring-based stop reason classification may be fragile.The classification logic (Lines 24-33) relies on the
detailstring containing exact substrings like"max_iterations","loop_detected", or"budget_exceeded". This creates implicit coupling between the caller's detail message format and the classification logic.Consider defining constants or a more explicit mechanism to communicate these sub-reasons, which would make the contract clearer and less prone to breaking if detail messages are refactored.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/session/stop_reason.go` around lines 11 - 47, The substring-based classification in classifyStopReason (especially the CauseUserRequested branch) is brittle; replace implicit parsing of detail for "max_iterations", "loop_detected", "budget_exceeded" with an explicit signal (e.g., add a new enum/constant type or string constants and a dedicated param) so callers can pass a concrete subreason instead of encoding it in detail; update classifyStopReason signature (or add a helper) to accept that subreason (e.g., userStopSubreason or StopSubreason constants) and switch on those constants in the CauseUserRequested case, ensuring existing callers are migrated to pass the new explicit value and keeping detail for human-readable messages only.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@conversa.jsonl`:
- Around line 1-37: Some JSONL events are missing the ts field which breaks
deterministic ordering and auditability; for every JSONL record/event ensure a
ts property is present (use ISO 8601 UTC, e.g. 2026-04-10T02:35:00Z) and update
all entries that lack it so every message has a consistent timestamp; implement
this by adding ts to each JSON object in the transcript generator/writer (or
backfill missing records in the dataset), and add a validation check in the
writer/CI to reject or autofill records missing ts to prevent regressions.
- Around line 18-31: The file has malformed JSONL because the Claude-B entry's
"content" field (and other entries) contain literal newlines instead of escaped
"\n"; fix by auditing each JSON object (check "role"/"author"/"content" fields),
replace real line breaks inside string values with escaped "\n" and ensure
proper JSON string quoting/escaping for characters like quotes and backslashes,
then validate the entire conversa.jsonl parses as NDJSON (e.g., parse each line
as JSON) before committing; specifically update the Claude-B entry that begins
with "Meta-cognição como feature — essa frase resume tudo!" so its multi-line
RFC text (Pillar 3/Pillar 4/Proof of Concept) is a single JSON string with "\n"
where line breaks were.
In `@internal/api/contract/contract_test.go`:
- Around line 60-86: Wrap the test body of
TestSessionPayloadJSONIncludesSessionStopFields in a t.Run call with a
descriptive "Should..." name (e.g., t.Run("Should include session stop fields in
JSON", func(t *testing.T) { ... })) and move the existing t.Parallel() and
assertions inside that closure; do the same refactor for
TestSessionPayloadJSONShape and TestWorkspacePayloadPreservesOmitEmptyBehavior
so each top-level test uses the t.Run("Should...") pattern while preserving
existing assertions and calls to marshalJSON and t.Parallel().
In `@internal/config/config_test.go`:
- Around line 288-295: Update the test
TestSessionLimitsConfigValidateRejectsNegativeTimeout to use a t.Run("Should
reject negative timeout") subtest and assert the returned error contains the
validation context string (e.g., "session.limits.timeout"); locate the test
function name TestSessionLimitsConfigValidateRejectsNegativeTimeout and the
validator SessionLimitsConfig.Validate, wrap the existing check in t.Run, call
cfg.Validate(), and replace the nil check with an assertion that the error is
non-nil and its message contains "session.limits.timeout" (use ErrorContains or
equivalent).
In `@internal/config/config.go`:
- Line 130: The clone function that constructs and returns a Config literal
currently omits the new Session field, which causes Session.Limits.Timeout to
reset; update that clone code to copy the Session value from the source Config
into the returned Config (preserving nested SessionConfig fields), i.e., include
Session: src.Session (or a deep copy if other mutable subfields exist) alongside
the existing copied fields so the cloned Config retains the original Session
settings.
In `@internal/session/session_test.go`:
- Around line 104-141: Wrap the existing TestSessionInfoAndMetaIncludeStopFields
body inside a subtest using t.Run with a "Should..." name (e.g., t.Run("Should
include stop fields", func(t *testing.T) { ... })), move t.Parallel() into the
subtest (call t.Parallel() at the start of the subtest), and keep the existing
assertions and use of Session.Info() and Session.Meta() unchanged; this ensures
TestSessionInfoAndMetaIncludeStopFields uses the required t.Run convention while
preserving the test logic around the Session struct and its stop fields.
In `@internal/session/session.go`:
- Around line 72-74: When a session transitions back to active, clear the stale
stop metadata so Info()/Meta() don't expose or persist previous stop
attribution: reset stopCause, stopReason and stopDetail (e.g., stopCause =
StopCause(0) or appropriate zero value, stopReason = store.StopReason{} and
stopDetail = "") wherever the session state is set to active (the
activation/reactivation code paths referenced around the regions for lines
72-74, 107-108 and 443-444). Locate the methods that set the session state to
active (the activation/reactivation functions) and add these three field resets
immediately after the state is made active so subsequent Info() and Meta() calls
return cleared values.
In `@internal/session/stop_reason_test.go`:
- Around line 98-110: Update the test case names in the tests table used by
t.Run to follow the "Should..." convention: locate the test cases slice (the
variable tests) in internal/session/stop_reason_test.go and rename each
case.name string to a descriptive "Should..." phrase (e.g., "Should classify
shutdown without error as StopShutdown", "Should classify process exited with
error as StopProcessError", etc.) so t.Run(tc.name, ...) uses the new names;
leave the test logic calling classifyStopReason(tc.cause, tc.waitErr, tc.detail)
unchanged.
In `@internal/store/globaldb/global_db_session.go`:
- Around line 55-60: The update currently only writes stop_reason/stop_detail
when StopReason != nil, so there's no way to clear those columns; change the
update API/handling to carry an explicit presence flag (e.g. StopReasonSet or
StopReasonExplicit) and in the UpdateSessionState path use that flag instead of
nil-checking to decide whether to append "stop_reason = ?" and "stop_detail = ?"
to assignments and append store.NullableStringPointer(update.StopReason) /
store.NullableString(update.StopDetail) to args; this lets callers set
StopReason to nil while setting StopReasonSet=true to clear persisted stop
metadata while leaving existing behavior when the flag is false.
In `@internal/store/globaldb/migrate_workspace.go`:
- Around line 73-80: Run the PRAGMA on the same SQLite connection used for the
migration: obtain a dedicated connection via db.Conn(ctx) (use the Conn type),
call conn.ExecContext(ctx, "PRAGMA foreign_keys = OFF") on that conn, then start
the migration using conn.BeginTx(ctx, nil) so the transaction uses the same
connection; after commit/rollback re-enable the PRAGMA with
conn.ExecContext(context.Background(), "PRAGMA foreign_keys = ON") and finally
close the conn. Replace uses of db.ExecContext(...) and db.BeginTx(...) with
conn.ExecContext(...) and conn.BeginTx(...) and reference conn, tx,
tx.Commit/tx.Rollback accordingly to ensure PRAGMA toggles affect only the
connection running the migration.
In `@internal/store/meta_test.go`:
- Around line 105-134: The test function
TestReadSessionMetaLegacyStopFieldsOmitted must be converted to use a subtest
with the t.Run("Should...") pattern: wrap the existing test logic inside
t.Run("Should handle legacy stop fields omitted", func(t *testing.T) { ... })
and call t.Parallel() inside that subtest (not at the top-level), keeping all
current assertions that exercise ReadSessionMeta and SessionMetaName unchanged;
ensure the outer TestReadSessionMetaLegacyStopFieldsOmitted only contains the
t.Run invocation so the test conforms to the project's subtest naming guideline.
In `@internal/store/stop_reason_test.go`:
- Around line 27-40: Update the subtest names to follow the "Should..." naming
convention: in the table-driven tests that call t.Run for each StopReason (the
loop using ValidStopReason(reason)) and for invalidReasons as well as other
cases that use tt.name, replace dynamic names like string(reason),
"invalid_"+..., and tt.name with descriptive "Should..." names that include a
sanitized reason (e.g., "ShouldValidate_completed",
"ShouldRejectInvalid_unknown", "ShouldValidate_nilStopReason"); keep the same
t.Run structure and test body, only change the first argument to a stable
"Should..." string so names are consistent with the coding guidelines while
still unique per case.
- Around line 81-87: The test currently only checks presence/absence of an error
from meta.Validate(); update the tt.wantError branch to assert the error message
content: when tt.wantError is true ensure err is non-nil and that err.Error()
contains the expected substring "invalid session stop reason" (use
strings.Contains(err.Error(), "invalid session stop reason") and fail with
t.Errorf if it does not). Keep the existing non-error branch unchanged;
reference the Validate() call, the err variable, and tt.wantError when making
the new assertion and add the strings import if missing.
---
Nitpick comments:
In `@internal/session/query_test.go`:
- Around line 358-371: The assertions checking legacyInfo returned by
sessionInfoFromMeta (verifying StopReason and StopDetail are empty) should be
moved into a subtest using t.Run to isolate the scenario; replace the inline
checks with t.Run("Should handle legacy session without stop info", func(t
*testing.T) { legacyInfo := sessionInfoFromMeta(store.SessionMeta{ ID:
"sess-legacy", AgentName: "coder", WorkspaceID: "ws-1", State:
string(StateStopped), CreatedAt: createdAt, UpdatedAt: updatedAt }) if got :=
legacyInfo.StopReason; got != "" { t.Fatalf(...) } if got :=
legacyInfo.StopDetail; got != "" { t.Fatalf(...) } }) so the legacy-path
assertions run as their own subtest and follow the t.Run("Should...")
convention.
In `@internal/session/query.go`:
- Around line 213-216: The code manually normalizes stop reason by creating
stopReason := store.StopReason("") and then overriding it from meta.StopReason;
replace this duplicated logic by calling the existing helper
sessionMetaStopReason(meta) to obtain the normalized stop reason (use that
return in place of stopReason) so normalization is centralized and avoids
duplication; update any variable names as needed to use the helper's output
where the manual block currently appears.
In `@internal/session/stop_reason.go`:
- Around line 11-47: The substring-based classification in classifyStopReason
(especially the CauseUserRequested branch) is brittle; replace implicit parsing
of detail for "max_iterations", "loop_detected", "budget_exceeded" with an
explicit signal (e.g., add a new enum/constant type or string constants and a
dedicated param) so callers can pass a concrete subreason instead of encoding it
in detail; update classifyStopReason signature (or add a helper) to accept that
subreason (e.g., userStopSubreason or StopSubreason constants) and switch on
those constants in the CauseUserRequested case, ensuring existing callers are
migrated to pass the new explicit value and keeping detail for human-readable
messages only.
🪄 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: e58d7095-e423-45dd-abd7-d664ca5ca70f
⛔ Files ignored due to path filters (53)
.compozy/tasks/_archived/20260410-021708-hooks/_meta.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/_tasks.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/_techspec.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-001.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-002.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-003.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-004.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-005.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-006.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-007.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-008.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-009.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-010.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-011.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-012.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/adrs/adr-013.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/MEMORY.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/task_01.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/task_02.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/task_03.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/task_04.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/task_05.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/task_06.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/task_07.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/task_08.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/task_09.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/task_10.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/task_11.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/memory/task_12.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/task_01.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/task_02.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/task_03.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/task_04.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/task_05.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/task_06.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/task_07.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/task_08.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/task_09.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/task_10.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/task_11.mdis excluded by!**/*.md.compozy/tasks/_archived/20260410-021708-hooks/task_12.mdis excluded by!**/*.md.compozy/tasks/extensability/_meta.mdis excluded by!**/*.md.compozy/tasks/session-resilience/_meta.mdis excluded by!**/*.md.compozy/tasks/session-resilience/_tasks.mdis excluded by!**/*.md.compozy/tasks/session-resilience/memory/MEMORY.mdis excluded by!**/*.md.compozy/tasks/session-resilience/memory/task_01.mdis excluded by!**/*.md.compozy/tasks/session-resilience/memory/task_02.mdis excluded by!**/*.md.compozy/tasks/session-resilience/memory/task_03.mdis excluded by!**/*.md.compozy/tasks/session-resilience/memory/task_04.mdis excluded by!**/*.md.compozy/tasks/session-resilience/task_01.mdis excluded by!**/*.md.compozy/tasks/session-resilience/task_02.mdis excluded by!**/*.md.compozy/tasks/session-resilience/task_03.mdis excluded by!**/*.md.compozy/tasks/session-resilience/task_04.mdis excluded by!**/*.md
📒 Files selected for processing (35)
conversa.jsonlinternal/api/contract/contract.gointernal/api/contract/contract_test.gointernal/api/core/conversions.gointernal/api/core/conversions_parsers_test.gointernal/api/httpapi/httpapi_integration_test.gointernal/config/config.gointernal/config/config_test.gointernal/config/merge.gointernal/daemon/daemon.gointernal/daemon/daemon_integration_test.gointernal/daemon/daemon_test.gointernal/observe/observer.gointernal/observe/reconcile.gointernal/observe/reconcile_test.gointernal/session/manager_lifecycle.gointernal/session/manager_stop_integration_test.gointernal/session/manager_test.gointernal/session/query.gointernal/session/query_test.gointernal/session/resume_repair.gointernal/session/resume_repair_test.gointernal/session/session.gointernal/session/session_test.gointernal/session/stop_cause.gointernal/session/stop_reason.gointernal/session/stop_reason_test.gointernal/store/globaldb/global_db.gointernal/store/globaldb/global_db_session.gointernal/store/globaldb/global_db_session_test.gointernal/store/globaldb/global_db_test.gointernal/store/globaldb/migrate_workspace.gointernal/store/meta_test.gointernal/store/stop_reason_test.gointernal/store/types.go
There was a problem hiding this comment.
♻️ Duplicate comments (1)
internal/store/globaldb/global_db_session.go (1)
55-60:⚠️ Potential issue | 🟠 MajorClear stop metadata on the orphaning path too.
This new
StopReasonSetcontract fixes explicit stop-field updates, butReconcileSessions()still marks missing rows asorphanedwithstate/updated_atonly. A previously stopped session can therefore becomeorphanedwhile still exposing an oldstop_reason/stop_detail, andListSessions()now returns those stale values.Suggested fix
- if _, err := tx.ExecContext( - ctx, - `UPDATE sessions SET state = ?, updated_at = ? WHERE id = ?`, - "orphaned", - orphanedAt, - id, - ); err != nil { + if _, err := tx.ExecContext( + ctx, + `UPDATE sessions + SET state = ?, stop_reason = NULL, stop_detail = NULL, updated_at = ? + WHERE id = ?`, + "orphaned", + orphanedAt, + id, + ); err != nil {🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/store/globaldb/global_db_session.go` around lines 55 - 60, The orphaning path in ReconcileSessions() doesn't clear prior stop metadata, so previously stopped sessions can become orphaned while retaining stale stop_reason/stop_detail; when building the UPDATE (the assignments and args slices) for orphaning, append "stop_reason = ?" and "stop_detail = ?" to assignments and add arguments that clear those columns (e.g. pass a nil nullable pointer for stop_reason and an empty nullable string for stop_detail using the same helpers used elsewhere such as store.NullableStringPointer(nil) and store.NullableString("")) alongside the existing updated_at and id args (updatedAt, update.ID) so ListSessions() no longer returns stale stop fields.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In `@internal/store/globaldb/global_db_session.go`:
- Around line 55-60: The orphaning path in ReconcileSessions() doesn't clear
prior stop metadata, so previously stopped sessions can become orphaned while
retaining stale stop_reason/stop_detail; when building the UPDATE (the
assignments and args slices) for orphaning, append "stop_reason = ?" and
"stop_detail = ?" to assignments and add arguments that clear those columns
(e.g. pass a nil nullable pointer for stop_reason and an empty nullable string
for stop_detail using the same helpers used elsewhere such as
store.NullableStringPointer(nil) and store.NullableString("")) alongside the
existing updated_at and id args (updatedAt, update.ID) so ListSessions() no
longer returns stale stop fields.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 1ca00fb2-6b88-4d83-b238-c7c1756cee97
📒 Files selected for processing (17)
conversa.jsonldocs/ideas/anp/conversa.jsonlinternal/api/contract/contract_test.gointernal/config/config_test.gointernal/observe/observer.gointernal/session/query.gointernal/session/query_test.gointernal/session/session_test.gointernal/session/stop_reason_test.gointernal/store/globaldb/global_db_session.gointernal/store/globaldb/global_db_test.gointernal/store/globaldb/migrate_workspace.gointernal/store/meta_test.gointernal/store/stop_reason_test.gointernal/store/types.gointernal/workspace/clone.gointernal/workspace/resolver_test.go
✅ Files skipped from review due to trivial changes (5)
- internal/session/session_test.go
- internal/store/meta_test.go
- conversa.jsonl
- docs/ideas/anp/conversa.jsonl
- internal/session/stop_reason_test.go
🚧 Files skipped from review as they are similar to previous changes (5)
- internal/session/query_test.go
- internal/api/contract/contract_test.go
- internal/config/config_test.go
- internal/store/stop_reason_test.go
- internal/store/types.go
## 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>
## 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>
## 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>
## 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 --> [](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>
## 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 --> [](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>
Summary by CodeRabbit
New Features
Bug Fixes
Improvements
Documentation