Skip to content

feat: add site#26

Merged
pedronauck merged 17 commits into
mainfrom
site
Apr 16, 2026
Merged

feat: add site#26
pedronauck merged 17 commits into
mainfrom
site

Conversation

@pedronauck
Copy link
Copy Markdown
Member

@pedronauck pedronauck commented Apr 16, 2026

Summary by CodeRabbit

  • New Features

    • Redesigned documentation website with landing pages, runtime & protocol docs, interactive diagrams, visual components, and a site-wide layout/theme.
    • Site search API and a CLI command to generate docs for inclusion on the site.
  • Documentation

    • Auto-generated MDX CLI reference with improved frontmatter, navigation, and examples visible in CLI help.
  • Chores

    • Added Makefile targets for site dev/build and docs generation; updated .gitignore for common local/tooling artifacts.

pedronauck and others added 11 commits April 15, 2026 20:25
Extract shared design system into @agh/ui workspace package:
- tokens.css with all DESIGN.md CSS custom properties
- tailwind-preset.ts with spacing, radius, and font scales
- 12 server-safe base components (button, badge, card, input, label,
  separator, skeleton, spinner, alert, progress, table, kbd)
- cn() utility, barrel exports, proper "use client" directives

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace inline design tokens in web/src/styles.css with import from
@agh/ui/tokens.css. Update all imports of 12 base components (button,
badge, card, input, label, separator, skeleton, spinner, alert, progress,
table, kbd) to import from @agh/ui instead of local copies. Delete the
12 local component files. Re-export cn from @agh/ui in web/src/lib/utils.ts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Create the documentation site shell at packages/site/ with two content
collections (runtime and protocol), DESIGN.md dark theme via @agh/ui tokens,
Orama search with collection badges, and static export configuration.

- Two-source Fumadocs config: source.config.ts with defineDocs for runtime
  and protocol collections, lib/source.ts with separate loaders and baseUrls
- Route groups: app/runtime/[[...slug]] and app/protocol/[[...slug]] each
  with DocsLayout wrapping their own sidebar
- Root layout with dark class, canvas background, Inter + JetBrains Mono
  fonts via @agh/ui/tokens.css, and Fumadocs CSS variable overrides
- Custom search dialog combining both sources with Runtime/Protocol tag
  filtering via createSearchAPI('advanced')
