Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
6be5c61
chore(homebrew): update formula to v0.3.6
Wirasm Apr 12, 2026
04dc763
refactor: rename IAssistantClient to IAgentProvider
Wirasm Apr 12, 2026
eab1797
refactor: complete provider rename in config types, logger domains, a…
Wirasm Apr 12, 2026
0779c01
refactor: simplify provider rename follow-through
Wirasm Apr 12, 2026
46a58f3
docs: consolidate Claude guidance into CLAUDE.md
Wirasm Apr 12, 2026
8f89f2c
refactor: extract providers from @archon/core into @archon/providers …
Wirasm Apr 13, 2026
70520d4
fix: make env-integration test cross-platform (Windows CI) (#1160)
Wirasm Apr 13, 2026
d8b946a
refactor: decompose provider sendQuery() into explicit helper boundar…
Wirasm Apr 13, 2026
dff4c59
test: add comprehensive e2e smoke test workflows
Wirasm Apr 13, 2026
8acc233
security: prevent target repo .env from leaking into subprocesses (#1…
Wirasm Apr 13, 2026
f0d32c0
feat(web): add MobileNavContext for mobile sidebar state
tboome33 Apr 13, 2026
f51b81b
feat(web): responsive mobile Layout with drawer sidebar
tboome33 Apr 13, 2026
452304a
feat(web): add hamburger menu button in TopNav for mobile
tboome33 Apr 13, 2026
e56b629
feat(web): hide conversation panel on mobile for full-width chat
tboome33 Apr 13, 2026
3da0bc9
fix(api): fix SSE URL construction for Cloudflare tunnel access
tboome33 Apr 13, 2026
023e01f
feat(mobile): add conversation drawer and overflow-x fix for mobile
tboome33 Apr 13, 2026
5a9512f
fix(mobile): prevent horizontal scroll with overflow-x hidden on html…
tboome33 Apr 13, 2026
f9f05be
fix(mobile): sticky chat input + h-dvh layout + sticky mobile topbar
tboome33 Apr 13, 2026
cec7172
fix(chat): flex-shrink-0 + safe-area-inset-bottom on MessageInput
tboome33 Apr 13, 2026
dff973d
fix(mobile): sticky mobile topbar (hamburger + New button always visi…
tboome33 Apr 13, 2026
fcd75d3
fix(mobile): drawer starts below sticky topbar on mobile
tboome33 Apr 13, 2026
5d2d705
fix(mobile): drawer nav starts below topbar (top-12) and z-40
tboome33 Apr 13, 2026
d1592f8
fix(mobile): top-12 -> top-24 on nav drawer and backdrop (Layout)
tboome33 Apr 13, 2026
dc8de87
fix(mobile): top-12 -> top-24 on conv drawer and backdrop (ChatPage)
tboome33 Apr 13, 2026
6072542
fix(mobile): drawer top-12, z-50, opaque bg - covers second topbar
tboome33 Apr 13, 2026
8ba7a06
fix(mobile): drawer top-12, z-50, opaque bg - second topbar z-30
tboome33 Apr 13, 2026
e3689ea
fix(mobile): clavier virtuel masque l'input + scrollbars parasites
tboome33 Apr 13, 2026
07628ab
fix(layout): add position:fixed to root container for iOS keyboard fix
tboome33 Apr 13, 2026
cd5c588
fix(web): fix 404 on conversation delete, translate FR labels to EN, …
tboome33 Apr 13, 2026
cab6c2e
docs: add Cloudflare Quick Tunnel setup guide
tboome33 Apr 13, 2026
550d1df
feat(web): add Appearance settings section with theme and responsive …
tboome33 Apr 13, 2026
9ffe1c6
feat(web): add Cloudflare tunnel manager in TopNav with start/stop/co…
tboome33 Apr 13, 2026
cc5b1d4
fix(web): make workflow builder responsive on mobile screens
tboome33 Apr 13, 2026
fe2e74c
chore(lint): exclude pre-existing format files from lint and prettier
tboome33 Apr 13, 2026
6a0987a
feat(web): add slash command autocomplete and projects sidebar
tboome33 Apr 14, 2026
940b396
fix(web): address code review -- bugs, a11y, and perf improvements
tboome33 Apr 14, 2026
dd4c706
feat(web): sidebar pin/unpin, mobile drawer, logo as reopen button
tboome33 Apr 14, 2026
6a09a23
fix(web): "New project" label EN, tunnel in mobile hamburger menu
tboome33 Apr 14, 2026
711b8ee
fix(web): address code review -- bugs, a11y, and perf improvements
tboome33 Apr 14, 2026
8b77497
fix(web): address all CodeRabbit PR #1209 review issues
tboome33 Apr 14, 2026
e4bd28e
fix(web): restore MobileNavContext pinned/togglePin and add TunnelMen…
tboome33 Apr 14, 2026
eab4525
feat(web): project page UX β€” icon, tabs, grouped workflows with scope…
tboome33 Apr 14, 2026
5f16dfd
feat(web): workflow builder β€” naming convention hint
tboome33 Apr 14, 2026
1b4deeb
fix(web): compact horizontal project header with expandable description
tboome33 Apr 14, 2026
e9c9d12
fix(web): remove duplicate project name, fix conversation row alignment
tboome33 Apr 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .archon/scripts/echo-args.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// Simple script node test β€” echoes input as JSON
const input = process.argv[2] ?? 'no-input';
console.log(JSON.stringify({ echoed: input, timestamp: new Date().toISOString() }));
51 changes: 51 additions & 0 deletions .archon/workflows/e2e-all-nodes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# E2E smoke test β€” all node types
# Verifies: bash, prompt, script, structured output, model override, $nodeId.output refs
name: e2e-all-nodes
description: "Comprehensive E2E test exercising bash, prompt, script, and structured output nodes."
provider: claude

nodes:
# 1. Bash node β€” no AI, runs shell, stdout captured as output
- id: bash-check
bash: "echo '{\"status\":\"ok\",\"cwd\":\"'$(pwd)'\"}'"

# 2. Prompt node β€” simple AI call, verifies sendQuery works
- id: prompt-simple
prompt: "The bash node returned: $bash-check.output β€” confirm you received it by saying 'received'. Say nothing else."
depends_on: [bash-check]

# 3. Prompt with model override β€” verifies model selection
- id: prompt-haiku
prompt: "Say 'haiku-ok' and nothing else."
model: haiku
depends_on: [bash-check]

# 4. Structured output node β€” verifies output_format translation
- id: structured
prompt: "Classify the text 'hello world' as either 'greeting' or 'math'."
output_format:
type: object
properties:
category:
type: string
enum: ["greeting", "math"]
required: ["category"]
additionalProperties: false
depends_on: [prompt-simple]

# 5. Bash node using $nodeId.output from structured node
- id: bash-read-output
bash: "echo 'Structured output category: $structured.output'"
depends_on: [structured]

# 6. Script node (bun runtime) β€” verifies script execution
- id: script-echo
script: echo-args
runtime: bun
depends_on: [bash-check]

# 7. Prompt with effort control β€” verifies effort passes through to SDK
- id: prompt-effort
prompt: "Say 'effort-ok' and nothing else."
effort: low
depends_on: [bash-check]
23 changes: 23 additions & 0 deletions .archon/workflows/e2e-claude-smoke.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# E2E smoke test β€” Claude provider
# Verifies: provider selection, sendQuery, structured output, tool use
name: e2e-claude-smoke
description: "E2E smoke test for Claude provider. Runs a simple prompt + structured output node."
provider: claude

nodes:
- id: simple
prompt: "What is 2+2? Answer with just the number, nothing else."

- id: structured
prompt: "Classify this input as 'math' or 'text': '2+2=4'"
output_format:
type: object
properties:
category:
type: string
enum: ["math", "text"]
depends_on: [simple]

- id: tool-use
prompt: "Read the file packages/providers/package.json and tell me the package name. Answer with just the name."
depends_on: [simple]
21 changes: 21 additions & 0 deletions .archon/workflows/e2e-codex-smoke.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# E2E smoke test β€” Codex provider
# Verifies: provider selection, sendQuery, structured output
name: e2e-codex-smoke
description: "E2E smoke test for Codex provider. Runs a simple prompt + structured output node."
provider: codex

nodes:
- id: simple
prompt: "What is 2+2? Answer with just the number, nothing else."

- id: structured
prompt: "Classify this input as 'math' or 'text': '2+2=4'. Return JSON only."
output_format:
type: object
properties:
category:
type: string
enum: ["math", "text"]
required: ["category"]
additionalProperties: false
depends_on: [simple]
27 changes: 27 additions & 0 deletions .archon/workflows/e2e-mixed-providers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# E2E smoke test β€” mixed providers (Claude + Codex in same workflow)
# Verifies: per-node provider override, cross-provider $nodeId.output refs
name: e2e-mixed-providers
description: "Tests Claude and Codex providers in the same workflow with cross-provider output refs."

# Default provider is claude
provider: claude

nodes:
# 1. Claude node β€” default provider
- id: claude-node
prompt: "Say 'claude-ok' and nothing else."

# 2. Codex node β€” provider override
- id: codex-node
prompt: "Say 'codex-ok' and nothing else."
provider: codex

# 3. Claude node reads Codex output β€” cross-provider ref
- id: claude-reads-codex
prompt: "The codex node said: '$codex-node.output'. Confirm you received it by saying 'cross-provider-ok'. Say nothing else."
depends_on: [codex-node]

# 4. Bash node verifies both outputs
- id: verify
bash: "echo 'claude=$claude-node.output codex=$codex-node.output cross=$claude-reads-codex.output'"
depends_on: [claude-node, codex-node, claude-reads-codex]
4 changes: 2 additions & 2 deletions .claude/commands/plan-feature.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Restate the feature request in your own words. Identify:
3. **Scope boundaries** β€” What is explicitly in scope vs. out of scope?
4. **Package impact** β€” Which of the 8 packages are affected? (`paths`, `git`, `isolation`,
`workflows`, `core`, `adapters`, `server`, `web`)
5. **Interface changes** β€” Does this touch `IPlatformAdapter`, `IAssistantClient`,
5. **Interface changes** β€” Does this touch `IPlatformAdapter`, `IAgentProvider`,
`IDatabase`, or `IWorkflowStore`? New interfaces needed?

---
Expand Down Expand Up @@ -85,7 +85,7 @@ Before writing tasks, reason through:
**Interface design:**
- Prefer extending existing narrow interfaces over creating fat ones.
- New interface methods only if they have a concrete current caller.
- Avoid adding methods to `IPlatformAdapter` or `IAssistantClient` unless essential.
- Avoid adding methods to `IPlatformAdapter` or `IAgentProvider` unless essential.

**Test isolation strategy:**
- `mock.module()` is process-global and permanent in Bun β€” plan test file placement carefully.
Expand Down
16 changes: 8 additions & 8 deletions .claude/commands/prime-backend.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@ Read `packages/core/src/state/session-transitions.ts` in full β€” `TransitionTri

### 5. Understand AI Client Patterns

List clients:
!`ls packages/core/src/clients/`
List providers:
!`ls packages/core/src/providers/`

Read `packages/core/src/clients/factory.ts` for provider selection logic.
Read `packages/core/src/clients/claude.ts` first 50 lines β€” `IAssistantClient` implementation
Read `packages/core/src/providers/factory.ts` for provider selection logic.
Read `packages/core/src/providers/claude.ts` first 50 lines β€” `IAgentProvider` implementation
with streaming event loop pattern.

### 6. Understand Database Layer
Expand All @@ -52,7 +52,7 @@ List DB modules:
!`ls packages/core/src/db/`

Read `packages/core/src/types/index.ts` (or the main types file) first 60 lines for key
interfaces: `IPlatformAdapter`, `IAssistantClient`, `Conversation`, `Session`.
interfaces: `IPlatformAdapter`, `IAgentProvider`, `Conversation`, `Session`.

### 7. Understand the Server

Expand Down Expand Up @@ -81,9 +81,9 @@ Summarize (under 250 words):
- `TransitionTrigger` values and their behaviors
- Only `plan-to-execute` immediately creates a new session; others deactivate first

### AI Clients
- `ClaudeClient` (claude-agent-sdk) and `CodexClient` (codex-sdk)
- `IAssistantClient` streaming pattern: `for await (const event of events)`
### AI Providers
- `ClaudeProvider` (claude-agent-sdk) and `CodexProvider` (codex-sdk)
- `IAgentProvider` streaming pattern: `for await (const event of events)`

### Key Database Tables
- conversations, sessions, codebases, isolation_environments, workflow_runs, workflow_events, messages
Expand Down
2 changes: 1 addition & 1 deletion .claude/commands/prime-workflows.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ bridges these to SSE via `WorkflowEventBridge`.
### 7. Understand Dependency Injection

Read `packages/workflows/src/deps.ts` β€” `WorkflowDeps` type: `IWorkflowPlatform`,
`IWorkflowAssistantClient`, `IWorkflowStore` injected at runtime. No direct DB or AI imports
`IWorkflowAgentProvider`, `IWorkflowStore` injected at runtime. No direct DB or AI imports
inside this package.

### 8. See What Workflows Are Available
Expand Down
4 changes: 2 additions & 2 deletions .claude/commands/prime.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ Provide a concise summary (under 300 words) covering:

### Architecture
- Package dependency order and each package's responsibility
- Key interfaces: `IPlatformAdapter`, `IAssistantClient`, `IDatabase`, `IWorkflowStore`
- Message flow: platform adapter β†’ orchestrator-agent β†’ command handler OR AI client
- Key interfaces: `IPlatformAdapter`, `IAgentProvider`, `IDatabase`, `IWorkflowStore`
- Message flow: platform adapter β†’ orchestrator-agent β†’ command handler OR AI provider
- Workflow execution: `discoverWorkflows` β†’ router β†’ `executeWorkflow` (steps / loop / DAG)

### Current State
Expand Down
2 changes: 1 addition & 1 deletion .claude/commands/validate.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Runs `tsc --noEmit` across all 8 packages via `bun --filter '*' type-check`.

**What to look for:**
- Missing return types (explicit return types required on all functions)
- Incorrect interface implementations (`IPlatformAdapter`, `IAssistantClient`, etc.)
- Incorrect interface implementations (`IPlatformAdapter`, `IAgentProvider`, etc.)
- Import type errors (use `import type` for type-only imports)
- Package boundary violations (e.g., `@archon/workflows` importing from `@archon/core`)

Expand Down
4 changes: 2 additions & 2 deletions .claude/docs/architecture-deep-dive.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Slack event
β†’ Otherwise β†’ buildOrchestratorPrompt() (prompt-builder.ts:116)
β†’ Prompt includes: registered projects, discovered workflows, /invoke-workflow format
β†’ sessionDb.getActiveSession() β†’ transitionSession('first-message') if none (orchestrator-agent.ts:462)
β†’ getAssistantClient(conversation.ai_assistant_type) (orchestrator-agent.ts:470)
β†’ getAgentProvider(conversation.ai_assistant_type) (orchestrator-agent.ts:470)
β†’ cwd = getArchonWorkspacesPath() (orchestrator-agent.ts:458)
β†’ handleBatchMode() or handleStreamMode() based on getStreamingMode()

Expand Down Expand Up @@ -313,7 +313,7 @@ Narrows `IPlatformAdapter` to `WebAdapter` for web-specific methods: `setConvers
| Message entry | `adapters/src/chat/slack/adapter.ts`, `server/src/index.ts` |
| Orchestration | `core/src/orchestrator/orchestrator-agent.ts`, `core/src/orchestrator/orchestrator.ts` |
| Locking | `core/src/utils/conversation-lock.ts` |
| AI clients | `core/src/clients/claude.ts`, `core/src/clients/factory.ts` |
| AI providers | `core/src/providers/claude.ts`, `core/src/providers/factory.ts` |
| Commands | `core/src/handlers/command-handler.ts` |
| Sessions | `core/src/db/sessions.ts`, `core/src/state/session-transitions.ts` |
| Workflows | `workflows/src/executor.ts`, `workflows/src/dag-executor.ts`, `workflows/src/loader.ts` |
Expand Down
44 changes: 0 additions & 44 deletions .claude/rules/adapters.md

This file was deleted.

89 changes: 0 additions & 89 deletions .claude/rules/cli.md

This file was deleted.

Loading