Use Realmroot only for human and machine authentication, authorize AMA through the browser user's multi-resource grant, and restore AK-managed Ed25519 Agent sessions.
Preserve Better Auth source tables while removing the mistaken Realmroot Agent binding and machine M2M paths.
BREAKING CHANGE: AK no longer accepts Realmroot Agent tokens or AMA machine credentials; active browser users must sign in again to authorize the AMA resource.
Replace Better Auth user, machine, and agent authentication with Realmroot native flows, migrate tenant ownership, and route AMA access through the cutover adapter. Preserve this deployed migration state as the baseline for the narrower user-auth-only redesign.
The root tsconfig is solution-style (files:[] + references to non-composite
projects), so 'tsc --noEmit' there type-checks nothing — which let an arity bug
slip into taskDispatch.ts. Add a typecheck script that runs tsc --noEmit per
project (shared, cli, web incl. server/worker) and point the CLAUDE.md regression
step at it.
The private root package shared the npm name "agent-kanban" with the
CLI package, so pnpm --filter agent-kanban resolved to the ROOT build
(shared+web). Once apps/web gained a prebuild that builds the CLI, the
chain closed into infinite recursion (web build → prebuild → root build
→ web build …), forking dozens of node processes. Root is private —
rename it; the filter now uniquely matches the CLI.
Introduces a runtime-agnostic Agent Client Protocol (ACP) provider via
`createAcpProvider(config)`. Registering a new ACP-compliant agent is a
one-row config entry in registry.ts; hermes is the first runtime to use
it. Existing claude/codex/gemini/copilot providers are left untouched
pending ACP protocol stabilization.
Also promotes `AgentProvider.getHistory` from optional to required so
every provider commits to a uniform contract. Gemini returns `[]` (no
exposed session store); ACP implements real history via `session/load`.
Unify the app into a single Worker deployment:
- Move functions/api/ → server/, add worker/index.ts entry point
- Merge relay-worker DO (TunnelRelay) into the main worker
- Replace Pages Functions with @cloudflare/vite-plugin build
- Integrate share SSR (OG meta injection) into Hono routes
- Remove dayjs dep from shared (native Date suffices)
- Simplify dev to single `vite dev`, deploy via CF Git integration
- Delete packages/relay-worker/ and Pages-specific _routes.json
ak-task and ak-plan skills now require agents to read the target repo's
CONTRIBUTING.md before creating tasks, follow its review process during
PR review, and use AskUserQuestion to interactively resolve uncertainties
with the user before task creation.
Claude provider now uses @anthropic-ai/claude-agent-sdk query() with typed
SDKMessage events (precise rate limit info, utilization, rateLimitType).
Codex provider now uses @openai/codex-sdk Codex class with streamed threads.
Both support bidirectional communication via streamInput/multi-turn threads.
Add gpg_keys table, gpgKeyRepo layer, and GET /api/gpg/public-key endpoint.
Each owner gets one root GPG key (auto-created on first use), with addSubkey
support for generating per-agent signing subkeys.
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Prettier's aggressive line-splitting (printWidth 100, single quotes) didn't
match the project's existing compact code style. Switch to Biome which
provides formatting + linting in one tool with better chain-call handling.
- Remove prettier, add @biomejs/biome
- Configure biome: double quotes, lineWidth 150, recommended lint rules
- Update lefthook pre-commit to use `biome check`
- Full codebase format pass with new config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds quality gates enforced on every commit:
- Prettier formatting check on staged files
- TypeScript type checking across all packages
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add CI workflow: build, type check, test with coverage on PRs and master
- Configure vitest coverage (v8 provider) scoped to source directories
- PR coverage report via vitest-coverage-report-action
- Coverage badge via GitHub Pages (no external services needed)
- Update CLAUDE.md with post-write workflow and testing conventions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
87 tests across 8 modules: Auth, Routing, Board, Header,
Settings, Machines, Agents, Repositories. Vite dev port
configurable via VITE_DEV_PORT env var for parallel development.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace MIT with Functional Source License (converts to Apache 2.0
after two years). Update all references from bonaysoft/agent-kanban
to saltbo/agent-kanban.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@agent-kanban/shared used workspace:* protocol which npm cannot resolve
when installing from registry. Switch build from tsc to tsup so shared
code is inlined at build time, eliminating the runtime dependency.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The smoke test was blindly selecting the first agent from the list,
which could be a builtin like Quality Goalkeeper. Now filters by
developer role and auto-creates from fullstack-developer template
if none exists.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add two-path agent creation: "Recruit" from templates (fetched from GitHub)
or "Custom" from scratch
- Templates fetched dynamically via shared fetchTemplateIndex/fetchTemplate
- Move template types and fetcher from packages/cli to packages/shared
- handoff_to: multi-select dropdown from existing agent roles
- skills: tag input with Enter to add, Backspace to remove
- Upgrade Tailwind CSS v3 → v4 with @tailwindcss/vite plugin
- Initialize shadcn/ui: Dialog, Button, Input, Label, Textarea, Select
- Map shadcn color tokens to project design system in globals.css
- Use shadcn components throughout (no hand-rolled form elements)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The `wrangler pages dev -- command` syntax was removed in wrangler v4.
Run vite and wrangler as parallel processes via concurrently instead.
Remove changeOrigin so OAuth callbacks redirect to vite (5173) not
wrangler (8788).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Integration tests revealed three issues with the agent-auth bridge:
- BA adapter silently ignores custom IDs without forceAllowId: true
- Agent JWT requires typ: "agent+jwt" in protected header
- Agent JWT requires aud claim matching the server URL
Adds integration test suite (miniflare + real D1) covering the full
agent-auth flow: machine/host creation, agent registration in both
tables, JWT verification, and rejection of invalid/unsigned tokens.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: Agent Kanban v2 — agent observatory, dependencies, SSE streaming
Transform the board from a task tracker into an agent observatory with
real-time visibility, platform-driven assignment, and dependency-aware
task coordination.
- Agent entity: status tracking (idle/working/offline), GET /api/agents
- Task dependencies: depends_on with cycle detection, blocked computation
- Task origin: created_from for subtask tracking
- Assign/Release: POST /api/tasks/:id/assign and /release endpoints
- Stale detection: auto-release after 2h, write-on-read in board fetch
- SSE streaming: GET /api/tasks/:id/stream with polling fallback
- CLI: task assign/release, agent list, --parent/--depends-on flags
- UI: ActivityLog, AssignDropdown, AgentProfile, SubtaskList, blocked badges
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(review): address 5 review findings from pre-landing review
- Narrow SSE auth bypass to exact path pattern (was too broad)
- Fix SSE reconnection: resolve log ID to timestamp for since filtering
- Compute blocked status in getBoard() so kanban view shows blocked badges
- Remove dead code in useSSE polling fallback
- Rename fetch→load in useAgents to avoid shadowing global
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: bootstrap test framework (vitest)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test: enum completeness coverage for v2 actions and agent statuses
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: bump version and changelog (v1.2.0)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: sync CLAUDE.md with v1.2.0 patterns
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>