- Shared navbar component linking to /, /runtime, /protocol
- Placeholder landing page with approved hero copy
- Static export (output: 'export', trailingSlash: true) producing out/
- Monorepo integration: root workspaces, turbo.json with out/** cache,
  Makefile targets site-dev and site-build

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add hidden `doc` subcommand that generates CLI reference documentation
using Cobra's GenMarkdownTree. Post-processing in internal/cli/docpost/
transforms raw markdown to Fumadocs-compatible MDX with frontmatter,
JSX escaping, and fenced code blocks. Adds `make cli-docs` target.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implement the custom landing page at packages/site/app/page.tsx with
hero, two-pillars, how-it-works, runtime-features, protocol-section,
architecture diagram (SVG), comparison table, and final CTA sections.
All copy follows TechSpec Appendix A. DESIGN.md flat depth aesthetic
applied throughout — no shadows, gradients, or blur effects.

Includes snapshot tests (16 passing) via vitest + @testing-library/react
and verified build producing 122 static pages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Three Diataxis Explanation pages introducing AGH to new users:
what-is-agh (identity and key concepts), architecture (system
diagram, package layout, data flow), and comparison (competitive
positioning with feature table).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… Agent, Web UI)

Four Diataxis-style tutorial pages guiding users from installation through
running their first custom agent and exploring the web UI. All CLI commands
verified against the actual codebase. Build produces 129 static pages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@pedronauck pedronauck self-assigned this Apr 16, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 16, 2026

Caution

Review failed

Pull request was closed or merged during review

Walkthrough

Adds a CLI docs generator and postprocessor, a Next.js documentation/site (layouts, routes, search API, styles, many components and logos), Makefile targets, updated Go module requires, extensive doc-postprocessing logic and tests, plus numerous CLI help/example text updates. No CLI runtime control-flow changes beyond help/examples.

Changes

Cohort / File(s) Summary
Repo tooling & config
/.gitignore, Makefile, go.mod
Expanded ignore patterns; added site-dev, site-build, cli-docs Make targets; promoted two Go deps to direct requires and added a couple indirect modules.
CLI — help/examples & root
internal/cli/...
internal/cli/agent.go, daemon.go, install.go, memory.go, session.go, skill_commands.go, workspace.go, root.go
Populated Cobra Example fields across many commands, added memoryWriteExample, reformatted root metadata, and registered the new doc subcommand; no execution logic changed.
CLI — docs command & tests
internal/cli/doc.go, internal/cli/doc_test.go
Added hidden agh doc command with --output-dir flag and tests validating generation, output layout, and content rules.
Doc postprocessor & tests
internal/cli/docpost/...
internal/cli/docpost/docpost.go, internal/cli/docpost/docpost_test.go
New docpost package: transforms Cobra Markdown into Fumadocs-compatible MDX (YAML frontmatter, escapes, link remap, code fixes), writes nested layout and per-dir meta.json; extensive unit and integration tests.
Next.js app & site root
packages/site/app/...
app/layout.tsx, app/global.css, (home)/layout.tsx, (home)/page.tsx, api/search/route.ts
Added root layout, metadata, global Tailwind/theme CSS, fonts, home layout/page, and a search API route backed by fumadocs search.
Runtime & Protocol doc routes
packages/site/app/runtime/..., packages/site/app/protocol/...
.../[[...slug]]/page.tsx, layout.tsx
Added dynamic catch-all pages for runtime and protocol docs with generateStaticParams and generateMetadata, and area layouts wiring docs trees.
Docs components & MDX helpers
packages/site/components/docs/...
doc-page-masthead.tsx, mdx-blocks.tsx, mermaid.tsx, tests
New DocPageMasthead component, MDX block primitives, client-side Mermaid renderer with lazy init/error fallback, and tests.
Landing site & primitives
packages/site/components/landing/... and .../primitives/*
Large set of landing sections (hero, features, network, runtime, bridges, install, comparison, final CTA), primitives (SectionFrame, SectionHeader, FeatureCard, CtaButton, CodeBlock, etc.), interactive visuals (protocol walkthrough, micro-diagram, hero player), and related tests.
Logos & assets
packages/site/components/logos/..., packages/site/components/logos/index.ts
Added many SVG logo components (variants in some files) and a barrel export.
Site tests
packages/site/app/global.test.ts, .../mermaid.test.tsx, .../logos.test.tsx, .../landing/__tests__/landing.test.tsx
New Vitest suites covering global styles, Mermaid behavior, logo SVG IDs, and landing page rendering.
Various Go internal updates & tests
internal/... (manager, bridges, acp, config, automation, daemon, etc.)
Multiple test additions/adjustments and focused logic tweaks (error wrapping, JSON normalization, webhook secret deletion helper, minor assertion and type changes); mostly test and error-message / wrapping improvements.
Site layout & UI additions
packages/site/app/(home)/page.tsx, packages/site/components/site/home-header.tsx, packages/site/components/logo.tsx
Added Home page composition, HomeHeader sticky nav, and a Logo component.

Sequence Diagram(s)

sequenceDiagram
    participant User as CLI User
    participant Root as agh (root command)
    participant DocCmd as agh doc
    participant CobraGen as Cobra doc.GenMarkdownTree
    participant FS as File System
    participant DocPost as docpost.Process
    participant Site as Site output dir

    User->>Root: run `agh doc --output-dir <out>`
    Root->>DocCmd: dispatch newDocCommand RunE
    DocCmd->>FS: create temp dir
    DocCmd->>CobraGen: doc.GenMarkdownTree -> write `agh*.md` into temp
    CobraGen->>FS: write markdown files
    DocCmd->>DocPost: Process(ctx, tempDir, out)
    DocPost->>FS: read `agh*.md` files
    DocPost->>DocPost: parse filenames → command hierarchy
    DocPost->>DocPost: transform markdown (strip boilerplate, escape JSX, rewrite links, add frontmatter)
    DocPost->>Site: write MDX files and nested `index.mdx`
    DocPost->>Site: generate `meta.json` files per subdir
    DocCmd->>User: print success with resolved output path
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

  • refactor: project structure #7 — touches internal/cli/agent.go; likely related to CLI command surface and help/example text changes.
  • feat: session resilience #11 — modifies session-related structs and conversions; overlaps with tests/changes touching session payloads in this diff.
  • compozy/transcribe#9 — similar changes to thumbnail/background fields and related APIs; may overlap with asset/thumbnail handling and tests.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 17

🧹 Nitpick comments (9)
packages/site/components/docs/mermaid.tsx (1)

34-57: Secure the SVG injection with additional sanitization for defense-in-depth.

The code injects Mermaid-rendered SVG via dangerouslySetInnerHTML (line 56). While securityLevel: "strict" is configured, it does not fully mitigate XSS risks—security advisories show past vulnerabilities even in strict mode. Although current usage involves static documentation, the component accepts untrusted input structurally. Add DOMPurify sanitization before injection as a defense-in-depth measure:

Add DOMPurify sanitization
 import { useEffect, useId, useState } from "react";
+import DOMPurify from "dompurify";
 
 let mermaidLoader: Promise<typeof import("mermaid").default> | null = null;
 
 function loadMermaid() {
   if (!mermaidLoader) {
     mermaidLoader = import("mermaid").then(({ default: mermaid }) => {
       mermaid.initialize({
         startOnLoad: false,
         securityLevel: "strict",
         theme: "dark",
       });
       return mermaid;
     });
   }
 
   return mermaidLoader;
 }
 
 export function Mermaid({ chart, caption }: { chart: string; caption?: string }) {
   const reactId = useId();
   const diagramId = `agh-mermaid-${reactId.replace(/[^a-zA-Z0-9_-]/g, "")}`;
   const [svg, setSVG] = useState("");
   const [error, setError] = useState("");
 
   useEffect(() => {
     let active = true;
 
     setSVG("");
     setError("");
 
     void loadMermaid()
       .then(async mermaid => {
         const rendered = await mermaid.render(diagramId, chart);
         if (!active) return;
-        setSVG(rendered.svg);
+        const safeSvg = DOMPurify.sanitize(rendered.svg, {
+          USE_PROFILES: { svg: true, svgFilters: true },
+        });
+        setSVG(safeSvg);
       })
       .catch(err => {
         if (!active) return;
         setError(err instanceof Error ? err.message : String(err));
       });
 
     return () => {
       active = false;
     };
   }, [chart, diagramId]);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/site/components/docs/mermaid.tsx` around lines 34 - 57, Sanitize the
Mermaid-rendered SVG before injecting it into the DOM: import and use DOMPurify
in the component (e.g., call DOMPurify.sanitize) on the output from
mermaid.render inside the loadMermaid promise chain (where setSVG(rendered.svg)
is currently called) and store/assign the sanitized HTML to state instead of the
raw rendered.svg; then continue to use dangerouslySetInnerHTML with the
sanitized string to provide defense-in-depth while retaining the existing
component flow.
packages/site/components/logos/claude.tsx (1)

13-13: Remove redundant empty class token in cn().

Line 13 can be simplified; cn("", className) is equivalent to cn(className).

Suggested patch
-      className={cn("", className)}
+      className={cn(className)}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/site/components/logos/claude.tsx` at line 13, The call to the
classnames helper includes a redundant empty string token: replace the JSX
attribute usage className={cn("", className)} with className={cn(className)} so
the helper is invoked only with the actual className value; update the JSX in
the Claude logo component where the cn helper is used to remove the empty string
argument.
packages/site/app/(home)/layout.tsx (1)

10-13: Remove redundant slot spread to reduce coupling.

Line 11 spreads baseOptions.slots, but the shared options currently don’t define custom slots. Keeping only the explicit header override is clearer.

♻️ Suggested cleanup
     <HomeLayout
       {...baseOptions}
       slots={{
-        ...baseOptions.slots,
         header: HomeHeader,
       }}
     >
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/site/app/`(home)/layout.tsx around lines 10 - 13, Remove the
redundant spread of baseOptions.slots in the slots prop: instead of merging
...baseOptions.slots with header, provide only the explicit header override so
slots is set to { header: HomeHeader }; update the component using the slots
prop (the object currently referencing baseOptions.slots and HomeHeader) to stop
spreading baseOptions.slots and pass header: HomeHeader directly.
Makefile (1)

50-51: Avoid duplicating the CLI default output path in Make target.

Since agh doc already has a default output dir, consider removing --output-dir ... here (or centralizing this path in one variable) to reduce drift risk.

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

In `@Makefile` around lines 50 - 51, The Make target cli-docs currently repeats
the CLI default output path by invoking "go run ./cmd/agh doc --output-dir
packages/site/content/runtime/cli-reference"; change this to avoid duplication
by either removing the "--output-dir ..." flag so the command uses agh's
built-in default, or centralize the path into a single Make variable (e.g.,
DOC_OUTPUT) and reference that variable in the cli-docs recipe; update the
cli-docs target to use the chosen approach and ensure any other Make targets use
the same DOC_OUTPUT variable if you centralize the path.
packages/site/components/landing/primitives/mono-badge.tsx (1)

18-23: Keep the component doc comment in sync with the rendered size.

The comment says “11px” while the class on Line 23 is text-[10px]. Consider aligning one of them to avoid drift.

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

In `@packages/site/components/landing/primitives/mono-badge.tsx` around lines 18 -
23, The doc comment on the MonoBadge component is out of sync with its rendered
size: the comment says "11px" but the span uses class "text-[10px]". Fix by
making them consistent—either update the comment to "10px" to match the existing
class, or change the class in MonoBadge from "text-[10px]" to "text-[11px]" so
the comment remains accurate; ensure the change is applied to the MonoBadge
component's return JSX and its top-line comment.
packages/site/components/landing/primitives/code-block.tsx (1)

28-36: Minor: Consider cleaning up the timeout on unmount.

If the component unmounts during the 1.5-second feedback window, the setTimeout callback will still fire and attempt to update state on an unmounted component. While React 18+ handles this gracefully without errors, cleaning up is still good practice.

♻️ Optional fix with cleanup
 async function handleCopy() {
+  let timeoutId: ReturnType<typeof setTimeout>;
   try {
     await navigator.clipboard.writeText(code);
     setCopied(true);
-    setTimeout(() => setCopied(false), 1500);
+    timeoutId = setTimeout(() => setCopied(false), 1500);
   } catch {
     // clipboard blocked — drop silently
   }
+  return () => clearTimeout(timeoutId);
 }

Alternatively, store the timeout ID in a ref and clear it in a cleanup effect.

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

In `@packages/site/components/landing/primitives/code-block.tsx` around lines 28 -
36, The handleCopy function sets a 1.5s timeout that calls setCopied(false) but
never clears the timer; store the timeout ID in a ref (e.g., copyTimeoutRef),
clear any existing timeout before creating a new one, and add a useEffect
cleanup that clears copyTimeoutRef.current on unmount; update handleCopy to
assign the timer ID to the ref and clear it when appropriate so setCopied is
never called after unmount.
packages/site/app/protocol/[[...slug]]/page.tsx (1)

45-54: Consider adding the same empty-slug check in generateMetadata.

The Page component redirects when slug is empty, but generateMetadata is invoked independently by Next.js and might receive an empty slug. If protocolDocs.getPage([]) returns undefined, notFound() is called, which works but could be made consistent with the redirect behavior.

♻️ Optional: Mirror the redirect check
 export async function generateMetadata(props: PageProps): Promise<Metadata> {
   const params = await props.params;
+  if (!params.slug || params.slug.length === 0) {
+    return { title: "Protocol Overview" };
+  }
   const page = protocolDocs.getPage(params.slug);
   if (!page) notFound();

This ensures consistent behavior and avoids the notFound() path for the base route.

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

In `@packages/site/app/protocol/`[[...slug]]/page.tsx around lines 45 - 54,
generateMetadata currently calls protocolDocs.getPage(params.slug) and calls
notFound() if missing; add the same empty-slug handling used in the Page
component so metadata generation mirrors the redirect behavior: detect when
params.slug is an empty array (e.g. params.slug?.length === 0) and perform the
same redirect to the base protocol route instead of proceeding to
protocolDocs.getPage, otherwise continue to fetch page and return
title/description; reference generateMetadata, protocolDocs.getPage, notFound,
and the Page component's redirect logic to implement the consistent check.
internal/cli/docpost/docpost.go (1)

205-268: Wrap meta-generation errors with the failing path.

These helpers return several bare filesystem/JSON errors, so a failure eventually surfaces as a generic post-process error without telling you which directory or file broke. Please add path-specific context before returning.

Proposed fix
 func writeSubdirMetas(dstDir string) error {
 	return filepath.WalkDir(dstDir, func(p string, d fs.DirEntry, err error) error {
 		if err != nil {
-			return err
+			return fmt.Errorf("walk %s: %w", p, err)
 		}
 		if !d.IsDir() {
 			return nil
 		}
 		rel, err := filepath.Rel(dstDir, p)
 		if err != nil {
-			return err
+			return fmt.Errorf("rel %s: %w", p, err)
 		}
 		if rel == "." {
 			return nil // root is hand-maintained
 		}
-		return writeDirMeta(p)
+		if err := writeDirMeta(p); err != nil {
+			return fmt.Errorf("write meta for %s: %w", p, err)
+		}
+		return nil
 	})
 }

 func writeDirMeta(dir string) error {
 	entries, err := os.ReadDir(dir)
 	if err != nil {
-		return err
+		return fmt.Errorf("read dir %s: %w", dir, err)
 	}
 	…
 	data, err := json.MarshalIndent(meta, "", "    ")
 	if err != nil {
-		return err
+		return fmt.Errorf("marshal meta for %s: %w", dir, err)
 	}
-	return os.WriteFile(filepath.Join(dir, "meta.json"), append(data, '\n'), 0o600)
+	dst := filepath.Join(dir, "meta.json")
+	if err := os.WriteFile(dst, append(data, '\n'), 0o600); err != nil {
+		return fmt.Errorf("write %s: %w", dst, err)
+	}
+	return nil
 }

As per coding guidelines, "Use explicit error returns with wrapped context: fmt.Errorf(\"context: %w\", err)".

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

In `@internal/cli/docpost/docpost.go` around lines 205 - 268, The code returns
bare filesystem/JSON errors making it unclear which directory failed; update
writeSubdirMetas and writeDirMeta to wrap errors with path context using
fmt.Errorf("... %s: %w", err). In writeSubdirMetas wrap the incoming callback
err, the filepath.Rel error (include dstDir and p), and the writeDirMeta(p)
error (include p) before returning; in writeDirMeta wrap errors from
os.ReadDir(dir) (include dir), json.MarshalIndent(meta) (include dir), and
os.WriteFile(..., filepath.Join(dir, "meta.json")) (include the target path) so
every returned error indicates the failing path.
internal/cli/docpost/docpost_test.go (1)

149-266: Add a regression case for indented blocks with blank lines.

The suite exercises fenced snippets and inline code, but it never covers the fenceIndentedBlocks() case where one indented example contains an empty line. A small fixture for that path would keep the formatter bug above from coming back.

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

In `@internal/cli/docpost/docpost_test.go` around lines 149 - 266, Add a
regression test that exercises the fenceIndentedBlocks() path where an indented
code example contains a blank/empty line; update the test suite (e.g., add a new
case in TestTransformMarkdown or a new TestFenceIndentedBlocksRegression) to
feed TransformMarkdown() a markdown snippet with an indented code block that
includes one or more empty lines and assert the output preserves the block (and
that frontmatter/boilerplate stripping and link rewriting still behave). Ensure
the test references fenceIndentedBlocks/TransformMarkdown so it fails if that
code path regresses.
🤖 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/doc_test.go`:
- Line 114: The test currently ignores the error returned by filepath.Rel (rel,
_ := filepath.Rel(outputDir, p)); update the test to check the error and fail
the test if non-nil (e.g., use t.Fatalf or t.Errorf with context), so replace
the blank identifier with err and handle it; refer to the variables and call
filepath.Rel(outputDir, p) and ensure the error is reported with the path
context (also apply the same fix at the other occurrence around p on the later
line).
- Around line 25-27: The test currently uses strings.Contains(help, "doc") which
can match substrings and produce false positives; update the assertion to check
for the doc command token precisely by examining the help string lines or using
a regex that matches a command entry (e.g., look for a line that starts with
optional whitespace then the literal "doc" followed by whitespace or a
column/description separator) instead of a simple substring check — locate the
test where the variable help is asserted and replace the strings.Contains check
with a line-scan or regex match that ensures "doc" appears as a standalone
command token.
- Around line 11-197: Convert each top-level test (TestNewDocCommand_Hidden,
TestNewDocCommand_NotInHelp, TestNewDocCommand_DefaultOutputDir,
TestNewDocCommand_GeneratesDocs, TestNewDocCommand_CreatesOutputDir,
TestNewDocCommand_GeneratesAllCommands) to use a t.Run("Should ...") subtest
wrapper and call t.Parallel() inside that subtest; keep the same assertions but
moved into the subtest closure. Replace the broad strings.Contains(help, "doc")
check in TestNewDocCommand_NotInHelp with an exact-word check (e.g. use a regexp
like regexp.MustCompile(`\bdoc\b`).MatchString(help) or iterate root.Commands()
and check command.Use == "doc") to avoid matching substrings like
"documentation". Fix the ignored errors from filepath.Rel in the WalkDir
closures in TestNewDocCommand_GeneratesDocs (where rel, _ :=
filepath.Rel(outputDir, p)) and the subsequent WalkDir (where rel, _ :=
filepath.Rel(outputDir, p)) by capturing the error, handling it (t.Fatalf or
returning the error) instead of discarding it, similar to the error handling
used in findMDX.

In `@internal/cli/doc.go`:
- Around line 18-23: The doc command currently swallows positional args because
RunE ignores the args parameter; update the command to reject unexpected
positional args by either setting the command's Args field to cobra.NoArgs or by
changing RunE to accept args (func(cmd *cobra.Command, args []string) error) and
returning an error when len(args) > 0; reference the cmd variable and the
existing RunE/root := cmd.Root() block to locate where to add this validation so
invoking `doc` with extra tokens returns a clear error instead of silently
ignoring them.
- Around line 22-42: The RunE handler should propagate cmd.Context() into the
doc generation pipeline: change the call site in RunE to pass cmd.Context() as
the first argument to docpost.Process and update the docpost.Process signature
to accept context.Context as its first parameter (i.e., func Process(ctx
context.Context, srcDir, outDir string) error). Also update any internal calls
inside the docpost package that call Process (and any helper functions used by
Process) to accept and forward the context, ensuring all filesystem-heavy
operations (in docpost.Process and its helpers) use the provided ctx for
cancellation and deadline checks.

In `@internal/cli/docpost/docpost.go`:
- Around line 354-405: The function fenceIndentedBlocks incorrectly closes an
opened fenced block when encountering an empty line inside an indented code
example, which drops blank lines from code samples; in fenceIndentedBlocks, keep
inIndent true for empty indented-code lines and do not emit the closing "```" on
the first empty line—specifically, in the branch handling "case inIndent &&
isEmpty" remove the lines that set inIndent = false and append the closing fence
and instead append the original line (preserving the blank line) so that only a
non-indented subsequent line or end-of-input closes the fence.

In `@packages/site/app/global.css`:
- Around line 250-255: The global rule that sets "box-shadow: none !important"
on the universal selectors (*, *::before, *::after) is removing Tailwind focus
rings used by keyboard navigation; remove that global box-shadow reset from
global.css (or at minimum narrow its scope to non-interactive decorative
elements only) and eliminate the "!important" so Tailwind's focus:ring-* and
focus-visible:ring-* utilities (used across UI components such as
network-protocol-visual.tsx) can render focus indicators correctly.
- Around line 27-30: The --font-display custom property is self-referential
(--font-display: var(--font-display), "Playfair Display", serif) which creates a
cyclic declaration and invalidates the value; update the declaration inside the
`@theme` inline block to remove the self-reference and instead reference the
correct source variable (e.g., var(--font-playfair)) or use the font name
directly (e.g., "Playfair Display", serif) so that --font-display resolves to a
valid value.

In `@packages/site/components/docs/doc-page-masthead.tsx`:
- Around line 8-17: The toLabel function can produce "undefined" when a slug
contains empty parts; change it to defensively skip or handle empty segments by
filtering out zero-length parts before mapping (or checking part.length and
returning an empty string for that segment) so that only non-empty parts are
transformed with part[0].toUpperCase() + part.slice(1) and then joined; update
the toLabel implementation to use this check/filter to avoid concatenating
"undefined" for malformed slugs.

In `@packages/site/components/docs/mermaid.tsx`:
- Around line 7-20: The dynamic import in loadMermaid currently assigns a
failing promise to the module-level mermaidLoader and never clears it, so any
transient import error blocks future attempts; update loadMermaid to attach a
.catch handler to the import promise (the promise assigned to mermaidLoader in
the import("mermaid").then(...) chain) that sets mermaidLoader = undefined
before rethrowing or returning the error so subsequent calls will retry the
import; reference the loadMermaid function and the mermaidLoader variable when
making this change.

In `@packages/site/components/landing/final-cta.tsx`:
- Line 33: final-cta.tsx currently hardcodes the GitHub href; replace that
literal with the shared GitHub URL constant used elsewhere (import the canonical
symbol, e.g. GITHUB_URL or githubUrl from the site's config/module) and use that
constant in the anchor's href in the FinalCTA component so all outbound GitHub
links come from one source; ensure you import the exact exported name used
across the site and update any imports/exports if needed so TypeScript/ESLint
still pass.

In `@packages/site/components/landing/install-section.tsx`:
- Around line 70-99: The tab pattern is incomplete: finish ARIA semantics by
giving each tab button an id and aria-controls that points to the corresponding
tabpanel, make the CodeBlock wrapper a role="tabpanel" with id matching
aria-controls and aria-labelledby pointing back to the active tab id, and ensure
tab buttons use aria-selected (already used) plus tabIndex (0 for selected, -1
for others); add keyboard handling on the tab buttons (e.g., a handleKeyDown
referenced from INSTALL_TABS mapping) to implement Left/Right/Home/End arrow
navigation that moves focus and calls setTab; update references to INSTALL_TABS,
tab, setTab, active, and CodeBlock to wire these attributes and the keydown
handler so the component implements a complete tab pattern.

In `@packages/site/components/landing/runtime-micro-diagram.tsx`:
- Around line 123-141: The injected animation CSS is only conditional on the
runtime reducedMotion prop (reducedMotion) which can cause a flash before
hydration; add a CSS-level guard using the prefers-reduced-motion media query
inside the style block so the browser immediately disables animations for users
who prefer reduced motion. Specifically, update the style injected by the
component rendering .agh-subsystem and `@keyframes` (in the same template string
around where reducedMotion is checked) to include a top-level `@media`
(prefers-reduced-motion: reduce) { .agh-subsystem { animation: none !important;
} } (and if desired also override animation-iteration-count/animation-name) to
ensure no animation runs before React hydration.

In `@packages/site/components/landing/runtime-section.tsx`:
- Line 54: The sticky utility on the div with className "h-full flex flex-col
justify-between lg:sticky" won't work because no inset (top/bottom) is provided;
update that element (the div in runtime-section.tsx) to include an appropriate
inset utility like lg:top-0 (or lg:top-<spacing> such as lg:top-6/lg:top-8)
alongside lg:sticky so the element actually sticks at the desired offset on
large screens.

In `@packages/site/components/logos/gemini.tsx`:
- Around line 17-145: The SVG uses static IDs (mask "gemini__a" and filters
"gemini__b"..."gemini__h") which will collide when GeminiLogo is rendered
multiple times; update the component (GeminiLogo) to generate a per-instance
unique suffix (e.g., React's useId() or a stable random/uuid) and append it to
every ID and all corresponding references (mask="url(#...)" and
filter="url(#...)") so each instance uses unique IDs like `${base}__a_${uid}`
for the mask and `${base}__b_${uid}` etc.; ensure the same uid is applied
consistently across <mask>, <defs> ids and every mask="url(#...)" /
filter="url(#...)" attribute so references still match.

In `@packages/site/components/logos/linear.tsx`:
- Around line 28-239: The SVG uses fixed IDs (a, b, c, ... and filter refs like
url(`#b`)) in the "icon" branch which causes collisions when multiple LinearLogo
components render; update the component (LinearLogo or the function that returns
the SVG for variant === "icon") to generate a stable unique prefix per instance
(e.g., React's useId() or an idPrefix prop) and prepend it to every id and every
reference (e.g., id={`${prefix}-a`} and fill={`url(#${prefix}-a)`},
filter={`url(#${prefix}-b)`}, etc.) for all gradient/filter/radial/filter ids
(a..n and b,c,e) so each SVG's defs and references remain isolated.

In `@packages/site/components/logos/opencode.tsx`:
- Around line 1-3: The type error is caused by using React.SVGProps without
importing React types; update the component type declarations by importing the
SVG prop types explicitly (e.g., import { SVGProps } from "react") and change
OpenCodeLogoProps to use SVGProps<SVGSVGElement> (and apply the same fix in
claude.tsx and gemini.tsx), ensuring you remove or replace any direct references
to the React namespace so TypeScript with jsx: "react-jsx" resolves the type
correctly.

---

Nitpick comments:
In `@internal/cli/docpost/docpost_test.go`:
- Around line 149-266: Add a regression test that exercises the
fenceIndentedBlocks() path where an indented code example contains a blank/empty
line; update the test suite (e.g., add a new case in TestTransformMarkdown or a
new TestFenceIndentedBlocksRegression) to feed TransformMarkdown() a markdown
snippet with an indented code block that includes one or more empty lines and
assert the output preserves the block (and that frontmatter/boilerplate
stripping and link rewriting still behave). Ensure the test references
fenceIndentedBlocks/TransformMarkdown so it fails if that code path regresses.

In `@internal/cli/docpost/docpost.go`:
- Around line 205-268: The code returns bare filesystem/JSON errors making it
unclear which directory failed; update writeSubdirMetas and writeDirMeta to wrap
errors with path context using fmt.Errorf("... %s: %w", err). In
writeSubdirMetas wrap the incoming callback err, the filepath.Rel error (include
dstDir and p), and the writeDirMeta(p) error (include p) before returning; in
writeDirMeta wrap errors from os.ReadDir(dir) (include dir),
json.MarshalIndent(meta) (include dir), and os.WriteFile(..., filepath.Join(dir,
"meta.json")) (include the target path) so every returned error indicates the
failing path.

In `@Makefile`:
- Around line 50-51: The Make target cli-docs currently repeats the CLI default
output path by invoking "go run ./cmd/agh doc --output-dir
packages/site/content/runtime/cli-reference"; change this to avoid duplication
by either removing the "--output-dir ..." flag so the command uses agh's
built-in default, or centralize the path into a single Make variable (e.g.,
DOC_OUTPUT) and reference that variable in the cli-docs recipe; update the
cli-docs target to use the chosen approach and ensure any other Make targets use
the same DOC_OUTPUT variable if you centralize the path.

In `@packages/site/app/`(home)/layout.tsx:
- Around line 10-13: Remove the redundant spread of baseOptions.slots in the
slots prop: instead of merging ...baseOptions.slots with header, provide only
the explicit header override so slots is set to { header: HomeHeader }; update
the component using the slots prop (the object currently referencing
baseOptions.slots and HomeHeader) to stop spreading baseOptions.slots and pass
header: HomeHeader directly.

In `@packages/site/app/protocol/`[[...slug]]/page.tsx:
- Around line 45-54: generateMetadata currently calls
protocolDocs.getPage(params.slug) and calls notFound() if missing; add the same
empty-slug handling used in the Page component so metadata generation mirrors
the redirect behavior: detect when params.slug is an empty array (e.g.
params.slug?.length === 0) and perform the same redirect to the base protocol
route instead of proceeding to protocolDocs.getPage, otherwise continue to fetch
page and return title/description; reference generateMetadata,
protocolDocs.getPage, notFound, and the Page component's redirect logic to
implement the consistent check.

In `@packages/site/components/docs/mermaid.tsx`:
- Around line 34-57: Sanitize the Mermaid-rendered SVG before injecting it into
the DOM: import and use DOMPurify in the component (e.g., call
DOMPurify.sanitize) on the output from mermaid.render inside the loadMermaid
promise chain (where setSVG(rendered.svg) is currently called) and store/assign
the sanitized HTML to state instead of the raw rendered.svg; then continue to
use dangerouslySetInnerHTML with the sanitized string to provide
defense-in-depth while retaining the existing component flow.

In `@packages/site/components/landing/primitives/code-block.tsx`:
- Around line 28-36: The handleCopy function sets a 1.5s timeout that calls
setCopied(false) but never clears the timer; store the timeout ID in a ref
(e.g., copyTimeoutRef), clear any existing timeout before creating a new one,
and add a useEffect cleanup that clears copyTimeoutRef.current on unmount;
update handleCopy to assign the timer ID to the ref and clear it when
appropriate so setCopied is never called after unmount.

In `@packages/site/components/landing/primitives/mono-badge.tsx`:
- Around line 18-23: The doc comment on the MonoBadge component is out of sync
with its rendered size: the comment says "11px" but the span uses class
"text-[10px]". Fix by making them consistent—either update the comment to "10px"
to match the existing class, or change the class in MonoBadge from "text-[10px]"
to "text-[11px]" so the comment remains accurate; ensure the change is applied
to the MonoBadge component's return JSX and its top-line comment.

In `@packages/site/components/logos/claude.tsx`:
- Line 13: The call to the classnames helper includes a redundant empty string
token: replace the JSX attribute usage className={cn("", className)} with
className={cn(className)} so the helper is invoked only with the actual
className value; update the JSX in the Claude logo component where the cn helper
is used to remove the empty string argument.
🪄 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: d1cf57bc-b384-4c7a-93a4-864f78571fee

📥 Commits

Reviewing files that changed from the base of the PR and between 2e22e66 and ca480e1.

⛔ Files ignored due to path filters (228)
  • .agents/skills/audit/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/bolder/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/colorize/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/critique/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/critique/reference/personas.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/delight/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/layout/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/optimize/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/polish/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/3d.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/animations.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/assets.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx is excluded by !.agents/**
  • .agents/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx is excluded by !.agents/**
  • .agents/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx is excluded by !.agents/**
  • .agents/skills/remotion-best-practices/rules/audio-visualization.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/audio.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/calculate-metadata.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/can-decode.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/charts.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/compositions.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/display-captions.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/extract-frames.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/ffmpeg.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/fonts.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/get-audio-duration.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/get-video-dimensions.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/get-video-duration.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/gifs.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/images.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/import-srt-captions.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/light-leaks.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/lottie.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/maps.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/measuring-dom-nodes.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/measuring-text.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/parameters.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/sequencing.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/sfx.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/silence-detection.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/subtitles.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/tailwind.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/text-animations.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/timing.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/transcribe-captions.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/transitions.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/transparent-videos.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/trimming.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/videos.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/remotion-best-practices/rules/voiceover.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/tech-logos/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/typeset/SKILL.md is excluded by !**/*.md, !.agents/**
  • .codex/plans/2026-04-15-site-paper-redesign.md is excluded by !**/*.md
  • .codex/plans/2026-04-15-site-positioning-rewrite.md is excluded by !**/*.md
  • .codex/plans/2026-04-16-runtime-nav-reorg.md is excluded by !**/*.md
  • .compozy/tasks/site/_meta.md is excluded by !**/*.md
  • .compozy/tasks/site/_tasks.md is excluded by !**/*.md
  • .compozy/tasks/site/_techspec.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/MEMORY.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_01.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_02.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_03.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_04.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_05.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_06.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_07.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_08.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_09.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_10.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_11.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_12.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_13.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_14.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_15.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_16.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_17.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_18.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_19.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_20.md is excluded by !**/*.md
  • .compozy/tasks/site/memory/task_21.md is excluded by !**/*.md
  • .compozy/tasks/site/task_01.md is excluded by !**/*.md
  • .compozy/tasks/site/task_02.md is excluded by !**/*.md
  • .compozy/tasks/site/task_03.md is excluded by !**/*.md
  • .compozy/tasks/site/task_04.md is excluded by !**/*.md
  • .compozy/tasks/site/task_05.md is excluded by !**/*.md
  • .compozy/tasks/site/task_06.md is excluded by !**/*.md
  • .compozy/tasks/site/task_07.md is excluded by !**/*.md
  • .compozy/tasks/site/task_08.md is excluded by !**/*.md
  • .compozy/tasks/site/task_09.md is excluded by !**/*.md
  • .compozy/tasks/site/task_10.md is excluded by !**/*.md
  • .compozy/tasks/site/task_11.md is excluded by !**/*.md
  • .compozy/tasks/site/task_12.md is excluded by !**/*.md
  • .compozy/tasks/site/task_13.md is excluded by !**/*.md
  • .compozy/tasks/site/task_14.md is excluded by !**/*.md
  • .compozy/tasks/site/task_15.md is excluded by !**/*.md
  • .compozy/tasks/site/task_16.md is excluded by !**/*.md
  • .compozy/tasks/site/task_17.md is excluded by !**/*.md
  • .compozy/tasks/site/task_18.md is excluded by !**/*.md
  • .compozy/tasks/site/task_19.md is excluded by !**/*.md
  • .compozy/tasks/site/task_20.md is excluded by !**/*.md
  • .compozy/tasks/site/task_21.md is excluded by !**/*.md
  • README.md is excluded by !**/*.md
  • bun.lock is excluded by !**/*.lock
  • go.sum is excluded by !**/*.sum
  • package.json is excluded by !**/*.json
  • packages/site/components.json is excluded by !**/*.json
  • packages/site/content/protocol/conformance.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/delivery.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/ed25519-jcs.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/envelope.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/examples.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/guide/meta.json is excluded by !**/*.json
  • packages/site/content/protocol/guide/minimal-sender.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/guide/nats-transport.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/guide/testing.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/guide/trust-verification.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/index.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/interactions.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/message-kinds.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/meta.json is excluded by !**/*.json
  • packages/site/content/protocol/nats.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/overview.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/peer-discovery.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/recipes.mdx is excluded by !**/*.mdx
  • packages/site/content/protocol/verification.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/api-reference/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/api-reference/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/agent/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/agent/info.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/agent/list.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/agent/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/agh.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/jobs/create.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/jobs/delete.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/jobs/get.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/jobs/history.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/jobs/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/jobs/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/automation/jobs/trigger.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/jobs/update.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/automation/runs/get.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/runs/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/runs/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/automation/triggers/create.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/triggers/delete.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/triggers/get.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/triggers/history.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/triggers/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/automation/triggers/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/automation/triggers/update.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/bridge/create.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/bridge/disable.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/bridge/enable.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/bridge/get.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/bridge/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/bridge/list.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/bridge/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/bridge/restart.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/bridge/routes.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/bridge/test-delivery.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/bridge/update.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/completion/bash.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/completion/fish.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/completion/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/completion/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/completion/powershell.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/completion/zsh.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/daemon/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/daemon/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/daemon/start.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/daemon/status.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/daemon/stop.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/extension/disable.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/extension/enable.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/extension/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/extension/install.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/extension/list.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/extension/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/extension/remove.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/extension/search.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/extension/status.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/extension/update.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/hooks/events.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/hooks/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/hooks/info.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/hooks/list.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/hooks/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/hooks/runs.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/install.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/memory/consolidate.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/memory/delete.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/memory/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/memory/list.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/memory/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/memory/read.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/memory/write.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/network/channels.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/network/inbox.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/network/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/network/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/network/peers.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/network/send.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/network/status.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/observe/events.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/observe/health.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/observe/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/observe/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/session/events.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/session/history.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/session/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/session/list.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/session/meta.json is excluded by !**/*.json
  • packages/site/content/runtime/cli-reference/session/new.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/session/prompt.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/session/resume.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/session/status.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/session/stop.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/session/wait.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/skill/create.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/skill/index.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/skill/info.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/skill/install.mdx is excluded by !**/*.mdx
  • packages/site/content/runtime/cli-reference/skill/list.mdx is excluded by !**/*.mdx
