Skip to content

feat: settings ui#37

Merged
pedronauck merged 25 commits into
mainfrom
settings-ui
Apr 18, 2026
Merged

feat: settings ui#37
pedronauck merged 25 commits into
mainfrom
settings-ui

Conversation

@pedronauck
Copy link
Copy Markdown
Member

@pedronauck pedronauck commented Apr 18, 2026

Summary by CodeRabbit

  • New Features

    • Comprehensive settings API (multiple sections) and collection endpoints (providers, MCP servers, environments, hooks)
    • Daemon restart flow with durable operations, status endpoints and CLI relaunch helper
    • Observability log-tail streaming via SSE
    • Extension management HTTP endpoints (list/install/enable/disable)
    • Config overlay persistence that preserves file structure/comments and workspace/global scopes
    • HTTP mutation guarding: remote mutations restricted to loopback hosts
  • Documentation

    • OpenAPI schemas updated for settings and extension endpoints

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

coderabbitai Bot commented Apr 18, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 0a6a32b5-f355-4414-b61a-2cfeb0e0eb42

📥 Commits

Reviewing files that changed from the base of the PR and between 0df573c and d31c955.

⛔ Files ignored due to path filters (149)
  • .agents/skills/adversarial-review/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/adversarial-review/references/reviewer-lenses.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/architecture-patterns/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/architecture-patterns/references/advanced-patterns.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/arrange/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/audit/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/bolder/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/colorize/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/critique/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/critique/reference/cognitive-load.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/critique/reference/heuristics-scoring.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/critique/reference/personas.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/delight/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/extract/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/find-skills/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/kodebase/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/kodebase/references/cli-generate.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/kodebase/references/cli-inspect.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/kodebase/references/cli-search-index.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/kodebase/references/error-handling.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/kodebase/references/output-formats.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/layout/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/llm-concil/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/normalize/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/optimize/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/polish/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/typeset/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/ui-ux-pro-max/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/charts.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/colors.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/icons.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/landing.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/products.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/react-performance.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/astro.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/flutter.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/nextjs.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/react-native.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/react.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/shadcn.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/svelte.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/swiftui.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/stacks/vue.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/styles.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/typography.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/ui-reasoning.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/ux-guidelines.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/data/web-interface.csv is excluded by !**/*.csv, !.agents/**
  • .agents/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc is excluded by !**/*.pyc, !.agents/**
  • .agents/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc is excluded by !**/*.pyc, !.agents/**
  • .agents/skills/ui-ux-pro-max/scripts/core.py is excluded by !.agents/**
  • .agents/skills/ui-ux-pro-max/scripts/design_system.py is excluded by !.agents/**
  • .agents/skills/ui-ux-pro-max/scripts/search.py is excluded by !.agents/**
  • .codex/plans/2026-04-17-settings-ui-refinement.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/_meta.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/_tasks.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/MEMORY.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_01.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_02.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_03.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_04.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_05.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_06.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_07.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_08.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_09.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_10.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_11.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_12.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_13.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_14.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_15.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_16.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/issues/BUG-001-restart-refresh-continuity.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/issues/BUG-002-skills-overlay-persistence.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/issues/BUG-003-settings-transport-parity.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/screenshots/TC-FUNC-001-settings-shell-navigation.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-FUNC-002-general-restart-polling.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-FUNC-005-skills-applied-now-vs-restart.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-FUNC-008-providers-crud-and-builtin-fallback.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-FUNC-010-mcp-global-precedence.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-FUNC-012-hooks-extensions-hybrid.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-INT-011-mcp-workspace-scope.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-INT-013-non-loopback-http-restrictions.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-INT-016-general-restart-ready.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-UI-014-summary-shell-desktop.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-UI-015-collection-providers-desktop.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-UI-015-hybrid-hooks-extensions-desktop.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-001-settings-shell-navigation.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-002-general-restart-flow.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-003-memory-config-and-consolidate.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-004-observability-diagnostics-and-log-tail.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-005-skills-applied-now-vs-restart.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-006-automation-summary-and-link.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-007-network-summary-and-link.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-008-providers-crud-and-builtin-fallback.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-009-environments-crud-and-usage.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-010-mcp-global-precedence.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-012-hooks-extensions-hybrid.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-INT-011-mcp-workspace-scope.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-INT-013-non-loopback-http-restrictions.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-UI-014-summary-routes-visual.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-UI-015-collection-and-hybrid-visual.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-plans/settings-ui-regression.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-plans/settings-ui-test-plan.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/verification-report.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/_meta.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_001.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_002.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_003.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_004.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_005.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_006.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_007.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_008.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_009.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_010.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_011.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_012.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_013.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_014.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_015.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_016.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_017.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_018.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_019.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_020.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_021.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/reviews-001/issue_022.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_01.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_02.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_03.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_04.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_05.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_06.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_07.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_08.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_09.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_10.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_11.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_12.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_13.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_14.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_15.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_16.md is excluded by !**/*.md
📒 Files selected for processing (2)
  • .compozy/tasks/settings-ui/qa/issues/.gitkeep
  • .compozy/tasks/settings-ui/qa/screenshots/.gitkeep

Walkthrough

Adds a complete settings subsystem: API contracts, conversion layer, HTTP/UDS handlers (including SSE log-tail), config overlay persistence with TOML AST edits, MCP JSON sidecar writes, daemon restart orchestration with persisted operations and relaunch helper, detached process utilities, extension handlers, and extensive tests across server, UDS, spec, persistence, and restart flows.

Changes

