feat: tools registry#85
Conversation
Add the release-grade QA plan for the Tool Registry under
.compozy/tasks/tools-registry/qa/. Task_16 consumes these artifacts
without redefining scope, priorities, sentinels, or output paths.
- test-plans/tool-registry-test-plan.md: feature plan with objectives,
scope (in/out per MVP boundary), key risks, environment matrix,
entry/exit criteria, automation lanes, and stable artifact layout.
- test-plans/smoke-regression.md: 14 P0 cases enforcing safety
invariants 1, 4, 7, 11, 13, 16, 21, 27 plus codegen and make verify.
- test-plans/targeted-regression.md: per-change inclusion map keyed
off touched surfaces.
- test-plans/full-regression.md: pre-release lane covering P0 + P1
+ P2 sampling.
- test-plans/security-redaction-regression.md: redaction sentinel
set and grep-based scan command; mandatory pre-release lane.
- test-plans/traceability-matrix.md: maps every P0 and P1 case to
tasks 01-14, TechSpec sections, ADR-001..011, and Safety
Invariants 1-27.
- test-cases/TC-{SEC,FUNC,INT,UI,PERF}-*.md: 97 manual cases
covering native tools, TS extension-host, Go SDK, MCP call-through,
hosted MCP bind/approval bridge, policy/approval, redaction,
CLI/HTTP/UDS, web diagnostics, docs, config lifecycle, and
concurrency stress.
Reserved subdirectories qa/issues/, qa/screenshots/, qa/logs/,
qa/traces/, qa/fixtures/ stand by for task_16 evidence.
memory/task_15.md and memory/MEMORY.md track durable handoff context
so task_16 starts with the lab bootstrap, sentinel set, and lane
ordering already known.
task_15.md: subtasks 15.1-15.6 marked complete; status set to
completed; verification evidence appended.
make verify is not applicable to this planning-only task (no Go/TS
source changed). Final make verify lives in TC-INT-016 for task_16.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Update site docs and regenerate the CLI reference so they teach the canonical tool-first surface implemented by tasks 01-10. Autonomy, hooks, automation, extensions, MCP auth, agent definitions, and skills now show the dedicated agh__ tool families alongside their CLI parity, with deterministic denial codes and operator-only management exceptions. Adds runtime-tools-canonical-docs vitest coverage to keep the alignment honest. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Captures the release-grade QA plan for tasks 01-11: feature plan, smoke/targeted/full regression suite, codegen + docs verification dossier, redaction sweep procedure, traceability matrix, and execution-ready manual cases under qa/test-cases/. Reserves the verification-report scaffold for task_13. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughThis PR adds QA bootstrap configuration files and test execution logs. It includes environment variable exports for QA scenario setup and runtime configuration, a session automation log for MCP server initialization, and several test failure logs documenting expected error conditions related to authentication and configuration constraints. Changes
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~5 minutes 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
There was a problem hiding this comment.
Actionable comments posted: 19
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
internal/cli/cli_integration_test.go (1)
1753-1769:⚠️ Potential issue | 🟡 MinorKeep the stale-lease checks specific.
Both branches now pass on any non-nil error, so an unrelated CLI/transport failure would still leave the test green. Please assert the expected stale/inactive-lease rejection text from
stderrin addition to the redaction check.As per coding guidelines, "MUST have specific error assertions (ErrorContains, ErrorAs)".
Also applies to: 1892-1900
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/cli/cli_integration_test.go` around lines 1753 - 1769, The test currently treats any non-nil error as success; change the assertion after executeRootCommand (used with "task complete", enqueued.ID) to specifically assert stderr contains the expected stale/inactive-lease rejection message (use an ErrorContains-style check for the known rejection text) and still assert the raw token is not leaked (the existing strings.Contains on err.Error() for "agh_claim_"), and apply the same specific stderr assertion pattern to the other occurrence around the enqueued retry block (the similar check at lines ~1892-1900) so failures due to unrelated CLI/transport issues no longer pass.internal/cli/task_test.go (1)
678-684:⚠️ Potential issue | 🟡 MinorAdd the raw-token leak assertion to
task nextoutput.This is the primary response shape that used to carry the lease credential, but the subtest only checks that
claim_token_hashis present. A regression that serialized both the hash and a rawagh_claim_...token would still pass here.Suggested assertion
var output AgentTaskNextRecord if err := json.Unmarshal([]byte(stdout), &output); err != nil { t.Fatalf("json.Unmarshal(task next) error = %v", err) } + if strings.Contains(stdout, "agh_claim_") { + t.Fatalf("task next output leaked raw claim token pattern: %s", stdout) + } if !output.Claimed || output.Claim == nil || output.Claim.Lease.ClaimTokenHash == "" { t.Fatalf("task next output = %#v, want claimed session-bound response", output) }As per coding guidelines, "Raw
claim_token(agh_claim_*) ... must NEVER appear in logs, status APIs, settings views, error payloads, channel messages, SSE, web UI, or memory; use hash forms (claim_token_hash) over the wire".🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/cli/task_test.go` around lines 678 - 684, The test currently verifies only that ClaimTokenHash is set on the AgentTaskNextRecord (variable output) but not that a raw claim token wasn't leaked; update the subtest to assert that no raw claim token appears by checking that either output.Claim.Lease.ClaimToken (or the field that would carry the raw token) is empty/nil and also that the captured stdout does not contain the prefix "agh_claim_"; modify the assertions around AgentTaskNextRecord (output) and the stdout string to explicitly fail if a raw "agh_claim_" token is present while keeping the existing ClaimTokenHash check.
🧹 Nitpick comments (7)
internal/api/core/conversions_parsers_test.go (1)
231-255: Wrap this test case in at.Run("Should ...")subtest.The test uses monolithic assertions in the function body instead of following the
t.Run("Should ...")pattern required for Go tests in this repository. Refactor to organize assertions into subtests with the patternt.Run("Should ...", func(t *testing.T) { ... }).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/api/core/conversions_parsers_test.go` around lines 231 - 255, Wrap the existing assertions that validate payload (the checks on payload.Name, payload.Provider, payload.MCPServers length and the string comparisons for payload.Tools, payload.Toolsets, payload.DenyTools) into a t.Run subtest (e.g. t.Run("Should parse payload fields", func(t *testing.T) { ... })) so each group of assertions executes as a named subtest; keep the same checks and error messages but move them inside the anonymous func(t *testing.T) and call t.Run around them to follow the repository's t.Run("Should ...") pattern.internal/api/core/tools.go (1)
288-499: Add doc comments for unexported helpers introduced in this file.This file adds many unexported functions without comments (
toolDescriptorPayload,toolBackendPayload,bindToolSearch,toolErrorLayer, etc.). Please add short intent-focused comments for maintainability and policy compliance.As per coding guidelines, "Comments in Go must explain the 'why' and 'what', not just 'what'. Unexported identifiers must have a comment."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/api/core/tools.go` around lines 288 - 499, Add concise, intent-focused Go doc comments for each unexported helper to explain what they do and why (not just how): add comments above toolDescriptorPayload, toolBackendPayload, toolSourcePayload, toolAvailabilityPayload, toolDecisionPayload describing the payload mapping purpose and any important invariants; above bindToolSearch, toolIDParam, operatorToolScope, sessionToolScope, toolScopeFromSearch explain the request/param binding and scoping intent; above respondToolError, toolErrorCodeForStatus, toolErrorLayer describe the error normalization, status→code mapping and layer derivation logic; keep each comment short, mention the “why” (reason for normalization/mapping) and any non-obvious behavior or constraints so maintainability/policy requirements are satisfied.internal/api/udsapi/udsapi_integration_test.go (1)
354-355: Avoid pinning this test to JSON field order.This exact-string comparison is brittle to harmless marshaling changes. Decode
created.Record.Specand assert the projected fields instead of the serialized byte layout.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/api/udsapi/udsapi_integration_test.go` around lines 354 - 355, The test is brittle because it compares created.Record.Spec as a raw JSON string which depends on field order; instead unmarshal created.Record.Spec into a map[string]any or a struct and assert individual fields (e.g., id, backend.kind, backend.native_name, description, input_schema.type, source.kind, source.owner, visibility, risk, read_only) using the test helpers; locate the assertion around created.Record.Spec in udsapi_integration_test.go and replace the exact-string comparison with JSON decoding and targeted field checks so the test passes regardless of marshal ordering.internal/cli/tool_integration_test.go (1)
53-57: The expected payload shares the same client stack as the CLI path.
direct := NewClient(...)anddeps.newClient: NewClientboth exercise the sameinternal/clirequest/decoding code, so a regression in the client transport layer can make both sides wrong in the same way and still pass. Prefer a raw UDS/HTTP oracle or build the expected contract directly from the registry fixture.As per coding guidelines, "Verify tests can fail when business logic changes".
Also applies to: 182-190
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/cli/tool_integration_test.go` around lines 53 - 57, The test currently uses the same client transport code twice (NewClient used for both direct and deps.newClient), masking regressions; replace the duplicated client usage by making the "direct" side a raw UDS/HTTP call or construct the expected request/response directly from the registry fixture instead of calling NewClient so the oracle is independent of internal request/decoding code (update the setup in toolIntegrationDeps and the direct call sites referencing NewClient and deps.newClient; apply the same change for the other occurrence around the 182-190 block).internal/api/spec/spec_test.go (1)
310-417: Add schema coverage for the tool search operations too.This block covers list/invoke/approvals/toolsets, but the dedicated tool search endpoints are still unasserted. A missing operation or wrong request/response schema there will slip through this suite.
As per coding guidelines, "Must Check: Focus on critical paths: workflow execution, state management, error handling".
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/api/spec/spec_test.go` around lines 310 - 417, Add explicit assertions for the tool search endpoints by calling operationFor(t, doc, "<tool search path>", "<HTTP method>") (e.g., the dedicated search route(s) in the API), then use assertTagsContain to ensure the "tools" tag, jsonRequestSchema/jsonResponseSchema to extract request/response bodies, assertResponseStatus for expected statuses, and assertRequired/assertNotRequired/propertySchema to verify the search request contains the expected query/filter fields (e.g., "query", "cursor", "limit", "workspace_id") and the response defines the expected results array (e.g., "results" or "tools") with items schema requiring the same tool descriptor fields already asserted (descriptor.tool_id, descriptor.backend, etc.); reuse helpers from the test (operationFor, jsonRequestSchema, jsonResponseSchema, assertRequired, propertySchema, assertEnumValues, assertTagsContain) so the search endpoints have parity with list/invoke/approvals/toolsets checks.internal/cli/task_test.go (1)
623-824: Normalize these subtest names to theShould ...pattern.The changed subtests here use short labels like
"next"and"release", which drifts from the repository’s required Go test naming convention.As per coding guidelines, "MUST use t.Run("Should...") pattern for ALL test cases".
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/cli/task_test.go` around lines 623 - 824, Tests use terse subtest names ("next", "next no work", table names "heartbeat", "complete", "fail", "release") which violate the project's "t.Run('Should...')" naming rule; update each t.Run invocation and the table-driven test case name fields (the literal values in the []struct{ name string ... } slice and the two standalone t.Run calls) to use the "Should ..." pattern (e.g. "Should claim next task", "Should return no work", "Should heartbeat", "Should complete", "Should fail", "Should release") while keeping the existing assertions and behavior unchanged; verify the loop that uses tt.name still references the updated names.internal/api/core/tools_test.go (1)
20-128: Add coverage for the session-search and single-toolset handlers.
newToolCoreEnginewires/sessions/:id/tools/searchand/toolsets/:id, but this suite never hits either path. Those two handlers have different scoping/parameter behavior than the operator list/search cases, so they can drift without any regression signal.As per coding guidelines,
**/*_test.go:Focus on critical paths: workflow execution, state management, error handling.Also applies to: 236-248
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/api/core/tools_test.go` around lines 20 - 128, The test misses exercise of the session-specific search and single-toolset endpoints wired by newToolCoreEngine; add subtests in TestToolHandlersExposeOperatorSessionInvokeAndToolsets that call POST "/sessions/sess-1/tools/search" (with a query payload like {"query":"skill","limit":1}) and GET "/toolsets/ts-1" (or the id created by newAPITestToolRegistry) to assert HTTP 200 and correct response shapes (e.g., ToolsResponse contains expected tool and ToolsetResponse.Status == "expanded" and ExpandedTools contains toolspkg.ToolIDSkillView), reusing performRequest, decodeToolJSON, and the same registry to ensure scoping/parameter behavior is covered.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.compozy/tasks/tools-refac/qa/bootstrap.env:
- Around line 2-10: The file currently commits machine-specific absolute paths
for environment variables (e.g., WORKSPACE_PATH, QA_OUTPUT_PATH, AGH_HOME,
AGH_UDS_PATH, TMUX_BRIDGE_SOCKET, PROVIDER_HOME, PROVIDER_CODEX_HOME), which
should be replaced with portable, template-style or runtime-resolved values;
update bootstrap.env to use either environment-variable fallbacks or
placeholders (e.g., reference an external config or use ${VAR:-default} style
semantics) instead of hardcoded developer paths, ensure socket/temporary paths
default to OS temp (or relative workspace) and keep AGH_HTTP_PORT as a
configurable value, and document the expected variables so CI/dev machines can
supply their own values.
In `@internal/acp/client_test.go`:
- Around line 731-779: The test TestStartMCPServersSkipsRemoteTransports is a
top-level test body but must follow the repo convention to use a t.Run("Should
...") subtest; modify the function to call t.Run("Should skip remote transports
when starting MCP servers", func(t *testing.T) { t.Parallel(); /* existing test
body */ }) so the existing assertions and helper calls (New, startHelperProcess,
captureRequestParams, decodeCapturedNewSessionRequest, stopProcess) move inside
that subtest and retain t.Parallel; ensure you do not duplicate defer
stopProcess outside the subtest and keep helperEnvWithCapture, StartOpts and
MCPServers setup inside the subtest scope.
In `@internal/api/core/network_details.go`:
- Line 479: Add a leading comment above the unexported function
networkChannelAggregates that explains why the helper exists and what it does
(not just that it aggregates), e.g., describe its purpose in computing
channel-level aggregates from per-node/per-socket network stats and any
important assumptions or invariants it relies on; place this short “why/what”
comment immediately above the networkChannelAggregates function declaration so
it satisfies the guideline for unexported identifiers.
- Around line 479-495: The function networkChannelAggregates calls
service.ListPeers without validating service; add a nil check for the service
parameter at the top of networkChannelAggregates (similar to existing checks for
networkStore and sessionsManager) and return a descriptive error like "api:
network service is required" to avoid a nil-interface panic when NetworkService
is nil before invoking service.ListPeers; ensure the check references the
service variable so callers of networkChannelAggregates or exported
NetworkChannelPayloads cannot trigger a panic.
In `@internal/api/core/tools.go`:
- Around line 96-111: The scope defaults computed by operatorToolScope are
merged into the local scope variable but the downstream payloads
(ApprovalRequest in ToolApprovals.CreateToolApproval and CallRequest in the tool
call path) still use raw req.SessionID/req.WorkspaceID/req.AgentName; update
those payload constructions to use scope.SessionID, scope.WorkspaceID, and
scope.AgentName (and keep Input as cloneRawMessage(req.Input) and InputDigest as
req.InputDigest) so the normalized defaults are propagated to
ToolApprovals.CreateToolApproval and the CallRequest creation; ensure the same
change is applied in both the approval branch (where ApprovalRequest is built)
and the call branch (where CallRequest is built).
- Around line 421-445: The code currently assigns payload.Message directly from
toolErr.Error() and err.Error(), which may leak secrets; replace those direct
assignments in the error handling branch (cases using toolErr, the err != nil
branch, and the final payload.Message defaults) with a sanitization step that
returns a non-sensitive message — e.g., map known toolErr.Code and
toolspkg.ReasonOf(err) to a safe canonical message or call a new helper like
sanitizeErrorMessage(err, toolErr.Code, payload.ReasonCodes) that strips secret
tokens (or returns http.StatusText(status) / a code-based message) and only
includes hashed identifiers if needed; keep returning ReasonCodes and Layer (via
toolErrorLayer) but never expose raw err.Error() in payload.Message, and ensure
MaskInternalErrors still forces generic messages for 5xx responses.
In `@internal/api/httpapi/routes.go`:
- Around line 130-131: The routes POST /:id/approvals and POST /:id/invoke
register handlers CreateToolApproval and InvokeTool without the
privilegedMutationGuard, leaving tool mutation/execution endpoints unprotected;
update the tools route registrations in routes.go to wrap these handlers with
privilegedMutationGuard() (the same guard used for settings/extensions routes)
so that CreateToolApproval and InvokeTool are only reachable when the privileged
guard allows it, matching the pattern used elsewhere and preventing remote
non-loopback tool invocation.
In `@internal/api/udsapi/hosted_mcp.go`:
- Around line 145-156: releaseHostedMCP currently calls
HostedMCP.ReleaseBind(req.BindID) without validating the requesting peer,
allowing one local client to revoke another's bind; replicate the peer-check
logic used by the bind/projection/call handlers: extract the peer identity from
the UDS connection/context (same method those handlers use), verify that the
peer owns or is authorized for req.BindID (either call an existing method that
accepts peer info or query HostedMCP for the bind owner) and only then call
ReleaseBind (or a ReleaseBindWithPeer equivalent) and respond; update
releaseHostedMCP to perform this ownership check before teardown.
- Around line 76-82: Validate request parameters and perform all auth/peer/nonce
checks and call core.RespondError (or other HTTP error responses) before calling
core.PrepareSSE so the HTTP status code and body are sent on failure instead of
being emitted as SSE events; specifically, move or duplicate the validation
logic that inspects bindID (from c.Query("bind_id")), lastDigest,
peer/nonce/auth checks and any calls that can return 400/403/503 so they run and
return on error prior to invoking core.PrepareSSE (and do the same for the other
block around the Projection call at the later section), then only call
core.PrepareSSE and proceed to writer/Projection when all validations pass.
In `@internal/cli/client_test.go`:
- Around line 691-810: The test TestUnixSocketClientHostedMCPMethods contains
multiple assertions for different API flows but they are all in one top-level
test with a single t.Parallel(), violating the repo rule to use named subtests;
split the monolithic body into separate t.Run("Should ...") subtests for each
scenario (e.g., "Should bind hosted MCP", "Should fetch projection", "Should
stream projection", "Should call hosted tool", "Should release hosted MCP") and
call t.Parallel() at the start of each subtest; move the relevant request setup,
client call (BindHostedMCP, HostedMCPProjection, StreamHostedMCPProjection,
CallHostedMCP, ReleaseHostedMCP) and assertions into their corresponding t.Run
blocks while keeping the same httpClient roundTripper behavior, and repeat this
pattern for the other test blocks noted (the other ranges mentioned) so every
case uses t.Run + t.Parallel().
In `@internal/cli/client_tools.go`:
- Around line 268-284: The sensitiveToolFieldName matcher is too broad (it
treats any key containing "token" as sensitive), so update the function to only
redact credential-shaped names: modify the markers list to remove the generic
"token" and instead detect token-like segments (e.g., keys that equal "token" or
"access_token" or end with "_token"/"-token"), and/or split the normalized key
on non-alphanumeric separators and check segments for exact marker matches
(including plural "tokens" where appropriate); adjust sensitiveToolFieldName
(and its use of normalized variable) to use this stricter segment-or-suffix
matching so fields like "completion_tokens" or "token_count" are not redacted.
- Around line 133-150: InvokeTool currently returns the decoded
ToolInvokeResponseRecord without applying redaction; call the existing
sanitizeToolInvokeResponse helper on the response (e.g.,
sanitizeToolInvokeResponse(&response) or the appropriate signature) after doJSON
succeeds and before returning so preview, structured, content[*].data and
metadata are sanitized and secrets (agh_claim_*, MCP/OAuth/PKCE tokens, secret
bindings) are removed; update the return path in InvokeTool to run this
sanitization and return the sanitized response.
In `@internal/cli/client.go`:
- Around line 1051-1054: The SSE handler currently returns raw error frames
(errors.New(strings.TrimSpace(string(event.Data)))) which bypasses redaction;
instead pass event.Data through the existing readAPIError parser/scrubber and
return the resulting error (e.g., call readAPIError(event.Data) and return its
error), falling back to a sanitized generic error only if readAPIError itself
fails—this ensures SSEEvent error frames are redacted the same way as other API
errors. Refer to SSEEvent, event.Data, readAPIError, and the current errors.New
usage when making the change.
In `@internal/cli/config_test.go`:
- Around line 407-409: The test currently only checks that
parseStringSliceValue(`["ok",1]`) returns a non-nil error; change it to assert
the specific error class or message so the failure mode is guaranteed. Update
the assertion for parseStringSliceValue to use a specific test helper (e.g.,
ErrorContains or ErrorAs) to verify the error is the expected JSON/type error
(match the substring or error type produced by parseStringSliceValue) instead of
a generic non-nil check; keep the call and input the same and replace
t.Fatal(...) with the targeted assertion referencing parseStringSliceValue.
- Around line 279-410: The test TestConfigRenderingAndMutationHelpers bundles
many independent checks; split it into separate t.Run("Should ...") subtests
(e.g., "Should render show bundle human", "Should render show bundle toon",
"Should list bundle human", "Should list bundle toon", "Should render path
bundle human", "Should render path bundle toon", "Should classify mutation
paths", "Should parse string slice values") and move each logical block that
calls configShowBundle.human()/toon(), configListBundle.human()/toon(),
configPathBundle.human()/toon(), the table-driven calls to configMutationPath,
and parseStringSliceValue into its own subtest; ensure each subtest calls
t.Parallel() where safe, and change the table-driven t.Run names for the
mutation path cases to the required "Should ..." pattern (not the raw path
string) while keeping the existing assertions and use of symbols unchanged so
failures are isolated and guidelines-compliant.
In `@internal/cli/mcp_auth_test.go`:
- Around line 46-93: Split the monolithic
TestMCPAuthStatusBundlesRenderHumanAndToon into multiple t.Run subtests (e.g.,
"Should render single status human", "Should render single status toon", "Should
render list human", "Should render list toon"), move t.Parallel() into each
subtest where safe, and group the related assertions inside their respective
subtest blocks; keep the shared setup (fixedTestNow, status creation) at the top
of TestMCPAuthStatusBundlesRenderHumanAndToon and call
mcpAuthStatusBundle(status) and
mcpAuthStatusListBundle([]mcpauth.Status{status}) inside the appropriate
subtests, then run bundle.human(), bundle.toon(), listBundle.human(), and
listBundle.toon() with their existing checks inside the corresponding t.Run
bodies so failures isolate to the specific behavior.
In `@internal/cli/tool_integration_test.go`:
- Around line 47-50: In the t.Cleanup block that creates ctx,cancel via
context.WithTimeout and calls server.Shutdown(ctx), stop discarding the returned
error from server.Shutdown; capture it and handle it (e.g., if err != nil {
t.Fatalf("server.Shutdown failed: %v", err) } or t.Errorf(...) ) so test
failures or leaked resources are surfaced; ensure you still call cancel() via
defer cancel() and reference the server.Shutdown(ctx) call by name when adding
the conditional error handling.
In `@internal/cli/tool_operator.go`:
- Around line 23-31: The tool invoke flow never captures or forwards an approval
token; update the CLI to accept and pass approval_token by adding an
approvalToken string field to the toolInvokeFlags struct, wire a corresponding
CLI flag parser where toolInvokeFlags is populated (the same location that sets
input/inputFile/toolCallID/etc.), and include this approvalToken value in the
invoke request payload when calling the function that sends the tool invocation
(the code that constructs the request object for the tool invoke API). Ensure
the field name is approvalToken in toolInvokeFlags and map it to the API
request's approval_token property so approval-gated tools can complete the
second invoke from the CLI.
In `@internal/cli/tool.go`:
- Around line 35-39: The validation trims sessionID and bindNonce but the
original variables (sessionID, bindNonce) are later forwarded untrimmed to the
proxy; update the code so you assign the trimmed values back (or use new trimmed
variables) and pass those trimmed values to the proxy call that binds the hosted
session (the call that currently forwards sessionID and bindNonce), keeping the
same error checks that return mcppkg.ErrHostedSessionRequired and
mcppkg.ErrHostedNonceRequired when blank.
---
Outside diff comments:
In `@internal/cli/cli_integration_test.go`:
- Around line 1753-1769: The test currently treats any non-nil error as success;
change the assertion after executeRootCommand (used with "task complete",
enqueued.ID) to specifically assert stderr contains the expected
stale/inactive-lease rejection message (use an ErrorContains-style check for the
known rejection text) and still assert the raw token is not leaked (the existing
strings.Contains on err.Error() for "agh_claim_"), and apply the same specific
stderr assertion pattern to the other occurrence around the enqueued retry block
(the similar check at lines ~1892-1900) so failures due to unrelated
CLI/transport issues no longer pass.
In `@internal/cli/task_test.go`:
- Around line 678-684: The test currently verifies only that ClaimTokenHash is
set on the AgentTaskNextRecord (variable output) but not that a raw claim token
wasn't leaked; update the subtest to assert that no raw claim token appears by
checking that either output.Claim.Lease.ClaimToken (or the field that would
carry the raw token) is empty/nil and also that the captured stdout does not
contain the prefix "agh_claim_"; modify the assertions around
AgentTaskNextRecord (output) and the stdout string to explicitly fail if a raw
"agh_claim_" token is present while keeping the existing ClaimTokenHash check.
---
Nitpick comments:
In `@internal/api/core/conversions_parsers_test.go`:
- Around line 231-255: Wrap the existing assertions that validate payload (the
checks on payload.Name, payload.Provider, payload.MCPServers length and the
string comparisons for payload.Tools, payload.Toolsets, payload.DenyTools) into
a t.Run subtest (e.g. t.Run("Should parse payload fields", func(t *testing.T) {
... })) so each group of assertions executes as a named subtest; keep the same
checks and error messages but move them inside the anonymous func(t *testing.T)
and call t.Run around them to follow the repository's t.Run("Should ...")
pattern.
In `@internal/api/core/tools_test.go`:
- Around line 20-128: The test misses exercise of the session-specific search
and single-toolset endpoints wired by newToolCoreEngine; add subtests in
TestToolHandlersExposeOperatorSessionInvokeAndToolsets that call POST
"/sessions/sess-1/tools/search" (with a query payload like
{"query":"skill","limit":1}) and GET "/toolsets/ts-1" (or the id created by
newAPITestToolRegistry) to assert HTTP 200 and correct response shapes (e.g.,
ToolsResponse contains expected tool and ToolsetResponse.Status == "expanded"
and ExpandedTools contains toolspkg.ToolIDSkillView), reusing performRequest,
decodeToolJSON, and the same registry to ensure scoping/parameter behavior is
covered.
In `@internal/api/core/tools.go`:
- Around line 288-499: Add concise, intent-focused Go doc comments for each
unexported helper to explain what they do and why (not just how): add comments
above toolDescriptorPayload, toolBackendPayload, toolSourcePayload,
toolAvailabilityPayload, toolDecisionPayload describing the payload mapping
purpose and any important invariants; above bindToolSearch, toolIDParam,
operatorToolScope, sessionToolScope, toolScopeFromSearch explain the
request/param binding and scoping intent; above respondToolError,
toolErrorCodeForStatus, toolErrorLayer describe the error normalization,
status→code mapping and layer derivation logic; keep each comment short, mention
the “why” (reason for normalization/mapping) and any non-obvious behavior or
constraints so maintainability/policy requirements are satisfied.
In `@internal/api/spec/spec_test.go`:
- Around line 310-417: Add explicit assertions for the tool search endpoints by
calling operationFor(t, doc, "<tool search path>", "<HTTP method>") (e.g., the
dedicated search route(s) in the API), then use assertTagsContain to ensure the
"tools" tag, jsonRequestSchema/jsonResponseSchema to extract request/response
bodies, assertResponseStatus for expected statuses, and
assertRequired/assertNotRequired/propertySchema to verify the search request
contains the expected query/filter fields (e.g., "query", "cursor", "limit",
"workspace_id") and the response defines the expected results array (e.g.,
"results" or "tools") with items schema requiring the same tool descriptor
fields already asserted (descriptor.tool_id, descriptor.backend, etc.); reuse
helpers from the test (operationFor, jsonRequestSchema, jsonResponseSchema,
assertRequired, propertySchema, assertEnumValues, assertTagsContain) so the
search endpoints have parity with list/invoke/approvals/toolsets checks.
In `@internal/api/udsapi/udsapi_integration_test.go`:
- Around line 354-355: The test is brittle because it compares
created.Record.Spec as a raw JSON string which depends on field order; instead
unmarshal created.Record.Spec into a map[string]any or a struct and assert
individual fields (e.g., id, backend.kind, backend.native_name, description,
input_schema.type, source.kind, source.owner, visibility, risk, read_only) using
the test helpers; locate the assertion around created.Record.Spec in
udsapi_integration_test.go and replace the exact-string comparison with JSON
decoding and targeted field checks so the test passes regardless of marshal
ordering.
In `@internal/cli/task_test.go`:
- Around line 623-824: Tests use terse subtest names ("next", "next no work",
table names "heartbeat", "complete", "fail", "release") which violate the
project's "t.Run('Should...')" naming rule; update each t.Run invocation and the
table-driven test case name fields (the literal values in the []struct{ name
string ... } slice and the two standalone t.Run calls) to use the "Should ..."
pattern (e.g. "Should claim next task", "Should return no work", "Should
heartbeat", "Should complete", "Should fail", "Should release") while keeping
the existing assertions and behavior unchanged; verify the loop that uses
tt.name still references the updated names.
In `@internal/cli/tool_integration_test.go`:
- Around line 53-57: The test currently uses the same client transport code
twice (NewClient used for both direct and deps.newClient), masking regressions;
replace the duplicated client usage by making the "direct" side a raw UDS/HTTP
call or construct the expected request/response directly from the registry
fixture instead of calling NewClient so the oracle is independent of internal
request/decoding code (update the setup in toolIntegrationDeps and the direct
call sites referencing NewClient and deps.newClient; apply the same change for
the other occurrence around the 182-190 block).
🪄 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: 7ff68159-7200-4220-8ca3-3a0dacd90534
⛔ Files ignored due to path filters (212)
.agents/skills/agh-qa-bootstrap/scripts/bootstrap-qa-env.pyis excluded by!.agents/**.compozy/tasks/tools-refac/qa/bootstrap-manifest.jsonis excluded by!**/*.json.compozy/tasks/tools-refac/qa/issues/BUG-001.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/issues/BUG-002.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/issues/BUG-003.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/issues/BUG-004.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/issues/BUG-005.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/issues/BUG-006.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-AUDIT-001.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-AUT-001.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-AUT-002.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-AUT-003.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-AUT-004.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-AUT-005.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-AUT-006.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-FUNC-001.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-FUNC-002.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-FUNC-003.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-FUNC-004.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-FUNC-005.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-FUNC-006.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-FUNC-007.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-FUNC-008.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-INT-001.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-INT-002.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-INT-003.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-INT-004.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-INT-005.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-INT-006.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-REG-001.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-REG-002.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-REG-003.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-REG-004.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-REG-005.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-SEC-001.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-SEC-002.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-SEC-003.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-SEC-004.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-SEC-005.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-SEC-006.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-cases/TC-UI-001.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-plans/tools-refac-codegen-and-docs.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-plans/tools-refac-redaction-suite.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-plans/tools-refac-regression.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-plans/tools-refac-test-plan.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/test-plans/tools-refac-traceability.mdis excluded by!**/*.md.compozy/tasks/tools-refac/qa/verification-report.mdis excluded by!**/*.md.compozy/tasks/tools-registry/_tasks.mdis excluded by!**/*.md.compozy/tasks/tools-registry/_techspec.mdis excluded by!**/*.md.compozy/tasks/tools-registry/adrs/adr-010-remote-mcp-call-through.mdis excluded by!**/*.md.compozy/tasks/tools-registry/adrs/adr-011-mark3labs-mcp-go.mdis excluded by!**/*.md.compozy/tasks/tools-registry/analysis/analysis_mark3labs_mcp_go.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/MEMORY.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_01.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_02.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_03.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_04.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_05.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_06.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_07.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_08.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_09.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_10.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_11.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_12.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_13.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_14.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_15.mdis excluded by!**/*.md.compozy/tasks/tools-registry/memory/task_16.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/behavioral-scenario-charter.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/bootstrap-manifest.jsonis excluded by!**/*.json.compozy/tasks/tools-registry/qa/fixtures/redaction-sentinels.jsonis excluded by!**/*.json,!**/fixtures/**.compozy/tasks/tools-registry/qa/issues/BUG-001.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/issues/BUG-002.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/issues/BUG-003.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/logs/baseline-failing-packages-env-narrow.logis excluded by!**/*.log.compozy/tasks/tools-registry/qa/logs/baseline-make-verify-rerun.logis excluded by!**/*.log.compozy/tasks/tools-registry/qa/logs/baseline-make-verify.logis excluded by!**/*.log.compozy/tasks/tools-registry/qa/logs/bootstrap-rerun-short-runtime.logis excluded by!**/*.log.compozy/tasks/tools-registry/qa/logs/fix-api-homepaths-targeted-rerun.logis excluded by!**/*.log.compozy/tasks/tools-registry/qa/logs/fix-api-homepaths-targeted.logis excluded by!**/*.log.compozy/tasks/tools-registry/qa/logs/fix-policy-deny-all-targeted-rerun.logis excluded by!**/*.log.compozy/tasks/tools-registry/qa/logs/fix-policy-deny-all-targeted.logis excluded by!**/*.log.compozy/tasks/tools-registry/qa/logs/smoke/TC-SEC-001.logis excluded by!**/*.log.compozy/tasks/tools-registry/qa/peer-review-prompt-round3.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/peer-review-prompt-round6.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/peer-review-result-round3.jsonis excluded by!**/*.json.compozy/tasks/tools-registry/qa/peer-review-result-round4.jsonis excluded by!**/*.json.compozy/tasks/tools-registry/qa/peer-review-result-round5.jsonis excluded by!**/*.json.compozy/tasks/tools-registry/qa/peer-review-result-round6.jsonis excluded by!**/*.json.compozy/tasks/tools-registry/qa/peer-review-summary-round6.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-001.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-002.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-003.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-004.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-005.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-006.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-007.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-008.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-009.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-010.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-011.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-012.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-013.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-014.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-015.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-016.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-017.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-018.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-019.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-020.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-021.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-022.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-023.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-024.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-025.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-026.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-027.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-028.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-029.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-030.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-031.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-032.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-033.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-034.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-035.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-036.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-037.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-038.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-039.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-040.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-041.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-042.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-043.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-044.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-045.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-046.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-047.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-048.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-049.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-050.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-051.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-052.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-053.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-054.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-055.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-056.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-057.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-FUNC-058.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-001.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-002.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-003.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-004.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-005.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-006.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-007.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-008.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-009.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-010.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-011.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-012.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-013.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-014.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-015.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-INT-016.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-PERF-001.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-PERF-002.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-PERF-003.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-001.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-002.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-003.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-004.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-005.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-006.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-007.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-008.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-009.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-010.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-011.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-012.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-013.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-SEC-014.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-UI-001.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-UI-002.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-UI-003.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-UI-004.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-UI-005.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-cases/TC-UI-006.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-plans/full-regression.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-plans/security-redaction-regression.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-plans/smoke-regression.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-plans/targeted-regression.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-plans/tool-registry-test-plan.mdis excluded by!**/*.md.compozy/tasks/tools-registry/qa/test-plans/traceability-matrix.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_01.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_02.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_03.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_04.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_05.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_06.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_07.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_08.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_09.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_10.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_11.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_12.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_13.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_14.mdis excluded by!**/*.md.compozy/tasks/tools-registry/task_15.mdis excluded by!**/*.mdconfig.tomlis excluded by!**/*.tomldocs/_refacs/20260429-tools-builtin-domain-split.mdis excluded by!**/*.mdgo.sumis excluded by!**/*.sum
📒 Files selected for processing (88)
.compozy/tasks/tools-refac/qa/bootstrap.env.compozy/tasks/tools-registry/qa/peer-review-result-round3.err.compozy/tasks/tools-registry/qa/peer-review-result-round4.err.compozy/tasks/tools-registry/qa/peer-review-result-round5.err.compozy/tasks/tools-registry/qa/peer-review-result-round6.errMakefilego.modinternal/acp/client.gointernal/acp/client_test.gointernal/acp/permission.gointernal/api/contract/agents.gointernal/api/contract/agents_test.gointernal/api/contract/contract.gointernal/api/contract/tools.gointernal/api/contract/tools_test.gointernal/api/core/agent_tasks.gointernal/api/core/automation.gointernal/api/core/conversions.gointernal/api/core/conversions_parsers_test.gointernal/api/core/errors.gointernal/api/core/handlers.gointernal/api/core/interfaces.gointernal/api/core/network_details.gointernal/api/core/settings_internal_test.gointernal/api/core/settings_test.gointernal/api/core/tools.gointernal/api/core/tools_test.gointernal/api/httpapi/handlers.gointernal/api/httpapi/handlers_test.gointernal/api/httpapi/routes.gointernal/api/httpapi/server.gointernal/api/httpapi/server_test.gointernal/api/spec/spec.gointernal/api/spec/spec_test.gointernal/api/testutil/apitest.gointernal/api/udsapi/agent_tasks_bindings_test.gointernal/api/udsapi/agent_tasks_test.gointernal/api/udsapi/handlers_test.gointernal/api/udsapi/hosted_mcp.gointernal/api/udsapi/routes.gointernal/api/udsapi/server.gointernal/api/udsapi/server_test.gointernal/api/udsapi/transport_parity_integration_test.gointernal/api/udsapi/udsapi_integration_test.gointernal/cli/agent_kernel_test.gointernal/cli/cli_historical_mixed_ownership_integration_test.gointernal/cli/cli_integration_test.gointernal/cli/client.gointernal/cli/client_test.gointernal/cli/client_tools.gointernal/cli/config_test.gointernal/cli/doc_test.gointernal/cli/helpers_test.gointernal/cli/hooks.gointernal/cli/mcp_auth_test.gointernal/cli/root.gointernal/cli/task.gointernal/cli/task_test.gointernal/cli/tool.gointernal/cli/tool_integration_test.gointernal/cli/tool_operator.gointernal/cli/tool_test.gointernal/config/agent.gointernal/config/agent_resource.gointernal/config/agent_resource_test.gointernal/config/agent_test.gointernal/config/config.gointernal/config/config_test.gointernal/config/hooks.gointernal/config/hooks_test.gointernal/config/merge.gointernal/config/provider.gointernal/config/provider_test.gointernal/config/tool_grammar.gointernal/config/tool_surface.gointernal/config/tool_surface_test.gointernal/config/tools.gointernal/config/tools_test.gointernal/daemon/agent_skill_resources.gointernal/daemon/agent_skill_resources_integration_test.gointernal/daemon/agent_skill_resources_test.gointernal/daemon/boot.gointernal/daemon/composed_assembler_test.gointernal/daemon/daemon.gointernal/daemon/daemon_memory_e2e_integration_test.gointernal/daemon/daemon_mock_agents_integration_test.gointernal/daemon/daemon_test.gointernal/daemon/harness_context.go
## Release v0.0.1 This PR prepares the release of version v0.0.1. ### Changelog ## 0.0.1 - 2026-05-26 ### Other Changes - Lessons learned ### ♻️ Refactoring - Project structure (#7) - Kb improvements (#12) - Rename spaces to channels (#17) - Add extensions gaps (#21) - Improve tool calls ui (#22) - Remove web app header - Module improvements (#29) - Memory improvements (#35) - Storybook for web and ui (#38) - Enable AGH network by default for new installs (#57) - Hermes adjustments (#69) - Badges design (#84) - Storybook scenario and logos gallery - Migrate typescript tests (#114) - Internal go packages (#120) - Ui patterns (#127) - Improve e2e tests (#130) - Ui redesign - Workspace isolation across runtime surfaces (#145) - Prod ready applies (#162) - Tool card ui (#164) - Alpha on logo - Prod ready features (#167) - Thread sheet (#202) ### 🎉 Features - Implement config foundation packages - Implement sqlite store package - Add ACP client package - Add session lifecycle manager - Implement observe package - Add daemon composition root - Add uds api server - Implement cli package - Add http api server - Add system design - Add foundation types, schemas, and layout shell for web client - Add daemon health polling and agent sidebar systems for web client - Add session system CRUD, streaming core, and session store for web client - Add chat view, messages, and composer tests for web client - Add tool cards and renderers for web client - Add file-backed memory store core - Scaffold memory session seams - Add memory dream consolidation service - Wire memory assembler into daemon - Add memory api and cli - New skills system (#1) - Add workspace entity (#5) - Add new skill capabilities (#8) - Web ui v2 (#9) - Improve hooks system (#10) - Session resilience (#11) - Add extensability (#13) - Add automation (#16) - Add channels (#14) - Add network implementation (#15) - Add network, bridges and automations web pages (#18) - Ext registry (#20) - Add core tasks (#19) - Bridge adapters (#23) - Add site (#26) - Add ext refac and sandbox (#25) - Settings ui (#37) - Tasks ui (#36) - Harness improvements (#44) - Agent capabilities (#49) - Redesign ui (#48) - Unify capability (#53) - Redesign network workspace (#59) - Add task deletion and split session delete from stop (#58) - Session provider selection (#60) - Production grade adjustments (#66) - Autonomous system (#75) - Add agent session route (#80) - Tools registry (#85) - Agents soul (#88) - Add network threads (#105) - Orchestration improvements (#106) - Memory v2 (#108) - Agent categories (#113) - Providers model (#118) - Add canonical AGH bundled skill (#143) - Onboarding and improvements (#198) - Onboarding and improvements (#201) ### 🐛 Bug Fixes - Review round - Review rounds - Resolve memory extensibility review batch - Embed web into daemon - Defaults agents - Acp integration (#4) - Lint errors - Prd folder - Remove orphan web actions and dead surfaces (#55) - Qa testing and fixes (#73) - New review rounds (#82) - Security audit (#90) - Release qa round (#95) - Add missing tools (#141) - New qa round (#147) - Advanced qa round (#149) - Homebrew tap - Final review round (#151) - Daemon healthy - Reasoning models (#158) - Lint errors (#160) - Review round (#168) - Release adjustments (#171) - Stabilize release ci fixtures - Stabilize release integration gate - Stabilize release verify gates - Stabilize release integration flows - Stabilize release verify gates - Stabilize main verify shutdown - Ignore stale acpmock cancel - Marketplace search focus and filtering (#193) - Website video - Workspace command select ### 📚 Documentation - Update agents.md - Update prd - Update skills - Update compozy tasks - Update compozy - Update compozy - Add new skills - Archive prd - Update prds - Update rfc - Update prds - Update prds - Add automation prd - Channels prd - Update prd - Update prd - New prds - Archive prds - Bridges adapters prd - Sandbox prd - Update - Archive prd - Update - Add new prd - New design - Update prd - Archive prds - Update prds - Tasks-ui prd tasks - Update prd - Update design docs - Agent capabilities prd - Improve site docs - Remove old design references - Udpate - Autonomous prd - Update skills - Blog design - Agent sould prd - Final qa plan - Update - Remove codex ledgers from gitignore - Remove not needed files - Udpate ledger - Update cy-codex-loop skill - Orchestration improves prd - Update prds - Orch improvs prd - Memv2 prd - Providers model prd - Update refacs prd - New design proposal - Update rules - Update skills - New blog posts (#173) - Format docs - Remove old design files - Remove old - Skeeper update ### 📦 Build System - Initial structure - Commitlint - Frontend base structure - Update vscode settings - Add subagents - Coderabbit - Prd and tooling - Bun lock - Lint tooling - Copy.md and tooling adjusts - Add repoclone rc - Upgrade skeeper to v0.2.0 - Update go.mod - Adopt task artifacts into skeeper - Sync codex plans with skeeper - Skeeper lock - Skeeper lock - New skills - Skeeper lock - Skeeper lock - Skeeper lock - Update deps and go - Regenerate daytona sidecar assets for go 1.26.3 - Fix cliff - Ignore docs on fmt - Build web assets before goreleaser - Extend release dry-run timeout ### 🔧 CI/CD - Lint errors - Fint release pr - Fix goreleaser ### 🧪 Testing - Add e2e tests (#27) - Qa rounds (#78) - Improve test suite (#138) - Harden daemon-served restart reloads - Harden daemon-served readiness waits - Stabilize dashboard focus assertion - Stabilize release integration gates - Stabilize release e2e markers - Stabilize release e2e flows Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
## Release v0.0.1 This PR prepares the release of version v0.0.1. ### Changelog ## 0.0.1 - 2026-05-26 ### Other Changes - Lessons learned ### ♻️ Refactoring - Project structure (#7) - Kb improvements (#12) - Rename spaces to channels (#17) - Add extensions gaps (#21) - Improve tool calls ui (#22) - Remove web app header - Module improvements (#29) - Memory improvements (#35) - Storybook for web and ui (#38) - Enable AGH network by default for new installs (#57) - Hermes adjustments (#69) - Badges design (#84) - Storybook scenario and logos gallery - Migrate typescript tests (#114) - Internal go packages (#120) - Ui patterns (#127) - Improve e2e tests (#130) - Ui redesign - Workspace isolation across runtime surfaces (#145) - Prod ready applies (#162) - Tool card ui (#164) - Alpha on logo - Prod ready features (#167) - Thread sheet (#202) ### 🎉 Features - Implement config foundation packages - Implement sqlite store package - Add ACP client package - Add session lifecycle manager - Implement observe package - Add daemon composition root - Add uds api server - Implement cli package - Add http api server - Add system design - Add foundation types, schemas, and layout shell for web client - Add daemon health polling and agent sidebar systems for web client - Add session system CRUD, streaming core, and session store for web client - Add chat view, messages, and composer tests for web client - Add tool cards and renderers for web client - Add file-backed memory store core - Scaffold memory session seams - Add memory dream consolidation service - Wire memory assembler into daemon - Add memory api and cli - New skills system (#1) - Add workspace entity (#5) - Add new skill capabilities (#8) - Web ui v2 (#9) - Improve hooks system (#10) - Session resilience (#11) - Add extensability (#13) - Add automation (#16) - Add channels (#14) - Add network implementation (#15) - Add network, bridges and automations web pages (#18) - Ext registry (#20) - Add core tasks (#19) - Bridge adapters (#23) - Add site (#26) - Add ext refac and sandbox (#25) - Settings ui (#37) - Tasks ui (#36) - Harness improvements (#44) - Agent capabilities (#49) - Redesign ui (#48) - Unify capability (#53) - Redesign network workspace (#59) - Add task deletion and split session delete from stop (#58) - Session provider selection (#60) - Production grade adjustments (#66) - Autonomous system (#75) - Add agent session route (#80) - Tools registry (#85) - Agents soul (#88) - Add network threads (#105) - Orchestration improvements (#106) - Memory v2 (#108) - Agent categories (#113) - Providers model (#118) - Add canonical AGH bundled skill (#143) - Onboarding and improvements (#198) - Onboarding and improvements (#201) ### 🐛 Bug Fixes - Review round - Review rounds - Resolve memory extensibility review batch - Embed web into daemon - Defaults agents - Acp integration (#4) - Lint errors - Prd folder - Remove orphan web actions and dead surfaces (#55) - Qa testing and fixes (#73) - New review rounds (#82) - Security audit (#90) - Release qa round (#95) - Add missing tools (#141) - New qa round (#147) - Advanced qa round (#149) - Homebrew tap - Final review round (#151) - Daemon healthy - Reasoning models (#158) - Lint errors (#160) - Review round (#168) - Release adjustments (#171) - Stabilize release ci fixtures - Stabilize release integration gate - Stabilize release verify gates - Stabilize release integration flows - Stabilize release verify gates - Stabilize main verify shutdown - Ignore stale acpmock cancel - Marketplace search focus and filtering (#193) - Website video - Workspace command select ### 📚 Documentation - Update agents.md - Update prd - Update skills - Update compozy tasks - Update compozy - Update compozy - Add new skills - Archive prd - Update prds - Update rfc - Update prds - Update prds - Add automation prd - Channels prd - Update prd - Update prd - New prds - Archive prds - Bridges adapters prd - Sandbox prd - Update - Archive prd - Update - Add new prd - New design - Update prd - Archive prds - Update prds - Tasks-ui prd tasks - Update prd - Update design docs - Agent capabilities prd - Improve site docs - Remove old design references - Udpate - Autonomous prd - Update skills - Blog design - Agent sould prd - Final qa plan - Update - Remove codex ledgers from gitignore - Remove not needed files - Udpate ledger - Update cy-codex-loop skill - Orchestration improves prd - Update prds - Orch improvs prd - Memv2 prd - Providers model prd - Update refacs prd - New design proposal - Update rules - Update skills - New blog posts (#173) - Format docs - Remove old design files - Remove old - Skeeper update ### 📦 Build System - Initial structure - Commitlint - Frontend base structure - Update vscode settings - Add subagents - Coderabbit - Prd and tooling - Bun lock - Lint tooling - Copy.md and tooling adjusts - Add repoclone rc - Upgrade skeeper to v0.2.0 - Update go.mod - Adopt task artifacts into skeeper - Sync codex plans with skeeper - Skeeper lock - Skeeper lock - New skills - Skeeper lock - Skeeper lock - Skeeper lock - Update deps and go - Regenerate daytona sidecar assets for go 1.26.3 - Fix cliff - Ignore docs on fmt - Build web assets before goreleaser - Extend release dry-run timeout ### 🔧 CI/CD - Lint errors - Fint release pr - Fix goreleaser - Fix release ### 🧪 Testing - Add e2e tests (#27) - Qa rounds (#78) - Improve test suite (#138) - Harden daemon-served restart reloads - Harden daemon-served readiness waits - Stabilize dashboard focus assertion - Stabilize release integration gates - Stabilize release e2e markers - Stabilize release e2e flows Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
## Release v0.0.2 This PR prepares the release of version v0.0.2. ### Changelog ## 0.0.2 - 2026-05-26 ### Other Changes - Lessons learned ### ♻️ Refactoring - Project structure (#7) - Kb improvements (#12) - Rename spaces to channels (#17) - Add extensions gaps (#21) - Improve tool calls ui (#22) - Remove web app header - Module improvements (#29) - Memory improvements (#35) - Storybook for web and ui (#38) - Enable AGH network by default for new installs (#57) - Hermes adjustments (#69) - Badges design (#84) - Storybook scenario and logos gallery - Migrate typescript tests (#114) - Internal go packages (#120) - Ui patterns (#127) - Improve e2e tests (#130) - Ui redesign - Workspace isolation across runtime surfaces (#145) - Prod ready applies (#162) - Tool card ui (#164) - Alpha on logo - Prod ready features (#167) - Thread sheet (#202) ### 🎉 Features - Implement config foundation packages - Implement sqlite store package - Add ACP client package - Add session lifecycle manager - Implement observe package - Add daemon composition root - Add uds api server - Implement cli package - Add http api server - Add system design - Add foundation types, schemas, and layout shell for web client - Add daemon health polling and agent sidebar systems for web client - Add session system CRUD, streaming core, and session store for web client - Add chat view, messages, and composer tests for web client - Add tool cards and renderers for web client - Add file-backed memory store core - Scaffold memory session seams - Add memory dream consolidation service - Wire memory assembler into daemon - Add memory api and cli - New skills system (#1) - Add workspace entity (#5) - Add new skill capabilities (#8) - Web ui v2 (#9) - Improve hooks system (#10) - Session resilience (#11) - Add extensability (#13) - Add automation (#16) - Add channels (#14) - Add network implementation (#15) - Add network, bridges and automations web pages (#18) - Ext registry (#20) - Add core tasks (#19) - Bridge adapters (#23) - Add site (#26) - Add ext refac and sandbox (#25) - Settings ui (#37) - Tasks ui (#36) - Harness improvements (#44) - Agent capabilities (#49) - Redesign ui (#48) - Unify capability (#53) - Redesign network workspace (#59) - Add task deletion and split session delete from stop (#58) - Session provider selection (#60) - Production grade adjustments (#66) - Autonomous system (#75) - Add agent session route (#80) - Tools registry (#85) - Agents soul (#88) - Add network threads (#105) - Orchestration improvements (#106) - Memory v2 (#108) - Agent categories (#113) - Providers model (#118) - Add canonical AGH bundled skill (#143) - Onboarding and improvements (#198) - Onboarding and improvements (#201) ### 🐛 Bug Fixes - Review round - Review rounds - Resolve memory extensibility review batch - Embed web into daemon - Defaults agents - Acp integration (#4) - Lint errors - Prd folder - Remove orphan web actions and dead surfaces (#55) - Qa testing and fixes (#73) - New review rounds (#82) - Security audit (#90) - Release qa round (#95) - Add missing tools (#141) - New qa round (#147) - Advanced qa round (#149) - Homebrew tap - Final review round (#151) - Daemon healthy - Reasoning models (#158) - Lint errors (#160) - Review round (#168) - Release adjustments (#171) - Stabilize release ci fixtures - Stabilize release integration gate - Stabilize release verify gates - Stabilize release integration flows - Stabilize release verify gates - Stabilize main verify shutdown - Ignore stale acpmock cancel - Marketplace search focus and filtering (#193) - Website video - Workspace command select ### 📚 Documentation - Update agents.md - Update prd - Update skills - Update compozy tasks - Update compozy - Update compozy - Add new skills - Archive prd - Update prds - Update rfc - Update prds - Update prds - Add automation prd - Channels prd - Update prd - Update prd - New prds - Archive prds - Bridges adapters prd - Sandbox prd - Update - Archive prd - Update - Add new prd - New design - Update prd - Archive prds - Update prds - Tasks-ui prd tasks - Update prd - Update design docs - Agent capabilities prd - Improve site docs - Remove old design references - Udpate - Autonomous prd - Update skills - Blog design - Agent sould prd - Final qa plan - Update - Remove codex ledgers from gitignore - Remove not needed files - Udpate ledger - Update cy-codex-loop skill - Orchestration improves prd - Update prds - Orch improvs prd - Memv2 prd - Providers model prd - Update refacs prd - New design proposal - Update rules - Update skills - New blog posts (#173) - Format docs - Remove old design files - Remove old - Skeeper update ### 📦 Build System - Initial structure - Commitlint - Frontend base structure - Update vscode settings - Add subagents - Coderabbit - Prd and tooling - Bun lock - Lint tooling - Copy.md and tooling adjusts - Add repoclone rc - Upgrade skeeper to v0.2.0 - Update go.mod - Adopt task artifacts into skeeper - Sync codex plans with skeeper - Skeeper lock - Skeeper lock - New skills - Skeeper lock - Skeeper lock - Skeeper lock - Update deps and go - Regenerate daytona sidecar assets for go 1.26.3 - Fix cliff - Ignore docs on fmt - Build web assets before goreleaser - Extend release dry-run timeout ### 🔧 CI/CD - Lint errors - Fint release pr - Fix goreleaser - Fix release - Fix release process ### 🧪 Testing - Add e2e tests (#27) - Qa rounds (#78) - Improve test suite (#138) - Harden daemon-served restart reloads - Harden daemon-served readiness waits - Stabilize dashboard focus assertion - Stabilize release integration gates - Stabilize release e2e markers - Stabilize release e2e flows - Improve suite speed Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
## Release v0.0.2 This PR prepares the release of version v0.0.2. ### Changelog ## 0.0.2 - 2026-05-26 ### Other Changes - Lessons learned ### ♻️ Refactoring - Project structure (#7) - Kb improvements (#12) - Rename spaces to channels (#17) - Add extensions gaps (#21) - Improve tool calls ui (#22) - Remove web app header - Module improvements (#29) - Memory improvements (#35) - Storybook for web and ui (#38) - Enable AGH network by default for new installs (#57) - Hermes adjustments (#69) - Badges design (#84) - Storybook scenario and logos gallery - Migrate typescript tests (#114) - Internal go packages (#120) - Ui patterns (#127) - Improve e2e tests (#130) - Ui redesign - Workspace isolation across runtime surfaces (#145) - Prod ready applies (#162) - Tool card ui (#164) - Alpha on logo - Prod ready features (#167) - Thread sheet (#202) ### 🎉 Features - Implement config foundation packages - Implement sqlite store package - Add ACP client package - Add session lifecycle manager - Implement observe package - Add daemon composition root - Add uds api server - Implement cli package - Add http api server - Add system design - Add foundation types, schemas, and layout shell for web client - Add daemon health polling and agent sidebar systems for web client - Add session system CRUD, streaming core, and session store for web client - Add chat view, messages, and composer tests for web client - Add tool cards and renderers for web client - Add file-backed memory store core - Scaffold memory session seams - Add memory dream consolidation service - Wire memory assembler into daemon - Add memory api and cli - New skills system (#1) - Add workspace entity (#5) - Add new skill capabilities (#8) - Web ui v2 (#9) - Improve hooks system (#10) - Session resilience (#11) - Add extensability (#13) - Add automation (#16) - Add channels (#14) - Add network implementation (#15) - Add network, bridges and automations web pages (#18) - Ext registry (#20) - Add core tasks (#19) - Bridge adapters (#23) - Add site (#26) - Add ext refac and sandbox (#25) - Settings ui (#37) - Tasks ui (#36) - Harness improvements (#44) - Agent capabilities (#49) - Redesign ui (#48) - Unify capability (#53) - Redesign network workspace (#59) - Add task deletion and split session delete from stop (#58) - Session provider selection (#60) - Production grade adjustments (#66) - Autonomous system (#75) - Add agent session route (#80) - Tools registry (#85) - Agents soul (#88) - Add network threads (#105) - Orchestration improvements (#106) - Memory v2 (#108) - Agent categories (#113) - Providers model (#118) - Add canonical AGH bundled skill (#143) - Onboarding and improvements (#198) - Onboarding and improvements (#201) ### 🐛 Bug Fixes - Review round - Review rounds - Resolve memory extensibility review batch - Embed web into daemon - Defaults agents - Acp integration (#4) - Lint errors - Prd folder - Remove orphan web actions and dead surfaces (#55) - Qa testing and fixes (#73) - New review rounds (#82) - Security audit (#90) - Release qa round (#95) - Add missing tools (#141) - New qa round (#147) - Advanced qa round (#149) - Homebrew tap - Final review round (#151) - Daemon healthy - Reasoning models (#158) - Lint errors (#160) - Review round (#168) - Release adjustments (#171) - Stabilize release ci fixtures - Stabilize release integration gate - Stabilize release verify gates - Stabilize release integration flows - Stabilize release verify gates - Stabilize main verify shutdown - Ignore stale acpmock cancel - Marketplace search focus and filtering (#193) - Website video - Workspace command select ### 📚 Documentation - Update agents.md - Update prd - Update skills - Update compozy tasks - Update compozy - Update compozy - Add new skills - Archive prd - Update prds - Update rfc - Update prds - Update prds - Add automation prd - Channels prd - Update prd - Update prd - New prds - Archive prds - Bridges adapters prd - Sandbox prd - Update - Archive prd - Update - Add new prd - New design - Update prd - Archive prds - Update prds - Tasks-ui prd tasks - Update prd - Update design docs - Agent capabilities prd - Improve site docs - Remove old design references - Udpate - Autonomous prd - Update skills - Blog design - Agent sould prd - Final qa plan - Update - Remove codex ledgers from gitignore - Remove not needed files - Udpate ledger - Update cy-codex-loop skill - Orchestration improves prd - Update prds - Orch improvs prd - Memv2 prd - Providers model prd - Update refacs prd - New design proposal - Update rules - Update skills - New blog posts (#173) - Format docs - Remove old design files - Remove old - Skeeper update ### 📦 Build System - Initial structure - Commitlint - Frontend base structure - Update vscode settings - Add subagents - Coderabbit - Prd and tooling - Bun lock - Lint tooling - Copy.md and tooling adjusts - Add repoclone rc - Upgrade skeeper to v0.2.0 - Update go.mod - Adopt task artifacts into skeeper - Sync codex plans with skeeper - Skeeper lock - Skeeper lock - New skills - Skeeper lock - Skeeper lock - Skeeper lock - Update deps and go - Regenerate daytona sidecar assets for go 1.26.3 - Fix cliff - Ignore docs on fmt - Build web assets before goreleaser - Extend release dry-run timeout ### 🔧 CI/CD - Lint errors - Fint release pr - Fix goreleaser - Fix release - Fix release process - Fix release sync - Decouple release dry-run npm auth - Persist web assets git auth ### 🧪 Testing - Add e2e tests (#27) - Qa rounds (#78) - Improve test suite (#138) - Harden daemon-served restart reloads - Harden daemon-served readiness waits - Stabilize dashboard focus assertion - Stabilize release integration gates - Stabilize release e2e markers - Stabilize release e2e flows - Improve suite speed <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated web assets dependency to a newer version for improved stability and performance. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/compozy/agh/pull/211?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
## Release v0.0.2 This PR prepares the release of version v0.0.2. ### Changelog ## 0.0.2 - 2026-05-27 ### Other Changes - Lessons learned ### ♻️ Refactoring - Project structure (#7) - Kb improvements (#12) - Rename spaces to channels (#17) - Add extensions gaps (#21) - Improve tool calls ui (#22) - Remove web app header - Module improvements (#29) - Memory improvements (#35) - Storybook for web and ui (#38) - Enable AGH network by default for new installs (#57) - Hermes adjustments (#69) - Badges design (#84) - Storybook scenario and logos gallery - Migrate typescript tests (#114) - Internal go packages (#120) - Ui patterns (#127) - Improve e2e tests (#130) - Ui redesign - Workspace isolation across runtime surfaces (#145) - Prod ready applies (#162) - Tool card ui (#164) - Alpha on logo - Prod ready features (#167) - Thread sheet (#202) ### 🎉 Features - Implement config foundation packages - Implement sqlite store package - Add ACP client package - Add session lifecycle manager - Implement observe package - Add daemon composition root - Add uds api server - Implement cli package - Add http api server - Add system design - Add foundation types, schemas, and layout shell for web client - Add daemon health polling and agent sidebar systems for web client - Add session system CRUD, streaming core, and session store for web client - Add chat view, messages, and composer tests for web client - Add tool cards and renderers for web client - Add file-backed memory store core - Scaffold memory session seams - Add memory dream consolidation service - Wire memory assembler into daemon - Add memory api and cli - New skills system (#1) - Add workspace entity (#5) - Add new skill capabilities (#8) - Web ui v2 (#9) - Improve hooks system (#10) - Session resilience (#11) - Add extensability (#13) - Add automation (#16) - Add channels (#14) - Add network implementation (#15) - Add network, bridges and automations web pages (#18) - Ext registry (#20) - Add core tasks (#19) - Bridge adapters (#23) - Add site (#26) - Add ext refac and sandbox (#25) - Settings ui (#37) - Tasks ui (#36) - Harness improvements (#44) - Agent capabilities (#49) - Redesign ui (#48) - Unify capability (#53) - Redesign network workspace (#59) - Add task deletion and split session delete from stop (#58) - Session provider selection (#60) - Production grade adjustments (#66) - Autonomous system (#75) - Add agent session route (#80) - Tools registry (#85) - Agents soul (#88) - Add network threads (#105) - Orchestration improvements (#106) - Memory v2 (#108) - Agent categories (#113) - Providers model (#118) - Add canonical AGH bundled skill (#143) - Onboarding and improvements (#198) - Onboarding and improvements (#201) ### 🐛 Bug Fixes - Review round - Review rounds - Resolve memory extensibility review batch - Embed web into daemon - Defaults agents - Acp integration (#4) - Lint errors - Prd folder - Remove orphan web actions and dead surfaces (#55) - Qa testing and fixes (#73) - New review rounds (#82) - Security audit (#90) - Release qa round (#95) - Add missing tools (#141) - New qa round (#147) - Advanced qa round (#149) - Homebrew tap - Final review round (#151) - Daemon healthy - Reasoning models (#158) - Lint errors (#160) - Review round (#168) - Release adjustments (#171) - Stabilize release ci fixtures - Stabilize release integration gate - Stabilize release verify gates - Stabilize release integration flows - Stabilize release verify gates - Stabilize main verify shutdown - Ignore stale acpmock cancel - Marketplace search focus and filtering (#193) - Website video - Workspace command select ### 📚 Documentation - Update agents.md - Update prd - Update skills - Update compozy tasks - Update compozy - Update compozy - Add new skills - Archive prd - Update prds - Update rfc - Update prds - Update prds - Add automation prd - Channels prd - Update prd - Update prd - New prds - Archive prds - Bridges adapters prd - Sandbox prd - Update - Archive prd - Update - Add new prd - New design - Update prd - Archive prds - Update prds - Tasks-ui prd tasks - Update prd - Update design docs - Agent capabilities prd - Improve site docs - Remove old design references - Udpate - Autonomous prd - Update skills - Blog design - Agent sould prd - Final qa plan - Update - Remove codex ledgers from gitignore - Remove not needed files - Udpate ledger - Update cy-codex-loop skill - Orchestration improves prd - Update prds - Orch improvs prd - Memv2 prd - Providers model prd - Update refacs prd - New design proposal - Update rules - Update skills - New blog posts (#173) - Format docs - Remove old design files - Remove old - Skeeper update ### 📦 Build System - Initial structure - Commitlint - Frontend base structure - Update vscode settings - Add subagents - Coderabbit - Prd and tooling - Bun lock - Lint tooling - Copy.md and tooling adjusts - Add repoclone rc - Upgrade skeeper to v0.2.0 - Update go.mod - Adopt task artifacts into skeeper - Sync codex plans with skeeper - Skeeper lock - Skeeper lock - New skills - Skeeper lock - Skeeper lock - Skeeper lock - Update deps and go - Regenerate daytona sidecar assets for go 1.26.3 - Fix cliff - Ignore docs on fmt - Build web assets before goreleaser - Extend release dry-run timeout - Fix release dry-run token contract ### 🔧 CI/CD - Lint errors - Fint release pr - Fix goreleaser - Fix release - Fix release process - Fix release sync - Decouple release dry-run npm auth - Persist web assets git auth - Require npm auth before release merge ### 🧪 Testing - Add e2e tests (#27) - Qa rounds (#78) - Improve test suite (#138) - Harden daemon-served restart reloads - Harden daemon-served readiness waits - Stabilize dashboard focus assertion - Stabilize release integration gates - Stabilize release e2e markers - Stabilize release e2e flows - Improve suite speed <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated dependencies to latest versions. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/compozy/agh/pull/214?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Summary by CodeRabbit