📒 Files selected for processing (72)
  • .gitignore
  • Makefile
  • go.mod
  • internal/cli/agent.go
  • internal/cli/daemon.go
  • internal/cli/doc.go
  • internal/cli/doc_test.go
  • internal/cli/docpost/docpost.go
  • internal/cli/docpost/docpost_test.go
  • internal/cli/install.go
  • internal/cli/memory.go
  • internal/cli/root.go
  • internal/cli/session.go
  • internal/cli/skill_commands.go
  • internal/cli/workspace.go
  • packages/site/app/(home)/layout.tsx
  • packages/site/app/(home)/page.tsx
  • packages/site/app/api/search/route.ts
  • packages/site/app/global.css
  • packages/site/app/layout.tsx
  • packages/site/app/protocol/[[...slug]]/page.tsx
  • packages/site/app/protocol/layout.tsx
  • packages/site/app/runtime/[[...slug]]/page.tsx
  • packages/site/app/runtime/layout.tsx
  • packages/site/components/docs/doc-page-masthead.test.tsx
  • packages/site/components/docs/doc-page-masthead.tsx
  • packages/site/components/docs/mdx-blocks.tsx
  • packages/site/components/docs/mermaid.tsx
  • packages/site/components/landing/__tests__/landing.test.tsx
  • packages/site/components/landing/bridges-section.tsx
  • packages/site/components/landing/comparison.tsx
  • packages/site/components/landing/extensibility-section.tsx
  • packages/site/components/landing/features-section.tsx
  • packages/site/components/landing/final-cta.tsx
  • packages/site/components/landing/hero-player.tsx
  • packages/site/components/landing/hero.tsx
  • packages/site/components/landing/index.ts
  • packages/site/components/landing/install-section.tsx
  • packages/site/components/landing/network-protocol-visual.tsx
  • packages/site/components/landing/network-section.tsx
  • packages/site/components/landing/primitives/animated-diagram.tsx
  • packages/site/components/landing/primitives/code-block.tsx
  • packages/site/components/landing/primitives/cta-button.tsx
  • packages/site/components/landing/primitives/feature-card.tsx
  • packages/site/components/landing/primitives/index.ts
  • packages/site/components/landing/primitives/kind-chip.tsx
  • packages/site/components/landing/primitives/mono-badge.tsx
  • packages/site/components/landing/primitives/section-frame.tsx
  • packages/site/components/landing/primitives/section-header.tsx
  • packages/site/components/landing/primitives/use-reduced-motion.ts
  • packages/site/components/landing/runtime-micro-diagram.tsx
  • packages/site/components/landing/runtime-section.tsx
  • packages/site/components/landing/supported-agents.tsx
  • packages/site/components/logo.tsx
  • packages/site/components/logos/claude.tsx
  • packages/site/components/logos/cursor.tsx
  • packages/site/components/logos/discord.tsx
  • packages/site/components/logos/gemini.tsx
  • packages/site/components/logos/github.tsx
  • packages/site/components/logos/google-chat.tsx
  • packages/site/components/logos/index.ts
  • packages/site/components/logos/kiro.tsx
  • packages/site/components/logos/linear.tsx
  • packages/site/components/logos/microsoft-teams.tsx
  • packages/site/components/logos/openai.tsx
  • packages/site/components/logos/opencode.tsx
  • packages/site/components/logos/pi.tsx
  • packages/site/components/logos/slack.tsx
  • packages/site/components/logos/telegram.tsx
  • packages/site/components/logos/whatsapp.tsx
  • packages/site/components/protocol/architecture-diagram.tsx
  • packages/site/components/site/home-header.tsx