Cohort / File(s) Summary
Project scaffolding
\.compozy/tasks/settings-ui/qa/issues/.gitkeep, \.compozy/tasks/settings-ui/qa/screenshots/.gitkeep
Add empty .gitkeep files to preserve QA directories.
Deps
go.mod
Added indirect toml dependency github.com/pelletier/go-toml v1.9.5.
API contract
internal/api/contract/settings.go, internal/api/contract/settings_test.go
New comprehensive settings API types, enums, request/response payloads, and JSON-shape tests for MutationResult.
API conversion
internal/api/core/conversions.go
New conversion helpers mapping internal settings envelopes to API payloads with validation and time/field normalization.
API errors & interfaces
internal/api/core/errors.go, internal/api/core/interfaces.go
Added settings sentinel errors + status mapping; added SettingsService and SettingsRestartController interfaces and SettingsRestartOperation type.
Core handlers
internal/api/core/handlers.go, internal/api/core/settings.go, internal/api/core/settings_*.go
Wired Settings and SettingsRestart into BaseHandlers; implemented full settings HTTP/SSE handlers (sections, collections, restart), plus extensive handler unit tests and internal tests.
HTTP API: routes, middleware, handlers
internal/api/httpapi/routes.go, internal/api/httpapi/middleware.go, internal/api/httpapi/extensions.go, internal/api/httpapi/handlers.go, internal/api/httpapi/server.go, internal/api/httpapi/*.go tests
Registered settings and extensions routes, added loopback-only privileged-mutation guard, extension handlers/service interface, server wiring options, and tests enforcing loopback mutation restrictions and transport parity.
UDS API wiring & tests
internal/api/udsapi/*.go
Wired settings/restart into UDS server, registered settings routes for UDS, and added UDS handler/tests and transport-parity integration tests.
OpenAPI spec
internal/api/spec/spec.go, internal/api/spec/settings_test.go
Added settings enums/operations to OpenAPI document and tests validating operation presence, transports, and schemas.
Config persistence & MCP JSON
internal/config/persistence.go, internal/config/merge.go, internal/config/mcpjson.go, internal/config/mcpjson_write.go, tests
Introduced TOML-overlay AST-aware editor, EditConfigOverlay, MCP sidecar JSON read/write (camelCase/snake_case support) and comprehensive persistence tests/integration tests.
Bootstrap & home layout
internal/config/bootstrap.go, internal/config/home.go, internal/config/*_test.go
Refactored bootstrap to use overlay edits; added RestartsDir/HomePaths.RestartsDir and tests.
Daemon: restart & settings runtime
internal/daemon/restart.go, internal/daemon/settings.go, internal/daemon/boot.go, internal/daemon/daemon.go, tests
Durable restart operation state machine with file-backed store, relaunch helper flow, settings runtime surface exposing status, restart controller, boot integration, and wide test coverage (unit + integration).
Daemon relaunch CLI & procutils
internal/cli/daemon.go, internal/cli/root.go, internal/cli/daemon_wait_test.go, internal/procutil/*.go
Added hidden daemon relaunch command, delegated detached spawning to procutil, and implemented cross-platform SpawnDetachedLoggedProcess with log capture and enriched error context.
Settings classification
internal/settings/classify.go
Added mutation classification logic to determine apply-now vs restart-required behavior.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant APIHandler as API Handler
    participant SettingsService as Settings Service
    participant Persistence as Persistence Layer
    participant Disk as Disk/File

    Client->>APIHandler: GET /api/settings/general?scope=global
    APIHandler->>SettingsService: GetSection(ctx, req)
    SettingsService->>Persistence: Load merged config for scope
    Persistence->>Disk: Read files (global/workspace)
    Persistence-->>SettingsService: SectionEnvelope
    SettingsService-->>APIHandler: SectionEnvelope -> API payload
    APIHandler-->>Client: 200 OK JSON

    Client->>APIHandler: PATCH /api/settings/general (loopback)
    APIHandler->>SettingsService: UpdateSection(ctx, updateReq)
    SettingsService->>Persistence: EditConfigOverlay(scope, mutations)
    Persistence->>Disk: Read overlay
    Persistence->>Disk: Parse TOML AST, apply edits, write overlay
    Persistence->>SettingsService: Validated merged Config
    SettingsService-->>APIHandler: MutationResult (applied/restart_required)
    APIHandler-->>Client: 200/202 JSON
Loading
sequenceDiagram
    participant Client
    participant RestartAPI as Restart API
    participant RestartController as Restart Controller
    participant Daemon as Daemon
    participant RestartStore as Restart Store
    participant RelaunchHelper as Relaunch Helper
    participant NewDaemon as New Daemon
    participant Disk as Disk/File

    Client->>RestartAPI: POST /api/settings/actions/restart
    RestartAPI->>RestartController: RequestRestart(ctx)
    RestartController->>Daemon: RequestRestart()
    Daemon->>RestartStore: Create operation (pending -> stopping) and persist
    RestartStore->>Disk: Write JSON operation file
    Daemon->>Daemon: Send SIGTERM to old process
    Daemon->>RelaunchHelper: Spawn "daemon relaunch" (env: operation_id)
    RestartController-->>RestartAPI: RestartOperation (operation_id, status)
    RestartAPI-->>Client: 202 Accepted + status URL

    RelaunchHelper->>RestartStore: Poll operation status (waiting for stopping)
    RelaunchHelper->>Daemon: Poll release conditions (socket/file/lock)
    RelaunchHelper->>RestartStore: Transition waiting_release -> starting (persist)
    RelaunchHelper->>NewDaemon: Spawn replacement ("daemon start")
    NewDaemon->>RestartStore: markRestartReady(new_pid) (persist ready)
    RestartStore->>Disk: Update operation file to ready
    Client->>RestartAPI: GET /api/settings/actions/restart/{operation_id}
    RestartAPI->>RestartController: GetRestartOperation(ctx, id)
    RestartController->>RestartStore: Read operation file
    RestartController-->>RestartAPI: RestartOperation (ready, new_pid)
    RestartAPI-->>Client: 200 OK JSON
Loading

Estimated Code Review Effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly Related PRs

  • feat: add extensability #13 — Overlapping extension subsystem changes (handlers, contract types, daemon extension runtime) likely touch similar files and behaviors.
  • refactor: project structure #7 — Modifies internal/api/core/conversions.go; relevant because this PR adds extensive settings conversion helpers to the same layer.
  • feat: ext registry #20 — Related extension/registry and installer surface changes that intersect with extension installation and marketplace metadata handling.

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

🧹 Nitpick comments (8)
internal/api/httpapi/transport_parity_integration_test.go (1)

248-251: Avoid representation-sensitive parity assertions here.

reflect.DeepEqual will treat nil and empty slices/maps as different, so this can fail even when HTTP and UDS are semantically identical after JSON decoding. Normalize zero-value collections first, or switch to a comparator that equates empty collections before asserting transport parity.

As per coding guidelines, "MUST test meaningful business logic, not trivial operations".

Also applies to: 285-286

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

In `@internal/api/httpapi/transport_parity_integration_test.go` around lines 248 -
251, The parity assertion uses reflect.DeepEqual on httpList.Extensions and
udsList.Extensions which treats nil and empty slices/maps as different;
normalize zero-value collections before comparing (e.g., add a small helper like
normalizeExtensions or nilToEmpty that converts nil slices/maps to empty slices)
and call it on both httpList.Extensions and udsList.Extensions prior to
sortExtensionsByName and the DeepEqual, or replace reflect.DeepEqual with a
comparator that equates empty and nil (e.g., cmp.Equal with
cmpopts.SortSlices/AllowUnexported) for the same symbols; apply the same
normalization/comparator change to the other occurrence around the http/uds
comparison at the noted lines too.
internal/api/httpapi/server_test.go (1)

515-562: Split the non-loopback matrix into t.Run("Should...") subtests.

This loop packs several independent cases into one test body, so the first failure hides the rest and the failure output is less specific. Wrapping each entry in a named subtest will make this matrix much easier to debug and extend.

As per coding guidelines, "**/*_test.go: MUST use t.Run("Should...") pattern for ALL test cases`".

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

In `@internal/api/httpapi/server_test.go` around lines 515 - 562, Split the two
loops into named subtests using t.Run("Should ...") so each case runs as its own
test: for the readPaths slice wrap each iteration in t.Run(fmt.Sprintf("Should
allow GET %s", path), func(t *testing.T){ ... }) and execute the existing
doServerRequest checks inside; for the mutationCases slice wrap each tc in
t.Run(fmt.Sprintf("Should forbid %s %s", tc.method, tc.path), func(t
*testing.T){ ... }) and keep the existing assertions (status check,
decodeServerJSON into contract.ErrorPayload and compare to
errLoopbackMutationRequired). Ensure you reference the same symbols (readPaths,
mutationCases, doServerRequest, decodeServerJSON, errLoopbackMutationRequired,
server.Port) and preserve the original request/response logic inside each
subtest.
internal/api/udsapi/helpers_test.go (1)

37-157: Code duplication with internal/api/httpapi/helpers_test.go.

The stubSettingsService, stubSettingsRestartController, settingsTestSectionEnvelope, and settingsTestCollectionEnvelope implementations are nearly identical to those in internal/api/httpapi/helpers_test.go. Consider extracting these to internal/api/testutil to follow the existing pattern of shared test helpers (like StubSessionManager, StubObserver, etc.) and reduce maintenance burden.

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

In `@internal/api/udsapi/helpers_test.go` around lines 37 - 157, Extract the
duplicated test helpers (stubSettingsService, stubSettingsRestartController,
settingsTestSectionEnvelope, settingsTestCollectionEnvelope) into a new shared
package (e.g. internal/api/testutil) and replace the local copies in both
internal/api/udsapi/helpers_test.go and internal/api/httpapi/helpers_test.go
with imports from that package; move the types and their methods (GetSection,
UpdateSection, ListCollection, PutCollectionItem, DeleteCollectionItem,
RequestRestart, GetRestartOperation) plus the two helper envelope functions into
the new file, export them or provide package-level constructors as needed,
update tests to call testutil.NewStubSettingsService() /
testutil.NewStubSettingsRestartController() or use the exported names, and run
tests to ensure no behavioral changes.
internal/api/httpapi/helpers_test.go (1)

492-554: Duplicate helper functions with internal/api/udsapi/helpers_test.go.

settingsTestSectionEnvelope and settingsTestCollectionEnvelope are duplicated across both test packages. Consider extracting to internal/api/testutil alongside the shared stubs.

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

In `@internal/api/httpapi/helpers_test.go` around lines 492 - 554, The two helper
functions settingsTestSectionEnvelope and settingsTestCollectionEnvelope are
duplicated; extract them into a shared test helper package (e.g., package
testutil) and replace the duplicates with calls to the shared functions. Create
exported versions (e.g., SettingsTestSectionEnvelope and
SettingsTestCollectionEnvelope) in the new testutil package that return the same
settingspkg.SectionEnvelope and settingspkg.CollectionEnvelope, ensure the
testutil file imports settingspkg and aghconfig as needed, then update
internal/api/httpapi and internal/api/udsapi tests to import testutil and call
testutil.SettingsTestSectionEnvelope(...) and
testutil.SettingsTestCollectionEnvelope(...), removing the duplicated
definitions from both test files.
internal/settings/classify.go (1)

80-121: Control flow between section-specific and collection field handling could be clearer.

The classifyField function has two layers of field matching:

  1. Section-specific handling (lines 86-103) that returns early for known sections
  2. Collection prefix fallthrough (lines 105-120) for fields not matching section patterns

This means hooks. prefix is matched in two places (line 100 for SectionHooksExtensions, line 112 for fallthrough), but the section case returns first. The structure works correctly, but adding a brief comment explaining that lines 105-120 handle collection fields for sections without explicit field patterns would improve readability.

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

In `@internal/settings/classify.go` around lines 80 - 121, The classifyField
function’s control flow mixes section-specific branches (e.g.,
SectionHooksExtensions and SectionSkills) with a subsequent generic
collection-prefix switch; add a concise comment above the second switch (the one
checking strings.HasPrefix for "providers.", "mcp-servers.", "environments.",
"hooks.") clarifying that this block handles collection-level prefixes for
sections that don’t have explicit per-section patterns (and that some prefixes
like "hooks." are also handled earlier for SectionHooksExtensions and thus will
return earlier), so future readers understand the early-return behavior of
classifyField and the intended fallthrough semantics.
internal/daemon/restart_integration_test.go (2)

19-70: Consider adding t.Parallel() to independent integration tests.

Per coding guidelines, independent tests should use t.Parallel(). These three integration tests appear to be independent (each creates its own homePaths via integrationHomePaths(t) with isolated temp directories) and could run in parallel.

Suggested change
 func TestRequestRestartPersistsPreRestartContextBeforeShutdownSignal(t *testing.T) {
+	t.Parallel()
+
 	homePaths := integrationHomePaths(t)

Apply similarly to TestRelaunchHelperFailurePersistsAfterOldDaemonExit and TestBootMarksRestartOperationReadyAfterFreshDaemonInfo.

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

In `@internal/daemon/restart_integration_test.go` around lines 19 - 70, Add
t.Parallel() at the start of each independent integration test function to allow
them to run concurrently: insert a call to t.Parallel() as the first statement
inside TestRequestRestartPersistsPreRestartContextBeforeShutdownSignal (and
likewise in TestRelaunchHelperFailurePersistsAfterOldDaemonExit and
TestBootMarksRestartOperationReadyAfterFreshDaemonInfo) so these tests (which
use integrationHomePaths and isolated temp dirs) run in parallel without
changing other logic like newTestDaemon, RequestRestart, or the signalProcess
checks.

142-145: Assertion uses string matching for error validation.

The error check uses strings.Contains(err.Error(), "replacement daemon exited before ready") which is brittle. Consider using errors.Is or errors.As if a sentinel error is available, or at minimum document that this error message is part of the contract.

Per coding guidelines: "Use errors.Is() and errors.As() for error matching — never compare error strings."

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

In `@internal/daemon/restart_integration_test.go` around lines 142 - 145, The test
currently matches the error text from helper.run() using strings.Contains which
is brittle; instead have helper.run return a sentinel or typed error and update
the assertion to use errors.Is or errors.As. Define or export a sentinel error
(e.g. ErrReplacementExitedBeforeReady) from the package that helper.run returns
(or wrap the internal error with fmt.Errorf("%w",
ErrReplacementExitedBeforeReady)), then replace the strings.Contains check with
if err == nil || !errors.Is(err, ErrReplacementExitedBeforeReady) (or use
errors.As for a typed error) so the test uses errors.Is against the sentinel
instead of comparing error strings.
internal/daemon/restart_test.go (1)

533-537: Make this “not launched yet” assertion event-driven.

Waiting a fixed 50ms only proves the helper did not launch quickly; a slower regression can still pass. Prefer an explicit sync point or probe channel over a wall-clock delay here.

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

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

In `@internal/daemon/restart_test.go` around lines 533 - 537, The test currently
uses a fixed 50ms delay to assert that launchStarted hasn't fired, which is
flaky; replace the wall-clock wait with an explicit synchronization channel from
the helper that signals when singleton resources are released (e.g., add a
releasedResources or resourcesReleased chan struct{} that the helper
closes/dispatches once it releases resources) and change the select to wait on
either launchStarted or that releasedResources signal (optionally with a
generous timeout for test safety). Update the code paths that release singleton
resources (in the helper or tested routine) to send/close on resourcesReleased,
and use that channel in place of time.After in the select so the assertion is
event-driven and deterministic.
🤖 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/api/core/errors.go`:
- Around line 121-133: Replace the current message-based heuristics in the HTTP
status-mapping logic with typed error matching: remove the calls to
settingsMessageLooksForbidden/NotFound/Conflict/Validation and instead check for
sentinel or concrete error types using errors.Is() or errors.As() (e.g., match
against exported sentinel errors from the service layer) inside the same
function that contains the switch, returning
http.StatusForbidden/NotFound/Conflict/BadRequest only when errors.Is/As detects
the corresponding typed error, otherwise return http.StatusInternalServerError;
apply the same change to the other mapping block referenced (around lines
282-312) so all mappings rely on typed sentinels rather than string contains.

In `@internal/api/core/settings.go`:
- Around line 259-262: The restart controller currently maps restart-specific
failures (e.g., daemon.ErrRestartOperationNotFound) to 500 because
StatusForSettingsError doesn't handle restart errors; update the error-to-status
mapping for the restart endpoints by either extending StatusForSettingsError to
recognize restart-specific errors or by adding a dedicated StatusForRestartError
and calling it before the generic mapping in both SettingsRestart.RequestRestart
and TriggerSettingsRestart handlers (i.e., check errors returned from
SettingsRestart.RequestRestart and the restart lookup paths for
daemon.ErrRestartOperationNotFound and other restart-related sentinel errors and
map them to 404/appropriate HTTP codes when calling h.respondError).
- Around line 773-795: The handler currently accepts :name and body.Server.Name
separately, which can desync stored keys; after obtaining name via
requiredSettingsPathValue, enforce consistency by normalizing server.Name to the
path value (set server.Name = name after trimming) before running
server.Validate and before constructing settingspkg.CollectionItemPutRequest so
the returned MCPServer and the request Name always match; alternatively, if you
prefer strictness, reject when body.Server.Name is non-empty and doesn't equal
name by returning a validation error from the same spot (use
requiredSettingsPathValue, server.Name, server.Validate, and
settingspkg.CollectionItemPutRequest to locate where to apply the change).
- Around line 849-861: The hook declaration's name must be taken from the URL
param instead of trusting the request body: after obtaining name via
requiredSettingsPathValue and parsing decl with hookDeclarationFromPayload, set
decl.Name = name (or the appropriate field on the parsed declaration struct)
before returning the settingspkg.CollectionItemPutRequest so the returned Hook
always uses the URL key; adjust any validation if you prefer to error on
mismatch rather than silently overwrite.

In `@internal/api/httpapi/extensions.go`:
- Around line 145-165: The function extensionStatusCode fails to handle
extensionpkg.ErrExtensionExists, causing duplicate-extension errors to fall
through to 500; update extensionStatusCode to add a case that checks
errors.Is(err, extensionpkg.ErrExtensionExists) and return http.StatusConflict
(409) so duplicate install attempts map to 409 instead of 500.

In `@internal/api/httpapi/routes.go`:
- Around line 237-240: The log-tail route currently allows unauthenticated
remote reads of daemon logs; update the observability route registration to
require the same guard used elsewhere so remote clients cannot access it.
Specifically, change the registration of StreamSettingsObservabilityLogTail
(observability.GET("/log-tail", handlers.StreamSettingsObservabilityLogTail)) to
include the privileged guard (e.g., observability.GET("/log-tail", privileged,
handlers.StreamSettingsObservabilityLogTail) or the equivalent
privilegedMutationGuard), so the endpoint is protected from non-loopback HTTP.

In `@internal/cli/daemon_wait_test.go`:
- Line 8: The test currently trims captured.OperationID before asserting which
masks whether the relaunch path actually forwards whitespace; update the test in
internal/cli/daemon_wait_test.go to seed the environment variable with
surrounding whitespace (e.g. "  opid  "), remove the strings.TrimSpace(...)
usage, and assert captured.OperationID equals the exact string with whitespace
to ensure the command forwards the env var unchanged; apply the same change for
the other similar assertions around lines 287-293 that also use
strings.TrimSpace.

In `@internal/config/mcpjson_write.go`:
- Around line 168-204: loadMCPJSONCollection only checks duplicates within the
single collection (collection.nameIndex) so servers that normalize to the same
name across different top-level keys (e.g. "mcpServers.alpha" vs
"mcp_servers.alpha") can slip through; change loadMCPJSONCollection to accept a
shared map (e.g. existingNames map[string]string or *map[string]string) or a
pointer to a global index and, after computing normalized :=
normalizeMCPServerName(actualName), check that normalized against both
collection.nameIndex and the shared existingNames and return an error if already
present (include prior name from existingNames in the error); update the callers
that load both collections (the other load call around the lines noted 226-230)
to pass the same shared map so duplicates across top-level keys are detected and
rejected.

In `@internal/config/mcpjson.go`:
- Around line 47-57: The current json.Unmarshal calls for decoding into
document.MCPServersCamel and document.MCPServersSnake silently ignore unknown
fields; replace each json.Unmarshal(raw, &document.MCPServersCamel) and
json.Unmarshal(raw, &document.MCPServersSnake) with a
json.NewDecoder(bytes.NewReader(raw)) that calls DisallowUnknownFields() before
Decode(...) so unknown fields cause an error; ensure you import bytes if missing
and preserve the existing error wrapping (e.g., fmt.Errorf("config: decode MCP
JSON %q mcpServers: %w", sourceName, err) and similarly for mcp_servers) and
apply the same decoder pattern for both MCPServersCamel and MCPServersSnake in
mcpJSONDocument decoding.

In `@internal/config/persistence_integration_test.go`:
- Around line 13-163: These tests violate the repo rule requiring subtests with
t.Run; wrap each existing test body inside a t.Run call with a descriptive
"Should ..." name and move assertions into the t.Run closure (keep the top-level
test functions TestEditConfigOverlayGlobalWritePreservesStructureOnDisk,
TestEditConfigOverlayWorkspaceWriteLeavesGlobalConfigUntouched, and
TestPutMCPSidecarServerWritesAndPreservesUnaffectedEntries but replace their
current bodies with a single t.Run(...) that contains the current logic),
ensuring any t.TempDir or local variables are created inside the subtest closure
so they use the subtest's *testing.T context.

In `@internal/config/persistence.go`:
- Around line 1384-1390: In writePersistedFile, avoid truncated files and
overly-permissive dirs by creating the parent directory with restrictive mode
(0o700) instead of 0o755, then perform an atomic write: write contents to a temp
file in the same directory (with file mode 0o600), fsync the temp file (and
optionally the directory), and finally rename the temp file to path using
os.Rename; update error handling to report failures for temp file
creation/write/sync/rename.

In `@internal/daemon/restart_test.go`:
- Around line 1202-1216: The test in restart_test.go creates a Unix-only helper
script and will fail on Windows; update the test around the RunRelaunchHelper
invocation (and the scriptPath/script variables) to either skip this case on
non-Unix platforms (use runtime.GOOS or build tags) or create a
platform-specific stub: for Unix keep the /bin/sh executable script, and for
Windows provide an .exe/PowerShell/batch stub or return a fake executable path
from the Executable func; ensure the change is applied to the Test that calls
RunRelaunchHelper so the test only uses the shell script on Unix and uses the
Windows-specific stub or skip logic otherwise.

In `@internal/daemon/restart.go`:
- Around line 799-801: The Get call error handling near "operation, err :=
store.Get(operationID)" currently returns err and exits without marking the
operation terminal; change this path to call the helper's failure handler
(h.fail(...)) so the operation is persisted as Failed (e.g., invoke h.fail(ctx,
operationID, fmt.Errorf("status polling read failed: %w", err)) or the existing
h.fail signature used elsewhere), propagate the result of h.fail back to the
caller, and preserve the original error details in the failure message; replace
the bare "return err" at that location with the h.fail invocation matching other
restart phases.
- Around line 524-541: failRestartOperation currently hides errors from
store.Transition, causing callers to miss persistence failures; change it to
surface transitionErr when store.Transition fails by wrapping both errors into
the returned error. Concretely, in failRestartOperation (and around the call to
store.Transition with restartTransition{status: RestartStatusFailed,
failureReason: fmt.Sprintf("%s: %v", action, err)}), if transitionErr != nil
include it in the final fmt.Errorf (e.g., "daemon: %s: %w; persistence
transition error: %v" or by wrapping transitionErr) instead of discarding it,
and only set operation = failed when transitionErr == nil so the caller sees
both the original action error and the fallback persistence error.

---

Nitpick comments:
In `@internal/api/httpapi/helpers_test.go`:
- Around line 492-554: The two helper functions settingsTestSectionEnvelope and
settingsTestCollectionEnvelope are duplicated; extract them into a shared test
helper package (e.g., package testutil) and replace the duplicates with calls to
the shared functions. Create exported versions (e.g.,
SettingsTestSectionEnvelope and SettingsTestCollectionEnvelope) in the new
testutil package that return the same settingspkg.SectionEnvelope and
settingspkg.CollectionEnvelope, ensure the testutil file imports settingspkg and
aghconfig as needed, then update internal/api/httpapi and internal/api/udsapi
tests to import testutil and call testutil.SettingsTestSectionEnvelope(...) and
testutil.SettingsTestCollectionEnvelope(...), removing the duplicated
definitions from both test files.

In `@internal/api/httpapi/server_test.go`:
- Around line 515-562: Split the two loops into named subtests using
t.Run("Should ...") so each case runs as its own test: for the readPaths slice
wrap each iteration in t.Run(fmt.Sprintf("Should allow GET %s", path), func(t
*testing.T){ ... }) and execute the existing doServerRequest checks inside; for
the mutationCases slice wrap each tc in t.Run(fmt.Sprintf("Should forbid %s %s",
tc.method, tc.path), func(t *testing.T){ ... }) and keep the existing assertions
(status check, decodeServerJSON into contract.ErrorPayload and compare to
errLoopbackMutationRequired). Ensure you reference the same symbols (readPaths,
mutationCases, doServerRequest, decodeServerJSON, errLoopbackMutationRequired,
server.Port) and preserve the original request/response logic inside each
subtest.

In `@internal/api/httpapi/transport_parity_integration_test.go`:
- Around line 248-251: The parity assertion uses reflect.DeepEqual on
httpList.Extensions and udsList.Extensions which treats nil and empty
slices/maps as different; normalize zero-value collections before comparing
(e.g., add a small helper like normalizeExtensions or nilToEmpty that converts
nil slices/maps to empty slices) and call it on both httpList.Extensions and
udsList.Extensions prior to sortExtensionsByName and the DeepEqual, or replace
reflect.DeepEqual with a comparator that equates empty and nil (e.g., cmp.Equal
with cmpopts.SortSlices/AllowUnexported) for the same symbols; apply the same
normalization/comparator change to the other occurrence around the http/uds
comparison at the noted lines too.

In `@internal/api/udsapi/helpers_test.go`:
- Around line 37-157: Extract the duplicated test helpers (stubSettingsService,
stubSettingsRestartController, settingsTestSectionEnvelope,
settingsTestCollectionEnvelope) into a new shared package (e.g.
internal/api/testutil) and replace the local copies in both
internal/api/udsapi/helpers_test.go and internal/api/httpapi/helpers_test.go
with imports from that package; move the types and their methods (GetSection,
UpdateSection, ListCollection, PutCollectionItem, DeleteCollectionItem,
RequestRestart, GetRestartOperation) plus the two helper envelope functions into
the new file, export them or provide package-level constructors as needed,
update tests to call testutil.NewStubSettingsService() /
testutil.NewStubSettingsRestartController() or use the exported names, and run
tests to ensure no behavioral changes.

In `@internal/daemon/restart_integration_test.go`:
- Around line 19-70: Add t.Parallel() at the start of each independent
integration test function to allow them to run concurrently: insert a call to
t.Parallel() as the first statement inside
TestRequestRestartPersistsPreRestartContextBeforeShutdownSignal (and likewise in
TestRelaunchHelperFailurePersistsAfterOldDaemonExit and
TestBootMarksRestartOperationReadyAfterFreshDaemonInfo) so these tests (which
use integrationHomePaths and isolated temp dirs) run in parallel without
changing other logic like newTestDaemon, RequestRestart, or the signalProcess
checks.
- Around line 142-145: The test currently matches the error text from
helper.run() using strings.Contains which is brittle; instead have helper.run
return a sentinel or typed error and update the assertion to use errors.Is or
errors.As. Define or export a sentinel error (e.g.
ErrReplacementExitedBeforeReady) from the package that helper.run returns (or
wrap the internal error with fmt.Errorf("%w", ErrReplacementExitedBeforeReady)),
then replace the strings.Contains check with if err == nil || !errors.Is(err,
ErrReplacementExitedBeforeReady) (or use errors.As for a typed error) so the
test uses errors.Is against the sentinel instead of comparing error strings.

In `@internal/daemon/restart_test.go`:
- Around line 533-537: The test currently uses a fixed 50ms delay to assert that
launchStarted hasn't fired, which is flaky; replace the wall-clock wait with an
explicit synchronization channel from the helper that signals when singleton
resources are released (e.g., add a releasedResources or resourcesReleased chan
struct{} that the helper closes/dispatches once it releases resources) and
change the select to wait on either launchStarted or that releasedResources
signal (optionally with a generous timeout for test safety). Update the code
paths that release singleton resources (in the helper or tested routine) to
send/close on resourcesReleased, and use that channel in place of time.After in
the select so the assertion is event-driven and deterministic.

In `@internal/settings/classify.go`:
- Around line 80-121: The classifyField function’s control flow mixes
section-specific branches (e.g., SectionHooksExtensions and SectionSkills) with
a subsequent generic collection-prefix switch; add a concise comment above the
second switch (the one checking strings.HasPrefix for "providers.",
"mcp-servers.", "environments.", "hooks.") clarifying that this block handles
collection-level prefixes for sections that don’t have explicit per-section
patterns (and that some prefixes like "hooks." are also handled earlier for
SectionHooksExtensions and thus will return earlier), so future readers
understand the early-return behavior of classifyField and the intended
fallthrough semantics.
🪄 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: d291f02b-3925-43bf-bffe-16502df3d65e

📥 Commits

Reviewing files that changed from the base of the PR and between 6b8bf9a and 0df573c.

⛔ Files ignored due to path filters (76)
  • .compozy/tasks/settings-ui/_meta.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/_tasks.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/MEMORY.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_01.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_02.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_03.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_04.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_05.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_06.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_07.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_08.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_09.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_10.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_11.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_12.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_13.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_14.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_15.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/memory/task_16.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/issues/BUG-001-restart-refresh-continuity.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/issues/BUG-002-skills-overlay-persistence.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/issues/BUG-003-settings-transport-parity.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/screenshots/TC-FUNC-001-settings-shell-navigation.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-FUNC-002-general-restart-polling.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-FUNC-005-skills-applied-now-vs-restart.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-FUNC-008-providers-crud-and-builtin-fallback.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-FUNC-010-mcp-global-precedence.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-FUNC-012-hooks-extensions-hybrid.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-INT-011-mcp-workspace-scope.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-INT-013-non-loopback-http-restrictions.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-INT-016-general-restart-ready.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-UI-014-summary-shell-desktop.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-UI-015-collection-providers-desktop.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/screenshots/TC-UI-015-hybrid-hooks-extensions-desktop.png is excluded by !**/*.png
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-001-settings-shell-navigation.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-002-general-restart-flow.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-003-memory-config-and-consolidate.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-004-observability-diagnostics-and-log-tail.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-005-skills-applied-now-vs-restart.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-006-automation-summary-and-link.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-007-network-summary-and-link.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-008-providers-crud-and-builtin-fallback.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-009-environments-crud-and-usage.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-010-mcp-global-precedence.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-FUNC-012-hooks-extensions-hybrid.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-INT-011-mcp-workspace-scope.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-INT-013-non-loopback-http-restrictions.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-UI-014-summary-routes-visual.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-cases/TC-UI-015-collection-and-hybrid-visual.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-plans/settings-ui-regression.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/test-plans/settings-ui-test-plan.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/qa/verification-report.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_01.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_02.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_03.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_04.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_05.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_06.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_07.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_08.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_09.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_10.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_11.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_12.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_13.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_14.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_15.md is excluded by !**/*.md
  • .compozy/tasks/settings-ui/task_16.md is excluded by !**/*.md
  • go.sum is excluded by !**/*.sum
  • openapi/agh.json is excluded by !**/*.json
  • web/e2e/fixtures/runtime-seed.test.ts is excluded by !**/fixtures/**
  • web/e2e/fixtures/runtime-seed.ts is excluded by !**/fixtures/**
  • web/e2e/fixtures/runtime.ts is excluded by !**/fixtures/**
  • web/e2e/fixtures/selectors.test.ts is excluded by !**/fixtures/**
  • web/e2e/fixtures/selectors.ts is excluded by !**/fixtures/**
  • web/src/generated/agh-openapi.d.ts is excluded by !**/generated/**
📒 Files selected for processing (148)
  • .compozy/tasks/settings-ui/qa/issues/.gitkeep
  • .compozy/tasks/settings-ui/qa/screenshots/.gitkeep
  • go.mod
  • internal/api/contract/settings.go
  • internal/api/contract/settings_test.go
  • internal/api/core/conversions.go
  • internal/api/core/errors.go
  • internal/api/core/handlers.go
  • internal/api/core/interfaces.go
  • internal/api/core/settings.go
  • internal/api/core/settings_internal_test.go
  • internal/api/core/settings_test.go
  • internal/api/httpapi/extensions.go
  • internal/api/httpapi/handlers.go
  • internal/api/httpapi/handlers_test.go
  • internal/api/httpapi/helpers_test.go
  • internal/api/httpapi/middleware.go
  • internal/api/httpapi/routes.go
  • internal/api/httpapi/server.go
  • internal/api/httpapi/server_test.go
  • internal/api/httpapi/transport_parity_integration_test.go
  • internal/api/spec/settings_test.go
  • internal/api/spec/spec.go
  • internal/api/udsapi/handlers_test.go
  • internal/api/udsapi/helpers_test.go
  • internal/api/udsapi/routes.go
  • internal/api/udsapi/server.go
  • internal/api/udsapi/transport_parity_integration_test.go
  • internal/cli/daemon.go
  • internal/cli/daemon_wait_test.go
  • internal/cli/root.go
  • internal/config/bootstrap.go
  • internal/config/bootstrap_test.go
  • internal/config/home.go
  • internal/config/home_test.go
  • internal/config/mcpjson.go
  • internal/config/mcpjson_test.go
  • internal/config/mcpjson_write.go
  • internal/config/merge.go
  • internal/config/persistence.go
  • internal/config/persistence_integration_test.go
  • internal/config/persistence_test.go
  • internal/daemon/boot.go
  • internal/daemon/daemon.go
  • internal/daemon/restart.go
  • internal/daemon/restart_integration_test.go
  • internal/daemon/restart_test.go
  • internal/daemon/settings.go
  • internal/daemon/settings_test.go
  • internal/procutil/detached.go
  • internal/procutil/detached_unix.go
  • internal/procutil/detached_windows.go
  • internal/settings/classify.go
  • internal/settings/collections.go
  • internal/settings/models.go
  • internal/settings/sections.go
  • internal/settings/service.go
  • internal/settings/service_integration_test.go
  • internal/settings/service_test.go
  • web/e2e/settings-transport.spec.ts
  • web/e2e/settings.spec.ts
  • web/src/components/app-sidebar.test.tsx
  • web/src/components/app-sidebar.tsx
  • web/src/hooks/routes/use-settings-automation-page.test.tsx
  • web/src/hooks/routes/use-settings-automation-page.ts
  • web/src/hooks/routes/use-settings-environments-page.test.tsx
  • web/src/hooks/routes/use-settings-environments-page.ts
  • web/src/hooks/routes/use-settings-general-page.test.tsx
  • web/src/hooks/routes/use-settings-general-page.ts
  • web/src/hooks/routes/use-settings-hooks-extensions-page.test.tsx
  • web/src/hooks/routes/use-settings-hooks-extensions-page.ts
  • web/src/hooks/routes/use-settings-mcp-servers-page.test.tsx
  • web/src/hooks/routes/use-settings-mcp-servers-page.ts
  • web/src/hooks/routes/use-settings-memory-page.test.tsx
  • web/src/hooks/routes/use-settings-memory-page.ts
  • web/src/hooks/routes/use-settings-network-page.test.tsx
  • web/src/hooks/routes/use-settings-network-page.ts
  • web/src/hooks/routes/use-settings-observability-page.test.tsx
  • web/src/hooks/routes/use-settings-observability-page.ts
  • web/src/hooks/routes/use-settings-page.test.tsx
  • web/src/hooks/routes/use-settings-page.ts
  • web/src/hooks/routes/use-settings-providers-page.test.tsx
  • web/src/hooks/routes/use-settings-providers-page.ts
  • web/src/hooks/routes/use-settings-skills-page.test.tsx
  • web/src/hooks/routes/use-settings-skills-page.ts
  • web/src/lib/settings-api-contract.test.ts
  • web/src/routeTree.gen.ts
  • web/src/routes/-settings-route-tree.test.ts
  • web/src/routes/_app/-settings.test.tsx
  • web/src/routes/_app/settings.tsx
  • web/src/routes/_app/settings/-automation.test.tsx
  • web/src/routes/_app/settings/-environments.test.tsx
  • web/src/routes/_app/settings/-general.test.tsx
  • web/src/routes/_app/settings/-hooks-extensions.test.tsx
  • web/src/routes/_app/settings/-index.test.tsx
  • web/src/routes/_app/settings/-mcp-servers.test.tsx
  • web/src/routes/_app/settings/-memory.test.tsx
  • web/src/routes/_app/settings/-network.test.tsx
  • web/src/routes/_app/settings/-observability.test.tsx
  • web/src/routes/_app/settings/-providers.test.tsx
  • web/src/routes/_app/settings/-skills.test.tsx
  • web/src/routes/_app/settings/automation.tsx
  • web/src/routes/_app/settings/environments.tsx
  • web/src/routes/_app/settings/general.tsx
  • web/src/routes/_app/settings/hooks-extensions.tsx
  • web/src/routes/_app/settings/index.tsx
  • web/src/routes/_app/settings/mcp-servers.tsx
  • web/src/routes/_app/settings/memory.tsx
  • web/src/routes/_app/settings/network.tsx
  • web/src/routes/_app/settings/observability.tsx
  • web/src/routes/_app/settings/providers.tsx
  • web/src/routes/_app/settings/skills.tsx
  • web/src/systems/settings/adapters/settings-api.test.ts
  • web/src/systems/settings/adapters/settings-api.ts
  • web/src/systems/settings/components/index.ts
  • web/src/systems/settings/components/settings-collection-header.tsx
  • web/src/systems/settings/components/settings-delete-dialog.test.tsx
  • web/src/systems/settings/components/settings-delete-dialog.tsx
  • web/src/systems/settings/components/settings-editor-dialog.test.tsx
  • web/src/systems/settings/components/settings-editor-dialog.tsx
  • web/src/systems/settings/components/settings-field-row.tsx
  • web/src/systems/settings/components/settings-page-shell.tsx
  • web/src/systems/settings/components/settings-restart-banner.test.tsx
  • web/src/systems/settings/components/settings-restart-banner.tsx
  • web/src/systems/settings/components/settings-save-bar.tsx
  • web/src/systems/settings/components/settings-section-card.tsx
  • web/src/systems/settings/components/settings-source-badge.test.tsx
  • web/src/systems/settings/components/settings-source-badge.tsx
  • web/src/systems/settings/components/settings-status-line.tsx
  • web/src/systems/settings/hooks/use-settings-collections.ts
  • web/src/systems/settings/hooks/use-settings-mutations.test.tsx
  • web/src/systems/settings/hooks/use-settings-mutations.ts
  • web/src/systems/settings/hooks/use-settings-restart.test.tsx
  • web/src/systems/settings/hooks/use-settings-restart.ts
  • web/src/systems/settings/hooks/use-settings-sections.ts
  • web/src/systems/settings/index.ts
  • web/src/systems/settings/lib/query-keys.test.ts
  • web/src/systems/settings/lib/query-keys.ts
  • web/src/systems/settings/lib/query-options.test.ts
  • web/src/systems/settings/lib/query-options.ts
  • web/src/systems/settings/lib/restart-status.test.ts
  • web/src/systems/settings/lib/restart-status.ts
  • web/src/systems/settings/lib/sections.test.ts
  • web/src/systems/settings/lib/sections.ts
  • web/src/systems/settings/stores/settings-restart-store.ts
  • web/src/systems/settings/stores/use-settings-restart-store.ts
  • web/src/systems/settings/types.ts
  • web/src/test-setup.ts

Comment thread internal/api/core/errors.go Outdated
Comment thread internal/api/core/settings.go
Comment thread internal/api/core/settings.go
Comment thread internal/api/core/settings.go
Comment thread internal/api/httpapi/extensions.go
Comment thread internal/config/persistence_integration_test.go
Comment thread internal/config/persistence.go
Comment thread internal/daemon/restart_test.go Outdated
Comment thread internal/daemon/restart.go Outdated
Comment thread internal/daemon/restart.go Outdated
pedronauck and others added 25 commits April 18, 2026 00:24
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Consolidates settings API access, query infrastructure, mutation
invalidation, and restart polling under web/src/systems/settings so
section routes can stay presentational. Adds useSettingsPage to share
restart banner and active-section state across the settings shell.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Introduce the three configuration-and-diagnostics settings pages on top
of the shared shell and @/systems/settings hooks, plus the shared
section primitives (page shell, section cards, field rows, save bar,
restart banner, status line) that later settings section tasks will
reuse. Route-level orchestration lives in dedicated
use-settings-<slug>-page hooks so route files stay presentational.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds per-section settings routes under /settings that summarize runtime state
and expose the configurable surface for each area without duplicating the
operational pages. Skills splits its save flow into applied-now disabled-skills
and restart-required marketplace/policy cards so mutations stay within a single
behavior bucket enforced by the settings service.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Introduces the collection-driven settings surface for provider and
environment overlays with full-replacement PUT semantics and
overlay-reveals-builtin delete behavior.

- Shared collection primitives: SettingsCollectionHeader,
  SettingsSourceBadge, SettingsEditorDialog, SettingsDeleteDialog
  (ready for reuse by mcp-servers and hooks & extensions pages).
- Providers page renders the builtin catalog as a table with
  effective/shadowed source metadata, API key presence state,
  and per-row edit/delete controls that disable against builtin-only
  providers.
- Environments page renders a profile grid with workspace usage
  counts, preserved nested profile keys (daytona/network/env) on
  edit, and usage warnings on delete.
- Page hooks expose a tagged-union editor state (closed/create/edit)
  so conflict and validation errors keep the selected item pinned,
  plus a last-action banner that surfaces the restart badge and
  builtin-fallback hint from the mutation result.
- Tests cover render, CRUD dispatch, validation and conflict errors,
  builtin-fallback delete notes, and shared primitive behavior.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Scope chips let operators switch between global and workspace overrides; scope changes reset the editor/delete state so drafts never leak across scopes
- Explicit target=auto|config|sidecar selector in the editor with inline available_targets so operators see which persistence destinations the backend permits
- Delete dialog previews the current effective source plus the next shadowed source that becomes effective on reload, and carries its own target selector for precedence-specific removal
- Hook/route tests cover scope switching, target submission, precedence rendering, and fallback messaging; both files exceed the 80% coverage target

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Combined settings surface that renders config-backed hook declarations
and extension policy alongside immediate operational actions (enable,
disable) against the HTTP-visible /api/extensions parity. Policy edits
stay restart-aware and extension toggles apply immediately, with a
banner surfacing transport-parity restrictions when HTTP mutation is
disabled.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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