refactor: badges design#84
Conversation
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (174)
📒 Files selected for processing (10)
WalkthroughThis PR introduces a session transcript repair workflow accessible via API and CLI, consolidates UI badge/chip primitives (KindChip, MonoBadge, StatusDot, Pills) into unified Pill and PillGroup components, and updates Storybook configurations to remove autodocs tags. Changes
Sequence DiagramsequenceDiagram
participant Client as CLI/API Client
participant Handler as RepairSession Handler
participant SessionMgr as Session Manager
participant Store as Session Store
participant Planner as Repair Planner
Client->>Handler: POST /sessions/:id/repair?dry_run=true&force=true
Handler->>SessionMgr: RepairSession(ctx, opts)
SessionMgr->>Store: Load session metadata & events
Store-->>SessionMgr: Session events (sorted by sequence)
SessionMgr->>Planner: Analyze event continuity & detect gaps
Planner-->>SessionMgr: Identified issues & repair actions
alt Dry Run
SessionMgr-->>Handler: Return planned actions (Persisted=false)
else Commit Repair
SessionMgr->>Store: Persist missing tool results & terminal events
Store-->>SessionMgr: Updated events with IDs
SessionMgr-->>Handler: Return persisted actions (Persisted=true)
end
Handler-->>Client: SessionRepairResponse { issues, actions, persisted }
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes The diff spans heterogeneous areas: repetitive UI pattern changes across 30\+ story files (low per-file complexity), consolidation of four UI components with test updates, API contract/handler additions following a standard pattern, and a novel session repair workflow with 532 lines of core logic requiring careful validation of event sequencing, state reconstruction, and repair eligibility rules. The session repair implementation involves dense domain logic for transcript analysis and mutation planning that demands thorough review. Possibly related PRs
✨ Finishing Touches📝 Generate docstrings
Comment |
There was a problem hiding this comment.
Actionable comments posted: 8
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/site/components/landing/__tests__/landing.test.tsx (1)
345-363:⚠️ Potential issue | 🟡 MinorTest doesn’t verify the “meaning” is actually wired to the rendered pill.
Right now this only checks
KIND_MEANING[kind]exists and the kind text renders. It should also assert the rendered pill exposes the meaning (viatitle) to match the test intent.Suggested test tightening
for (const kind of kinds) { expect(KIND_MEANING[kind]).toBeDefined(); render( <Pill mono size="xs" tone="accent" title={KIND_MEANING[kind]}> {kind} </Pill> ); - expect(screen.getAllByText(kind)).toBeDefined(); + expect(screen.getByTitle(KIND_MEANING[kind])).toHaveTextContent(kind); }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/site/components/landing/__tests__/landing.test.tsx` around lines 345 - 363, The test named "has a meaning string for every NetworkKind and renders inside Pill" currently only checks KIND_MEANING[kind] exists and that the kind text renders; update it to also assert that the rendered Pill exposes the meaning via its title by checking that the rendered element has attribute title equal to KIND_MEANING[kind] (e.g., use getByTitle(KIND_MEANING[kind]) or expect(screen.getByText(kind).closest('...')?.getAttribute('title')).toBe(KIND_MEANING[kind]) referencing the Pill component and KIND_MEANING mapping) so each iteration verifies the Pill's title matches the meaning.
🧹 Nitpick comments (10)
web/src/storybook/packages-ui-storybook-config.test.ts (1)
31-32: Consider asserting shadcn CSS import too.Since Storybook preview styling now depends on both shared tokens and shadcn Tailwind styles, adding an assertion for the shadcn import would strengthen regression coverage.
Suggested test addition
it("imports shared tokens without pulling in web styling or data-layer providers", () => { expect(packagesUiPreviewSource).toContain('import "./preview.css";'); expect(packagesUiPreviewCssSource).toContain('@import "@agh/ui/tokens.css";'); + expect(packagesUiPreviewCssSource).toContain('@import "shadcn/tailwind.css";'); expect(packagesUiPreviewSource).not.toContain("web/src/styles.css"); expect(packagesUiPreviewSource).not.toContain("msw"); expect(packagesUiPreviewSource).not.toContain("QueryClient");🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/src/storybook/packages-ui-storybook-config.test.ts` around lines 31 - 32, The test currently asserts the shared tokens import but misses the shadcn Tailwind import; update the test (in web/src/storybook/packages-ui-storybook-config.test.ts) to also assert that packagesUiPreviewCssSource contains the shadcn import (e.g. expect(packagesUiPreviewCssSource).toContain('@import "@agh/ui/shadcn.css";') or the correct shadcn import string used in your project) so Storybook preview CSS coverage includes both tokens and shadcn styles.web/src/systems/knowledge/components/knowledge-list-panel.tsx (1)
70-75: ReuseknowledgeScopeShortLabelinstead of duplicating scope label logic.This keeps scope text formatting centralized and avoids drift between list/detail views.
Suggested refactor
import { formatKnowledgeRelativeTime, knowledgeMemoryKey, + knowledgeScopeShortLabel, memoryScopeTone, resolveKnowledgeScope, memoryTypeTone, } from "../lib/knowledge-formatters"; @@ <Pill mono data-testid={`scope-badge-${scope}`} tone={memoryScopeTone(scope)}> - {scope === "workspace" ? "WS" : "GLOBAL"} + {knowledgeScopeShortLabel(scope)} </Pill>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/src/systems/knowledge/components/knowledge-list-panel.tsx` around lines 70 - 75, The scope badge currently duplicates label logic using a ternary in the JSX; replace that with a call to the shared helper knowledgeScopeShortLabel(scope) so formatting is centralized (i.e., inside the Pill where {scope === "workspace" ? "WS" : "GLOBAL"} is used, render knowledgeScopeShortLabel(scope) instead) and add an import for knowledgeScopeShortLabel if it's not already imported so both list and detail views use the same label logic.web/src/systems/knowledge/lib/knowledge-formatters.ts (1)
39-47: TightenTYPE_TONEkey typing toMemoryTypefor safer evolution.Using
Record<string, PillTone>weakens compile-time guarantees. Prefer keying byMemoryTypeso invalid/typo keys are rejected by TypeScript.Suggested refactor
-const TYPE_TONE: Record<string, PillTone> = { +const TYPE_TONE: Partial<Record<MemoryType, PillTone>> = { user: "accent", feedback: "accent", project: "success", reference: "info", };🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/src/systems/knowledge/lib/knowledge-formatters.ts` around lines 39 - 47, TYPE_TONE is typed too loosely as Record<string, PillTone>; tighten it to use the MemoryType union so typos are caught and future changes are safer: change the TYPE_TONE declaration to use Record<MemoryType, PillTone> (or a const assertion with an explicit MemoryType index type) and ensure memoryTypeTone(type: MemoryType) still returns TYPE_TONE[type] with a fallback ("accent") if needed; update any missing keys in TYPE_TONE to satisfy the MemoryType coverage or use Partial<Record<MemoryType, PillTone>> and keep the fallback in memoryTypeTone.web/src/lib/pill-variant.ts (1)
17-17: RenamepillVariantFromToneto match its current semantics.The function now returns
PillTone, so theVariantname is misleading and increases API confusion at call sites.♻️ Suggested rename
-export function pillVariantFromTone(tone: LegacyPillTone | null | undefined): PillTone { +export function pillToneFromLegacyTone(tone: LegacyPillTone | null | undefined): PillTone {🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/src/lib/pill-variant.ts` at line 17, Rename the misleading function pillVariantFromTone (which returns a PillTone) to a name that reflects it produces a PillTone—e.g., pillToneFromLegacyTone or pillToneFromTone; update the function declaration and its export, replace all call sites and imports referencing pillVariantFromTone, and adjust any tests/types that import it; use the unique symbols pillVariantFromTone, PillTone, and LegacyPillTone to locate and update the implementation and usages.web/src/systems/tasks/components/tasks-detail-header.tsx (1)
42-47: Stale JSDoc comment referencesMonoBadge.The docstring mentions
MonoBadgewhich has been replaced byPill. Consider updating to match the current implementation.📝 Suggested documentation update
/** - * Detail page header — `PageHeader` with the task title + short id `MonoBadge` + + * Detail page header — `PageHeader` with the task title + short id `Pill` + * status pill, plus action buttons (edit, cancel, publish, enqueue) in the meta * slot. The eyebrow row below surfaces secondary metadata (owner, origin, created- * by, last update, priority + approval pills). */🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/src/systems/tasks/components/tasks-detail-header.tsx` around lines 42 - 47, The JSDoc mentions the removed MonoBadge; update the comment in tasks-detail-header.tsx to reference the current UI element (Pill) used for the short id and status—e.g., change "short id `MonoBadge`" to "short id `Pill`" and ensure other mentions (eyebrow row, PageHeader) reflect current component names like PageHeader and Pill so the docstring matches the implementation in the TasksDetailHeader component.web/src/systems/tasks/components/tasks-detail-preview-panel.tsx (1)
58-62: Stale JSDoc comment references removed components.The docstring still mentions
StatusDotandMonoBadge, but these have been replaced byPill.DotandPill. Update the comment to reflect the current implementation.📝 Suggested documentation update
/** * Inline preview rendered on `/tasks` when a list row is selected but no detail - * route is active. Composes `StatusDot`, `MonoBadge`, `Pill`, `Metric`, `Section`, + * route is active. Composes `Pill`, `Pill.Dot`, `Metric`, `Section`, * and a `CodeBlock` preview of the task prompt + scope + agent. */🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/src/systems/tasks/components/tasks-detail-preview-panel.tsx` around lines 58 - 62, Update the stale JSDoc at the top of tasks-detail-preview-panel.tsx: replace references to the removed components StatusDot and MonoBadge with the current components Pill.Dot and Pill (and/or remove the old names), keeping the rest of the description (CodeBlock, Metric, Section, etc.) accurate to the current implementation so the comment matches the actual usage of Pill.Dot and Pill in this file.web/src/systems/bridges/components/bridge-detail-panel.tsx (1)
87-117: Consolidate duplicate status→tone mapping.
statusToStatusDotToneandstatusToMonoBadgeTonecurrently do the same work. Keep a single mapper to avoid drift.Refactor sketch
-function statusToStatusDotTone(status: BridgeStatus): PillTone { +function statusToPillTone(status: BridgeStatus): PillTone { if (status === "disabled") return "danger"; switch (bridgeStatusTone(status)) { case "green": return "success"; @@ return "neutral"; } } - -function statusToMonoBadgeTone(status: BridgeStatus): PillTone { - if (status === "disabled") return "danger"; - switch (bridgeStatusTone(status)) { - case "green": - return "success"; - case "amber": - return "warning"; - case "danger": - return "danger"; - case "violet": - return "info"; - default: - return "neutral"; - } -}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/src/systems/bridges/components/bridge-detail-panel.tsx` around lines 87 - 117, Both statusToStatusDotTone and statusToMonoBadgeTone duplicate the same mapping logic; consolidate into a single reusable mapper (e.g., statusToPillTone) that takes a BridgeStatus, uses bridgeStatusTone(status) and the same "disabled" check, and returns a PillTone; then replace calls to statusToStatusDotTone and statusToMonoBadgeTone with the new function (or have those two functions delegate to it) and remove the duplicated switch body to prevent drift. Ensure the new mapper preserves the exact mapping for "disabled" -> "danger" and the bridgeStatusTone cases ("green"->"success", "amber"->"warning", "danger"->"danger", "violet"->"info", default -> "neutral").packages/ui/src/components/stories/pill-group.stories.tsx (1)
13-16: Minor: Clarify component description.The description says "Renamed from the legacy
PillGroup" but the component is now namedPillGroup. Consider updating to clarify what it was renamed from (e.g., "Replaces the legacyPillssegmented toggle").🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/ui/src/components/stories/pill-group.stories.tsx` around lines 13 - 16, The story description for the PillGroup component is confusing ("Renamed from the legacy `PillGroup`") — update the `description.component` text to clearly state what the current `PillGroup` replaces (for example "Replaces the legacy `Pills` segmented toggle") and keep the existing usage hints (`items`, `value`, `onChange`) intact; edit the string in the story where `description.component` is defined so it references the correct legacy name instead of `PillGroup`.packages/ui/src/components/stories/pill.stories.tsx (1)
11-17: Typo in component description.Line 14 reads "replaces
Pill,Pill,KindChip..." with duplicate "Pill" entries. This should list the distinct components being replaced (e.g.,MonoBadge,StatusDot,KindChip, etc.).📝 Suggested fix
description: { component: - "Unified semantic pill — replaces `Pill`, `Pill`, `KindChip`, `Pill.Dot`, `WireChip`, and the legacy `Pill`. Compose with `Pill.Dot` for leading status dots.", + "Unified semantic pill — replaces `MonoBadge`, `StatusDot`, `KindChip`, `MonoChip`, `WireChip`, and the legacy `Pills`. Compose with `Pill.Dot` for leading status dots.", },🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/ui/src/components/stories/pill.stories.tsx` around lines 11 - 17, Update the docs.description.component string in pill.stories.tsx to remove the duplicate "Pill" and list the distinct components this unified pill replaces (e.g., MonoBadge, StatusDot, KindChip, Pill.Dot, WireChip, and the legacy Pill) so the description reads correctly and does not contain repeated entries; locate the docs.description.component literal and edit the quoted component description accordingly.packages/ui/src/components/pill.test.tsx (1)
12-15: Extract inline object-shape types to named interfaces.Lines 12–15 define
WithMotionprops as an inline object shape{ reducedMotion: "always" | "never"; children: ReactNode; }, and line 31 definesit.each<{ tone: PillTone; bg: string; text: string }>as an inline generic argument. Per coding guidelines (**/*.{ts,tsx}: Prefer interface for defining object shapes in TypeScript), extract both to namedinterfacedeclarations above their respective scopes.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/ui/src/components/pill.test.tsx` around lines 12 - 15, Extract the inline object types into named interfaces: replace the inline props for the component currently typed as { reducedMotion: "always" | "never"; children: ReactNode; } with a new interface (e.g., WithMotionProps) declared above the component and use that interface in the component signature, and replace the inline generic for it.each<{ tone: PillTone; bg: string; text: string }> with a named interface (e.g., ToneTestCase) declared above the test block and use it in the it.each generic; ensure the new interfaces import ReactNode if needed and keep existing names like PillTone unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@packages/ui/src/components/pill-group.tsx`:
- Around line 9-19: The PillGroup component contains hard-coded pixel classes
(e.g., rounded-[5px], text-[10px], h-[20px], h-[22px], px-2 (if representing
8px/10px), and other [14px],[7px],[9px] usages) which must be replaced with the
design token equivalents from DESIGN.md; update the class strings inside
packages/ui/src/components/pill-group.tsx (the variant block for active and
size, base class string, and any other nearby class values referenced in this
file) to use the canonical DESIGN.md tokens (CSS custom properties or token
utility classes used across the repo) instead of raw px values, mapping each
specific token (rounded, font-size, height, padding, gap) to the appropriate
DESIGN.md name so no new numeric values are invented and all sizes reference the
shared tokens.
In `@web/src/components/design-system-showcase.test.tsx`:
- Around line 199-205: The showcase is importing KindChip directly from
"@/systems/network/components/kind-chip" which breaks cross-system import rules;
either export KindChip from the network public barrel (add an export in
web/src/systems/network/index.ts) and change the showcase import to
"@/systems/network", or move KindChip to a shared location and import from that
new public barrel; after doing that, update the allowed Set in
design-system-showcase.test.tsx to replace
"@/systems/network/components/kind-chip" with the new public import path
"@/systems/network" (or the new shared barrel path) so the test reflects the
corrected import.
In `@web/src/components/design-system-showcase.tsx`:
- Line 139: The import of KindChip in design-system-showcase.tsx uses an
internal path and violates cross-system rules; update the import to use the
network system's public barrel instead (replace the current
"@/systems/network/components/kind-chip" import with an import from
"@/systems/network" that exposes KindChip) so the component is consumed via the
network public API rather than an internal file.
In `@web/src/lib/kind-colors.ts`:
- Around line 7-15: The KIND_COLORS map currently uses hard-coded hex values
(e.g., "say": "#8E8E93", "trace": "#B892FF") which violates the token-only rule;
update the KIND_COLORS constant in web/src/lib/kind-colors.ts to reference the
canonical design tokens (CSS variables exported from packages/ui/src/tokens.css)
for every entry (replace hex literals with var(--color-*) tokens such as
var(--color-muted)/var(--color-xxx) or the appropriate kind/status token names),
ensure no ad-hoc hex remains, and keep keys (say, greet, direct, receipt,
recipe, trace, whois) unchanged so callers still work.
In `@web/src/systems/automation/components/automation-detail-panel.tsx`:
- Line 16: Replace the internal-path import of KindChip with the network system
public barrel import (import { KindChip } from "@/systems/network"); if KindChip
is not exported from the network barrel, add a named re-export in the network
system barrel (e.g., export { KindChip } from "./components/kind-chip") so
automation-detail-panel uses only the public "@/systems/network" surface.
In `@web/src/systems/bridges/components/bridge-list-panel.tsx`:
- Around line 6-7: Replace the direct import of KindChip from the network
system's internals with the public barrel export: change the import to pull
KindChip from "@/systems/network" (e.g., import { KindChip } from
"@/systems/network"); if KindChip is not currently re-exported from that barrel,
add it to the network system's public exports so the component can be imported
only via the public barrel and avoid reaching into components/kind-chip
internals.
In `@web/src/systems/bridges/components/bridge-provider-card.tsx`:
- Line 4: The import of KindChip is reaching into another system's internals;
update the import in bridge-provider-card.tsx to use the network system's public
barrel instead of "@/systems/network/components/kind-chip"—i.e., import KindChip
from the "@/systems/network" barrel so the cross-system boundary contract is
respected and internal paths are not referenced.
In `@web/src/systems/daemon/hooks/use-daemon-health.ts`:
- Line 3: The hook useDaemonHealth currently imports the UI type
ConnectionStatus from the component, which breaks layer boundaries; instead
remove that import and replace it with a system-level type (either define a
local ConnectionStatus enum/type inside useDaemonHealth or move a shared status
type to a lower-level module such as a lib/adapters/types module and import
that). Update all references inside useDaemonHealth (and any callers in systems)
to use the new system-level type so the hook no longer depends on
"@/components/connection-indicator".
---
Outside diff comments:
In `@packages/site/components/landing/__tests__/landing.test.tsx`:
- Around line 345-363: The test named "has a meaning string for every
NetworkKind and renders inside Pill" currently only checks KIND_MEANING[kind]
exists and that the kind text renders; update it to also assert that the
rendered Pill exposes the meaning via its title by checking that the rendered
element has attribute title equal to KIND_MEANING[kind] (e.g., use
getByTitle(KIND_MEANING[kind]) or
expect(screen.getByText(kind).closest('...')?.getAttribute('title')).toBe(KIND_MEANING[kind])
referencing the Pill component and KIND_MEANING mapping) so each iteration
verifies the Pill's title matches the meaning.
---
Nitpick comments:
In `@packages/ui/src/components/pill.test.tsx`:
- Around line 12-15: Extract the inline object types into named interfaces:
replace the inline props for the component currently typed as { reducedMotion:
"always" | "never"; children: ReactNode; } with a new interface (e.g.,
WithMotionProps) declared above the component and use that interface in the
component signature, and replace the inline generic for it.each<{ tone:
PillTone; bg: string; text: string }> with a named interface (e.g.,
ToneTestCase) declared above the test block and use it in the it.each generic;
ensure the new interfaces import ReactNode if needed and keep existing names
like PillTone unchanged.
In `@packages/ui/src/components/stories/pill-group.stories.tsx`:
- Around line 13-16: The story description for the PillGroup component is
confusing ("Renamed from the legacy `PillGroup`") — update the
`description.component` text to clearly state what the current `PillGroup`
replaces (for example "Replaces the legacy `Pills` segmented toggle") and keep
the existing usage hints (`items`, `value`, `onChange`) intact; edit the string
in the story where `description.component` is defined so it references the
correct legacy name instead of `PillGroup`.
In `@packages/ui/src/components/stories/pill.stories.tsx`:
- Around line 11-17: Update the docs.description.component string in
pill.stories.tsx to remove the duplicate "Pill" and list the distinct components
this unified pill replaces (e.g., MonoBadge, StatusDot, KindChip, Pill.Dot,
WireChip, and the legacy Pill) so the description reads correctly and does not
contain repeated entries; locate the docs.description.component literal and edit
the quoted component description accordingly.
In `@web/src/lib/pill-variant.ts`:
- Line 17: Rename the misleading function pillVariantFromTone (which returns a
PillTone) to a name that reflects it produces a PillTone—e.g.,
pillToneFromLegacyTone or pillToneFromTone; update the function declaration and
its export, replace all call sites and imports referencing pillVariantFromTone,
and adjust any tests/types that import it; use the unique symbols
pillVariantFromTone, PillTone, and LegacyPillTone to locate and update the
implementation and usages.
In `@web/src/storybook/packages-ui-storybook-config.test.ts`:
- Around line 31-32: The test currently asserts the shared tokens import but
misses the shadcn Tailwind import; update the test (in
web/src/storybook/packages-ui-storybook-config.test.ts) to also assert that
packagesUiPreviewCssSource contains the shadcn import (e.g.
expect(packagesUiPreviewCssSource).toContain('@import "@agh/ui/shadcn.css";') or
the correct shadcn import string used in your project) so Storybook preview CSS
coverage includes both tokens and shadcn styles.
In `@web/src/systems/bridges/components/bridge-detail-panel.tsx`:
- Around line 87-117: Both statusToStatusDotTone and statusToMonoBadgeTone
duplicate the same mapping logic; consolidate into a single reusable mapper
(e.g., statusToPillTone) that takes a BridgeStatus, uses
bridgeStatusTone(status) and the same "disabled" check, and returns a PillTone;
then replace calls to statusToStatusDotTone and statusToMonoBadgeTone with the
new function (or have those two functions delegate to it) and remove the
duplicated switch body to prevent drift. Ensure the new mapper preserves the
exact mapping for "disabled" -> "danger" and the bridgeStatusTone cases
("green"->"success", "amber"->"warning", "danger"->"danger", "violet"->"info",
default -> "neutral").
In `@web/src/systems/knowledge/components/knowledge-list-panel.tsx`:
- Around line 70-75: The scope badge currently duplicates label logic using a
ternary in the JSX; replace that with a call to the shared helper
knowledgeScopeShortLabel(scope) so formatting is centralized (i.e., inside the
Pill where {scope === "workspace" ? "WS" : "GLOBAL"} is used, render
knowledgeScopeShortLabel(scope) instead) and add an import for
knowledgeScopeShortLabel if it's not already imported so both list and detail
views use the same label logic.
In `@web/src/systems/knowledge/lib/knowledge-formatters.ts`:
- Around line 39-47: TYPE_TONE is typed too loosely as Record<string, PillTone>;
tighten it to use the MemoryType union so typos are caught and future changes
are safer: change the TYPE_TONE declaration to use Record<MemoryType, PillTone>
(or a const assertion with an explicit MemoryType index type) and ensure
memoryTypeTone(type: MemoryType) still returns TYPE_TONE[type] with a fallback
("accent") if needed; update any missing keys in TYPE_TONE to satisfy the
MemoryType coverage or use Partial<Record<MemoryType, PillTone>> and keep the
fallback in memoryTypeTone.
In `@web/src/systems/tasks/components/tasks-detail-header.tsx`:
- Around line 42-47: The JSDoc mentions the removed MonoBadge; update the
comment in tasks-detail-header.tsx to reference the current UI element (Pill)
used for the short id and status—e.g., change "short id `MonoBadge`" to "short
id `Pill`" and ensure other mentions (eyebrow row, PageHeader) reflect current
component names like PageHeader and Pill so the docstring matches the
implementation in the TasksDetailHeader component.
In `@web/src/systems/tasks/components/tasks-detail-preview-panel.tsx`:
- Around line 58-62: Update the stale JSDoc at the top of
tasks-detail-preview-panel.tsx: replace references to the removed components
StatusDot and MonoBadge with the current components Pill.Dot and Pill (and/or
remove the old names), keeping the rest of the description (CodeBlock, Metric,
Section, etc.) accurate to the current implementation so the comment matches the
actual usage of Pill.Dot and Pill in this file.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 126d0c78-0551-45e1-9ed5-5f10d648a5ed
⛔ Files ignored due to path filters (4)
packages/ui/README.mdis excluded by!**/*.mdskills-lock.jsonis excluded by!**/*.jsonweb/AGENTS.mdis excluded by!**/*.mdweb/CLAUDE.mdis excluded by!**/*.md
📒 Files selected for processing (178)
packages/site/components/landing/__tests__/landing.test.tsxpackages/site/components/landing/bridges-section.tsxpackages/site/components/landing/network-protocol-visual.tsxpackages/site/components/landing/primitives/index.tspackages/site/components/landing/primitives/kind-chip.tsxpackages/site/components/landing/primitives/mono-badge.tsxpackages/site/components/landing/primitives/network-kinds.tspackages/ui/.storybook/preview.csspackages/ui/.storybook/preview.tspackages/ui/src/components/connection-indicator.test.tsxpackages/ui/src/components/input-group.tsxpackages/ui/src/components/input.tsxpackages/ui/src/components/kind-chip.test.tsxpackages/ui/src/components/kind-chip.tsxpackages/ui/src/components/mono-badge.test.tsxpackages/ui/src/components/mono-badge.tsxpackages/ui/src/components/mono-chip.test.tsxpackages/ui/src/components/mono-chip.tsxpackages/ui/src/components/pill-group.test.tsxpackages/ui/src/components/pill-group.tsxpackages/ui/src/components/pill.test.tsxpackages/ui/src/components/pill.tsxpackages/ui/src/components/pills.tsxpackages/ui/src/components/status-dot.test.tsxpackages/ui/src/components/status-dot.tsxpackages/ui/src/components/stories/accordion.stories.tsxpackages/ui/src/components/stories/alert.stories.tsxpackages/ui/src/components/stories/avatar.stories.tsxpackages/ui/src/components/stories/badge.stories.tsxpackages/ui/src/components/stories/breadcrumb.stories.tsxpackages/ui/src/components/stories/button-group.stories.tsxpackages/ui/src/components/stories/button.stories.tsxpackages/ui/src/components/stories/card.stories.tsxpackages/ui/src/components/stories/chat-message-bubble.stories.tsxpackages/ui/src/components/stories/code-block.stories.tsxpackages/ui/src/components/stories/collapsible.stories.tsxpackages/ui/src/components/stories/combobox.stories.tsxpackages/ui/src/components/stories/command.stories.tsxpackages/ui/src/components/stories/connection-indicator.stories.tsxpackages/ui/src/components/stories/dialog.stories.tsxpackages/ui/src/components/stories/direction.stories.tsxpackages/ui/src/components/stories/dropdown-menu.stories.tsxpackages/ui/src/components/stories/empty.stories.tsxpackages/ui/src/components/stories/field.stories.tsxpackages/ui/src/components/stories/input-group.stories.tsxpackages/ui/src/components/stories/input.stories.tsxpackages/ui/src/components/stories/item.stories.tsxpackages/ui/src/components/stories/kbd.stories.tsxpackages/ui/src/components/stories/kind-chip.stories.tsxpackages/ui/src/components/stories/label.stories.tsxpackages/ui/src/components/stories/logo.stories.tsxpackages/ui/src/components/stories/metric.stories.tsxpackages/ui/src/components/stories/mono-badge.stories.tsxpackages/ui/src/components/stories/mono-chip.stories.tsxpackages/ui/src/components/stories/native-select.stories.tsxpackages/ui/src/components/stories/page-header.stories.tsxpackages/ui/src/components/stories/pill-group.stories.tsxpackages/ui/src/components/stories/pill.stories.tsxpackages/ui/src/components/stories/pills.stories.tsxpackages/ui/src/components/stories/popover.stories.tsxpackages/ui/src/components/stories/progress.stories.tsxpackages/ui/src/components/stories/scroll-area.stories.tsxpackages/ui/src/components/stories/search-input.stories.tsxpackages/ui/src/components/stories/section.stories.tsxpackages/ui/src/components/stories/select.stories.tsxpackages/ui/src/components/stories/separator.stories.tsxpackages/ui/src/components/stories/sheet.stories.tsxpackages/ui/src/components/stories/sidebar.stories.tsxpackages/ui/src/components/stories/skeleton.stories.tsxpackages/ui/src/components/stories/sonner.stories.tsxpackages/ui/src/components/stories/spinner.stories.tsxpackages/ui/src/components/stories/split-pane.stories.tsxpackages/ui/src/components/stories/status-dot.stories.tsxpackages/ui/src/components/stories/switch.stories.tsxpackages/ui/src/components/stories/table.stories.tsxpackages/ui/src/components/stories/tabs.stories.tsxpackages/ui/src/components/stories/textarea.stories.tsxpackages/ui/src/components/stories/toggle-group.stories.tsxpackages/ui/src/components/stories/toggle.stories.tsxpackages/ui/src/components/stories/tool-call-card.stories.tsxpackages/ui/src/components/stories/toolbar.stories.tsxpackages/ui/src/components/stories/tooltip.stories.tsxpackages/ui/src/components/stories/typing-dots.stories.tsxpackages/ui/src/components/stories/ui-provider.stories.tsxpackages/ui/src/components/stories/wire-card.stories.tsxpackages/ui/src/components/stories/wire-chip.stories.tsxpackages/ui/src/components/tool-call-card.tsxpackages/ui/src/components/toolbar.tsxpackages/ui/src/components/wire-chip.test.tsxpackages/ui/src/components/wire-chip.tsxpackages/ui/src/index.tsweb/src/components/app-sidebar.test.tsxweb/src/components/app-sidebar.tsxweb/src/components/connection-indicator.tsxweb/src/components/design-system-showcase.test.tsxweb/src/components/design-system-showcase.tsxweb/src/components/stories/app-sidebar.stories.tsxweb/src/hooks/routes/use-home-page.tsweb/src/lib/kind-colors.tsweb/src/lib/pill-variant.tsweb/src/routes/_app.tsxweb/src/routes/_app/-tasks.test.tsxweb/src/routes/_app/bridges.tsxweb/src/routes/_app/index.tsxweb/src/routes/_app/knowledge.tsxweb/src/routes/_app/sandbox.tsxweb/src/routes/_app/settings/-mcp-servers.test.tsxweb/src/routes/_app/settings/general.tsxweb/src/routes/_app/settings/hooks-extensions.tsxweb/src/routes/_app/settings/mcp-servers.tsxweb/src/routes/_app/settings/observability.tsxweb/src/routes/_app/tasks.tsxweb/src/storybook/packages-ui-storybook-config.test.tsweb/src/systems/agent/components/agent-info-panel.tsxweb/src/systems/agent/components/agent-page-header.tsxweb/src/systems/agent/components/agent-sessions-list.tsxweb/src/systems/agent/components/stories/agent-page-header.stories.tsxweb/src/systems/agent/lib/session-status.tsweb/src/systems/automation/components/automation-detail-panel.tsxweb/src/systems/automation/components/automation-job-form.tsxweb/src/systems/automation/components/automation-list-panel.tsxweb/src/systems/automation/components/automation-operations-page.tsxweb/src/systems/automation/components/automation-run-history.tsxweb/src/systems/automation/components/automation-trigger-form.tsxweb/src/systems/bridges/components/bridge-create-dialog.tsxweb/src/systems/bridges/components/bridge-detail-panel.test.tsxweb/src/systems/bridges/components/bridge-detail-panel.tsxweb/src/systems/bridges/components/bridge-edit-dialog.tsxweb/src/systems/bridges/components/bridge-list-panel.tsxweb/src/systems/bridges/components/bridge-provider-card.tsxweb/src/systems/bridges/components/bridge-test-delivery-dialog.tsxweb/src/systems/daemon/hooks/use-daemon-health.tsweb/src/systems/knowledge/components/knowledge-detail-panel.tsxweb/src/systems/knowledge/components/knowledge-list-panel.tsxweb/src/systems/knowledge/lib/knowledge-formatters.tsweb/src/systems/network/components/kind-chip.tsxweb/src/systems/network/components/network-create-channel-dialog.tsxweb/src/systems/network/components/network-workspace-shell.test.tsxweb/src/systems/network/components/network-workspace-shell.tsxweb/src/systems/session/components/chat-header.test.tsxweb/src/systems/session/components/chat-header.tsxweb/src/systems/session/components/runtime-activity-notice.tsxweb/src/systems/session/components/session-inspector.tsxweb/src/systems/session/components/session-resume-failure.tsxweb/src/systems/session/components/tool-call-card.test.tsxweb/src/systems/settings/components/provider-card.tsxweb/src/systems/settings/components/settings-field-row.test.tsxweb/src/systems/settings/components/settings-source-badge.tsxweb/src/systems/settings/components/settings-status-line.tsxweb/src/systems/skill/components/marketplace-view.tsxweb/src/systems/skill/components/skill-detail-panel.tsxweb/src/systems/skill/components/skill-list-panel.tsxweb/src/systems/skill/lib/skill-formatters.tsweb/src/systems/tasks/components/task-card.test.tsxweb/src/systems/tasks/components/task-card.tsxweb/src/systems/tasks/components/task-editor-surface.tsxweb/src/systems/tasks/components/task-run-detail-header.tsxweb/src/systems/tasks/components/task-run-detail-panels.tsxweb/src/systems/tasks/components/tasks-dashboard-active-runs.tsxweb/src/systems/tasks/components/tasks-dashboard-queue-health.tsxweb/src/systems/tasks/components/tasks-dashboard-status-breakdown.tsxweb/src/systems/tasks/components/tasks-detail-children-panel.tsxweb/src/systems/tasks/components/tasks-detail-dependencies-panel.tsxweb/src/systems/tasks/components/tasks-detail-header.test.tsxweb/src/systems/tasks/components/tasks-detail-header.tsxweb/src/systems/tasks/components/tasks-detail-overview-panel.tsxweb/src/systems/tasks/components/tasks-detail-preview-panel.tsxweb/src/systems/tasks/components/tasks-detail-runs-panel.tsxweb/src/systems/tasks/components/tasks-empty-state.tsxweb/src/systems/tasks/components/tasks-inbox-item.tsxweb/src/systems/tasks/components/tasks-kanban-board.tsxweb/src/systems/tasks/components/tasks-list-panel.tsxweb/src/systems/tasks/components/tasks-list-row.test.tsxweb/src/systems/tasks/components/tasks-list-row.tsxweb/src/systems/tasks/components/tasks-multi-agent-panel.tsxweb/src/systems/tasks/components/tasks-timeline-panel.tsxweb/src/systems/tasks/lib/task-formatters.tsweb/src/systems/workspace/components/workspace-setup.tsx
💤 Files with no reviewable changes (71)
- packages/ui/src/components/stories/field.stories.tsx
- packages/ui/src/components/stories/separator.stories.tsx
- packages/ui/src/components/stories/avatar.stories.tsx
- packages/ui/src/components/stories/sheet.stories.tsx
- packages/ui/src/components/stories/toggle-group.stories.tsx
- packages/ui/src/components/stories/tool-call-card.stories.tsx
- packages/ui/src/components/stories/label.stories.tsx
- packages/ui/src/components/stories/combobox.stories.tsx
- packages/ui/src/components/stories/accordion.stories.tsx
- packages/ui/src/components/stories/dropdown-menu.stories.tsx
- packages/ui/src/components/stories/logo.stories.tsx
- packages/ui/src/components/stories/popover.stories.tsx
- packages/ui/src/components/stories/card.stories.tsx
- packages/ui/src/components/stories/sonner.stories.tsx
- packages/ui/src/components/stories/badge.stories.tsx
- packages/ui/src/components/stories/spinner.stories.tsx
- packages/ui/src/components/stories/code-block.stories.tsx
- packages/ui/src/components/stories/collapsible.stories.tsx
- packages/ui/src/components/stories/button.stories.tsx
- packages/ui/src/components/stories/input-group.stories.tsx
- packages/ui/src/components/stories/tabs.stories.tsx
- packages/ui/src/components/stories/kbd.stories.tsx
- packages/ui/src/components/stories/item.stories.tsx
- packages/ui/src/components/stories/button-group.stories.tsx
- packages/ui/src/components/stories/scroll-area.stories.tsx
- packages/ui/src/components/stories/search-input.stories.tsx
- packages/ui/src/components/stories/progress.stories.tsx
- packages/ui/src/components/stories/textarea.stories.tsx
- packages/ui/src/components/stories/split-pane.stories.tsx
- packages/ui/.storybook/preview.ts
- packages/ui/src/components/stories/dialog.stories.tsx
- packages/ui/src/components/stories/toggle.stories.tsx
- packages/ui/src/components/stories/table.stories.tsx
- packages/ui/src/components/stories/switch.stories.tsx
- packages/ui/src/components/stories/metric.stories.tsx
- packages/ui/src/components/stories/skeleton.stories.tsx
- packages/ui/src/components/stories/input.stories.tsx
- packages/ui/src/components/stories/sidebar.stories.tsx
- packages/ui/src/components/stories/select.stories.tsx
- packages/ui/src/components/status-dot.test.tsx
- packages/ui/src/components/kind-chip.test.tsx
- packages/ui/src/components/stories/ui-provider.stories.tsx
- packages/ui/src/components/stories/tooltip.stories.tsx
- packages/ui/src/components/stories/native-select.stories.tsx
- packages/ui/src/components/stories/alert.stories.tsx
- web/src/routes/_app.tsx
- packages/ui/src/components/mono-chip.tsx
- packages/ui/src/components/kind-chip.tsx
- packages/ui/src/components/wire-chip.test.tsx
- packages/ui/src/components/stories/connection-indicator.stories.tsx
- packages/site/components/landing/primitives/mono-badge.tsx
- packages/ui/src/components/wire-chip.tsx
- packages/ui/src/components/stories/pills.stories.tsx
- packages/ui/src/components/mono-badge.test.tsx
- packages/ui/src/components/stories/mono-chip.stories.tsx
- packages/ui/src/components/stories/wire-chip.stories.tsx
- packages/ui/src/components/stories/direction.stories.tsx
- packages/ui/src/components/stories/mono-badge.stories.tsx
- packages/ui/src/components/stories/status-dot.stories.tsx
- packages/ui/src/components/stories/typing-dots.stories.tsx
- packages/ui/src/components/connection-indicator.test.tsx
- packages/ui/src/components/stories/empty.stories.tsx
- packages/site/components/landing/primitives/kind-chip.tsx
- packages/ui/src/components/stories/wire-card.stories.tsx
- packages/ui/src/components/pills.tsx
- packages/ui/src/components/mono-chip.test.tsx
- packages/ui/src/components/stories/kind-chip.stories.tsx
- packages/ui/src/components/stories/command.stories.tsx
- packages/ui/src/components/stories/breadcrumb.stories.tsx
- packages/ui/src/components/mono-badge.tsx
- packages/ui/src/components/status-dot.tsx
There was a problem hiding this comment.
Actionable comments posted: 5
🧹 Nitpick comments (9)
web/src/routes/_app/settings.tsx (1)
140-140: Consider exposing full label on hover when truncated.Small UX win: add a
titleso long section names remain discoverable when clipped.Proposed tweak
- <span className="truncate">{section.label}</span> + <span className="truncate" title={section.label}> + {section.label} + </span>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/src/routes/_app/settings.tsx` at line 140, The span that renders the section label (span with className="truncate" containing {section.label}) should include a title attribute so the full label appears on hover; update that span to set title={section.label} (optionally also add aria-label={section.label} for accessibility) so truncated labels are discoverable.web/src/systems/session/adapters/session-api.test.ts (1)
336-339: Make the query assertion order-agnostic.This assertion is coupled to parameter order. If serialization order changes, the test can fail even when behavior is correct.
Suggested refactor
- await expectFetchRequest({ - method: "POST", - path: "/api/sessions/sess-001/repair?dry_run=true&force=true", - }); + const request = fetchRequest(); + const url = new URL(request.url); + expect(request.method).toBe("POST"); + expect(url.pathname).toBe("/api/sessions/sess-001/repair"); + expect(url.searchParams.get("dry_run")).toBe("true"); + expect(url.searchParams.get("force")).toBe("true");🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/src/systems/session/adapters/session-api.test.ts` around lines 336 - 339, The test currently asserts the full path string including query parameters in await expectFetchRequest({ method: "POST", path: "/api/sessions/sess-001/repair?dry_run=true&force=true" }), which is order-dependent; update the assertion in session-api.test.ts to be order-agnostic by checking the pathname equals "/api/sessions/sess-001/repair" and parsing the query string (e.g., with URL or URLSearchParams) to assert the keys dry_run and force exist with values "true" regardless of order, keeping the method check as "POST" and using the existing expectFetchRequest invocation to locate the request.internal/session/repair.go (1)
74-95: Document the new private repair-state types.
repairEvent,repairTurnState,repairToolCall, andrepairAnalysisall land without comments. That makes this state machine harder to scan and can fight the repo's Go comment policy.As per coding guidelines: Comments in Go must explain the 'why' and 'what', not just 'what'. Unexported identifiers must have a comment.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/session/repair.go` around lines 74 - 95, Add Go doc comments for the unexported types repairEvent, repairTurnState, repairToolCall, and repairAnalysis that explain their purpose and why they exist (not just restating fields): e.g., describe that repairEvent pairs stored store.SessionEvent with an incoming acp.AgentEvent for reconciliation, that repairTurnState tracks per-turn metadata (turnID, whether prompt data is present, terminal flag, toolCalls and toolResults) used by the repair state machine, that repairToolCall represents a recorded tool invocation and its identifier, and that repairAnalysis aggregates discovered RepairIssue(s), the current turn state and a blocking flag for analysis flow; ensure each comment sits immediately above the corresponding type declaration and is written in idiomatic Go style for unexported identifiers.internal/cli/client.go (1)
64-64: Add a compile-time assertion forunixSocketClient.
DaemonClientgained another method, but novar _ DaemonClient = (*unixSocketClient)(nil)guard exists. This assertion catches interface drift at compile time instead of later through call-site failures.♻️ Suggested change
type unixSocketClient struct { socketPath string httpClient *http.Client } + +var _ DaemonClient = (*unixSocketClient)(nil)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/cli/client.go` at line 64, The interface DaemonClient gained a new method (RepairSession) but there is no compile-time assertion that unixSocketClient implements DaemonClient; add the standard assertion line var _ DaemonClient = (*unixSocketClient)(nil) adjacent to the unixSocketClient type definition (or in the same file) so the compiler will catch any future interface drift between DaemonClient and unixSocketClient.web/src/systems/knowledge/lib/knowledge-formatters.ts (1)
1-1: Keep@agh/uitone types out of the knowledge lib layer.
knowledge-formatters.tsnow depends on the UI package just to describe tone strings. That leaks presentation concerns intoweb/src/systems/knowledge/liband makes the formatter harder to reuse outside the component layer. A local semantic union mapped toPillToneat render time would keep the boundary cleaner.As per coding guidelines,
web/src/systems/**/*.{ts,tsx}: Dependency flow within systems:adapters → lib → hooks → components(unidirectional, never reversed).Also applies to: 39-50
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/src/systems/knowledge/lib/knowledge-formatters.ts` at line 1, The file imports UI type PillTone which leaks presentation into the knowledge lib; replace the external dependency by defining a local semantic union type (e.g., type KnowledgeTone = 'positive' | 'neutral' | 'negative' | ...) inside knowledge-formatters.ts and use that throughout the lib; remove the import of PillTone and add a small mapping function (e.g., mapKnowledgeToneToPillTone) at the component/render boundary to convert KnowledgeTone to PillTone where UI lives (move any direct references to PillTone out of the lib and into components that render pills).web/src/components/design-system-showcase.tsx (1)
297-325: Avoid hardcoding token values in the showcase metadata.These new swatches duplicate literal color values that already live in
packages/ui/src/tokens.css, but the current tests only verify token names. If the token file changes later, the showcase docs can silently drift. Consider deriving the displayed value from the token source or adding a sync assertion againsttokens.css.As per coding guidelines,
web/src/**/*.{tsx,ts,css}: Design system tokens (colors, fonts, radius, spacing, motion) MUST be pulled fromDESIGN.mdin the repository root — never invent tokens or use ad-hoc hex values in components.internal/api/core/handlers_test.go (1)
214-220: Strengthen repair response assertions for future regressions.Consider also asserting
persistedand action payload details, since this test already exercises dry-run behavior.Proposed test assertion extension
var payload contract.SessionRepairResponse if err := json.Unmarshal(repairResp.Body.Bytes(), &payload); err != nil { t.Fatalf("json.Unmarshal(repair response) error = %v", err) } if payload.Repair.SessionID != "sess-a" { t.Fatalf("repair session id = %q, want sess-a", payload.Repair.SessionID) } + if payload.Repair.Persisted { + t.Fatalf("repair persisted = %v, want false for dry-run", payload.Repair.Persisted) + } + if len(payload.Repair.Actions) != 1 { + t.Fatalf("repair actions len = %d, want 1", len(payload.Repair.Actions)) + } + if payload.Repair.Actions[0].Code != session.RepairActionAppendTerminalError { + t.Fatalf("repair action code = %q, want %q", payload.Repair.Actions[0].Code, session.RepairActionAppendTerminalError) + } + if payload.Repair.Actions[0].Persisted { + t.Fatalf("repair action persisted = %v, want false for dry-run", payload.Repair.Actions[0].Persisted) + } })🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/api/core/handlers_test.go` around lines 214 - 220, The test currently unmarshals into contract.SessionRepairResponse (payload) and asserts only payload.Repair.SessionID; extend assertions to verify payload.Repair.Persisted (or payload.Persisted depending on struct) equals false for dry-run and validate the action payload details inside payload.Repair.Actions (e.g., expected action type, target ID, and parameters) to catch regressions; locate where contract.SessionRepairResponse is used in the test (variables payload, repairResp) and add checks for the persisted flag and specific fields of the first action (type/name and payload contents) to ensure the dry-run response structure remains correct.internal/api/core/handlers.go (1)
422-431: Consider rejecting conflictingdry_runalias values.If both
dry_runanddry-runare sent with different values, current behavior silently prefers the first name.Optional conflict-safe parsing approach
func repairBoolQuery(c *gin.Context, names ...string) (bool, error) { + var ( + value bool + seen bool + ) for _, name := range names { raw, ok := c.GetQuery(name) if !ok { continue } - return ParseOptionalBool(raw) + parsed, err := ParseOptionalBool(raw) + if err != nil { + return false, fmt.Errorf("invalid %s query: %w", name, err) + } + if seen && parsed != value { + return false, fmt.Errorf("conflicting boolean query values for %s", strings.Join(names, ",")) + } + value = parsed + seen = true } - return false, nil + return value, nil }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/api/core/handlers.go` around lines 422 - 431, The repairBoolQuery function currently returns the first found alias value silently; change it to detect conflicting alias values by collecting all present query values for the provided names (from the c.GetQuery results), if more than one distinct non-empty value is present return a descriptive error instead of silently choosing one, otherwise call ParseOptionalBool on the single value; update repairBoolQuery and its callers to handle and propagate the error accordingly (use the function name repairBoolQuery and ParseOptionalBool to locate and modify the logic).internal/daemon/boot.go (1)
521-566: Add startup latency guardrails around boot-time session repair.Operationally, this loop can grow startup time with many stopped sessions. Consider recording duration/count metrics and optionally capping repairs per boot cycle.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/daemon/boot.go` around lines 521 - 566, The boot-time session repair loop (uses state.sessions.ListAll, bootShouldRepairSession, state.sessions.RepairSession and repairIssueCount) can cause high startup latency when many sessions exist; add guardrails by measuring and emitting duration/count metrics for the overall repair loop and per-repair (use time.Now to record elapsed and your metrics API), and enforce a configurable cap (e.g., maxRepairsPerBoot constant or config field) that stops after N repairs per boot cycle while logging how many were skipped; implement a short-circuit when the cap is reached and include the recorded metrics and skipped-count in the final log.
🤖 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/cli/client_test.go`:
- Around line 809-812: The test assertion calling client.RepairSession (checking
repaired, err, repaired.SessionID and len(repaired.Actions)) should be moved
into a dedicated subtest: wrap the existing call and its t.Fatalf check inside
t.Run("Should repair session with dry run and force", func(t *testing.T) {
t.Parallel(); ... }) so it follows the repository test structure; keep the same
call to client.RepairSession and the same assertions but execute them inside the
subtest and mark it parallel with t.Parallel().
In `@internal/cli/session_test.go`:
- Around line 304-354: Wrap the existing test body of
TestSessionRepairPassesFlagsAndRendersJSON in a t.Run subtest (e.g.
t.Run("Should pass flags and render JSON", func(t *testing.T) { ... })) and move
the t.Parallel() call inside that subtest; remove the top-level t.Parallel() so
the test follows the required subtest pattern. Ensure the existing variables and
calls (seenQuery, seenID, newTestDeps, stubClient.repairSessionFn,
executeRootCommand, json.Unmarshal, and assertions) remain inside the subtest
closure so behavior and scoping are preserved.
In `@internal/session/repair.go`:
- Around line 166-173: The early return inside the block that checks
analysis.turn.terminal (which currently appends a RepairIssue with Code
RepairIssueTerminalEventAlreadyExists) prevents subsequent dangling tool_result
repair actions (e.g., RepairActionAppendInterruptedToolResult) from running;
remove the return so the function still records the TerminalEventAlreadyExists
issue but continues executing the rest of the repair logic that scans for and
appends interrupted tool results (look for logic that generates
RepairActionAppendInterruptedToolResult and ensure it runs even when
analysis.turn.terminal is true). Ensure tests cover a case where terminal event
exists but matching tool_result rows are missing so the
append-interrupted-tool-result path executes.
In `@packages/ui/src/tokens.css`:
- Around line 42-49: The CSS defines a protocol-kind token --color-kind-recipe
but the runtime enum uses "capability", so update the token name to match the
active kind: replace or add --color-kind-capability (instead of
--color-kind-recipe) in the protocol-kind colors block so the runtime lookup for
"capability" resolves to the intended color; ensure any usages reference
--color-kind-capability consistently.
In `@web/src/systems/session/adapters/session-api.ts`:
- Around line 150-155: The two raw Error throws in repairSession should be
replaced with the adapter's typed errors: throw a SessionNotFoundError (or
similarly named not-found adapter error) when response.status === 404, and throw
a SessionAdapterError (or the generic adapter error class used across systems)
for the default failure branch using defaultApiErrorMessage(response, error) as
the message or as properties; update imports to bring in the correct typed error
classes (e.g., SessionNotFoundError, SessionAdapterError) and ensure you pass
the id/response/error context to those constructors instead of new Error.
---
Nitpick comments:
In `@internal/api/core/handlers_test.go`:
- Around line 214-220: The test currently unmarshals into
contract.SessionRepairResponse (payload) and asserts only
payload.Repair.SessionID; extend assertions to verify payload.Repair.Persisted
(or payload.Persisted depending on struct) equals false for dry-run and validate
the action payload details inside payload.Repair.Actions (e.g., expected action
type, target ID, and parameters) to catch regressions; locate where
contract.SessionRepairResponse is used in the test (variables payload,
repairResp) and add checks for the persisted flag and specific fields of the
first action (type/name and payload contents) to ensure the dry-run response
structure remains correct.
In `@internal/api/core/handlers.go`:
- Around line 422-431: The repairBoolQuery function currently returns the first
found alias value silently; change it to detect conflicting alias values by
collecting all present query values for the provided names (from the c.GetQuery
results), if more than one distinct non-empty value is present return a
descriptive error instead of silently choosing one, otherwise call
ParseOptionalBool on the single value; update repairBoolQuery and its callers to
handle and propagate the error accordingly (use the function name
repairBoolQuery and ParseOptionalBool to locate and modify the logic).
In `@internal/cli/client.go`:
- Line 64: The interface DaemonClient gained a new method (RepairSession) but
there is no compile-time assertion that unixSocketClient implements
DaemonClient; add the standard assertion line var _ DaemonClient =
(*unixSocketClient)(nil) adjacent to the unixSocketClient type definition (or in
the same file) so the compiler will catch any future interface drift between
DaemonClient and unixSocketClient.
In `@internal/daemon/boot.go`:
- Around line 521-566: The boot-time session repair loop (uses
state.sessions.ListAll, bootShouldRepairSession, state.sessions.RepairSession
and repairIssueCount) can cause high startup latency when many sessions exist;
add guardrails by measuring and emitting duration/count metrics for the overall
repair loop and per-repair (use time.Now to record elapsed and your metrics
API), and enforce a configurable cap (e.g., maxRepairsPerBoot constant or config
field) that stops after N repairs per boot cycle while logging how many were
skipped; implement a short-circuit when the cap is reached and include the
recorded metrics and skipped-count in the final log.
In `@internal/session/repair.go`:
- Around line 74-95: Add Go doc comments for the unexported types repairEvent,
repairTurnState, repairToolCall, and repairAnalysis that explain their purpose
and why they exist (not just restating fields): e.g., describe that repairEvent
pairs stored store.SessionEvent with an incoming acp.AgentEvent for
reconciliation, that repairTurnState tracks per-turn metadata (turnID, whether
prompt data is present, terminal flag, toolCalls and toolResults) used by the
repair state machine, that repairToolCall represents a recorded tool invocation
and its identifier, and that repairAnalysis aggregates discovered
RepairIssue(s), the current turn state and a blocking flag for analysis flow;
ensure each comment sits immediately above the corresponding type declaration
and is written in idiomatic Go style for unexported identifiers.
In `@web/src/routes/_app/settings.tsx`:
- Line 140: The span that renders the section label (span with
className="truncate" containing {section.label}) should include a title
attribute so the full label appears on hover; update that span to set
title={section.label} (optionally also add aria-label={section.label} for
accessibility) so truncated labels are discoverable.
In `@web/src/systems/knowledge/lib/knowledge-formatters.ts`:
- Line 1: The file imports UI type PillTone which leaks presentation into the
knowledge lib; replace the external dependency by defining a local semantic
union type (e.g., type KnowledgeTone = 'positive' | 'neutral' | 'negative' |
...) inside knowledge-formatters.ts and use that throughout the lib; remove the
import of PillTone and add a small mapping function (e.g.,
mapKnowledgeToneToPillTone) at the component/render boundary to convert
KnowledgeTone to PillTone where UI lives (move any direct references to PillTone
out of the lib and into components that render pills).
In `@web/src/systems/session/adapters/session-api.test.ts`:
- Around line 336-339: The test currently asserts the full path string including
query parameters in await expectFetchRequest({ method: "POST", path:
"/api/sessions/sess-001/repair?dry_run=true&force=true" }), which is
order-dependent; update the assertion in session-api.test.ts to be
order-agnostic by checking the pathname equals "/api/sessions/sess-001/repair"
and parsing the query string (e.g., with URL or URLSearchParams) to assert the
keys dry_run and force exist with values "true" regardless of order, keeping the
method check as "POST" and using the existing expectFetchRequest invocation to
locate the request.
🪄 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: 0fbff368-48f6-406a-835e-25fa04d121dd
⛔ Files ignored due to path filters (36)
.codex/plans/2026-04-28-session-repair-v1.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/_meta.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_001.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_002.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_003.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_004.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_005.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_006.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_007.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_008.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_009.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_010.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_011.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_012.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_013.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_014.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_015.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_016.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_017.mdis excluded by!**/*.md.compozy/tasks/badges-design/reviews-001/issue_018.mdis excluded by!**/*.md.compozy/tasks/tools-registry/adrs/adr-001-extension-tool-execution-boundary.mdis excluded by!**/*.md.compozy/tasks/tools-registry/analysis/analysis_agh_current_state.mdis excluded by!**/*.md.compozy/tasks/tools-registry/analysis/analysis_claude-code.mdis excluded by!**/*.md.compozy/tasks/tools-registry/analysis/analysis_claude_code_ideas.mdis excluded by!**/*.md.compozy/tasks/tools-registry/analysis/analysis_goclaw.mdis excluded by!**/*.md.compozy/tasks/tools-registry/analysis/analysis_hermes.mdis excluded by!**/*.md.compozy/tasks/tools-registry/analysis/analysis_openclaw.mdis excluded by!**/*.md.compozy/tasks/tools-registry/analysis/synthesis.mdis excluded by!**/*.mdopenapi/agh.jsonis excluded by!**/*.jsonpackages/site/content/runtime/cli-reference/session/index.mdxis excluded by!**/*.mdxpackages/site/content/runtime/cli-reference/session/meta.jsonis excluded by!**/*.jsonpackages/site/content/runtime/cli-reference/session/repair.mdxis excluded by!**/*.mdxpackages/site/content/runtime/core/operations/troubleshooting.mdxis excluded by!**/*.mdxpackages/site/content/runtime/core/sessions/lifecycle.mdxis excluded by!**/*.mdxpackages/site/content/runtime/core/sessions/resume.mdxis excluded by!**/*.mdxweb/src/generated/agh-openapi.d.tsis excluded by!**/generated/**
📒 Files selected for processing (73)
internal/api/contract/contract.gointernal/api/contract/responses.gointernal/api/core/conversions.gointernal/api/core/handlers.gointernal/api/core/handlers_internal_test.gointernal/api/core/handlers_test.gointernal/api/core/interfaces.gointernal/api/core/test_helpers_test.gointernal/api/httpapi/handlers_test.gointernal/api/httpapi/routes.gointernal/api/spec/spec.gointernal/api/testutil/apitest.gointernal/api/udsapi/handlers_test.gointernal/api/udsapi/routes.gointernal/cli/client.gointernal/cli/client_test.gointernal/cli/helpers_test.gointernal/cli/session.gointernal/cli/session_test.gointernal/daemon/boot.gointernal/daemon/daemon_test.gointernal/session/repair.gointernal/session/repair_test.gopackages/ui/src/components/pill-group.test.tsxpackages/ui/src/components/pill-group.tsxpackages/ui/src/components/pill.test.tsxpackages/ui/src/components/stories/pill-group.stories.tsxpackages/ui/src/components/stories/pill.stories.tsxpackages/ui/src/tokens.cssweb/src/components/app-sidebar.tsxweb/src/components/design-system-showcase.test.tsxweb/src/components/design-system-showcase.tsxweb/src/components/sidebar-nav-classes.tsweb/src/lib/kind-colors.tsweb/src/lib/pill-variant.tsweb/src/routes/_app/settings.tsxweb/src/storybook/packages-ui-storybook-config.test.tsweb/src/systems/automation/components/automation-detail-panel.tsxweb/src/systems/bridges/components/bridge-detail-panel.tsxweb/src/systems/bridges/components/bridge-list-panel.tsxweb/src/systems/bridges/components/bridge-provider-card.tsxweb/src/systems/daemon/hooks/use-daemon-health.tsweb/src/systems/knowledge/components/knowledge-list-panel.tsxweb/src/systems/knowledge/lib/knowledge-formatters.tsweb/src/systems/network/index.tsweb/src/systems/session/adapters/session-api.test.tsweb/src/systems/session/adapters/session-api.tsweb/src/systems/session/hooks/use-session-actions.test.tsxweb/src/systems/session/hooks/use-session-actions.tsweb/src/systems/session/index.tsweb/src/systems/session/mocks/fixtures.tsweb/src/systems/session/mocks/handlers.tsweb/src/systems/session/types.tsweb/src/systems/settings/components/provider-card.tsxweb/src/systems/settings/lib/sections.tsweb/src/systems/settings/types.tsweb/src/systems/tasks/components/task-card.tsxweb/src/systems/tasks/components/task-editor-surface.tsxweb/src/systems/tasks/components/task-run-detail-header.tsxweb/src/systems/tasks/components/task-run-detail-panels.tsxweb/src/systems/tasks/components/tasks-dashboard-active-runs.tsxweb/src/systems/tasks/components/tasks-dashboard-queue-health.tsxweb/src/systems/tasks/components/tasks-dashboard-status-breakdown.tsxweb/src/systems/tasks/components/tasks-detail-children-panel.tsxweb/src/systems/tasks/components/tasks-detail-dependencies-panel.tsxweb/src/systems/tasks/components/tasks-detail-header.tsxweb/src/systems/tasks/components/tasks-detail-overview-panel.tsxweb/src/systems/tasks/components/tasks-detail-preview-panel.tsxweb/src/systems/tasks/components/tasks-detail-runs-panel.tsxweb/src/systems/tasks/components/tasks-empty-state.tsxweb/src/systems/tasks/components/tasks-inbox-item.tsxweb/src/systems/tasks/components/tasks-list-row.tsxweb/src/systems/tasks/components/tasks-multi-agent-panel.tsx
✅ Files skipped from review due to trivial changes (11)
- web/src/systems/network/index.ts
- internal/api/core/handlers_internal_test.go
- internal/api/contract/responses.go
- internal/api/contract/contract.go
- web/src/systems/session/types.ts
- web/src/components/sidebar-nav-classes.ts
- web/src/systems/session/mocks/fixtures.ts
- web/src/lib/kind-colors.ts
- web/src/systems/settings/lib/sections.ts
- web/src/components/app-sidebar.tsx
- packages/ui/src/components/stories/pill.stories.tsx
🚧 Files skipped from review as they are similar to previous changes (20)
- web/src/systems/daemon/hooks/use-daemon-health.ts
- web/src/systems/tasks/components/tasks-dashboard-queue-health.tsx
- web/src/systems/tasks/components/tasks-dashboard-status-breakdown.tsx
- web/src/storybook/packages-ui-storybook-config.test.ts
- web/src/systems/tasks/components/tasks-empty-state.tsx
- web/src/systems/tasks/components/tasks-inbox-item.tsx
- web/src/systems/tasks/components/tasks-dashboard-active-runs.tsx
- web/src/systems/tasks/components/tasks-list-row.tsx
- web/src/systems/tasks/components/tasks-detail-overview-panel.tsx
- web/src/systems/knowledge/components/knowledge-list-panel.tsx
- web/src/systems/tasks/components/tasks-multi-agent-panel.tsx
- web/src/systems/tasks/components/tasks-detail-runs-panel.tsx
- web/src/systems/tasks/components/task-card.tsx
- packages/ui/src/components/pill-group.tsx
- packages/ui/src/components/stories/pill-group.stories.tsx
- web/src/systems/settings/components/provider-card.tsx
- web/src/systems/tasks/components/tasks-detail-children-panel.tsx
- web/src/systems/bridges/components/bridge-detail-panel.tsx
- packages/ui/src/components/pill.test.tsx
- web/src/systems/tasks/components/task-editor-surface.tsx
## Release v0.0.1 This PR prepares the release of version v0.0.1. ### Changelog ## 0.0.1 - 2026-05-26 ### Other Changes - Lessons learned ### ♻️ Refactoring - Project structure (#7) - Kb improvements (#12) - Rename spaces to channels (#17) - Add extensions gaps (#21) - Improve tool calls ui (#22) - Remove web app header - Module improvements (#29) - Memory improvements (#35) - Storybook for web and ui (#38) - Enable AGH network by default for new installs (#57) - Hermes adjustments (#69) - Badges design (#84) - Storybook scenario and logos gallery - Migrate typescript tests (#114) - Internal go packages (#120) - Ui patterns (#127) - Improve e2e tests (#130) - Ui redesign - Workspace isolation across runtime surfaces (#145) - Prod ready applies (#162) - Tool card ui (#164) - Alpha on logo - Prod ready features (#167) - Thread sheet (#202) ### 🎉 Features - Implement config foundation packages - Implement sqlite store package - Add ACP client package - Add session lifecycle manager - Implement observe package - Add daemon composition root - Add uds api server - Implement cli package - Add http api server - Add system design - Add foundation types, schemas, and layout shell for web client - Add daemon health polling and agent sidebar systems for web client - Add session system CRUD, streaming core, and session store for web client - Add chat view, messages, and composer tests for web client - Add tool cards and renderers for web client - Add file-backed memory store core - Scaffold memory session seams - Add memory dream consolidation service - Wire memory assembler into daemon - Add memory api and cli - New skills system (#1) - Add workspace entity (#5) - Add new skill capabilities (#8) - Web ui v2 (#9) - Improve hooks system (#10) - Session resilience (#11) - Add extensability (#13) - Add automation (#16) - Add channels (#14) - Add network implementation (#15) - Add network, bridges and automations web pages (#18) - Ext registry (#20) - Add core tasks (#19) - Bridge adapters (#23) - Add site (#26) - Add ext refac and sandbox (#25) - Settings ui (#37) - Tasks ui (#36) - Harness improvements (#44) - Agent capabilities (#49) - Redesign ui (#48) - Unify capability (#53) - Redesign network workspace (#59) - Add task deletion and split session delete from stop (#58) - Session provider selection (#60) - Production grade adjustments (#66) - Autonomous system (#75) - Add agent session route (#80) - Tools registry (#85) - Agents soul (#88) - Add network threads (#105) - Orchestration improvements (#106) - Memory v2 (#108) - Agent categories (#113) - Providers model (#118) - Add canonical AGH bundled skill (#143) - Onboarding and improvements (#198) - Onboarding and improvements (#201) ### 🐛 Bug Fixes - Review round - Review rounds - Resolve memory extensibility review batch - Embed web into daemon - Defaults agents - Acp integration (#4) - Lint errors - Prd folder - Remove orphan web actions and dead surfaces (#55) - Qa testing and fixes (#73) - New review rounds (#82) - Security audit (#90) - Release qa round (#95) - Add missing tools (#141) - New qa round (#147) - Advanced qa round (#149) - Homebrew tap - Final review round (#151) - Daemon healthy - Reasoning models (#158) - Lint errors (#160) - Review round (#168) - Release adjustments (#171) - Stabilize release ci fixtures - Stabilize release integration gate - Stabilize release verify gates - Stabilize release integration flows - Stabilize release verify gates - Stabilize main verify shutdown - Ignore stale acpmock cancel - Marketplace search focus and filtering (#193) - Website video - Workspace command select ### 📚 Documentation - Update agents.md - Update prd - Update skills - Update compozy tasks - Update compozy - Update compozy - Add new skills - Archive prd - Update prds - Update rfc - Update prds - Update prds - Add automation prd - Channels prd - Update prd - Update prd - New prds - Archive prds - Bridges adapters prd - Sandbox prd - Update - Archive prd - Update - Add new prd - New design - Update prd - Archive prds - Update prds - Tasks-ui prd tasks - Update prd - Update design docs - Agent capabilities prd - Improve site docs - Remove old design references - Udpate - Autonomous prd - Update skills - Blog design - Agent sould prd - Final qa plan - Update - Remove codex ledgers from gitignore - Remove not needed files - Udpate ledger - Update cy-codex-loop skill - Orchestration improves prd - Update prds - Orch improvs prd - Memv2 prd - Providers model prd - Update refacs prd - New design proposal - Update rules - Update skills - New blog posts (#173) - Format docs - Remove old design files - Remove old - Skeeper update ### 📦 Build System - Initial structure - Commitlint - Frontend base structure - Update vscode settings - Add subagents - Coderabbit - Prd and tooling - Bun lock - Lint tooling - Copy.md and tooling adjusts - Add repoclone rc - Upgrade skeeper to v0.2.0 - Update go.mod - Adopt task artifacts into skeeper - Sync codex plans with skeeper - Skeeper lock - Skeeper lock - New skills - Skeeper lock - Skeeper lock - Skeeper lock - Update deps and go - Regenerate daytona sidecar assets for go 1.26.3 - Fix cliff - Ignore docs on fmt - Build web assets before goreleaser - Extend release dry-run timeout ### 🔧 CI/CD - Lint errors - Fint release pr - Fix goreleaser ### 🧪 Testing - Add e2e tests (#27) - Qa rounds (#78) - Improve test suite (#138) - Harden daemon-served restart reloads - Harden daemon-served readiness waits - Stabilize dashboard focus assertion - Stabilize release integration gates - Stabilize release e2e markers - Stabilize release e2e flows Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
## Release v0.0.1 This PR prepares the release of version v0.0.1. ### Changelog ## 0.0.1 - 2026-05-26 ### Other Changes - Lessons learned ### ♻️ Refactoring - Project structure (#7) - Kb improvements (#12) - Rename spaces to channels (#17) - Add extensions gaps (#21) - Improve tool calls ui (#22) - Remove web app header - Module improvements (#29) - Memory improvements (#35) - Storybook for web and ui (#38) - Enable AGH network by default for new installs (#57) - Hermes adjustments (#69) - Badges design (#84) - Storybook scenario and logos gallery - Migrate typescript tests (#114) - Internal go packages (#120) - Ui patterns (#127) - Improve e2e tests (#130) - Ui redesign - Workspace isolation across runtime surfaces (#145) - Prod ready applies (#162) - Tool card ui (#164) - Alpha on logo - Prod ready features (#167) - Thread sheet (#202) ### 🎉 Features - Implement config foundation packages - Implement sqlite store package - Add ACP client package - Add session lifecycle manager - Implement observe package - Add daemon composition root - Add uds api server - Implement cli package - Add http api server - Add system design - Add foundation types, schemas, and layout shell for web client - Add daemon health polling and agent sidebar systems for web client - Add session system CRUD, streaming core, and session store for web client - Add chat view, messages, and composer tests for web client - Add tool cards and renderers for web client - Add file-backed memory store core - Scaffold memory session seams - Add memory dream consolidation service - Wire memory assembler into daemon - Add memory api and cli - New skills system (#1) - Add workspace entity (#5) - Add new skill capabilities (#8) - Web ui v2 (#9) - Improve hooks system (#10) - Session resilience (#11) - Add extensability (#13) - Add automation (#16) - Add channels (#14) - Add network implementation (#15) - Add network, bridges and automations web pages (#18) - Ext registry (#20) - Add core tasks (#19) - Bridge adapters (#23) - Add site (#26) - Add ext refac and sandbox (#25) - Settings ui (#37) - Tasks ui (#36) - Harness improvements (#44) - Agent capabilities (#49) - Redesign ui (#48) - Unify capability (#53) - Redesign network workspace (#59) - Add task deletion and split session delete from stop (#58) - Session provider selection (#60) - Production grade adjustments (#66) - Autonomous system (#75) - Add agent session route (#80) - Tools registry (#85) - Agents soul (#88) - Add network threads (#105) - Orchestration improvements (#106) - Memory v2 (#108) - Agent categories (#113) - Providers model (#118) - Add canonical AGH bundled skill (#143) - Onboarding and improvements (#198) - Onboarding and improvements (#201) ### 🐛 Bug Fixes - Review round - Review rounds - Resolve memory extensibility review batch - Embed web into daemon - Defaults agents - Acp integration (#4) - Lint errors - Prd folder - Remove orphan web actions and dead surfaces (#55) - Qa testing and fixes (#73) - New review rounds (#82) - Security audit (#90) - Release qa round (#95) - Add missing tools (#141) - New qa round (#147) - Advanced qa round (#149) - Homebrew tap - Final review round (#151) - Daemon healthy - Reasoning models (#158) - Lint errors (#160) - Review round (#168) - Release adjustments (#171) - Stabilize release ci fixtures - Stabilize release integration gate - Stabilize release verify gates - Stabilize release integration flows - Stabilize release verify gates - Stabilize main verify shutdown - Ignore stale acpmock cancel - Marketplace search focus and filtering (#193) - Website video - Workspace command select ### 📚 Documentation - Update agents.md - Update prd - Update skills - Update compozy tasks - Update compozy - Update compozy - Add new skills - Archive prd - Update prds - Update rfc - Update prds - Update prds - Add automation prd - Channels prd - Update prd - Update prd - New prds - Archive prds - Bridges adapters prd - Sandbox prd - Update - Archive prd - Update - Add new prd - New design - Update prd - Archive prds - Update prds - Tasks-ui prd tasks - Update prd - Update design docs - Agent capabilities prd - Improve site docs - Remove old design references - Udpate - Autonomous prd - Update skills - Blog design - Agent sould prd - Final qa plan - Update - Remove codex ledgers from gitignore - Remove not needed files - Udpate ledger - Update cy-codex-loop skill - Orchestration improves prd - Update prds - Orch improvs prd - Memv2 prd - Providers model prd - Update refacs prd - New design proposal - Update rules - Update skills - New blog posts (#173) - Format docs - Remove old design files - Remove old - Skeeper update ### 📦 Build System - Initial structure - Commitlint - Frontend base structure - Update vscode settings - Add subagents - Coderabbit - Prd and tooling - Bun lock - Lint tooling - Copy.md and tooling adjusts - Add repoclone rc - Upgrade skeeper to v0.2.0 - Update go.mod - Adopt task artifacts into skeeper - Sync codex plans with skeeper - Skeeper lock - Skeeper lock - New skills - Skeeper lock - Skeeper lock - Skeeper lock - Update deps and go - Regenerate daytona sidecar assets for go 1.26.3 - Fix cliff - Ignore docs on fmt - Build web assets before goreleaser - Extend release dry-run timeout ### 🔧 CI/CD - Lint errors - Fint release pr - Fix goreleaser - Fix release ### 🧪 Testing - Add e2e tests (#27) - Qa rounds (#78) - Improve test suite (#138) - Harden daemon-served restart reloads - Harden daemon-served readiness waits - Stabilize dashboard focus assertion - Stabilize release integration gates - Stabilize release e2e markers - Stabilize release e2e flows Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
## Release v0.0.2 This PR prepares the release of version v0.0.2. ### Changelog ## 0.0.2 - 2026-05-26 ### Other Changes - Lessons learned ### ♻️ Refactoring - Project structure (#7) - Kb improvements (#12) - Rename spaces to channels (#17) - Add extensions gaps (#21) - Improve tool calls ui (#22) - Remove web app header - Module improvements (#29) - Memory improvements (#35) - Storybook for web and ui (#38) - Enable AGH network by default for new installs (#57) - Hermes adjustments (#69) - Badges design (#84) - Storybook scenario and logos gallery - Migrate typescript tests (#114) - Internal go packages (#120) - Ui patterns (#127) - Improve e2e tests (#130) - Ui redesign - Workspace isolation across runtime surfaces (#145) - Prod ready applies (#162) - Tool card ui (#164) - Alpha on logo - Prod ready features (#167) - Thread sheet (#202) ### 🎉 Features - Implement config foundation packages - Implement sqlite store package - Add ACP client package - Add session lifecycle manager - Implement observe package - Add daemon composition root - Add uds api server - Implement cli package - Add http api server - Add system design - Add foundation types, schemas, and layout shell for web client - Add daemon health polling and agent sidebar systems for web client - Add session system CRUD, streaming core, and session store for web client - Add chat view, messages, and composer tests for web client - Add tool cards and renderers for web client - Add file-backed memory store core - Scaffold memory session seams - Add memory dream consolidation service - Wire memory assembler into daemon - Add memory api and cli - New skills system (#1) - Add workspace entity (#5) - Add new skill capabilities (#8) - Web ui v2 (#9) - Improve hooks system (#10) - Session resilience (#11) - Add extensability (#13) - Add automation (#16) - Add channels (#14) - Add network implementation (#15) - Add network, bridges and automations web pages (#18) - Ext registry (#20) - Add core tasks (#19) - Bridge adapters (#23) - Add site (#26) - Add ext refac and sandbox (#25) - Settings ui (#37) - Tasks ui (#36) - Harness improvements (#44) - Agent capabilities (#49) - Redesign ui (#48) - Unify capability (#53) - Redesign network workspace (#59) - Add task deletion and split session delete from stop (#58) - Session provider selection (#60) - Production grade adjustments (#66) - Autonomous system (#75) - Add agent session route (#80) - Tools registry (#85) - Agents soul (#88) - Add network threads (#105) - Orchestration improvements (#106) - Memory v2 (#108) - Agent categories (#113) - Providers model (#118) - Add canonical AGH bundled skill (#143) - Onboarding and improvements (#198) - Onboarding and improvements (#201) ### 🐛 Bug Fixes - Review round - Review rounds - Resolve memory extensibility review batch - Embed web into daemon - Defaults agents - Acp integration (#4) - Lint errors - Prd folder - Remove orphan web actions and dead surfaces (#55) - Qa testing and fixes (#73) - New review rounds (#82) - Security audit (#90) - Release qa round (#95) - Add missing tools (#141) - New qa round (#147) - Advanced qa round (#149) - Homebrew tap - Final review round (#151) - Daemon healthy - Reasoning models (#158) - Lint errors (#160) - Review round (#168) - Release adjustments (#171) - Stabilize release ci fixtures - Stabilize release integration gate - Stabilize release verify gates - Stabilize release integration flows - Stabilize release verify gates - Stabilize main verify shutdown - Ignore stale acpmock cancel - Marketplace search focus and filtering (#193) - Website video - Workspace command select ### 📚 Documentation - Update agents.md - Update prd - Update skills - Update compozy tasks - Update compozy - Update compozy - Add new skills - Archive prd - Update prds - Update rfc - Update prds - Update prds - Add automation prd - Channels prd - Update prd - Update prd - New prds - Archive prds - Bridges adapters prd - Sandbox prd - Update - Archive prd - Update - Add new prd - New design - Update prd - Archive prds - Update prds - Tasks-ui prd tasks - Update prd - Update design docs - Agent capabilities prd - Improve site docs - Remove old design references - Udpate - Autonomous prd - Update skills - Blog design - Agent sould prd - Final qa plan - Update - Remove codex ledgers from gitignore - Remove not needed files - Udpate ledger - Update cy-codex-loop skill - Orchestration improves prd - Update prds - Orch improvs prd - Memv2 prd - Providers model prd - Update refacs prd - New design proposal - Update rules - Update skills - New blog posts (#173) - Format docs - Remove old design files - Remove old - Skeeper update ### 📦 Build System - Initial structure - Commitlint - Frontend base structure - Update vscode settings - Add subagents - Coderabbit - Prd and tooling - Bun lock - Lint tooling - Copy.md and tooling adjusts - Add repoclone rc - Upgrade skeeper to v0.2.0 - Update go.mod - Adopt task artifacts into skeeper - Sync codex plans with skeeper - Skeeper lock - Skeeper lock - New skills - Skeeper lock - Skeeper lock - Skeeper lock - Update deps and go - Regenerate daytona sidecar assets for go 1.26.3 - Fix cliff - Ignore docs on fmt - Build web assets before goreleaser - Extend release dry-run timeout ### 🔧 CI/CD - Lint errors - Fint release pr - Fix goreleaser - Fix release - Fix release process ### 🧪 Testing - Add e2e tests (#27) - Qa rounds (#78) - Improve test suite (#138) - Harden daemon-served restart reloads - Harden daemon-served readiness waits - Stabilize dashboard focus assertion - Stabilize release integration gates - Stabilize release e2e markers - Stabilize release e2e flows - Improve suite speed Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
## Release v0.0.2 This PR prepares the release of version v0.0.2. ### Changelog ## 0.0.2 - 2026-05-26 ### Other Changes - Lessons learned ### ♻️ Refactoring - Project structure (#7) - Kb improvements (#12) - Rename spaces to channels (#17) - Add extensions gaps (#21) - Improve tool calls ui (#22) - Remove web app header - Module improvements (#29) - Memory improvements (#35) - Storybook for web and ui (#38) - Enable AGH network by default for new installs (#57) - Hermes adjustments (#69) - Badges design (#84) - Storybook scenario and logos gallery - Migrate typescript tests (#114) - Internal go packages (#120) - Ui patterns (#127) - Improve e2e tests (#130) - Ui redesign - Workspace isolation across runtime surfaces (#145) - Prod ready applies (#162) - Tool card ui (#164) - Alpha on logo - Prod ready features (#167) - Thread sheet (#202) ### 🎉 Features - Implement config foundation packages - Implement sqlite store package - Add ACP client package - Add session lifecycle manager - Implement observe package - Add daemon composition root - Add uds api server - Implement cli package - Add http api server - Add system design - Add foundation types, schemas, and layout shell for web client - Add daemon health polling and agent sidebar systems for web client - Add session system CRUD, streaming core, and session store for web client - Add chat view, messages, and composer tests for web client - Add tool cards and renderers for web client - Add file-backed memory store core - Scaffold memory session seams - Add memory dream consolidation service - Wire memory assembler into daemon - Add memory api and cli - New skills system (#1) - Add workspace entity (#5) - Add new skill capabilities (#8) - Web ui v2 (#9) - Improve hooks system (#10) - Session resilience (#11) - Add extensability (#13) - Add automation (#16) - Add channels (#14) - Add network implementation (#15) - Add network, bridges and automations web pages (#18) - Ext registry (#20) - Add core tasks (#19) - Bridge adapters (#23) - Add site (#26) - Add ext refac and sandbox (#25) - Settings ui (#37) - Tasks ui (#36) - Harness improvements (#44) - Agent capabilities (#49) - Redesign ui (#48) - Unify capability (#53) - Redesign network workspace (#59) - Add task deletion and split session delete from stop (#58) - Session provider selection (#60) - Production grade adjustments (#66) - Autonomous system (#75) - Add agent session route (#80) - Tools registry (#85) - Agents soul (#88) - Add network threads (#105) - Orchestration improvements (#106) - Memory v2 (#108) - Agent categories (#113) - Providers model (#118) - Add canonical AGH bundled skill (#143) - Onboarding and improvements (#198) - Onboarding and improvements (#201) ### 🐛 Bug Fixes - Review round - Review rounds - Resolve memory extensibility review batch - Embed web into daemon - Defaults agents - Acp integration (#4) - Lint errors - Prd folder - Remove orphan web actions and dead surfaces (#55) - Qa testing and fixes (#73) - New review rounds (#82) - Security audit (#90) - Release qa round (#95) - Add missing tools (#141) - New qa round (#147) - Advanced qa round (#149) - Homebrew tap - Final review round (#151) - Daemon healthy - Reasoning models (#158) - Lint errors (#160) - Review round (#168) - Release adjustments (#171) - Stabilize release ci fixtures - Stabilize release integration gate - Stabilize release verify gates - Stabilize release integration flows - Stabilize release verify gates - Stabilize main verify shutdown - Ignore stale acpmock cancel - Marketplace search focus and filtering (#193) - Website video - Workspace command select ### 📚 Documentation - Update agents.md - Update prd - Update skills - Update compozy tasks - Update compozy - Update compozy - Add new skills - Archive prd - Update prds - Update rfc - Update prds - Update prds - Add automation prd - Channels prd - Update prd - Update prd - New prds - Archive prds - Bridges adapters prd - Sandbox prd - Update - Archive prd - Update - Add new prd - New design - Update prd - Archive prds - Update prds - Tasks-ui prd tasks - Update prd - Update design docs - Agent capabilities prd - Improve site docs - Remove old design references - Udpate - Autonomous prd - Update skills - Blog design - Agent sould prd - Final qa plan - Update - Remove codex ledgers from gitignore - Remove not needed files - Udpate ledger - Update cy-codex-loop skill - Orchestration improves prd - Update prds - Orch improvs prd - Memv2 prd - Providers model prd - Update refacs prd - New design proposal - Update rules - Update skills - New blog posts (#173) - Format docs - Remove old design files - Remove old - Skeeper update ### 📦 Build System - Initial structure - Commitlint - Frontend base structure - Update vscode settings - Add subagents - Coderabbit - Prd and tooling - Bun lock - Lint tooling - Copy.md and tooling adjusts - Add repoclone rc - Upgrade skeeper to v0.2.0 - Update go.mod - Adopt task artifacts into skeeper - Sync codex plans with skeeper - Skeeper lock - Skeeper lock - New skills - Skeeper lock - Skeeper lock - Skeeper lock - Update deps and go - Regenerate daytona sidecar assets for go 1.26.3 - Fix cliff - Ignore docs on fmt - Build web assets before goreleaser - Extend release dry-run timeout ### 🔧 CI/CD - Lint errors - Fint release pr - Fix goreleaser - Fix release - Fix release process - Fix release sync - Decouple release dry-run npm auth - Persist web assets git auth ### 🧪 Testing - Add e2e tests (#27) - Qa rounds (#78) - Improve test suite (#138) - Harden daemon-served restart reloads - Harden daemon-served readiness waits - Stabilize dashboard focus assertion - Stabilize release integration gates - Stabilize release e2e markers - Stabilize release e2e flows - Improve suite speed <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated web assets dependency to a newer version for improved stability and performance. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/compozy/agh/pull/211?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
## Release v0.0.2 This PR prepares the release of version v0.0.2. ### Changelog ## 0.0.2 - 2026-05-27 ### Other Changes - Lessons learned ### ♻️ Refactoring - Project structure (#7) - Kb improvements (#12) - Rename spaces to channels (#17) - Add extensions gaps (#21) - Improve tool calls ui (#22) - Remove web app header - Module improvements (#29) - Memory improvements (#35) - Storybook for web and ui (#38) - Enable AGH network by default for new installs (#57) - Hermes adjustments (#69) - Badges design (#84) - Storybook scenario and logos gallery - Migrate typescript tests (#114) - Internal go packages (#120) - Ui patterns (#127) - Improve e2e tests (#130) - Ui redesign - Workspace isolation across runtime surfaces (#145) - Prod ready applies (#162) - Tool card ui (#164) - Alpha on logo - Prod ready features (#167) - Thread sheet (#202) ### 🎉 Features - Implement config foundation packages - Implement sqlite store package - Add ACP client package - Add session lifecycle manager - Implement observe package - Add daemon composition root - Add uds api server - Implement cli package - Add http api server - Add system design - Add foundation types, schemas, and layout shell for web client - Add daemon health polling and agent sidebar systems for web client - Add session system CRUD, streaming core, and session store for web client - Add chat view, messages, and composer tests for web client - Add tool cards and renderers for web client - Add file-backed memory store core - Scaffold memory session seams - Add memory dream consolidation service - Wire memory assembler into daemon - Add memory api and cli - New skills system (#1) - Add workspace entity (#5) - Add new skill capabilities (#8) - Web ui v2 (#9) - Improve hooks system (#10) - Session resilience (#11) - Add extensability (#13) - Add automation (#16) - Add channels (#14) - Add network implementation (#15) - Add network, bridges and automations web pages (#18) - Ext registry (#20) - Add core tasks (#19) - Bridge adapters (#23) - Add site (#26) - Add ext refac and sandbox (#25) - Settings ui (#37) - Tasks ui (#36) - Harness improvements (#44) - Agent capabilities (#49) - Redesign ui (#48) - Unify capability (#53) - Redesign network workspace (#59) - Add task deletion and split session delete from stop (#58) - Session provider selection (#60) - Production grade adjustments (#66) - Autonomous system (#75) - Add agent session route (#80) - Tools registry (#85) - Agents soul (#88) - Add network threads (#105) - Orchestration improvements (#106) - Memory v2 (#108) - Agent categories (#113) - Providers model (#118) - Add canonical AGH bundled skill (#143) - Onboarding and improvements (#198) - Onboarding and improvements (#201) ### 🐛 Bug Fixes - Review round - Review rounds - Resolve memory extensibility review batch - Embed web into daemon - Defaults agents - Acp integration (#4) - Lint errors - Prd folder - Remove orphan web actions and dead surfaces (#55) - Qa testing and fixes (#73) - New review rounds (#82) - Security audit (#90) - Release qa round (#95) - Add missing tools (#141) - New qa round (#147) - Advanced qa round (#149) - Homebrew tap - Final review round (#151) - Daemon healthy - Reasoning models (#158) - Lint errors (#160) - Review round (#168) - Release adjustments (#171) - Stabilize release ci fixtures - Stabilize release integration gate - Stabilize release verify gates - Stabilize release integration flows - Stabilize release verify gates - Stabilize main verify shutdown - Ignore stale acpmock cancel - Marketplace search focus and filtering (#193) - Website video - Workspace command select ### 📚 Documentation - Update agents.md - Update prd - Update skills - Update compozy tasks - Update compozy - Update compozy - Add new skills - Archive prd - Update prds - Update rfc - Update prds - Update prds - Add automation prd - Channels prd - Update prd - Update prd - New prds - Archive prds - Bridges adapters prd - Sandbox prd - Update - Archive prd - Update - Add new prd - New design - Update prd - Archive prds - Update prds - Tasks-ui prd tasks - Update prd - Update design docs - Agent capabilities prd - Improve site docs - Remove old design references - Udpate - Autonomous prd - Update skills - Blog design - Agent sould prd - Final qa plan - Update - Remove codex ledgers from gitignore - Remove not needed files - Udpate ledger - Update cy-codex-loop skill - Orchestration improves prd - Update prds - Orch improvs prd - Memv2 prd - Providers model prd - Update refacs prd - New design proposal - Update rules - Update skills - New blog posts (#173) - Format docs - Remove old design files - Remove old - Skeeper update ### 📦 Build System - Initial structure - Commitlint - Frontend base structure - Update vscode settings - Add subagents - Coderabbit - Prd and tooling - Bun lock - Lint tooling - Copy.md and tooling adjusts - Add repoclone rc - Upgrade skeeper to v0.2.0 - Update go.mod - Adopt task artifacts into skeeper - Sync codex plans with skeeper - Skeeper lock - Skeeper lock - New skills - Skeeper lock - Skeeper lock - Skeeper lock - Update deps and go - Regenerate daytona sidecar assets for go 1.26.3 - Fix cliff - Ignore docs on fmt - Build web assets before goreleaser - Extend release dry-run timeout - Fix release dry-run token contract ### 🔧 CI/CD - Lint errors - Fint release pr - Fix goreleaser - Fix release - Fix release process - Fix release sync - Decouple release dry-run npm auth - Persist web assets git auth - Require npm auth before release merge ### 🧪 Testing - Add e2e tests (#27) - Qa rounds (#78) - Improve test suite (#138) - Harden daemon-served restart reloads - Harden daemon-served readiness waits - Stabilize dashboard focus assertion - Stabilize release integration gates - Stabilize release e2e markers - Stabilize release e2e flows - Improve suite speed <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated dependencies to latest versions. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/compozy/agh/pull/214?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Summary by CodeRabbit
New Features
Updates
Removals