Comment thread internal/cli/doc_test.go
Comment thread internal/cli/doc_test.go Outdated
Comment thread internal/cli/doc_test.go Outdated
Comment thread internal/cli/doc.go
Comment thread internal/cli/doc.go
Comment thread packages/site/components/landing/runtime-micro-diagram.tsx
Comment thread packages/site/components/landing/runtime-section.tsx Outdated
Comment thread packages/site/components/logos/gemini.tsx
Comment thread packages/site/components/logos/linear.tsx
Comment thread packages/site/components/logos/opencode.tsx
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (5)
packages/site/components/logos/logos.test.tsx (1)

29-35: Optional: also validate mask references resolve to real mask IDs.

Line 35 checks uniqueness, but not reference integrity. A broken url(#...) target could still pass if unique.

🔍 Suggested test hardening
     const ids = getIds(container, "mask[id], filter[id]");
+    const maskIds = new Set(getIds(container, "mask[id]"));
     const maskRefs = Array.from(container.querySelectorAll<SVGGElement>("g[mask]"), element =>
       element.getAttribute("mask")
     );

     expect(ids.length).toBeGreaterThan(0);
     expect(new Set(ids).size).toBe(ids.length);
     expect(new Set(maskRefs).size).toBe(maskRefs.length);
+    for (const ref of maskRefs) {
+      expect(ref).toMatch(/^url\(#.+\)$/);
+      const referencedId = ref!.slice(5, -1);
+      expect(maskIds.has(referencedId)).toBe(true);
+    }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/site/components/logos/logos.test.tsx` around lines 29 - 35, The test
currently collects maskRefs from container.querySelectorAll("g[mask]") but only
asserts uniqueness; update the test to also resolve each mask reference string
(e.g. "url(`#foo`)" or "#foo") to extract the referenced id and assert that an
element with that id exists in the rendered container (use
container.querySelector(`#${id}`) or container.querySelector(`mask#${id},
[id="${id}"]`) for robustness); keep the existing uniqueness assertions for ids
and maskRefs and add the new existence assertion for each entry in maskRefs to
ensure references point to real mask elements.
internal/cli/docpost/docpost.go (2)

163-176: Remove unused parameter from function signature.

The _ map[string]bool parameter is never used within the function body. This appears to be leftover from a refactor.

♻️ Proposed fix
-func buildTargetMap(inputs []input, _ map[string]bool) map[string]string {
+func buildTargetMap(inputs []input) map[string]string {

Also update the call site in Process:

-	targets := buildTargetMap(inputs, hasChildren)
+	targets := buildTargetMap(inputs)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/cli/docpost/docpost.go` around lines 163 - 176, Remove the unused
parameter from the buildTargetMap signature and update its call site(s): change
func buildTargetMap(inputs []input, _ map[string]bool) to func
buildTargetMap(inputs []input) and remove the extra argument where
buildTargetMap is invoked (e.g., in Process). Ensure any reference to the
removed map parameter is eliminated and run tests/compile to confirm no
remaining usages.

515-523: Consider whether nil context should be allowed.

The function silently accepts nil context and returns nil error. While this is defensive, it could mask bugs where context was accidentally not passed. For a documentation generation tool, this pragmatic approach is acceptable, but you may want to document this behavior or consider returning context.Background().Err() instead.

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

In `@internal/cli/docpost/docpost.go` around lines 515 - 523, The current
ensureContext function silently accepts a nil ctx which can hide bugs; change
ensureContext to treat a nil context as an error by returning a descriptive
error (e.g. fmt.Errorf("docpost: %s: nil context", action)) instead of nil,
update the function signature body in ensureContext to check if ctx == nil then
return that error, and keep the existing ctx.Err() handling for non-nil
contexts.
packages/site/components/docs/mermaid.tsx (1)

61-61: Add DOMPurify sanitization before SVG injection.

Line 61 injects SVG from mermaid.render() directly via dangerouslySetInnerHTML. While securityLevel: "strict" is configured, Mermaid's security documentation confirms this does not fully guarantee safe output—additional sanitization with DOMPurify is recommended as defense in depth.

Suggested hardening
 import { useEffect, useId, useState } from "react";
+import DOMPurify from "dompurify";
@@
       .then(async mermaid => {
         const rendered = await mermaid.render(diagramId, chart);
         if (!active) return;
-        setSVG(rendered.svg);
+        setSVG(
+          DOMPurify.sanitize(rendered.svg, {
+            USE_PROFILES: { svg: true, svgFilters: true },
+          })
+        );
       })
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/site/components/docs/mermaid.tsx` at line 61, The component
currently injects raw SVG from mermaid.render() via dangerouslySetInnerHTML (the
svg variable); harden this by passing svg through DOMPurify.sanitize before
injection. Import and use DOMPurify (e.g., DOMPurify.sanitize(svg, { ADD_ATTR:
[...] } if needed) or default options) and replace dangerouslySetInnerHTML={{
__html: svg }} with the sanitized output so the component that calls
mermaid.render() and uses dangerouslySetInnerHTML uses DOMPurify.sanitize(svg)
instead.
packages/site/app/global.css (1)

12-12: Remove unused .stylelintrc.json or configure it to handle Tailwind v4 at-rules if Stylelint is planned for use.

The .stylelintrc.json configuration file exists in the repository, but Stylelint is not installed as a dependency or used in the CI pipeline. However, if this configuration is intended for future use, @source (line 12) and @theme (line 27) are Tailwind v4 directives that would be flagged as unknown by the inherited scss/at-rule-no-unknown rule. Either remove the unused configuration or add ignoreAtRules: ["source", "theme"] to the scss/at-rule-no-unknown rule if Stylelint adoption is planned.

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

In `@packages/site/app/global.css` at line 12, The repository contains a
.stylelintrc.json that will flag Tailwind v4 at-rules like `@source` and `@theme`
(seen in global.css) as unknown under the scss/at-rule-no-unknown rule; either
delete the unused .stylelintrc.json if Stylelint isn’t being used, or update
that rule in .stylelintrc.json to add ignoreAtRules: ["source","theme"] so
Stylelint accepts Tailwind v4 directives (refer to the `@source` and `@theme` tokens
and the scss/at-rule-no-unknown rule when making the change).
🤖 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/site/app/global.test.ts`:
- Around line 5-6: The test reads fixtures using process.cwd() which breaks when
vitest is run from the repo root; change the path resolution for globalCSS and
layoutSource to be relative to this test file by deriving the test directory
from import.meta.url (use fileURLToPath(import.meta.url) and path.dirname) and
then join that directory with "app/global.css" and "app/layout.tsx" before
calling readFileSync; update references to the variables globalCSS and
layoutSource accordingly so they load the correct files regardless of the
process working directory.

In `@packages/site/components/landing/install-section.tsx`:
- Around line 28-29: The install section currently exposes a piped command via
the "command" property which encourages unsafe curl | sh usage; update the
install entry in packages/site/components/landing/install-section.tsx to replace
that single piped command with explicit steps: provide a safe download URL for
the prebuilt binary, a checksum or signature value, and step-by-step
instructions (e.g., curl -fsSL -o <file>, verify checksum or gpg signature, then
chmod +x and ./install) and update the "note" text accordingly; target the
specific install object by its "command" and "note" properties so the UI shows
download → verify → execute steps instead of a direct pipe-to-shell.

---

Nitpick comments:
In `@internal/cli/docpost/docpost.go`:
- Around line 163-176: Remove the unused parameter from the buildTargetMap
signature and update its call site(s): change func buildTargetMap(inputs
[]input, _ map[string]bool) to func buildTargetMap(inputs []input) and remove
the extra argument where buildTargetMap is invoked (e.g., in Process). Ensure
any reference to the removed map parameter is eliminated and run tests/compile
to confirm no remaining usages.
- Around line 515-523: The current ensureContext function silently accepts a nil
ctx which can hide bugs; change ensureContext to treat a nil context as an error
by returning a descriptive error (e.g. fmt.Errorf("docpost: %s: nil context",
action)) instead of nil, update the function signature body in ensureContext to
check if ctx == nil then return that error, and keep the existing ctx.Err()
handling for non-nil contexts.

In `@packages/site/app/global.css`:
- Line 12: The repository contains a .stylelintrc.json that will flag Tailwind
v4 at-rules like `@source` and `@theme` (seen in global.css) as unknown under the
scss/at-rule-no-unknown rule; either delete the unused .stylelintrc.json if
Stylelint isn’t being used, or update that rule in .stylelintrc.json to add
ignoreAtRules: ["source","theme"] so Stylelint accepts Tailwind v4 directives
(refer to the `@source` and `@theme` tokens and the scss/at-rule-no-unknown rule
when making the change).

In `@packages/site/components/docs/mermaid.tsx`:
- Line 61: The component currently injects raw SVG from mermaid.render() via
dangerouslySetInnerHTML (the svg variable); harden this by passing svg through
DOMPurify.sanitize before injection. Import and use DOMPurify (e.g.,
DOMPurify.sanitize(svg, { ADD_ATTR: [...] } if needed) or default options) and
replace dangerouslySetInnerHTML={{ __html: svg }} with the sanitized output so
the component that calls mermaid.render() and uses dangerouslySetInnerHTML uses
DOMPurify.sanitize(svg) instead.

In `@packages/site/components/logos/logos.test.tsx`:
- Around line 29-35: The test currently collects maskRefs from
container.querySelectorAll("g[mask]") but only asserts uniqueness; update the
test to also resolve each mask reference string (e.g. "url(`#foo`)" or "#foo") to
extract the referenced id and assert that an element with that id exists in the
rendered container (use container.querySelector(`#${id}`) or
container.querySelector(`mask#${id}, [id="${id}"]`) for robustness); keep the
existing uniqueness assertions for ids and maskRefs and add the new existence
assertion for each entry in maskRefs to ensure references point to real mask
elements.
🪄 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: af5fe96c-71c7-41e1-81f7-362851515352

📥 Commits

Reviewing files that changed from the base of the PR and between ca480e1 and 5657c4d.

⛔ Files ignored due to path filters (27)
  • .compozy/tasks/site/reviews-001/_meta.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_001.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_002.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_003.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_004.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_005.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_006.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_007.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_008.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_009.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_010.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_011.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_012.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_013.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_014.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_015.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_016.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_017.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_018.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_019.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_020.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_021.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_022.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_023.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_024.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_025.md is excluded by !**/*.md
  • .compozy/tasks/site/reviews-001/issue_026.md is excluded by !**/*.md
📒 Files selected for processing (20)
  • internal/cli/doc.go
  • internal/cli/doc_test.go
  • internal/cli/docpost/docpost.go
  • internal/cli/docpost/docpost_test.go
  • packages/site/app/global.css
  • packages/site/app/global.test.ts
  • packages/site/app/layout.tsx
  • packages/site/components/docs/doc-page-masthead.test.tsx
  • packages/site/components/docs/doc-page-masthead.tsx
  • packages/site/components/docs/mermaid.test.tsx
  • packages/site/components/docs/mermaid.tsx
  • packages/site/components/landing/__tests__/landing.test.tsx
  • packages/site/components/landing/final-cta.tsx
  • packages/site/components/landing/install-section.tsx
  • packages/site/components/landing/runtime-micro-diagram.tsx
  • packages/site/components/landing/runtime-section.tsx
  • packages/site/components/logos/claude.tsx
  • packages/site/components/logos/gemini.tsx
  • packages/site/components/logos/linear.tsx
  • packages/site/components/logos/logos.test.tsx
✅ Files skipped from review due to trivial changes (4)
  • packages/site/components/landing/runtime-section.tsx
  • packages/site/components/logos/linear.tsx
  • internal/cli/doc_test.go
  • packages/site/components/landing/tests/landing.test.tsx
🚧 Files skipped from review as they are similar to previous changes (8)
  • packages/site/components/docs/doc-page-masthead.test.tsx
  • packages/site/components/landing/final-cta.tsx
  • packages/site/components/landing/runtime-micro-diagram.tsx
  • packages/site/app/layout.tsx
  • packages/site/components/logos/gemini.tsx
  • packages/site/components/logos/claude.tsx
  • internal/cli/doc.go
  • packages/site/components/docs/doc-page-masthead.tsx

Comment on lines +5 to +6
const globalCSS = readFileSync(path.join(process.cwd(), "app", "global.css"), "utf8");
const layoutSource = readFileSync(path.join(process.cwd(), "app", "layout.tsx"), "utf8");
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "1) Verify cwd-based path resolution in test:"
rg -n 'process\.cwd\(\)' packages/site/app/global.test.ts

echo
echo "2) Verify vitest config has no explicit root:"
rg -n '^\s*root\s*:' packages/site/vitest.config.ts || true

Repository: compozy/agh

Length of output: 327


🏁 Script executed:

# Check if the test file uses ES modules and verify directory structure
echo "1) Test file location and content (first 20 lines):"
head -20 packages/site/app/global.test.ts

echo
echo "2) Verify if referenced CSS/TSX files exist relative to test:"
ls -la packages/site/app/ | grep -E "\.(css|tsx)$"

echo
echo "3) Check package.json type for ES module support:"
jq '.type' packages/site/package.json

echo
echo "4) Full vitest config to understand root behavior:"
cat packages/site/vitest.config.ts

Repository: compozy/agh

Length of output: 1980


🏁 Script executed:

# Check how vitest might be invoked - root package.json and monorepo structure
echo "1) Root package.json scripts (test-related):"
jq '.scripts | with_entries(select(.value | contains("test") or contains("vitest")))' package.json || echo "No matching scripts found"

echo
echo "2) Check if vitest config exists at root:"
ls -la vitest.config.* 2>/dev/null || echo "No vitest config at root"

echo
echo "3) Monorepo root structure - check for workspaces:"
jq '.workspaces' package.json 2>/dev/null || echo "No workspaces config"

echo
echo "4) Check if there's a test script or CI config that might run from root:"
head -30 .github/workflows/test.yml 2>/dev/null || echo "No test workflow found"

Repository: compozy/agh

Length of output: 516


🏁 Script executed:

# Check the root vitest config to understand workspace handling
echo "Root vitest.config.ts:"
cat vitest.config.ts

Repository: compozy/agh

Length of output: 655


Resolve test fixture paths relative to the test file, not process.cwd().

When bunx vitest run executes from the monorepo root, process.cwd() is the repository root, not packages/site. Lines 5–6 attempt to load fixtures using process.cwd() + "app/...", which fails since the files are at packages/site/app/. The packages/site/vitest.config.ts lacks an explicit root configuration, so the project's working directory is not guaranteed when run as part of the monorepo's test suite.

Use import.meta.url to resolve fixture paths relative to the test file itself:

Proposed fix
 import { readFileSync } from "node:fs";
 import path from "node:path";
+import { fileURLToPath } from "node:url";
 import { describe, expect, it } from "vitest";

-const globalCSS = readFileSync(path.join(process.cwd(), "app", "global.css"), "utf8");
-const layoutSource = readFileSync(path.join(process.cwd(), "app", "layout.tsx"), "utf8");
+const testDir = path.dirname(fileURLToPath(import.meta.url));
+const globalCSS = readFileSync(path.join(testDir, "global.css"), "utf8");
+const layoutSource = readFileSync(path.join(testDir, "layout.tsx"), "utf8");
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/site/app/global.test.ts` around lines 5 - 6, The test reads fixtures
using process.cwd() which breaks when vitest is run from the repo root; change
the path resolution for globalCSS and layoutSource to be relative to this test
file by deriving the test directory from import.meta.url (use
fileURLToPath(import.meta.url) and path.dirname) and then join that directory
with "app/global.css" and "app/layout.tsx" before calling readFileSync; update
references to the variables globalCSS and layoutSource accordingly so they load
the correct files regardless of the process working directory.

Comment on lines +28 to +29
command: "curl -fsSL https://get.agh.compozy.com | sh",
note: "Linux + macOS · prebuilt",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Avoid recommending curl | sh for the binary install path.

Line 28 uses a direct pipe-to-shell pattern, which skips integrity verification and increases supply-chain risk for users. Please switch this path to download + checksum/signature verification + explicit execution steps.

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

In `@packages/site/components/landing/install-section.tsx` around lines 28 - 29,
The install section currently exposes a piped command via the "command" property
which encourages unsafe curl | sh usage; update the install entry in
packages/site/components/landing/install-section.tsx to replace that single
piped command with explicit steps: provide a safe download URL for the prebuilt
binary, a checksum or signature value, and step-by-step instructions (e.g., curl
-fsSL -o <file>, verify checksum or gpg signature, then chmod +x and ./install)
and update the "note" text accordingly; target the specific install object by
its "command" and "note" properties so the UI shows download → verify → execute
steps instead of a direct pipe-to-shell.

@pedronauck pedronauck merged commit e479c32 into main Apr 16, 2026
1 check was pending
@pedronauck pedronauck deleted the site branch April 16, 2026 20:03
pedronauck added a commit that referenced this pull request May 26, 2026
## Release v0.0.1

This PR prepares the release of version v0.0.1.

### Changelog

## 0.0.1 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This was referenced May 26, 2026
pedronauck added a commit that referenced this pull request May 26, 2026
## Release v0.0.1

This PR prepares the release of version v0.0.1.

### Changelog

## 0.0.1 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pedronauck added a commit that referenced this pull request May 26, 2026
## Release v0.0.2

This PR prepares the release of version v0.0.2.

### Changelog

## 0.0.2 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release
- Fix release process



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows
- Improve suite speed

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pedronauck added a commit that referenced this pull request May 27, 2026
## Release v0.0.2

This PR prepares the release of version v0.0.2.

### Changelog

## 0.0.2 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release
- Fix release process
- Fix release sync
- Decouple release dry-run npm auth
- Persist web assets git auth



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows
- Improve suite speed


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Updated web assets dependency to a newer version for improved
stability and performance.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/compozy/agh/pull/211?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pedronauck added a commit that referenced this pull request May 27, 2026
## Release v0.0.2

This PR prepares the release of version v0.0.2.

### Changelog

## 0.0.2 - 2026-05-27



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout
- Fix release dry-run token contract



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release
- Fix release process
- Fix release sync
- Decouple release dry-run npm auth
- Persist web assets git auth
- Require npm auth before release merge



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows
- Improve suite speed


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
  * Updated dependencies to latest versions.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/compozy/agh/pull/214?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant